Approval
In order for Kima to move tokens on behalf of the user an on chain approval needs to happen. An approval has 3 components:
Owner address: User
Spender address: Kima Pool
Total amount: origin token amount plus gas fees
Getting the Kima Pool Address
Using the Kima Backend
GET /chains/pool
returns a list of pool addresses and balances for all supported chains.
Using the Kima API
EVM
ecdsa
0x9a721c664f9d69e4da24f91386086fbd81da23c1
Solana
eddsa
5tvyUUqPMWVGaVsRXHoQWqGw6h9uifM45BHCTQgzwSdr
Tron
ecdsa (base58)
TQ3qmAgUgMwrY9prMiHLZmF43G4Jk8bxNF
You can also obtain the pool addresses from the TSS endpoint. Use the type
in the chart above to determine which one to use.
GET https://api.sardis.kima.network/kima-finance/kima-blockchain/kima/tss_pubkey
Success Response:
tssPubkey
(array object)tssPubKey: string
ecdsa: string
eddsa: string
reserved: string
pagination
(object)nextKey: string | null
total: number
Note: for Tron, the hex ecdsa
address must be converted to a base 58 checksum address.
Getting the Service Fee
The fees and allowance amounts are calculated by an endpoint exposed by Kima chain. The this endpoint also returns a feeId
which must be included when submitting the transaction.
Using the Kima Backend
GET /submit/fees
Query Params (all required):
amount
(number): the amount of tokens to transferoriginAddress
(string): the source user addressoriginChain
(string): the chain the user tokens will come fromoriginSymbol
(string): the (stable coin) token the user will pay with (or bridge from)targetAddress
(string): the receiving addresstargetChain
(string): the destination chaintargetSymbol
(string): the (stable coin) token being delivered
Example:
/submit/fees?amount=10&originChain=TRX&targetChain=ARB&deductFee=true&originSymbol=USDK
Success Response:
Amounts are returned as both numbers representing the amount in whole tokens and as a string representing the integer amount in the smallest unit of the token (e.g. USDC is 6 decimals).
feeId
(string): a unique identifier for the fee; include this in the/submit
requestfeeOrigin*
the gas fee for the origin chainfeeKimaProcessing*
The processing fee (currently 0.05%)feeTarget*
the gas fee for the target chainfeeTotal*
the total feetransactionValues
: amounts used for the allowance and submitting the transactionfeeFromOrigin
: amounts used when the user selects to pay fees from the origin amountallowanceAmount
: the token amount that needs to be approved. Can be passed directly to the contract call.submitAmount
: the amount that needs to be passed to the /submit endpoint
feeFromTarget
: amounts used when the user selects to pay fees from the target amount
The allowanceAmount
is the one you'll need to pass to the contract call. There are 2 variants returned depending on whether the user chooses to pay fees from the origin or target amount.
When paying fees from the origin, use
transactionValues.feeFromOrigin
values.When paying fees from the target, use
transactionValues.feeFromTarget
.
Example:
Transferring 10 USDC from ARB to SOL with 0.07371
USD in total fees.
When paying fees from the origin
The total fees are added to the amount
User signs the message
I approve the transfer of 10.07371 USDK from ARB to 5FHwkrdxkjF7xoL2ncGh4AEYs1KyJzz5MeiaHGz8h8GA on SOL.
(feeFromOrigin.message
)The user approves a transfer of
10.07371
USDC on Arbitrum (feeFromOrigin.allowanceAmount
)The amount sent to the
/submit
endpoint is amount RECEIVED on the target chainThe amount sent to the
/submit
endpoint is10
USDC (feeFromOrigin.submitAmount
)Also included is the
feeId
and signed message
The user receives
10
USDC on Solana
When paying fees from the target chain
The user does not pay fees on Arbitrum
User signs the message
I approve the transfer of 10 USDK from ARB to 5FHwkrdxkjF7xoL2ncGh4AEYs1KyJzz5MeiaHGz8h8GA on SOL.
(feeFromTarget.message
)The user approves a transfer of
10
USDC on Arbitrum (feeFromTarget.allowanceAmount
)The amount sent to the
/submit
endpoint is9.926290
USDC (feeFromTarget.submitAmount
)The fees are deducted from the amount recieved on Solana so the user receives
9.926290
USDC on Solana
Save the corresponding submitAmount
, message
and feeId
for later as they are needed to submit the transaction.
Chain Names
Using the Kima API
There is also an endpoint that can be called directly.
POST {{baseUrl}}/v2/fees/calculate
It has all the params and same response as the Backend /submit/fees
endpoint except:
The params are in the body as JSON
There is an extra param
creator
which is the Kima address of the developer wallet sending the transaction-kima1...
Calling Approve
Once all the info has been collected it’s time to make the on chain call. The exact details of how this is done depends on the origin chain and library used.
The getClientsForChain()
and getPoolAdressesForChain()
would be utility functions defined elsewhere.
Last updated