Skip to content

Commit

Permalink
FRONT-243. Replaced ethersproject to ethers.js
Browse files Browse the repository at this point in the history
  • Loading branch information
oable committed Sep 20, 2024
1 parent 148673d commit c246f3c
Show file tree
Hide file tree
Showing 36 changed files with 2,390 additions and 21,017 deletions.
26 changes: 13 additions & 13 deletions __tests__/e2e/erc20.ts
Original file line number Diff line number Diff line change
@@ -1,34 +1,33 @@
import { expect } from '@jest/globals';
import { getAssociatedTokenAddressSync } from '@solana/spl-token';
import { Connection, Keypair, PublicKey, Signer, Transaction } from '@solana/web3.js';
import { JsonRpcProvider, TransactionRequest } from '@ethersproject/providers';
import { NeonProxyRpcApi, signerPrivateKey, SPLToken } from '@neonevm/token-transfer-core';
import {
createMintNeonTransactionWeb3,
neonTransferMintTransactionWeb3
} from '@neonevm/token-transfer-web3';
import { JsonRpcProvider, TransactionRequest, Wallet } from 'ethers';
import { Web3 } from 'web3';
import { Web3Account } from 'web3-eth-accounts';
import { Transaction as TransactionConfig } from 'web3-types';
import { Transaction as TransactionWeb3 } from 'web3-types';
import {
createMintNeonTransactionEthers,
neonTransferMintTransactionEthers
} from '@neonevm/token-transfer-ethers';
import { Wallet } from '@ethersproject/wallet';
import {
createAssociatedTokenAccount,
delay,
FaucetDropper,
mintTokenBalance,
mintTokenBalanceWeb3,
neonSignature,
sendNeonTransaction,
sendNeonTransactionEthers,
sendSolanaTransaction,
solanaSignature,
solanaWalletSigner,
splTokenBalance,
toSigner,
walletSigner
walletSigner,
walletSignerWeb3
} from '../tools';

export async function itSolanaTokenSPL(provider: Web3 | JsonRpcProvider, connection: Connection, proxyUrl: string, neonProxyRpcApi: NeonProxyRpcApi, token: SPLToken, neonEvmProgram: PublicKey, solanaWallet: Keypair, neonWallet: Web3Account | Wallet, chainId: number, solanaUrl: string, skipPreflight = true) {
Expand All @@ -41,7 +40,7 @@ export async function itSolanaTokenSPL(provider: Web3 | JsonRpcProvider, connect
const solanaWalletSigner = walletSigner(<JsonRpcProvider>provider, signerPrivateKey(solanaWallet.publicKey, neonWallet.address));
transaction = await neonTransferMintTransactionEthers(connection, neonProxyRpcApi, neonEvmProgram, solanaWallet.publicKey, neonWallet.address, solanaWalletSigner, token, amount, chainId);
} else {
const walletSigner = solanaWalletSigner(provider, signerPrivateKey(solanaWallet.publicKey, neonWallet.address));
const walletSigner = walletSignerWeb3(provider, signerPrivateKey(solanaWallet.publicKey, neonWallet.address));
transaction = await neonTransferMintTransactionWeb3(connection, proxyUrl, neonProxyRpcApi, neonEvmProgram, solanaWallet.publicKey, neonWallet.address, walletSigner, token, amount, chainId);
}
transaction.recentBlockhash = (await connection.getLatestBlockhash()).blockhash;
Expand All @@ -52,7 +51,7 @@ export async function itSolanaTokenSPL(provider: Web3 | JsonRpcProvider, connect
await delay(5e3);

const balanceAfter = await splTokenBalance(connection, solanaWallet.publicKey, token);
const balanceMint = await mintTokenBalance(proxyUrl, neonWallet.address, token);
const balanceMint = await mintTokenBalanceWeb3(proxyUrl, neonWallet.address, token);
console.log(`Balance: ${balanceBefore?.uiAmount} > ${balanceAfter?.uiAmount} ${token.symbol} ==> ${balanceMint} ${token.symbol} in Neon`);
expect(balanceAfter.uiAmount).toBeLessThan(balanceBefore.uiAmount!);
} catch (e) {
Expand All @@ -64,32 +63,33 @@ export async function itSolanaTokenSPL(provider: Web3 | JsonRpcProvider, connect
export async function itNeonTokenMint(connection: Connection, provider: Web3 | JsonRpcProvider, proxyUrl: string, faucet: FaucetDropper, token: SPLToken, solanaWallet: Keypair, neonWallet: Web3Account | Wallet) {
const amount = 0.1;
const mintPubkey = new PublicKey(token.address_spl);
let balanceBefore = await mintTokenBalance(proxyUrl, neonWallet.address, token);
let balanceBefore = await mintTokenBalanceWeb3(proxyUrl, neonWallet.address, token);
if (!balanceBefore) {
await faucet.requestERC20(neonWallet.address, token, 1);
balanceBefore = await mintTokenBalance(proxyUrl, neonWallet.address, token);
balanceBefore = await mintTokenBalanceWeb3(proxyUrl, neonWallet.address, token);
await delay(30e6);
}
console.log(`Balance: ${balanceBefore ?? 0} ${token.symbol}`);
const signer: Signer = toSigner(solanaWallet);
await createAssociatedTokenAccount(connection, signer, token);

const associatedToken = getAssociatedTokenAddressSync(mintPubkey, solanaWallet.publicKey);
let neonTransaction: TransactionRequest | TransactionConfig;
let neonTransaction: TransactionRequest | TransactionWeb3;
if (provider instanceof JsonRpcProvider) {
neonTransaction = await createMintNeonTransactionEthers(provider, neonWallet.address, associatedToken, token, amount);
neonTransaction.nonce = await (neonWallet as Wallet).getNonce();
} else {
neonTransaction = await createMintNeonTransactionWeb3(proxyUrl, neonWallet.address, associatedToken, token, amount);
}

try {
const signedNeonTransaction = provider instanceof JsonRpcProvider ?
await sendNeonTransactionEthers(<TransactionRequest>neonTransaction, <Wallet>neonWallet) :
await sendNeonTransaction(provider, <TransactionConfig>neonTransaction, <Web3Account>neonWallet);
await sendNeonTransaction(provider, <TransactionWeb3>neonTransaction, <Web3Account>neonWallet);
neonSignature(`Neon Signature`, signedNeonTransaction);
expect(signedNeonTransaction.length).toBeGreaterThan(0);
await delay(15e3);
const balanceAfter = await mintTokenBalance(proxyUrl, neonWallet.address, token);
const balanceAfter = await mintTokenBalanceWeb3(proxyUrl, neonWallet.address, token);
const balanceSPL = await splTokenBalance(connection, solanaWallet.publicKey, token);
console.log(`Balance: ${balanceBefore} > ${balanceAfter} ${token.symbol} ==> ${balanceSPL?.uiAmount} ${token.symbol} in Solana`);
expect(balanceAfter).toBeLessThan(balanceBefore);
Expand Down
132 changes: 132 additions & 0 deletions __tests__/e2e/neon-fee.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,132 @@
import { beforeAll, describe, expect, it, jest } from '@jest/globals';
import {
createAssociatedTokenAccount,
delay,
FaucetDropper,
getGasToken,
getMultiTokenProxy,
getWeb3Provider,
NEON_PRIVATE,
NEON_TOKEN_MODEL,
neonBalanceWeb3,
PHANTOM_PRIVATE,
sendSolanaTransaction,
solanaSignature,
splTokenBalance,
toSigner
} from '../tools';
import {
GasToken,
NeonProgramStatus,
NeonProxyRpcApi,
solanaNEONTransferTransaction,
SPLToken,
TOKEN_LIST_DEVNET_SNAPSHOT
} from '@neonevm/token-transfer-core';
import { Web3 } from 'web3';
import { Web3Account } from 'web3-eth-accounts';
import { Connection, Keypair, LAMPORTS_PER_SOL, PublicKey, Signer } from '@solana/web3.js';

require('dotenv').config({ path: `./__tests__/env/.env` });
jest.setTimeout(12e4);

const skipPreflight = false;
const CHAIN_ID = Number(process.env.CHAIN_ID);
const SOLANA_URL = process.env.SOLANA_URL;
const NEON_PROXY_URL = `${process.env.NEON_URL}/neon`;
const faucet = new FaucetDropper(CHAIN_ID);


let tokensList: GasToken[] = [];
let solanaWallet = Keypair.fromSecretKey(PHANTOM_PRIVATE);
let signer: Signer = toSigner(solanaWallet);
let gasToken: GasToken;
let neonProxyStatus: Partial<NeonProgramStatus>;
let neonEvmProgram: PublicKey;
let neonTokenMint: PublicKey;
let neonProxyRpcApi: NeonProxyRpcApi;

let web3: Web3;
let neonWallet: Web3Account;
let connection: Connection;

describe('NEON token transfer tests', () => {
beforeAll(async () => {
try {
const result = await getMultiTokenProxy(NEON_PROXY_URL!);
const token = getGasToken(result.tokensList, CHAIN_ID);
connection = new Connection(SOLANA_URL!, 'confirmed');
web3 = getWeb3Provider(NEON_PROXY_URL!);
neonProxyRpcApi = result.proxyRpc;
neonProxyStatus = result.proxyStatus;
neonEvmProgram = result.evmProgramAddress;
neonTokenMint = token.tokenMintAddress;
solanaWallet = Keypair.fromSecretKey(PHANTOM_PRIVATE);
neonWallet = web3.eth.accounts.privateKeyToAccount(NEON_PRIVATE);
tokensList = (await neonProxyRpcApi.nativeTokenList()) || TOKEN_LIST_DEVNET_SNAPSHOT;
gasToken = token.gasToken;
} catch (e) {
console.log(e);
}
});

beforeAll(async () => {
try {
const token = await neonBalanceWeb3(NEON_PROXY_URL!, neonWallet.address);
if (token.gte(0.1)) {
console.log(`Neon wallet: ${neonWallet.address}: ${token.toNumber()} NEON`);
} else {
await faucet.requestNeon(neonWallet.address, 2);
await delay(1e4);
const token = await neonBalanceWeb3(NEON_PROXY_URL!, neonWallet.address);
console.log(`Neon wallet: ${neonWallet.address}: ${token.toNumber()} NEON`);
}
} catch (e) {
console.log(e);
}
});

beforeAll(async () => {
try {
const balance = await connection.getBalance(solanaWallet.publicKey);
if (balance) {
console.log(`Solana wallet: ${solanaWallet.publicKey.toBase58()}: ${balance / LAMPORTS_PER_SOL} SOL`);
} else {
await connection.requestAirdrop(solanaWallet.publicKey, LAMPORTS_PER_SOL);
await delay(1e4);
const balance = await connection.getBalance(solanaWallet.publicKey);
console.log(`Solana wallet: ${solanaWallet.publicKey.toBase58()}: ${balance / LAMPORTS_PER_SOL} SOL`);
}
} catch (e) {
console.log(e);
}
});

it.skip(`Should transfer 0.1 NEON with NEON fee from Solana to Neon`, async () => {
const amount = 0.1;
const neonToken: SPLToken = {
...NEON_TOKEN_MODEL,
address_spl: gasToken.tokenMint,
chainId: CHAIN_ID
};
await createAssociatedTokenAccount(connection, signer, neonToken);
const balanceBefore = await splTokenBalance(connection, solanaWallet.publicKey, neonToken);
console.log(`Balance: ${balanceBefore?.uiAmount ?? 0} ${neonToken.symbol}`);
try {
const transaction = await solanaNEONTransferTransaction(solanaWallet.publicKey, neonWallet.address, neonEvmProgram, neonTokenMint, neonToken, amount, CHAIN_ID);
transaction.recentBlockhash = (await connection.getLatestBlockhash('finalized')).blockhash;
const signature = await sendSolanaTransaction(connection, transaction, [signer], false, { skipPreflight });
expect(signature.length).toBeGreaterThan(0);
solanaSignature(`Signature`, signature, SOLANA_URL!);
await delay(10e3);
const balanceAfter = await splTokenBalance(connection, solanaWallet.publicKey, neonToken);
const balanceNeon = await neonBalanceWeb3(NEON_PROXY_URL!
, neonWallet.address);
console.log(`Balance: ${balanceBefore?.uiAmount} > ${balanceAfter?.uiAmount} ${neonToken.symbol} ==> ${balanceNeon} ${neonToken.symbol} in Neon`);
expect(balanceAfter.uiAmount).toBeLessThan(balanceBefore.uiAmount!);
} catch (e) {
console.log(e);
expect(e instanceof Error ? e.message : '').toBe('');
}
});
});
Loading

0 comments on commit c246f3c

Please sign in to comment.