@reservoir0x/relay-sdk
Version:
Relay is the Fastest and Cheapest Way to Bridge and Transact Across Chains.
95 lines • 4.12 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.sendUsd = exports.prepareHyperliquidSignatureStep = void 0;
const viem_1 = require("viem");
const axios_1 = require("axios");
const logger_js_1 = require("./logger.js");
function prepareHyperliquidSignatureStep(steps, chainId) {
const items = steps[0]?.items;
const amount = items[0]?.data?.action?.parameters?.amount;
const destination = items[0]?.data?.action?.parameters?.destination;
const signatureStep = {
id: 'sign',
action: 'Confirm transaction in your wallet',
description: `Sign a message to confirm the transaction`,
kind: 'signature',
items: [
{
status: 'incomplete',
data: {
sign: {
signatureKind: 'eip712',
domain: {
name: 'HyperliquidSignTransaction',
version: '1',
chainId: chainId,
verifyingContract: '0x0000000000000000000000000000000000000000'
},
types: {
'HyperliquidTransaction:UsdSend': [
{ name: 'hyperliquidChain', type: 'string' },
{ name: 'destination', type: 'string' },
{ name: 'amount', type: 'string' },
{ name: 'time', type: 'uint64' }
],
EIP712Domain: [
{ name: 'name', type: 'string' },
{ name: 'version', type: 'string' },
{ name: 'chainId', type: 'uint256' },
{ name: 'verifyingContract', type: 'address' }
]
},
primaryType: 'HyperliquidTransaction:UsdSend',
value: {
type: 'usdSend',
signatureChainId: `0x${chainId.toString(16)}`,
hyperliquidChain: 'Mainnet',
destination: destination?.toLowerCase(),
amount,
time: new Date().getTime()
}
}
},
check: {
endpoint: `/intents/status?requestId=${steps[0]?.requestId}`,
method: 'GET'
}
}
],
requestId: steps[0]?.requestId,
depositAddress: steps[0]?.depositAddress
};
return signatureStep;
}
exports.prepareHyperliquidSignatureStep = prepareHyperliquidSignatureStep;
async function sendUsd(client, signature, stepItem) {
client.log(['Execute Steps: Sending signature to Hyperliquid', signature], logger_js_1.LogLevel.Verbose);
const { r, s, v } = (0, viem_1.parseSignature)(signature);
const currentTime = stepItem?.data?.sign?.value?.time ?? new Date().getTime();
const res = await axios_1.default.post('https://api.hyperliquid.xyz/exchange', {
signature: {
r,
s,
v: Number(v ?? 0n)
},
nonce: currentTime,
action: {
type: stepItem?.data?.sign?.value?.type,
signatureChainId: `0x${stepItem?.data?.sign?.domain?.chainId?.toString(16)}`,
hyperliquidChain: 'Mainnet',
destination: stepItem?.data?.sign?.value?.destination?.toLowerCase(),
amount: stepItem?.data?.sign?.value?.amount,
time: currentTime
}
});
if (!res ||
!res.data ||
(res && res.status !== 200) ||
res.data.status != 'ok') {
throw 'Failed to send signature to HyperLiquid';
}
client.log(['Execute Steps: Signature sent to Hyperliquid', res.data], logger_js_1.LogLevel.Verbose);
return res.data;
}
exports.sendUsd = sendUsd;
//# sourceMappingURL=hyperliquid.js.map