Transaction Data
The following information is needed to prepare for and ultimately submit a Kima transaction.
The fee amount and
feeId
The user choice of whether to pay fees from the origin or target chain
The message containting the transaction details for the user to sign
The allowance amount the user should approve so Kima can move tokens on behalf of the user
The amounts expected when the transaction is submitted
Fortunately, all of these values are calculated by an endpoint exposed by the Kima chain.
Using this endpoint is required as it will return a feeId
which must be passed to the /submit
endpoint in the backend.
Transactions submitted to Kima without a
feeId
or signature will be rejectedSubmitted amounts will be validated against the
feeId
and signed message. Any mismatch will result in the transaction being rejected.
These are security measures to protect the user and ensure the transaction is legitimate.
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:
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 fee in USDtransactionValues
: 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 user pays fees on Arbitrum. The total fees are included in the allowance amount.
User signs the message
I approve the transfer of 10.07371 USDK from ARB to <targetAddress> 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 chainTherefore the amount sent to the
/submit
endpoint is10
USDC (feeFromOrigin.submitAmount
)Also included is the
feeId
and signature
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 <targetAddress> 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.
Last updated