Skip to main content

Contents

Methods

initialize​

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

initialize(apiKey: String, dAppCode: String, network: HederaNetwork, bladeEnv: BladeEnv = BladeEnv.Prod, force: Bool = false, completion: @escaping (_ result: InfoData?, _ error: BladeJSError?) -> Void)

Parameters​

NameTypeDescription
apiKeyStringUnique key for API provided by Blade team.
dAppCodeStringyour dAppCode - request specific one by contacting Bladelabs team
networkHederaNetwork.TESTNET or .MAINNET of Hedera network
bladeEnvBladeEnv = BladeEnv.Prod.CI or .PROD field to set BladeAPI environment. Prod used by default.
forceBool = falseoptional field to force init. Will not crash if already initialized
completion@escaping (_ result: InfoData?, _ error: BladeJSError?) -> Voidcompletion closure that will be executed after webView is fully loaded and rendered, and result with InfoData type

Returns​

InfoData - with information about Blade instance, including visitorId

Example​

SwiftBlade.shared.initialize(apiKey: apiKey, dAppCode: apiKey, network: .TESTNET, bladeEnv: .Prod) { (result, error) in
print(result ?? error)
}

getInfo​

Get SDK info and check if SDK initialized

getInfo(completion: @escaping (_ result: InfoData?, _ error: BladeJSError?) -> Void)

Parameters​

NameTypeDescription
completion@escaping (_ result: InfoData?, _ error: BladeJSError?) -> Voidresult with InfoData type

Returns​

InfoData - with information about Blade instance, including visitorId

Example​

SwiftBlade.shared.getInfo() { (result, error) in
print(result ?? error)
}

getBalance​

Get balances by Hedera account id (address)

getBalance(_ id: String, completion: @escaping (_ result: BalanceData?, _ error: BladeJSError?) -> Void)

Parameters​

NameTypeDescription
idStringHedera id (address), example: 0.0.112233
completion@escaping (_ result: BalanceData?, _ error: BladeJSError?) -> Voidresult with BalanceData type

Returns​

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

Example​

SwiftBlade.shared.getBalance("0.0.10001") { (result, error) in
print(result ?? error)
}

getCoinList​

Get list of all available coins on CoinGecko.

getCoinList(completion: @escaping (_ result: CoinListData?, _ error: BladeJSError?) -> Void)

Parameters​

NameTypeDescription
completion@escaping (_ result: CoinListData?, _ error: BladeJSError?) -> Voidresult with CoinListData type

Returns​

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

Example​

SwiftBlade.shared.getCoinList { result, error in
print(result ?? 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: @escaping (_ result: CoinInfoData?, _ error: BladeJSError?) -> Void)

Parameters​

NameTypeDescription
searchStringCoinGecko coinId, or address in one of the coin platforms or hbar (default, alias for hedera-hashgraph)
currencyString = "usd"result currency for price field
completion@escaping (_ result: CoinInfoData?, _ error: BladeJSError?) -> Voidresult with CoinInfoData type

Returns​

CoinInfoData

Example​

SwiftBlade.shared.getCoinPrice("Hbar", "uah") { result, error in
print(result ?? error)
}

transferHbars​

Method to execute Hbar transfers from current account to receiver

transferHbars(accountId: String, accountPrivateKey: String, receiverId: String, amount: Decimal, memo: String, completion: @escaping (_ result: TransactionReceiptData?, _ error: BladeJSError?) -> Void)

Parameters​

NameTypeDescription
accountIdStringsender account id
accountPrivateKeyStringsender's private key to sign transfer transaction
receiverIdStringreceiver
amountDecimalamount
memoStringmemo (limited to 100 characters)
completion@escaping (_ result: TransactionReceiptData?, _ error: BladeJSError?) -> Voidresult with TransactionReceiptData type

Returns​

TransactionReceiptData receipt

Example​

let accountId = "0.0.10001"
let privateKeyHex = "302d300706052b8104000a032200029dc73991b0d9cd..."
let receiverId = "0.0.10002"
let amount: Decimal = 7.0
let memo = "transferHbars tests Swift"

SwiftBlade.shared.transferHbars(
accountId: accountId,
accountPrivateKey: privateKeyHex,
receiverId: receiverId,
amount: amount,
memo: memo
) { result, error in
print(result ?? error)
}

transferTokens​

Method to execute token transfers from current account to receiver

transferTokens(tokenId: String, accountId: String, accountPrivateKey: String, receiverId: String, amountOrSerial: Decimal, memo: String, usePaymaster: Bool = true, completion: @escaping (_ result: TransactionReceiptData?, _ error: BladeJSError?) -> Void)

Parameters​

NameTypeDescription
tokenIdStringtoken id to send (0.0.xxxxx)
accountIdStringsender account id (0.0.xxxxx)
accountPrivateKeyStringsender's hex-encoded private key with DER-header (302e020100300506032b657004220420...). ECDSA or Ed25519
receiverIdStringreceiver account id (0.0.xxxxx)
amountOrSerialDecimalamount of fungible tokens to send (with token-decimals correction) on NFT serial number
memoStringmemo (limited to 100 characters)
usePaymasterBool = trueif true, Paymaster account will pay fee transaction. Only for single dApp configured fungible-token. In that case tokenId not used
completion@escaping (_ result: TransactionReceiptData?, _ error: BladeJSError?) -> Voidresult with TransactionReceiptData type

Returns​

TransactionReceiptData receipt

Example​

let tokenId = "0.0.1337"
let senderId = "0.0.10001"
let senderKey = "302d300706052b8104000a032200029dc73991b0d9cd..."
let receiverId = "0.0.10002"
let amount: Decimal = 5.0

SwiftBlade.shared.transferTokens(
tokenId: tokenId,
accountId: senderId,
accountPrivateKey: senderKey,
receiverId: receiverId,
amountOrSerial: amount,
memo: "transferTokens tests Swift (paid)",
usePaymaster: false
) { result, error in
print(result ?? error)
}

createScheduleTransaction​

Create scheduled transaction

createScheduleTransaction( accountId: String, accountPrivateKey: String, type: ScheduleTransactionType, transfers: [ScheduleTransactionTransfer], _ usePaymaster: Bool = false, completion: @escaping (_ result: CreateScheduleData?, _ error: BladeJSError?) -> Void )

Parameters​

NameTypeDescription
accountIdStringaccount id (0.0.xxxxx)
accountPrivateKeyStringaccount key (hex encoded privateKey with DER-prefix)
typeScheduleTransactionTypeschedule transaction type (currently only TRANSFER supported)
transfers[ScheduleTransactionTransfer]array of transfers to schedule (HBAR, FT, NFT)
usePaymasterBool = falseif true, Paymaster account will pay transaction fee (also dApp had to be configured for free schedules)
completion@escaping (_ result: CreateScheduleData?, _ error: BladeJSError?) -> Voidresult with CreateScheduleData type

Returns​

CreateScheduleData scheduleId

Example​

let receiverId = "0.0.10002"
let receiverKey = "302d300706052b8104000a032200029dc73991b00002..."
let senderId = "0.0.10001"
let tokenId = "0.0.1337"

SwiftBlade.shared.createScheduleTransaction(
accountId: receiverId,
accountPrivateKey: receiverKey,
type: .TRANSFER,
transfers: [
ScheduleTransactionTransferHbar(sender: senderId, receiver: receiverId, value: 10000000),
ScheduleTransactionTransferToken(sender: senderId, receiver: receiverId, tokenId: tokenId, value: 3)
],
false
) { result, error in
print(result ?? error)
}

signScheduleId​

Method to sign scheduled transaction

signScheduleId( scheduleId: String, accountId: String, accountPrivateKey: String, receiverAccountId: String = "", usePaymaster: Bool = false, completion: @escaping (_ result: TransactionReceiptData?, _ error: BladeJSError?) -> Void )

Parameters​

NameTypeDescription
scheduleIdStringscheduled transaction id (0.0.xxxxx)
accountIdStringaccount id (0.0.xxxxx)
accountPrivateKeyStringhex encoded privateKey with DER-prefix
receiverAccountIdString = ""account id of receiver for additional validation in case of dApp freeSchedule transactions configured
usePaymasterBool = falseif true, Paymaster account will pay transaction fee (also dApp had to be configured for free schedules)
completion@escaping (_ result: TransactionReceiptData?, _ error: BladeJSError?) -> Voidresult with TransactionReceiptData type

Returns​

TransactionReceiptData receipt

Example​

let senderId = "0.0.10001"
let senderKey = "302d300706052b8104000a032200029dc73991b00001..."
let receiverId = "0.0.10002"
let scheduleId = "0.0...." // result of createScheduleTransaction on receiver side

SwiftBlade.shared.signScheduleId(
scheduleId: scheduleId,
accountId: senderId,
accountPrivateKey: senderKey,
receiverAccountId: receiverId,
usePaymaster: false
) { result, error in
print(result ?? error)
}

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: @escaping (_ result: CreatedAccountData?, _ error: BladeJSError?) -> Void)

Parameters​

NameTypeDescription
privateKeyString = ""optional field if you need specify account key (hex encoded privateKey with DER-prefix)
deviceIdString = ""unique device id (advanced security feature, required only for some dApps)
completion@escaping (_ result: CreatedAccountData?, _ error: BladeJSError?) -> Voidresult with CreatedAccountData type

Returns​

CreatedAccountData new account data, including private key and account id

Example​

SwiftBlade.shared.createHederaAccount() { result, error in
print(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 createHederaAccount() method if account in queue.

getPendingAccount(transactionId: String, seedPhrase: String, completion: @escaping (_ result: CreatedAccountData?, _ error: BladeJSError?) -> Void)

Parameters​

NameTypeDescription
transactionIdStringcan be received on createHederaAccount method, when busy network is busy, and account creation added to queue
seedPhraseStringreturned from createHederaAccount method, required for updating keys and proper response
completion@escaping (_ result: CreatedAccountData?, _ error: BladeJSError?) -> Voidresult with CreatedAccountData type

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: @escaping (_ result: TransactionReceiptData?, _ error: BladeJSError?) -> Void)

Parameters​

NameTypeDescription
deleteAccountIdStringaccount to delete - id
deletePrivateKeyStringaccount to delete - private key
transferAccountIdStringThe ID of the account to transfer the remaining funds to.
operatorAccountIdStringoperator account Id
operatorPrivateKeyStringoperator account private key
completion@escaping (_ result: TransactionReceiptData?, _ error: BladeJSError?) -> Voidresult with TransactionReceiptData type

Returns​

TransactionReceiptData receipt

Example​

let deleteAccountId = "0.0.65468464"
let deletePrivateKey = "3030020100300706052b8104000a04220420ebc..."
let transferAccountId = "0.0.10001"
let operatorAccountId = "0.0.10002"
let operatorPrivateKey = "302d300706052b8104000a032200029dc73991b0d9cd..."

SwiftBlade.shared.deleteHederaAccount(
deleteAccountId: deleteAccountId,
deletePrivateKey: deletePrivateKey,
transferAccountId: transferAccountId,
operatorAccountId: operatorAccountId,
operatorPrivateKey: operatorPrivateKey
) { result, error in
print(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: @escaping (_ result: AccountInfoData?, _ error: BladeJSError?) -> Void)

Parameters​

NameTypeDescription
accountIdStringHedera account id (0.0.xxxxx)
completion@escaping (_ result: AccountInfoData?, _ error: BladeJSError?) -> Voidresult with AccountInfoData type

Returns​

AccountInfoData

Example​

SwiftBlade.shared.getAccountInfo(accountId: "0.0.10001") { result, error in
print(result ?? error)
}

getNodeList​

Get Node list and use it for choosing account stacking node

getNodeList(completion: @escaping (_ result: NodesData?, _ error: BladeJSError?) -> Void)

Parameters​

NameTypeDescription
completion@escaping (_ result: NodesData?, _ error: BladeJSError?) -> Voidresult with NodesData type

Returns​

NodesData node list

Example​

SwiftBlade.shared.getNodeList() { result, error in
print(result ?? error)
}

stakeToNode​

Stake/unstake account

stakeToNode(accountId: String, accountPrivateKey: String, nodeId: Int, completion: @escaping (_ result: TransactionReceiptData?, _ error: BladeJSError?) -> Void)

Parameters​

NameTypeDescription
accountIdStringHedera account id (0.0.xxxxx)
accountPrivateKeyStringaccount private key (DER encoded hex string)
nodeIdIntnode id to stake to. If negative or null, account will be unstaked
completion@escaping (_ result: TransactionReceiptData?, _ error: BladeJSError?) -> Voidresult with TransactionReceiptData type

Returns​

TransactionReceiptData receipt

Example​

SwiftBlade.shared.stakeToNode(accountId: "0.0.10002", accountPrivateKey: "302d300706052b8104000a032200029dc73991b0d9cd...", nodeId: 5) { result, error in
print(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: Bool = false, completion: @escaping (_ result: PrivateKeyData?, _ error: BladeJSError?) -> Void)

Parameters​

NameTypeDescription
mnemonicStringseed phrase (BIP39 mnemonic)
lookupNamesBool = falselookup for accounts (not used anymore, account search is mandatory)
completion@escaping (_ result: PrivateKeyData?, _ error: BladeJSError?) -> Voidresult with PrivateKeyData type

Returns​

PrivateKeyData private key derived from mnemonic and account id

Example​

let mnemonic = "purity slab doctor swamp tackle rebuild summer bean craft toddler blouse switch"
SwiftBlade.shared.getKeysFromMnemonic(mnemonic: mnemonic, lookupNames: true) { result, error in
print(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: @escaping (_ result: AccountPrivateData?, _ error: BladeJSError?) -> Void)

Parameters​

NameTypeDescription
keyOrMnemonicStringBIP39 mnemonic, private key with DER header
completion@escaping (_ result: AccountPrivateData?, _ error: BladeJSError?) -> Voidresult with AccountPrivateData type

Returns​

AccountPrivateData list of found accounts with private keys

Example​

let mnemonic = "purity slab doctor swamp tackle rebuild summer bean craft toddler blouse switch"
SwiftBlade.shared.searchAccounts(mnemonic) { result, error in
print(result ?? error)
}

dropTokens​

Bladelink drop to account

dropTokens(accountId: String, accountPrivateKey: String, secretNonce: String, completion: @escaping (_ result: TokenDropData?, _ error: BladeJSError?) -> Void)

Parameters​

NameTypeDescription
accountIdStringHedera account id (0.0.xxxxx)
accountPrivateKeyStringaccount private key (DER encoded hex string)
secretNonceStringconfigured for dApp. Should be kept in secret
completion@escaping (_ result: TokenDropData?, _ error: BladeJSError?) -> Voidresult with TokenDropData type

Returns​

TokenDropData status

Example​

let accountId = "0.0.10002"
let accountPrivateKey = "302d300706052b8104000a032200029dc73991b0d9cd..."
let secretNonce = "[ CENSORED ]"

SwiftBlade.shared.dropTokens(
accountId: accountId,
accountPrivateKey: accountPrivateKey,
secretNonce: secretNonce
) { result, error in
print(result ?? error)
}

sign​

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

sign(messageString: String, privateKey: String, completion: @escaping (_ result: SignMessageData?, _ error: BladeJSError?) -> Void)

Parameters​

NameTypeDescription
messageStringStringbase64-encoded message to sign
privateKeyStringhex-encoded private key with DER header
completion@escaping (_ result: SignMessageData?, _ error: BladeJSError?) -> Voidresult with SignMessageData type

Returns​

SignMessageData signature

Example​

let originalMessage = "hello"
let privateKeyHex = "302d300706052b8104000a032200029dc73991b0d9cd..."
if let base64encodedString = originalMessage.data(using: .utf8)?.base64EncodedString(options: Data.Base64EncodingOptions(rawValue: 0)) {
SwiftBlade.shared.sign(messageString: base64encodedString, privateKey: privateKeyHex) { result, error in
print(result ?? error)
}
}

signVerify​

Verify message signature with public key

signVerify(messageString: String, signature: String, publicKey: String, completion: @escaping (_ result: SignVerifyMessageData?, _ error: BladeJSError?) -> Void)

Parameters​

NameTypeDescription
messageStringStringbase64-encoded message (same as provided to sign() method)
signatureStringhex-encoded signature (result from sign() method)
publicKeyStringhex-encoded public key with DER header
completion@escaping (_ result: SignVerifyMessageData?, _ error: BladeJSError?) -> Voidresult with SignVerifyMessageData type

Returns​

SignVerifyMessageData verification result

Example​

let originalString = "hello"
let signedMessage = "27cb9d51434cf1e76d7ac515b19442c619f641e6fccddbf4a3756b14466becb6992dc1d2a82268018147141fc8d66ff9ade43b7f78c176d070a66372d655f942"
let publicKey = "302d300706052b8104000a032200029dc73991b0d9cdbb59b2cd0a97a0eaff6de801726cb39804ea9461df6be2dd30"
if let base64encodedString = originalMessage.data(using: .utf8)?.base64EncodedString(options: Data.Base64EncodingOptions(rawValue: 0)) {
SwiftBlade.shared.signVerify(messageString: base64encodedString, signature: signedMessage, publicKey: publicKey) { result, error in
print(result ?? error)
}
}

createContractFunctionParameters​

Method to create smart-contract function parameters (instance of ContractFunctionParameters)

createContractFunctionParameters()

Returns​

ContractFunctionParameters

Example​

let tuple = SwiftBlade.shared.createContractFunctionParameters()
.addInt64(value: 16)
.addInt64(value: 32)

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 = 100_000, usePaymaster: Bool, completion: @escaping (_ result: TransactionReceiptData?, _ error: BladeJSError?) -> Void)

Parameters​

NameTypeDescription
contractIdStringcontract id (0.0.xxxxx)
functionNameStringname of the contract function to call
paramsContractFunctionParametersfunction argument. Can be generated with createContractFunctionParameters() method
accountIdStringoperator account id (0.0.xxxxx)
accountPrivateKeyStringoperator's hex-encoded private key with DER-header, ECDSA or Ed25519
gasInt = 100_000gas limit for transaction (default 100000)
usePaymasterBoolif true, fee will be paid by Paymaster account (note: msg.sender inside the contract will be Paymaster account)
completion@escaping (_ result: TransactionReceiptData?, _ error: BladeJSError?) -> Voidresult with TransactionReceiptData type

Returns​

TransactionReceiptData receipt

Example​

let contractId = "0.0.123456"
let functionName = "set_message"
let parameters = SwiftBlade.shared.createContractFunctionParameters().addString(value: "Hello Swift test")
let accountId = "0.0.10002"
let accountPrivateKey = "302d300706052b8104000a032200029dc73991b0d9cd..."
let gas = 155_000
let usePaymaster = false

SwiftBlade.shared.contractCallFunction(
contractId: contractId, functionName: functionName, params: parameters, accountId: accountId, accountPrivateKey: accountPrivateKey, gas: gas, usePaymaster: usePaymaster
) { result, error in
print(result ?? error)
}

contractCallQueryFunction​

Call query on contract function. Similar to contractCallFunction() can be called directly or via BladeAPI using Paymaster account.

contractCallQueryFunction(contractId: String, functionName: String, params: ContractFunctionParameters, accountId: String, accountPrivateKey: String, gas: Int = 100_000, usePaymaster: Bool, returnTypes: [String], completion: @escaping (_ result: ContractQueryData?, _ error: BladeJSError?) -> Void)

Parameters​

NameTypeDescription
contractIdString
functionNameString
paramsContractFunctionParameters
accountIdString
accountPrivateKeyString
gasInt = 100_000
usePaymasterBool
returnTypes[String]
completion@escaping (_ result: ContractQueryData?, _ error: BladeJSError?) -> Void

Returns​

ContractQueryData contract query call result

Example​

let contractId = "0.0.123456"
let functionName = "get_message"
let parameters = SwiftBlade.shared.createContractFunctionParameters()
let accountId = "0.0.10002"
let accountPrivateKey = "302d300706052b8104000a032200029dc73991b0d9cd..."
let gas = 155_000
let usePaymaster = false
let returnTypes = ["string", "int32"]

SwiftBlade.shared.contractCallQueryFunction(
contractId: contractId, functionName: functionName, params: SwiftBlade.shared.createContractFunctionParameters(), accountId: accountId, accountPrivateKey: accountPrivateKey, gas: gas, usePaymaster: usePaymaster, returnTypes: returnTypes
) { result, error in
print(result ?? error)
}

ethersSign​

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

ethersSign(messageString: String, privateKey: String, completion: @escaping (_ result: SignMessageData?, _ error: BladeJSError?) -> Void)

Parameters​

NameTypeDescription
messageStringStringbase64-encoded message to sign
privateKeyStringhex-encoded private key with DER header
completion@escaping (_ result: SignMessageData?, _ error: BladeJSError?) -> Voidresult with SignMessageData type

Returns​

SignMessageData signature

Example​

let originalMessage = "hello"
let privateKeyHex = "302d300706052b8104000a032200029dc73991b0d9cd..."
if let base64encodedString = originalMessage.data(using: .utf8)?.base64EncodedString(options: Data.Base64EncodingOptions(rawValue: 0)) {
SwiftBlade.shared.ethersSign(messageString: base64encodedString, privateKey: privateKeyHex) { result, error in
print(result ?? error)
}
}

splitSignature​

Split signature to v-r-s format.

splitSignature(signature: String, completion: @escaping (_ result: SplitSignatureData?, _ error: BladeJSError?) -> Void)

Parameters​

NameTypeDescription
signatureStringhex-encoded signature
completion@escaping (_ result: SplitSignatureData?, _ error: BladeJSError?) -> Voidresult with SplitSignatureData type

Returns​

SplitSignatureData v-r-s signature

Example​

let signedMessage = "0x27cb9d51434cf1e76d7ac515b19442c619f641e6fccddbf4a3756b14466becb6992dc1d2a82268018147141fc8d66ff9ade43b7f78c176d070a66372d655f942"
SwiftBlade.shared.splitSignature(signature: signMessageData.signedMessage) { result, error in
print(result ?? error)
}

getParamsSignature​

Get v-r-s signature of contract function params

getParamsSignature(params: ContractFunctionParameters, accountPrivateKey: String, completion: @escaping (_ result: SplitSignatureData?, _ error: BladeJSError?) -> Void)

Parameters​

NameTypeDescription
paramsContractFunctionParametersdata to sign. (instance of ContractFunctionParameters. Can be generated with createContractFunctionParameters() method)
accountPrivateKeyStringsigner private key (hex-encoded with DER header)
completion@escaping (_ result: SplitSignatureData?, _ error: BladeJSError?) -> Voidresult with SplitSignatureData type

Returns​

SplitSignatureData v-r-s signature

Example​

let privateKeyHex = "302d300706052b8104000a032200029dc73991b0d9cd..."
let parameters = SwiftBlade.shared.createContractFunctionParameters()
.addAddress(value: accountId)
.addUInt64Array(value: [300_000, 300_000])
.addUInt64Array(value: [6])
.addUInt64Array(value: [2])

SwiftBlade.shared.getParamsSignature(params: parameters, accountPrivateKey: privateKeyHex) { result, error in
print(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: @escaping (_ result: TransactionsHistoryData?, _ error: BladeJSError?) -> Void)

Parameters​

NameTypeDescription
accountIdStringaccount id to get transactions for (0.0.xxxxx)
transactionTypeStringone of enum MirrorNodeTransactionType or "CRYPTOTRANSFERTOKEN"
nextPageString = ""link to next page of transactions from previous request
transactionsLimitInt = 10number of transactions to return. Speed of request depends on this value if transactionType is set.
completion@escaping (_ result: TransactionsHistoryData?, _ error: BladeJSError?) -> Voidresult with TransactionsHistoryData type

Returns​

TransactionsHistoryData transactions list

Example​

SwiftBlade.shared.getTransactions(accountId: "0.0.10001", transactionType: "", nextPage: "", transactionsLimit: 5) { result, error in
print(result ?? error)
}

getC14url​

Get configured url for C14 integration (iframe or popup)

Deprecated now. Please use exchangeGetQuotes and getTradeUrl methods. Results aggregated on many providers, including C14

getC14url(asset: String, account: String, amount: String, completion: @escaping (_ result: IntegrationUrlData?, _ error: BladeJSError?) -> Void)

Parameters​

NameTypeDescription
assetStringUSDC, HBAR, KARATE or C14 asset uuid
accountStringreceiver account id (0.0.xxxxx)
amountStringpreset amount. May be overwritten if out of range (min/max)
completion@escaping (_ result: IntegrationUrlData?, _ error: BladeJSError?) -> Voidresult with IntegrationUrlData type

Returns​

IntegrationUrlData url to open

Example​

SwiftBlade.shared.getC14url(asset: "KARATE", account: "0.0.10001", amount: "1234") { result, error in
print(result ?? error)
}

exchangeGetQuotes​

Get quotes from different services for buy, sell or swap

exchangeGetQuotes( sourceCode: String, sourceAmount: Double, targetCode: String, strategy: CryptoFlowServiceStrategy, completion: @escaping (_ result: SwapQuotesData?, _ error: BladeJSError?) -> Void )

Parameters​

NameTypeDescription
sourceCodeStringname (HBAR, KARATE, other token code)
sourceAmountDoubleamount to swap, buy or sell
targetCodeStringname (HBAR, KARATE, USDC, other token code)
strategyCryptoFlowServiceStrategyone of enum CryptoFlowServiceStrategy (Buy, Sell, Swap)
completion@escaping (_ result: SwapQuotesData?, _ error: BladeJSError?) -> Voidresult with SwapQuotesData type

Returns​

SwapQuotesData quotes from different providers

Example​

SwiftBlade.shared.exchangeGetQuotes(
sourceCode: "EUR",
sourceAmount: 50,
targetCode: "HBAR",
strategy: CryptoFlowServiceStrategy.BUY
) { result, error in
print(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: @escaping (_ result: IntegrationUrlData?, _ error: BladeJSError?) -> Void )

Parameters​

NameTypeDescription
strategyCryptoFlowServiceStrategyBuy / Sell
accountIdStringaccount id
sourceCodeStringname (HBAR, KARATE, USDC, other token code)
sourceAmountDoubleamount to buy/sell
targetCodeStringname (HBAR, KARATE, USDC, other token code)
slippageDoubleslippage in percents. Transaction will revert if the price changes unfavorably by more than this percentage.
serviceIdStringservice id to use for swap (saucerswap, onmeta, etc)
redirectUrlString = ""url to redirect after final step
completion@escaping (_ result: IntegrationUrlData?, _ error: BladeJSError?) -> Voidresult with IntegrationUrlData type

Returns​

IntegrationUrlData url to open

Example​

SwiftBlade.shared.getTradeUrl(
strategy: CryptoFlowServiceStrategy.BUY,
accountId: "0.0.10001",
sourceCode: "EUR",
sourceAmount: 50,
targetCode: "HBAR",
slippage: 0.5,
serviceId: "moonpay"
) { [self] result, error in
print(result ?? error)
}

getExchangeStatus​

Get exchange order status

getExchangeStatus( serviceId: String, orderId: String, completion: @escaping (_ result: TransakOrderInfoData?, _ error: BladeJSError?) -> Void )

Parameters​

NameTypeDescription
serviceIdStringservice id to use for swap (saucerswap, onmeta, etc)
orderIdStringorder id of operation
completion@escaping (_ result: TransakOrderInfoData?, _ error: BladeJSError?) -> Voidresult with TransakOrderInfoData type

Returns​

TransakOrderInfoData

Example​

SwiftBlade.shared.getExchangeStatus(
serviceId: "transak",
orderId: "abaf28be-609f-49f4-a09a-e8e7ea7c8bd9"
) { [self] result, error in
print(result ?? error)
}

swapTokens​

Swap tokens

swapTokens( accountId: String, accountPrivateKey: String, sourceCode: String, sourceAmount: Double, targetCode: String, slippage: Double, serviceId: String, completion: @escaping (_ result: SwapResultData?, _ error: BladeJSError?) -> Void )

Parameters​

NameTypeDescription
accountIdStringaccount id
accountPrivateKeyStringaccount private key
sourceCodeStringname (HBAR, KARATE, other token code)
sourceAmountDoubleamount to swap
targetCodeStringname (HBAR, KARATE, other token code)
slippageDoubleslippage in percents. Transaction will revert if the price changes unfavorably by more than this percentage.
serviceIdStringservice id to use for swap (saucerswap, etc)
completion@escaping (_ result: SwapResultData?, _ error: BladeJSError?) -> Voidresult with SwapResultData type

Returns​

SwapResultData swap result

Example​

let accountId = "0.0.10001"
let accountPrivateKey = "302d300706052b8104000a032200029dc73991b0d9cd..."
let sourceCode = "USDC"
let targetCode = "KARATE"

SwiftBlade.shared.swapTokens(
accountId: accountId,
accountPrivateKey: accountPrivateKey,
sourceCode: sourceCode,
sourceAmount: 1,
targetCode: targetCode,
slippage: 0.5,
serviceId: "saucerswap"
) { result, error in
print(result ?? error)
}

createToken​

Create token (NFT or Fungible Token)

createToken( treasuryAccountId: String, supplyPrivateKey: String, tokenName: String, tokenSymbol: String, isNft: Bool, keys: [KeyRecord], decimals: Int, initialSupply: Int, maxSupply: Int, completion: @escaping (_ result: CreateTokenData?, _ error: BladeJSError?) -> Void )

Parameters​

NameTypeDescription
treasuryAccountIdStringtreasury account id
supplyPrivateKeyString
tokenNameString
tokenSymbolString
isNftBool
keys[KeyRecord]
decimalsInt
initialSupplyInt
maxSupplyInt
completion@escaping (_ result: CreateTokenData?, _ error: BladeJSError?) -> Void

Returns​

CreateTokenData token id

Example​

let keys = [
KeyRecord(privateKey: adminPrivateKey, type: KeyType.admin)
]

SwiftBlade.shared.createToken(
treasuryAccountId: accountId,
supplyPrivateKey: privateKey,
tokenName: "Blade Demo Token",
tokenSymbol: "GD",
isNft: true,
keys: keys,
decimals: 0,
initialSupply: 0,
maxSupply: 250
) { result, error in
print(result ?? error)
}

associateToken​

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

associateToken( tokenIdOrCampaign: String, accountId: String, accountPrivateKey: String, completion: @escaping (_ result: TransactionReceiptData?, _ error: BladeJSError?) -> Void )

Parameters​

NameTypeDescription
tokenIdOrCampaignString
accountIdString
accountPrivateKeyString
completion@escaping (_ result: TransactionReceiptData?, _ error: BladeJSError?) -> Void

Returns​

TransactionReceiptData receipt

Example​

SwiftBlade.shared.associateToken(
tokenIdOrCampaign: "0.0.1337",
accountId: "0.0.10001",
accountPrivateKey: "302d300706052b8104000a032200029dc73991b0d9cd..."
) { result, error in
print(result ?? error)
}

nftMint​

Mint one NFT

nftMint( tokenId: String, supplyAccountId: String, supplyPrivateKey: String, file: String, metadata: [String: String], storageConfig: IPFSProviderConfig, completion: @escaping (_ result: TransactionReceiptData?, _ error: BladeJSError?) -> Void )

Parameters​

NameTypeDescription
tokenIdStringtoken id to mint NFT
supplyAccountIdStringtoken supply account id
supplyPrivateKeyStringtoken supply private key
fileStringimage to mint (base64 DataUrl image, eg.: data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAA...)
metadata[String: String]NFT metadata
storageConfigIPFSProviderConfigIPFS provider config
completion@escaping (_ result: TransactionReceiptData?, _ error: BladeJSError?) -> Voidcallback function, with result of CreateTokenData or BladeJSError

Returns​

TransactionReceiptData receipt

Example​

SwiftBlade.shared.nftMint(
tokenId: "0.0.13377",
supplyAccountId: "0.0.10001",
supplyPrivateKey: "302d300706052b8104000a032200029dc73991b0d9cd...",
file: "data:image/png;base64,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",
metadata: [
"name": "NFTitle",
"score": "10",
"power": "4",
"intelligence": "6",
"speed": "10"
],
storageConfig: IPFSProviderConfig(
provider: IPFSProvider.pinata,
token: "eyJhbGciOiJIUzI1NiIsI.................cYOwssdZgiYaug4aF8ZrvMBdkTASojWGU"
)
) { result, error in
print(result ?? error)
}

cleanup​

Method to clean-up webView

cleanup()