import { SDK, RubicApiError } from '@cryptorubic/sdk-lite';
const sdk = await SDK.create({ referrer: 'my-app', apiKey: 'KEY' });
try {
const quote = await sdk.quoteBest({
srcTokenBlockchain: 'ETH',
srcTokenAddress: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
srcTokenAmount: '100',
dstTokenBlockchain: 'POLYGON',
dstTokenAddress: '0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174',
fromAddress: wallet.address,
receiver: wallet.address,
});
const swapData = await sdk.swap({
srcTokenBlockchain: 'ETH',
srcTokenAddress: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
srcTokenAmount: '100',
dstTokenBlockchain: 'POLYGON',
dstTokenAddress: '0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174',
fromAddress: wallet.address,
receiver: wallet.address,
id: quote.id,
});
// Approval check
if (swapData.transaction.approvalAddress) {
const approveInfo = await sdk.checkApprove({
blockchain: 'ETH',
tokenAddress: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',
walletAddress: wallet.address,
spenderAddress: swapData.transaction.approvalAddress,
amount: '100',
});
if (approveInfo.needApprove) {
const approveTx = await signer.sendTransaction(approveInfo.transaction!);
await approveTx.wait();
}
}
// Send swap
const tx = await signer.sendTransaction({
to: swapData.transaction.to,
data: swapData.transaction.data,
value: swapData.transaction.value,
});
// Track completion
const status = await sdk.waitForStatus(
{ id: swapData.id, srcTxHash: tx.hash },
{ onStatusUpdate: s => console.log(s.status) }
);
console.log('Final status:', status.status);
} catch (err) {
if (err instanceof RubicApiError) {
console.error(`API error [${err.code}]: ${err.reason}`);
}
}