From 5a0a8c11c29d3324373596bbeed6762c92c5f07a Mon Sep 17 00:00:00 2001 From: Igor Prokopev Date: Wed, 28 Aug 2024 17:56:05 +0700 Subject: [PATCH] Fxed react demo. Changed package. --- __tests__/e2e/erc20.ts | 1 - __tests__/e2e/transfers.spec.ts | 15 +-- examples/neon-transfer-ethers/package.json | 4 +- examples/neon-transfer-react/package.json | 6 +- .../src/neon-transfer-app.tsx | 9 +- examples/neon-transfer-web3/package.json | 4 +- package.json | 6 +- packages/core/src/api/neon-proxy-rpc.ts | 38 +----- packages/core/src/data/constants.ts | 2 + packages/core/src/data/proxy.ts | 60 ++++------ packages/core/src/mint-transfer.ts | 110 +++++++++++++----- packages/core/src/models/api.ts | 30 ----- packages/core/src/models/instruction.ts | 8 +- packages/core/src/utils/addresses.ts | 11 +- packages/ethers/package.json | 2 +- packages/ethers/src/mint-transfer.ts | 22 +++- packages/web3/package.json | 2 +- packages/web3/src/mint-transfer.ts | 26 ++++- yarn.lock | 44 ------- 19 files changed, 177 insertions(+), 223 deletions(-) diff --git a/__tests__/e2e/erc20.ts b/__tests__/e2e/erc20.ts index 767e31f5..252708de 100644 --- a/__tests__/e2e/erc20.ts +++ b/__tests__/e2e/erc20.ts @@ -34,7 +34,6 @@ import { 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) { const amount = 0.1; const balanceBefore = await splTokenBalance(connection, solanaWallet.publicKey, token); - if(!balanceBefore) return; console.log(`Balance: ${balanceBefore?.uiAmount ?? 0} ${token.symbol}`); try { let transaction: Transaction; diff --git a/__tests__/e2e/transfers.spec.ts b/__tests__/e2e/transfers.spec.ts index b538d8be..09b0277e 100644 --- a/__tests__/e2e/transfers.spec.ts +++ b/__tests__/e2e/transfers.spec.ts @@ -1,12 +1,5 @@ import { afterEach, beforeAll, describe, expect, it, jest } from '@jest/globals'; -import { - Connection, - Keypair, - LAMPORTS_PER_SOL, - PublicKey, - Signer, - TokenAmount -} from '@solana/web3.js'; +import { Connection, Keypair, LAMPORTS_PER_SOL, PublicKey, Signer } from '@solana/web3.js'; import { getAssociatedTokenAddressSync } from '@solana/spl-token'; import { Web3 } from 'web3'; import { Web3Account } from 'web3-eth-accounts'; @@ -368,17 +361,17 @@ describe('NEON token transfer tests', () => { factoryAddress = process.env.FACTORY_ADDRESS || await deployFactory(NEON_PROXY_URL!); console.log('Factory address:', factoryAddress); - if(factoryAddress) { + if (factoryAddress) { customToken = await setupResourceForSpl(CHAIN_ID, NEON_PROXY_URL!, factoryAddress); console.log('Resource setup complete. SPLToken:', customToken); } }); - it('Should transfer 0.1 new custom SPL token from Solana to NeonEVM', async() => { + it('Should transfer 0.1 new custom SPL token from Solana to NeonEVM', async () => { customToken.address_spl && await itSolanaTokenSPL(web3, connection, NEON_PROXY_URL!, neonProxyRpcApi, customToken, neonEvmProgram, solanaWallet, neonWallet, CHAIN_ID, SOLANA_URL!); }); - it('Should transfer 0.1 new custom token from NeonEVM to Solana', async() => { + it('Should transfer 0.1 new custom token from NeonEVM to Solana', async () => { customToken.address_spl && await itNeonTokenMint(connection, web3, NEON_PROXY_URL!, faucet, customToken, solanaWallet, neonWallet); }); }); diff --git a/examples/neon-transfer-ethers/package.json b/examples/neon-transfer-ethers/package.json index be2ee193..bb862ee5 100644 --- a/examples/neon-transfer-ethers/package.json +++ b/examples/neon-transfer-ethers/package.json @@ -20,8 +20,8 @@ "@ethersproject/providers": "~5.7.0", "@ethersproject/units": "~5.7.0", "@ethersproject/wallet": "^5.7.0", - "@neonevm/token-transfer-core": "4.0.0-a2", - "@neonevm/token-transfer-ethers": "4.0.0-a2", + "@neonevm/token-transfer-core": "4.2.0", + "@neonevm/token-transfer-ethers": "4.2.0", "big.js": "^6.2.1", "bn.js": "^5.2.1" }, diff --git a/examples/neon-transfer-react/package.json b/examples/neon-transfer-react/package.json index b6dc9992..49bc4b29 100644 --- a/examples/neon-transfer-react/package.json +++ b/examples/neon-transfer-react/package.json @@ -1,7 +1,7 @@ { "name": "@neonevm/neon-transfer-demo-react", "description": "NeonEVM token transfer library demo with multi-token support", - "version": "0.4.0", + "version": "0.4.1", "private": true, "scripts": { "start": "react-app-rewired start", @@ -28,8 +28,8 @@ ] }, "dependencies": { - "@neonevm/token-transfer-core": "4.0.0-a2", - "@neonevm/token-transfer-web3": "4.0.0-a2", + "@neonevm/token-transfer-core": "4.2.0", + "@neonevm/token-transfer-web3": "4.2.0", "@testing-library/jest-dom": "^5.14.1", "@testing-library/react": "^13.0.0", "@testing-library/user-event": "^13.2.1", diff --git a/examples/neon-transfer-react/src/neon-transfer-app.tsx b/examples/neon-transfer-react/src/neon-transfer-app.tsx index cdd488fa..15b55148 100644 --- a/examples/neon-transfer-react/src/neon-transfer-app.tsx +++ b/examples/neon-transfer-react/src/neon-transfer-app.tsx @@ -94,15 +94,15 @@ function NeonTransferApp() { const neonProgram = useMemo(() => { if (proxyStatus) { - return new PublicKey(proxyStatus?.NEON_EVM_ID!); + return new PublicKey(proxyStatus?.neonEvmProgramId!); } - return new PublicKey(NEON_STATUS_DEVNET_SNAPSHOT.NEON_EVM_ID); + return new PublicKey(NEON_STATUS_DEVNET_SNAPSHOT.neonEvmProgramId); }, [proxyStatus]); const networkTokenMint = useMemo(() => { - const id = gasTokens.findIndex(i => parseInt(i.token_chain_id, 16) === chainId); + const id = gasTokens.findIndex(i => parseInt(i.tokenChainId, 16) === chainId); if (id > -1) { - return new PublicKey(gasTokens[id].token_mint); + return new PublicKey(gasTokens[id].tokenMint); } return new PublicKey(NEON_TOKEN_MINT_DEVNET); }, [gasTokens, chainId]); @@ -200,6 +200,7 @@ function NeonTransferApp() { const getProxyStatus = useCallback(async () => { const proxyStatus = await proxyApi.evmParams(); const gasTokens = await proxyApi.nativeTokenList(); + // @ts-ignore setProxyStatus(proxyStatus); setGasTokens(gasTokens); }, [proxyApi]); diff --git a/examples/neon-transfer-web3/package.json b/examples/neon-transfer-web3/package.json index 91a3895e..242e223e 100644 --- a/examples/neon-transfer-web3/package.json +++ b/examples/neon-transfer-web3/package.json @@ -10,8 +10,8 @@ }, "license": "ISC", "dependencies": { - "@neonevm/token-transfer-core": "4.0.0-a2", - "@neonevm/token-transfer-web3": "4.0.0-a2", + "@neonevm/token-transfer-core": "4.2.0", + "@neonevm/token-transfer-web3": "4.2.0", "big.js": "^6.2.1", "bn.js": "^5.2.1", "web3": "^4.5.0" diff --git a/package.json b/package.json index c7234596..677f7881 100644 --- a/package.json +++ b/package.json @@ -57,9 +57,9 @@ "@metaplex-foundation/mpl-token-metadata": "^3.2.0", "@metaplex-foundation/umi": "^0.9.1", "@metaplex-foundation/umi-bundle-defaults": "^0.9.1", - "@neonevm/token-transfer-core": "4.1.1", - "@neonevm/token-transfer-ethers": "4.0.1", - "@neonevm/token-transfer-web3": "4.0.1", + "@neonevm/token-transfer-core": "4.2.0", + "@neonevm/token-transfer-ethers": "4.2.0", + "@neonevm/token-transfer-web3": "4.2.0", "@solana/spl-token": "^0.3.8", "@solana/web3.js": "^1.77.3", "@types/big.js": "^6.1.6", diff --git a/packages/core/src/api/neon-proxy-rpc.ts b/packages/core/src/api/neon-proxy-rpc.ts index fcef7479..bf642a53 100644 --- a/packages/core/src/api/neon-proxy-rpc.ts +++ b/packages/core/src/api/neon-proxy-rpc.ts @@ -1,4 +1,4 @@ -import { GasToken, GasTokenV2, NeonEmulate, NeonProgramStatusV2, NeonProgramStatus, RPCResponse } from '../models'; +import { GasToken, GasTokenV2, NeonEmulate, NeonProgramStatus, RPCResponse } from '../models'; export class NeonProxyRpcApi { neonProxyRpcUrl = ''; @@ -28,44 +28,14 @@ export class NeonProxyRpcApi { } async evmParams(): Promise> { - return this.proxy('neon_getEvmParams', []).then(d => { - //Use data mapper - return { - NEON_ACCOUNT_SEED_VERSION: d.result.neonAccountSeedVersion, - NEON_EVM_ID: d.result.neonEvmProgramId, - NEON_EVM_STEPS_LAST_ITERATION_MAX: d.result.neonMaxEvmStepsInLastIteration, - NEON_EVM_STEPS_MIN: d.result.neonMinEvmStepsInIteration, - NEON_GAS_LIMIT_MULTIPLIER_NO_CHAINID: d.result.neonGasLimitMultiplierWithoutChainId, - NEON_HOLDER_MSG_SIZE: d.result.neonHolderMessageSize, - NEON_PAYMENT_TO_TREASURE: d.result.neonPaymentToTreasury, - NEON_STORAGE_ENTRIES_IN_CONTRACT_ACCOUNT: d.result.neonStorageEntriesInContractAccount, - NEON_TREASURY_POOL_COUNT: d.result.neonTreasuryPoolCount, - NEON_TREASURY_POOL_SEED: d.result.neonTreasuryPoolSeed, - } - }); + return this.proxy('neon_getEvmParams', []).then(({ result }) => result); } async gasTokenList(): Promise { - return this.proxy('neon_getGasTokenList', []).then(d => { - return d.result.map((d) => { - return { - tokenName: d.tokenName, - tokenMint: d.tokenMint, - tokenChainId: d.tokenChainId, - }; - }); - }); + return this.proxy('neon_getGasTokenList', []).then(({ result }) => result); } async nativeTokenList(): Promise { - return this.proxy('neon_getNativeTokenList', []).then(d => { - return d.result.map((d) => { - return { - tokenName: d.tokenName, - tokenMint: d.tokenMint, - tokenChainId: d.tokenChainId, - }; - }); - }); + return this.proxy('neon_getNativeTokenList', []).then(({ result }) => result); } } diff --git a/packages/core/src/data/constants.ts b/packages/core/src/data/constants.ts index b7c432ec..21417ab7 100644 --- a/packages/core/src/data/constants.ts +++ b/packages/core/src/data/constants.ts @@ -17,3 +17,5 @@ export const NEON_TOKEN_MINT_DEVNET = '89dre8rZjLNft7HoupGiyxu3MNftR577ZYu8bHe2k export const SOL_TOKEN_MINT_DEVNET = '89dre8rZjLNft7HoupGiyxu3MNftR577ZYu8bHe2kK7g'; export const NEON_TOKEN_MINT_MAINNET = 'NeonTjSjsuo3rexg9o6vHuMXw62f9V7zvmu8M8Zut44'; export const SOL_TOKEN_MINT_MAINNET = 'NeonTjSjsuo3rexg9o6vHuMXw62f9V7zvmu8M8Zut44'; + +export const RENT_EPOCH_ZERO = 0; diff --git a/packages/core/src/data/proxy.ts b/packages/core/src/data/proxy.ts index 85042bfd..c7981730 100644 --- a/packages/core/src/data/proxy.ts +++ b/packages/core/src/data/proxy.ts @@ -1,47 +1,29 @@ import { GasToken, NeonProgramStatus } from '../models'; export const NEON_STATUS_MAINNET_SNAPSHOT: NeonProgramStatus = { - NEON_ACCOUNT_SEED_VERSION: 3, - NEON_ADDITIONAL_FEE: '0', - NEON_CHAIN_ID: '245022934', - NEON_COMPUTE_BUDGET_HEAP_FRAME: '262144', - NEON_COMPUTE_BUDGET_UNITS: '500000', - NEON_COMPUTE_UNITS: '500000', - NEON_EVM_STEPS_LAST_ITERATION_MAX: 1, - NEON_EVM_STEPS_MIN: 500, - NEON_GAS_LIMIT_MULTIPLIER_NO_CHAINID: 1000, - NEON_HEAP_FRAME: '262144', - NEON_HOLDER_MSG_SIZE: 950, - NEON_OPERATOR_PRIORITY_SLOTS: '16', - NEON_PAYMENT_TO_DEPOSIT: '5000', - NEON_PAYMENT_TO_TREASURE: 5000, - NEON_PKG_VERSION: '1.0.0', - NEON_POOL_COUNT: '128', - NEON_POOL_SEED: 'treasury_pool', - NEON_REQUEST_UNITS_ADDITIONAL_FEE: '0', - NEON_REVISION: '3cece008d1520c1183fbd59370a90b5e5350b9e7', - NEON_SEED_VERSION: '3', - NEON_STATUS_NAME: 'WORK', - NEON_STORAGE_ENTRIES_IN_CONTRACT_ACCOUNT: 64, - NEON_TOKEN_MINT: 'NeonTjSjsuo3rexg9o6vHuMXw62f9V7zvmu8M8Zut44', - NEON_TOKEN_MINT_DECIMALS: '9', - NEON_TREASURY_POOL_COUNT: 128, - NEON_TREASURY_POOL_SEED: 'treasury_pool', - NEON_EVM_ID: 'NeonVMyRX5GbCrsAHnUwx1nYYoJAtskU1bWUo6JGNyG' + neonAccountSeedVersion: 3, + neonEvmProgramId: 'NeonVMyRX5GbCrsAHnUwx1nYYoJAtskU1bWUo6JGNyG', + neonGasLimitMultiplierWithoutChainId: 1000, + neonHolderMessageSize: 950, + neonMaxEvmStepsInLastIteration: 0, + neonMinEvmStepsInIteration: 500, + neonPaymentToTreasury: 5000, + neonStorageEntriesInContractAccount: 64, + neonTreasuryPoolCount: 128, + neonTreasuryPoolSeed: 'treasury_pool' }; -export const NEON_STATUS_DEVNET_SNAPSHOT: Partial = { - NEON_ACCOUNT_SEED_VERSION: 3, - NEON_EVM_ID: 'eeLSJgWzzxrqKv1UxtRVVH8FX3qCQWUs9QuAjJpETGU', - NEON_EVM_STEPS_LAST_ITERATION_MAX: 1, - NEON_EVM_STEPS_MIN: 500, - NEON_GAS_LIMIT_MULTIPLIER_NO_CHAINID: 1000, - NEON_HOLDER_MSG_SIZE: 950, - NEON_OPERATOR_PRIORITY_SLOTS: '16', - NEON_PAYMENT_TO_TREASURE: 5000, - NEON_STORAGE_ENTRIES_IN_CONTRACT_ACCOUNT: 64, - NEON_TREASURY_POOL_COUNT: 128, - NEON_TREASURY_POOL_SEED: 'treasury_pool' +export const NEON_STATUS_DEVNET_SNAPSHOT: NeonProgramStatus = { + neonAccountSeedVersion: 3, + neonEvmProgramId: 'eeLSJgWzzxrqKv1UxtRVVH8FX3qCQWUs9QuAjJpETGU', + neonGasLimitMultiplierWithoutChainId: 1000, + neonHolderMessageSize: 950, + neonMaxEvmStepsInLastIteration: 0, + neonMinEvmStepsInIteration: 500, + neonPaymentToTreasury: 5000, + neonStorageEntriesInContractAccount: 64, + neonTreasuryPoolCount: 128, + neonTreasuryPoolSeed: 'treasury_pool' }; export const TOKEN_LIST_DEVNET_SNAPSHOT: GasToken[] = [{ diff --git a/packages/core/src/mint-transfer.ts b/packages/core/src/mint-transfer.ts index fc104de3..b35ac722 100644 --- a/packages/core/src/mint-transfer.ts +++ b/packages/core/src/mint-transfer.ts @@ -22,10 +22,10 @@ import { Amount, ClaimInstructionConfig, ClaimInstructionResult, + CreateAccountWithSeedParams, + CreateExecFromDataInstructionParams, EvmInstruction, ExtendedAccountInfo, - ICreateAccountWithSeedParams, - ICreateExecFromDataInstructionParams, NeonComputeUnits, NeonEmulate, NeonHeapFrame, @@ -40,7 +40,8 @@ import { NEON_COMPUTE_UNITS, NEON_HEAP_FRAME, NEON_STATUS_DEVNET_SNAPSHOT, - NEON_TREASURY_POOL_COUNT + NEON_TREASURY_POOL_COUNT, + RENT_EPOCH_ZERO } from './data'; import { authAccountAddress, @@ -64,7 +65,7 @@ export async function neonTransferMintTransaction(config: ClaimInstructionConfig): Promise { - const { proxyApi, neonTransaction, connection, signerAddress, neonEvmProgram, splToken, associatedTokenAddress, fullAmount } = config; + const { + proxyApi, + neonTransaction, + connection, + signerAddress, + neonEvmProgram, + splToken, + associatedTokenAddress, + fullAmount + } = config; if (neonTransaction.rawTransaction) { - if(splToken.symbol.toUpperCase() !== 'WSOL') { //TODO: Add support for WSOL - const overriddenSourceAccount = await getOverriddenSourceSplAccount({connection, signerAddress, neonEvmProgram, splToken, fullAmount, associatedTokenAddress}); - const solanaOverrides: SolanaOverrides = { solanaOverrides: { [associatedTokenAddress.toBase58()]: overriddenSourceAccount } } + if (splToken.symbol.toUpperCase() !== 'WSOL') { //TODO: Add support for WSOL + const overriddenSourceAccount = await getOverriddenSourceSplAccount({ + connection, + signerAddress, + neonEvmProgram, + splToken, + fullAmount, + associatedTokenAddress + }); + const solanaOverrides: SolanaOverrides = { solanaOverrides: { [associatedTokenAddress.toBase58()]: overriddenSourceAccount } }; console.log('Solana Overrides', solanaOverrides); } const neonEmulate: NeonEmulate = await proxyApi.neonEmulate([neonTransaction.rawTransaction.slice(2)]); @@ -199,12 +230,24 @@ export async function createClaimInstruction } export async function getOverriddenSourceSplAccount(config: SourceSplAccountConfig): Promise { - const {connection, signerAddress, neonEvmProgram, splToken, fullAmount, associatedTokenAddress} = config; + const { + connection, + signerAddress, + neonEvmProgram, + splToken, + fullAmount, + associatedTokenAddress + } = config; const [authAccountAddressDelegate] = authAccountAddress(signerAddress, neonEvmProgram, splToken); const sourceAccountInfo = >(await connection.getAccountInfo(associatedTokenAddress)); const tokenAccountInfo = AccountLayout.decode(sourceAccountInfo.data); //For the completely new accounts delegate will be changed - const updatedTokenAccountInfo = {...tokenAccountInfo, delegateOption: 1, delegatedAmount: fullAmount, delegate: authAccountAddressDelegate}; + const updatedTokenAccountInfo = { + ...tokenAccountInfo, + delegateOption: 1, + delegatedAmount: fullAmount, + delegate: authAccountAddressDelegate + }; //Encode data to hex string for the neon proxy const buffer = Buffer.alloc(AccountLayout.span); AccountLayout.encode(updatedTokenAccountInfo, buffer); @@ -216,12 +259,12 @@ export async function getOverriddenSourceSplAccount(config: SourceSplAccountConf data: `0x${dataHexString}`, owner: sourceAccountInfo.owner.toBase58(), executable: sourceAccountInfo.executable, - rentEpoch: 0, + rentEpoch: RENT_EPOCH_ZERO }; } export function createExecFromDataInstruction(solanaWallet: PublicKey, neonPDAWallet: PublicKey, neonEvmProgram: PublicKey, neonRawTransaction: string, neonKeys: AccountMeta[], proxyStatus: NeonProgramStatus): TransactionInstruction { - const count = Number(proxyStatus.NEON_POOL_COUNT); + const count = Number(proxyStatus.neonTreasuryPoolCount); const treasuryPoolIndex = Math.floor(Math.random() * count) % count; const [treasuryPoolAddress] = collateralPoolAddress(neonEvmProgram, treasuryPoolIndex); const a = Buffer.from([EvmInstruction.TransactionExecuteFromInstruction]); @@ -240,22 +283,22 @@ export function createExecFromDataInstruction(solanaWallet: PublicKey, neonPDAWa return new TransactionInstruction({ programId: neonEvmProgram, keys, data }); } -export function createAccountWithSeedInstruction(createAccountWithSeedParams: ICreateAccountWithSeedParams): TransactionInstruction { +export function createAccountWithSeedInstruction(createAccountWithSeedParams: CreateAccountWithSeedParams): TransactionInstruction { const { solanaWallet, seed, holderAccountPK, neonEvmProgram } = createAccountWithSeedParams; - const space=128 * 1024; //128KB + const space = 128 * 1024; //128KB return SystemProgram.createAccountWithSeed({ - fromPubkey: solanaWallet, - basePubkey: solanaWallet, - seed, // should be the same as for derived account - newAccountPubkey: holderAccountPK, - lamports: 0, - space, - programId: neonEvmProgram - }); + seed, // should be the same as for derived account + lamports: 0, + space, + fromPubkey: solanaWallet, + basePubkey: solanaWallet, + newAccountPubkey: holderAccountPK, + programId: neonEvmProgram + }); } -export function createHolderAccountInstruction(createAccountWithSeedParams: ICreateAccountWithSeedParams): TransactionInstruction { +export function createHolderAccountInstruction(createAccountWithSeedParams: CreateAccountWithSeedParams): TransactionInstruction { const { solanaWallet, seed, holderAccountPK, neonEvmProgram } = createAccountWithSeedParams; const instruction = Buffer.from([EvmInstruction.HolderCreate]); const seedLength = Buffer.alloc(8); @@ -268,7 +311,7 @@ export function createHolderAccountInstruction(createAccountWithSeedParams: ICre const keys: AccountMeta[] = [ { pubkey: holderAccountPK, isSigner: false, isWritable: true }, - { pubkey: solanaWallet, isSigner: true, isWritable: false }, + { pubkey: solanaWallet, isSigner: true, isWritable: false } ]; return new TransactionInstruction({ programId: neonEvmProgram, keys, data }); } @@ -277,14 +320,17 @@ export function deleteHolderAccountInstruction(neonEvmProgram: PublicKey, solana const data = Buffer.from([EvmInstruction.HolderDelete]); const keys: AccountMeta[] = [ { pubkey: holderAccountPK, isSigner: false, isWritable: true }, - { pubkey: solanaWallet, isSigner: true, isWritable: false }, + { pubkey: solanaWallet, isSigner: true, isWritable: false } ]; return new TransactionInstruction({ programId: neonEvmProgram, keys, data }); } -export function createExecFromDataInstructionV2(createExecFromDataInstructionParams: ICreateExecFromDataInstructionParams): TransactionInstruction { - const { solanaWallet, neonWallet, holderAccountPK, neonEvmProgram, neonRawTransaction, neonPoolCount, chainId, neonKeys } = createExecFromDataInstructionParams; - const count = Number(neonPoolCount ?? NEON_STATUS_DEVNET_SNAPSHOT.NEON_POOL_COUNT); +export function createExecFromDataInstructionV2(params: CreateExecFromDataInstructionParams): TransactionInstruction { + const { + solanaWallet, neonWallet, holderAccount, neonEvmProgram, + neonRawTransaction, neonPoolCount, chainId, neonKeys + } = params; + const count = Number(neonPoolCount ?? NEON_STATUS_DEVNET_SNAPSHOT.neonTreasuryPoolCount); const treasuryPoolIndex = Math.floor(Math.random() * count) % count; const [balanceAccount] = neonBalanceProgramAddressV2(neonWallet, solanaWallet, neonEvmProgram, chainId); const [treasuryPoolAddress] = collateralPoolAddress(neonEvmProgram, treasuryPoolIndex); @@ -293,7 +339,7 @@ export function createExecFromDataInstructionV2(createExecFromDataInstructionPar const c = Buffer.from(neonRawTransaction.slice(2), 'hex'); const data = Buffer.concat([a, b, c]); const keys: AccountMeta[] = [ - { pubkey: holderAccountPK, isSigner: false, isWritable: true }, + { pubkey: holderAccount, isSigner: false, isWritable: true }, { pubkey: solanaWallet, isSigner: true, isWritable: true }, { pubkey: treasuryPoolAddress, isSigner: false, isWritable: true }, { pubkey: balanceAccount, isSigner: false, isWritable: true }, diff --git a/packages/core/src/models/api.ts b/packages/core/src/models/api.ts index 350f9e7e..046e909a 100644 --- a/packages/core/src/models/api.ts +++ b/packages/core/src/models/api.ts @@ -24,36 +24,6 @@ export type NeonHeapFrame = string; export type NeonComputeUnits = string; export interface NeonProgramStatus { - NEON_ACCOUNT_SEED_VERSION: number; - NEON_EVM_ID: string; - NEON_EVM_STEPS_LAST_ITERATION_MAX: number; - NEON_EVM_STEPS_MIN: number; - NEON_GAS_LIMIT_MULTIPLIER_NO_CHAINID: number; - NEON_HOLDER_MSG_SIZE: number; - NEON_OPERATOR_PRIORITY_SLOTS: string; - NEON_PAYMENT_TO_TREASURE: number; - NEON_STORAGE_ENTRIES_IN_CONTRACT_ACCOUNT: number; - NEON_TREASURY_POOL_COUNT: number; - NEON_TREASURY_POOL_SEED: string; - NEON_PKG_VERSION?: string; - NEON_POOL_COUNT?: string; - NEON_POOL_SEED?: string; - NEON_REQUEST_UNITS_ADDITIONAL_FEE?: string; - NEON_REVISION?: string; - NEON_SEED_VERSION?: string; - NEON_STATUS_NAME?: string; - NEON_TOKEN_MINT?: string; - NEON_TOKEN_MINT_DECIMALS?: string; - NEON_PAYMENT_TO_DEPOSIT?: string; - NEON_HEAP_FRAME?: string; - NEON_ADDITIONAL_FEE?: string; - NEON_CHAIN_ID?: string; - NEON_COMPUTE_BUDGET_HEAP_FRAME?: string; - NEON_COMPUTE_BUDGET_UNITS?: string; - NEON_COMPUTE_UNITS?: string; -} - -export interface NeonProgramStatusV2 { neonAccountSeedVersion: number; neonMaxEvmStepsInLastIteration: number; neonMinEvmStepsInIteration: number; diff --git a/packages/core/src/models/instruction.ts b/packages/core/src/models/instruction.ts index b6d15b11..7059703a 100644 --- a/packages/core/src/models/instruction.ts +++ b/packages/core/src/models/instruction.ts @@ -1,4 +1,4 @@ -import {AccountMeta, PublicKey} from '@solana/web3.js'; +import { AccountMeta, PublicKey } from '@solana/web3.js'; export const enum EvmInstruction { CreateAccountV02 = 0x18, // 24 @@ -21,17 +21,17 @@ export const enum AccountHex { SeedVersion = 0x03 } -export type ICreateAccountWithSeedParams = { +export interface CreateAccountWithSeedParams { neonEvmProgram: PublicKey; solanaWallet: PublicKey; holderAccountPK: PublicKey; seed: string; } -export type ICreateExecFromDataInstructionParams = { +export interface CreateExecFromDataInstructionParams { solanaWallet: PublicKey; neonWallet: string; - holderAccountPK: PublicKey; + holderAccount: PublicKey; neonEvmProgram: PublicKey; neonRawTransaction: string; neonKeys: AccountMeta[]; diff --git a/packages/core/src/utils/addresses.ts b/packages/core/src/utils/addresses.ts index 2de477eb..f0f648d1 100644 --- a/packages/core/src/utils/addresses.ts +++ b/packages/core/src/utils/addresses.ts @@ -1,6 +1,6 @@ -import {Connection, PublicKey} from '@solana/web3.js'; +import { PublicKey } from '@solana/web3.js'; import { AccountHex, SPLToken } from '../models'; -import { toBytesInt32, toU256BE, randRange } from './amount'; +import { randRange, toBytesInt32, toU256BE } from './amount'; import { isValidHex } from './hex'; export function neonWalletProgramAddress(etherKey: string, neonEvmProgram: PublicKey): [PublicKey, number] { @@ -52,9 +52,8 @@ export function authorityPoolAddress(programId: PublicKey): [PublicKey, number] return PublicKey.findProgramAddressSync([new Uint8Array(Buffer.from('Deposit', 'utf-8'))], programId); } -export async function holderAccountData(neonEvmProgram: PublicKey, solanaWallet: PublicKey): Promise<{holderPk: PublicKey, seed: string}> { +export async function holderAccountData(neonEvmProgram: PublicKey, solanaWallet: PublicKey): Promise<[PublicKey, string]> { const seed = randRange(0, 1000000).toString(); - const holderPk = await PublicKey.createWithSeed(solanaWallet, seed, neonEvmProgram); - - return { holderPk, seed }; + const holder = await PublicKey.createWithSeed(solanaWallet, seed, neonEvmProgram); + return [holder, seed]; } diff --git a/packages/ethers/package.json b/packages/ethers/package.json index bdab4e52..35ffd99e 100644 --- a/packages/ethers/package.json +++ b/packages/ethers/package.json @@ -1,6 +1,6 @@ { "name": "@neonevm/token-transfer-ethers", - "version": "4.0.2", + "version": "4.2.0", "description": "Neon EVM token transfer methods leveraging the ethers.js library", "main": "./dist/cjs/index.js", "module": "./dist/esm/index.js", diff --git a/packages/ethers/src/mint-transfer.ts b/packages/ethers/src/mint-transfer.ts index 98875ec9..a7468e5c 100644 --- a/packages/ethers/src/mint-transfer.ts +++ b/packages/ethers/src/mint-transfer.ts @@ -38,7 +38,16 @@ export async function neonTransferMintTransactionEthers(connection: Connection, const { neonKeys, legacyAccounts - } = await createClaimInstruction({ proxyApi, neonTransaction: signedTransaction, connection, neonEvmProgram, splToken, associatedTokenAddress, signerAddress: walletSigner.address, fullAmount }); + } = await createClaimInstruction({ + proxyApi, + neonTransaction: signedTransaction, + connection, + neonEvmProgram, + splToken, + associatedTokenAddress, + signerAddress: walletSigner.address, + fullAmount + }); return neonTransferMintTransaction(connection, neonEvmProgram, solanaWallet, neonWallet, walletSigner, neonKeys, legacyAccounts, signedTransaction, splToken, fullAmount, chainId, neonHeapFrame); } @@ -64,7 +73,16 @@ export async function createWrapAndTransferSOLTransaction(connection: Connection const { neonKeys, legacyAccounts - } = await createClaimInstruction({ proxyApi, neonTransaction: signedTransaction, connection, neonEvmProgram, splToken, associatedTokenAddress, signerAddress: walletSigner.address, fullAmount }); + } = await createClaimInstruction({ + proxyApi, + neonTransaction: signedTransaction, + connection, + neonEvmProgram, + splToken, + associatedTokenAddress, + signerAddress: walletSigner.address, + fullAmount + }); const mintTransaction = await neonTransferMintTransaction(connection, neonEvmProgram, solanaWallet, neonWallet, walletSigner, neonKeys, legacyAccounts, signedTransaction, splToken, fullAmount, chainId, neonHeapFrame); if (!wSOLAccount) { diff --git a/packages/web3/package.json b/packages/web3/package.json index 7a04fad0..c3df78ed 100644 --- a/packages/web3/package.json +++ b/packages/web3/package.json @@ -1,6 +1,6 @@ { "name": "@neonevm/token-transfer-web3", - "version": "4.0.2", + "version": "4.2.0", "description": "Neon EVM token transfer methods leveraging the web3.js library", "main": "./dist/cjs/index.js", "module": "./dist/esm/index.js", diff --git a/packages/web3/src/mint-transfer.ts b/packages/web3/src/mint-transfer.ts index d7967508..9bd1b933 100644 --- a/packages/web3/src/mint-transfer.ts +++ b/packages/web3/src/mint-transfer.ts @@ -3,7 +3,7 @@ import { PublicKey, SystemProgram, Transaction, - TransactionInstruction, + TransactionInstruction } from '@solana/web3.js'; import { Amount, @@ -14,7 +14,7 @@ import { NeonProxyRpcApi, neonTransferMintTransaction, SPLToken, - toFullAmount, + toFullAmount } from '@neonevm/token-transfer-core'; import { createSyncNativeInstruction, @@ -42,7 +42,16 @@ export async function neonTransferMintTransactionWeb3(connection: Connection, pr const { neonKeys, legacyAccounts - } = await createClaimInstruction({ proxyApi, neonTransaction: signedTransaction, connection, neonEvmProgram, splToken, associatedTokenAddress, signerAddress: walletSigner.address, fullAmount }); + } = await createClaimInstruction({ + proxyApi, + neonTransaction: signedTransaction, + connection, + neonEvmProgram, + splToken, + associatedTokenAddress, + signerAddress: walletSigner.address, + fullAmount + }); return neonTransferMintTransaction(connection, neonEvmProgram, solanaWallet, neonWallet, walletSigner, neonKeys, legacyAccounts, signedTransaction, splToken, fullAmount, chainId, neonHeapFrame); } @@ -70,7 +79,16 @@ export async function createWrapAndTransferSOLTransaction(connection: Connection const { neonKeys, legacyAccounts - } = await createClaimInstruction({ proxyApi, neonTransaction: signedTransaction, connection, neonEvmProgram, splToken, associatedTokenAddress, signerAddress: walletSigner.address, fullAmount }); + } = await createClaimInstruction({ + proxyApi, + neonTransaction: signedTransaction, + connection, + neonEvmProgram, + splToken, + associatedTokenAddress, + signerAddress: walletSigner.address, + fullAmount + }); const mintTransaction = await neonTransferMintTransaction(connection, neonEvmProgram, solanaWallet, neonWallet, walletSigner, neonKeys, legacyAccounts, signedTransaction, splToken, fullAmount, chainId, neonHeapFrame); if (!wSOLAccount) { diff --git a/yarn.lock b/yarn.lock index ae448d18..b4f172f7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2399,50 +2399,6 @@ "@metaplex-foundation/umi-public-keys" "^0.8.9" "@metaplex-foundation/umi-serializers" "^0.9.0" -"@neonevm/token-transfer-core@4.0.0-a2": - version "4.0.0-a2" - resolved "https://registry.yarnpkg.com/@neonevm/token-transfer-core/-/token-transfer-core-4.0.0-a2.tgz#021791c8a05cd83862b8cdb9684478cf9d422f45" - integrity sha512-8npgOy0W81HaRoyxnVDWWjrW1CJ6sPtT7qDYA4j/Djl5Z3+1WgJtZpt+2T94l3cCcRwNhPK7LCrR1CaGW5ZpBw== - dependencies: - "@solana/spl-token" "^0.3.8" - "@solana/web3.js" "^1.77.3" - big.js "^6.2.1" - web3-utils "^4.1.0" - -"@neonevm/token-transfer-ethers@4.0.0-a2": - version "4.0.0-a2" - resolved "https://registry.yarnpkg.com/@neonevm/token-transfer-ethers/-/token-transfer-ethers-4.0.0-a2.tgz#9b77bdba2e2e764f3344bcc60567d45f25c15b9b" - integrity sha512-ecfUH8nKrbRFfpbUbZN3Qika/l2UwoFc08Fvs0rVLPwV9T81XWEYDBxt5ExPI22N1kt9ynKG+vYlEl78+Qjhbg== - dependencies: - "@ethersproject/abi" "~5.7.0" - "@ethersproject/abstract-provider" "~5.7.0" - "@ethersproject/abstract-signer" "~5.7.0" - "@ethersproject/address" "~5.7.0" - "@ethersproject/bignumber" "^5.7.0" - "@ethersproject/constants" "~5.7.0" - "@ethersproject/contracts" "~5.7.0" - "@ethersproject/providers" "~5.7.0" - "@ethersproject/units" "~5.7.0" - "@ethersproject/wallet" "^5.7.0" - "@neonevm/token-transfer-core" "4.0.0-a2" - "@solana/spl-token" "^0.3.8" - "@solana/web3.js" "^1.77.3" - -"@neonevm/token-transfer-web3@4.0.0-a2": - version "4.0.0-a2" - resolved "https://registry.yarnpkg.com/@neonevm/token-transfer-web3/-/token-transfer-web3-4.0.0-a2.tgz#5c3d5cbf430693170acec30aabfa1417d847c3a8" - integrity sha512-+7E2DBTUdaqhrGDfovPr07+BKXQ00Y2v2vadZyWtYAdt7qykXXW5OOIbeQttpMzRXIH6euiqiqrXpiQbYAbmAQ== - dependencies: - "@neonevm/token-transfer-core" "4.0.0-a2" - "@solana/spl-token" "^0.3.8" - "@solana/web3.js" "^1.77.3" - web3-core "^4.3.2" - web3-eth "^4.3.1" - web3-eth-accounts "^4.1.0" - web3-eth-contract "^4.1.4" - web3-types "^1.3.1" - web3-utils "^4.1.0" - "@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1": version "5.1.1-v1" resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/eslint-scope-5-internals/-/eslint-scope-5-internals-5.1.1-v1.tgz#dbf733a965ca47b1973177dc0bb6c889edcfb129"