On-ramp Flow
To on-ramp from a Holyheld account the following steps should be completed:
- Get settings and ensure that on-ramping is available using
getServerSettings
method. - Check that selected wallet can transact using
validateAddress
method. - Provide two parameters: token and amount in EUR.
- Optionally. Get binary data to pass as swap parameters using
convertEURToToken
orconvertTokenToEUR
methods. - Call the
requestOnRamp
method to execute the transaction.
🔔 User will need to confirm the on-ramp request in their Holyheld app
- Wait for the callback response of the operation result using
watchRequestId
.
Here are the functions that are available for you to use.
getServerSettings
Get settings:
This method gets current state/settings for interacting with the service. Please always use this method to check:
- if the feature is available;
- the minimum and maximum allowed amounts to on-ramp.
🔔 Please note, that financial values are provided and consumed as strings to avoid floating point conversion problems.
(async () => {
const data = await holyheldSDK.getServerSettings();
})();
Types:
type Response = {
external: {
// indicates if the sending feature is available at the moment
isTopupEnabled: boolean;
// maximum amount (equivalent in EUR) that is allowed to be processed
maxTopUpAmountInEUR: string; // example: '1000'
// minimum amount (equivalent in EUR) that is allowed to be processed
minTopUpAmountInEUR: string; // example: '5'
};
common: {
// fee (in percent) that is deducted when making an off-ramping operation on mainnet
topUpFeePercent: string; // example: '0.75'
};
}
validateAddress
Get wallet information:
User wallet address is a unique identifier which can have account, card and a $holytag bound to it. It is alphanumeric string.
🔔 Please note that a valid wallet address is 42 strings long and begins with
0x
prefix.
🔔 Please note that this method does not support ENS domains.
(async () => {
// a wallet address could be pre-set or have to be input by user, depends on the application
const data = await holyheldSDK.validateAddress('0x000000000000000000000000000000000000dEaD');
})();
Types:
type Response = {
isTopupAllowed: boolean;
isOnRampAllowed: boolean;
}
convertTokenToEUR
Convert token to EUR:
This method is used to estimate a token value in EUR to proceed with the on-ramping. convertTokenToEUR
method can also be used in some scenarios/apps where token to be sent is pre-set and not selectable.
(async () => {
const result = await sdk.onRamp.convertTokenToEUR(
token,
'11.11' // native token amount
);
console.log('EUR amount is', result)
})();
convertEURToToken
Convert EUR to token:
convertEURToToken
method returns a calculated token amount to match requested EUR amount.
(async () => {
const result = await sdk.onRamp.convertEURToToken(
token,
'11.11' // EUR amount
);
console.log('token amount is', result)
})();
requestOnRamp
Created on-ramp transaction request:
This is the 'main' method to call that executes on-ramping from a Holyheld account. Parameter values should be retrieved using methods described above, such as transferData
matching token and token amount provided.
🚨 As per security requirements, user must approve or confirm the on-ramp request in their Holyheld mobile app within 3 minutes. If the user declines, or lets the confirmation expire -- the transaction will fail.
(async () => {
// you can locate token by address and network, or you can use a self token object
const selectedToken = await sdk.getTokenByAddressAndNetwork('0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', Network.ethereum)
// wrap your provider in viem wallet client, see https://viem.sh/docs/clients/wallet.html
const walletClient = createWalletClient({
chain,
transport: custom(provider), // current provider in your app (see examples in the Examples section)
account: '0x...', // user wallet address
});
const data = await sdk.onRamp.requestOnRamp(
walletClient,
walletClient.account.address, // user wallet address
selectedToken.address, // address of the token to arrive
selectedToken.network, // network where tokens will arrive
'1' // amount in EUR
);
})();
Types:
type RequestResult = {
requestUid: string; // ID of the on-ramp request credted
chainId: number; // ID of the network where tokens will arrive
token: Token; // Address of the token to arrive
amountEUR: string; // amount of EUR charged from the user
amountToken: string; // native amount of tokens received
feeEUR: string; // network gas fee charged from the total transaction amount
beneficiaryAddress: Address; // user wallet address where tokens will arrive
}
After creating the on-ramp request, user will need to confirm it in their Holyheld app.
watchRequestId
Watch the on-ramp request by ID:
This method is used to await for the request outcome based on the user confirmation or rejection in the Holyheld app. There are only three possible outcomes of any request:
true
if the request has been confirmed by the user and processedfalse
if the request has been declined by the user- An error if request was not processed, timed out, or HTTP request was not returned as
OK
(async () => {
const result = await sdk.onRamp.watchRequestId(
requestUid, // request ID from response for the requestOnRamp method
timeout // optional
);
})();