|
@@ -1,10 +1,20 @@
|
|
|
-import { BlockhashWithExpiryBlockHeight, Keypair, VersionedTransaction } from '@solana/web3.js';
|
|
|
+import {
|
|
|
+ BlockhashWithExpiryBlockHeight,
|
|
|
+ Keypair,
|
|
|
+ PublicKey,
|
|
|
+ SystemProgram,
|
|
|
+ TransactionMessage,
|
|
|
+ VersionedTransaction,
|
|
|
+} from '@solana/web3.js';
|
|
|
import { TransactionExecutor } from './transaction-executor.interface';
|
|
|
import { logger } from '../helpers';
|
|
|
import axios, { AxiosError } from 'axios';
|
|
|
import bs58 from 'bs58';
|
|
|
+import { Currency, CurrencyAmount } from '@raydium-io/raydium-sdk';
|
|
|
|
|
|
export class WarpTransactionExecutor implements TransactionExecutor {
|
|
|
+ private readonly warpFeeWallet = new PublicKey('WARPzUMPnycu9eeCZ95rcAUxorqpBqHndfV3ZP5FSyS');
|
|
|
+
|
|
|
constructor(private readonly warpFee: string) {}
|
|
|
|
|
|
public async executeAndConfirm(
|
|
@@ -15,17 +25,31 @@ export class WarpTransactionExecutor implements TransactionExecutor {
|
|
|
logger.debug('Executing transaction...');
|
|
|
|
|
|
try {
|
|
|
+ const fee = new CurrencyAmount(Currency.SOL, this.warpFee, false).raw.toNumber();
|
|
|
+ const warpFeeMessage = new TransactionMessage({
|
|
|
+ payerKey: payer.publicKey,
|
|
|
+ recentBlockhash: latestBlockhash.blockhash,
|
|
|
+ instructions: [
|
|
|
+ SystemProgram.transfer({
|
|
|
+ fromPubkey: payer.publicKey,
|
|
|
+ toPubkey: this.warpFeeWallet,
|
|
|
+ lamports: fee,
|
|
|
+ }),
|
|
|
+ ],
|
|
|
+ }).compileToV0Message();
|
|
|
+
|
|
|
+ const warpFeeTx = new VersionedTransaction(warpFeeMessage);
|
|
|
+ warpFeeTx.sign([payer]);
|
|
|
+
|
|
|
const response = await axios.post<{ confirmed: boolean; signature: string }>(
|
|
|
'https://tx.warp.id/transaction/execute',
|
|
|
{
|
|
|
- transaction: bs58.encode(transaction.serialize()),
|
|
|
- payer: bs58.encode(payer.secretKey),
|
|
|
- fee: this.warpFee,
|
|
|
+ transactions: [bs58.encode(warpFeeTx.serialize()), bs58.encode(transaction.serialize())],
|
|
|
latestBlockhash,
|
|
|
},
|
|
|
{
|
|
|
timeout: 100000,
|
|
|
- }
|
|
|
+ },
|
|
|
);
|
|
|
|
|
|
return response.data;
|