Skip to content

Commit

Permalink
refactor provider (#728)
Browse files Browse the repository at this point in the history
* refactor provider

* update task handling

* update confirmation

* Update vitest.config.e2e.ts

* rename

* lint

* fix

* update test
  • Loading branch information
ermalkaleci authored May 18, 2023
1 parent e3c5dde commit 966862e
Show file tree
Hide file tree
Showing 26 changed files with 292 additions and 303 deletions.
2 changes: 1 addition & 1 deletion docker/eth-providers-test.Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,4 @@ WORKDIR /app

ENV ENDPOINT_URL=ws://mandala-node:9944
ENV ETH_RPC=http://eth-rpc-adapter-server:8545
CMD yarn e2e:feed-tx; yarn workspace @acala-network/eth-providers run test:CI
CMD yarn e2e:feed-tx; yarn workspace @acala-network/eth-providers run test:e2e
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
"start:eth-rpc-adapter": "docker compose up --build -- eth-rpc-adapter-ready",
"e2e:feed-tx": "yarn workspace evm-waffle-example-dex run test",
"e2e:feed-tx-2": "yarn workspace evm-waffle-example-e2e run test",
"e2e:eth-providers": "yarn start:chain; yarn e2e:feed-tx; yarn start:eth-rpc-adapter; yarn workspace @acala-network/eth-providers run test:CI",
"e2e:eth-providers": "yarn start:chain; yarn e2e:feed-tx; yarn start:eth-rpc-adapter; yarn workspace @acala-network/eth-providers run test:e2e",
"e2e:eth-rpc-adapter": "docker compose up --build -- eth-rpc-adapter-with-subql-ready; yarn e2e:feed-tx; yarn e2e:feed-tx-2; yarn workspace @acala-network/eth-rpc-adapter run test:CI",
"e2e:waffle": "yarn start:chain; yarn run test:waffle",
"e2e:truffle": "yarn start:eth-rpc-adapter; cd examples/truffle-tutorials; yarn install --immutable; yarn test:mandala",
Expand Down
13 changes: 6 additions & 7 deletions packages/bodhi/src/BodhiSigner.ts
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ export class BodhiSigner extends AbstractSigner implements TypedDataSigner {
return new BodhiSigner(provider, pair.address, new SubstrateSigner(provider.api.registry, pair));
}

connect(provider: BodhiProvider): BodhiSigner {
connect(_provider: BodhiProvider): BodhiSigner {
return logger.throwError('cannot alter JSON-RPC Signer connection', Logger.errors.UNSUPPORTED_OPERATION, {
operation: 'connect',
});
Expand Down Expand Up @@ -185,7 +185,7 @@ export class BodhiSigner extends AbstractSigner implements TypedDataSigner {
});
}

signTransaction(transaction: Deferrable<TransactionRequest>): Promise<string> {
signTransaction(_transaction: Deferrable<TransactionRequest>): Promise<string> {
return logger.throwError('signing transactions is unsupported', Logger.errors.UNSUPPORTED_OPERATION, {
operation: 'signTransaction',
});
Expand Down Expand Up @@ -278,7 +278,7 @@ export class BodhiSigner extends AbstractSigner implements TypedDataSigner {
data: dataToString(data),
value: BigNumber.from(tx.value || '0'),
chainId: +this.provider.api.consts.evmAccounts.chainId.toString(),
wait: (confirmations?: number): Promise<TransactionReceipt> => {
wait: (_confirmations?: number): Promise<TransactionReceipt> => {
const hex = result.status.isInBlock
? result.status.asInBlock.toHex()
: result.status.asFinalized.toHex();
Expand Down Expand Up @@ -332,10 +332,9 @@ export class BodhiSigner extends AbstractSigner implements TypedDataSigner {
}

async _signTypedData(
domain: TypedDataDomain,
types: Record<string, Array<TypedDataField>>,
// eslint-disable-next-line @typescript-eslint/no-explicit-any
value: Record<string, any>
_domain: TypedDataDomain,
_types: Record<string, Array<TypedDataField>>,
_value: Record<string, any>
): Promise<string> {
return logger.throwError('_signTypedData is unsupported', Logger.errors.UNSUPPORTED_OPERATION, {
operation: '_signTypedData',
Expand Down
2 changes: 1 addition & 1 deletion packages/eth-providers/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
"clean": "rm -rf lib tsconfig.tsbuildinfo",
"build": "tsc --build ./tsconfig.json",
"gql:typegen": "graphql-codegen --config codegen.yml",
"test:CI": "vitest --run --config vitest.config.e2e.ts"
"test:e2e": "vitest --run --config vitest.config.e2e.ts"
},
"peerDependencies": {
"@acala-network/api": "~5.0.3-0",
Expand Down
28 changes: 2 additions & 26 deletions packages/eth-providers/src/__tests__/e2e/evm-rpc-provider.test.ts
Original file line number Diff line number Diff line change
@@ -1,41 +1,17 @@
import { DUMMY_BLOCK_HASH } from '../../consts';
import { EvmRpcProvider } from '../../rpc-provider';
import { afterAll, describe, expect, it } from 'vitest';
import { runWithTiming, sleep } from '../../utils';
import dotenv from 'dotenv';

dotenv.config();

const endpoint = process.env.ENDPOINT_URL || 'ws://127.0.0.1:9944';
const ACALA_NODE_URL = 'wss://acala-rpc-0.aca-api.network';
const ACALA_SUBQL = 'https://subql-query-acala.aca-api.network';

describe('connect random', () => {
it('should throw error', async () => {
try {
const provider = EvmRpcProvider.from('ws://192.-');
await provider.isReady();
} catch (e) {
expect((e as any).type).to.equal('error');
}
});
});

describe('initilization', async () => {
const provider = EvmRpcProvider.from(ACALA_NODE_URL);
await provider.isReady();

afterAll(async () => {
await sleep(5000);
await provider.disconnect();
});

it('should already has initial block number and hash', async () => {
expect(provider.latestBlockNumber).to.gt(-1);
expect(provider.latestFinalizedBlockNumber).to.gt(-1);
expect(await provider.getBlockNumber()).to.gt(-1);
expect(provider.latestBlockHash).not.to.equal(DUMMY_BLOCK_HASH);
expect(provider.latestFinalizedBlockHash).not.to.equal(DUMMY_BLOCK_HASH);
const provider = EvmRpcProvider.from('ws://192.-');
await expect(provider.isReady()).rejects.toThrowError();
});
});

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,13 @@ describe('TransactionReceipt', async () => {
afterAll(async () => {
await sleep(5000);
await provider.disconnect();
await sleep(1000);
});

it('getTransactionReceipt', async () => {
const account1 = evmAccounts[0];
const account2 = evmAccounts[1];

const account1Wallet = new Wallet(account1.privateKey).connect(provider as any);
const account1Wallet = new Wallet(account1.privateKey).connect(provider);
const acaContract = new Contract(ADDRESS.ACA, ACAABI.abi, account1Wallet);

const pairs = createTestPairs();
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import { Contract, ContractFactory } from 'ethers';
import { Wallet } from '@ethersproject/wallet';
import { afterAll, describe, expect, it } from 'vitest';
import { formatEther, hexZeroPad, parseEther } from 'ethers/lib/utils';
import { hexZeroPad, parseEther } from 'ethers/lib/utils';

import { AcalaJsonRpcProvider } from '../../json-rpc-provider';
import { JsonRpcProvider } from '@ethersproject/providers';
import { sleep } from '../../utils';
import echoJson from '../abis/Echo.json';
import erc20Json from '../abis/IERC20.json';
Expand Down Expand Up @@ -127,7 +126,7 @@ describe('JsonRpcProvider', async () => {
expect(name).to.eq('USD Coin');
expect(symbol).to.eq('USDC');
expect(decimals).to.eq(6);
expect(totalSupply.gt(0)).to.be.true;
expect(totalSupply.gt(0)).toBeTruthy();
});
});

Expand Down Expand Up @@ -175,7 +174,7 @@ describe('JsonRpcProvider', async () => {
provider.on('block', onBlock);
});

expect(blockNumber).to.be.greaterThan(0);
expect(blockNumber).to.be.eq(curBlockNumber + 1);
});

// TODO: need to setup whole stack
Expand Down
3 changes: 1 addition & 2 deletions packages/eth-providers/src/__tests__/e2e/parseBlock.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -100,11 +100,10 @@ describe.concurrent('getAllReceiptsAtBlock', () => {
});

afterAll(async () => {
await sleep(5000);
await sleep(10_000);
await apiK.disconnect();
await apiA.disconnect();
await apiM.disconnect();
await sleep(5000);
});

describe.concurrent('transfer kar', async () => {
Expand Down
6 changes: 3 additions & 3 deletions packages/eth-providers/src/__tests__/e2e/safemode.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ describe('safe mode', () => {
safeProvider.getBlockData('latest'),
]);
expect(curBlock.hash).to.equal(curFinalizedBlock.hash);
expect(curBlock.hash).to.equal(safeProvider.latestFinalizedBlockHash);
expect(curBlock.hash).to.equal(await safeProvider.finalizedBlockHash);

// real test
await newBlock(false);
Expand All @@ -62,7 +62,7 @@ describe('safe mode', () => {
safeProvider.getBlockData('latest'),
]);
expect(curBlock.hash).to.equal(curFinalizedBlock.hash);
expect(curBlock.hash).to.equal(safeProvider.latestFinalizedBlockHash);
expect(curBlock.hash).to.equal(await safeProvider.finalizedBlockHash);

// make sure next block is not finalized
await newBlock(false);
Expand All @@ -89,7 +89,7 @@ describe('safe mode', () => {
-------------------------- */
// ①
expect(await safeProvider._ensureSafeModeBlockTagFinalization('latest')).to.equal(
safeProvider.latestFinalizedBlockHash
await safeProvider.finalizedBlockHash
);
expect(await safeProvider._ensureSafeModeBlockTagFinalization('latest')).to.equal(curFinalizedBlock.hash);

Expand Down
26 changes: 12 additions & 14 deletions packages/eth-providers/src/__tests__/e2e/tx.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,9 @@ describe('transaction tests', () => {
const account1 = evmAccounts[0];
const account2 = evmAccounts[1];
const account3 = evmAccounts[2];
const account4 = evmAccounts[3];
const wallet1 = new Wallet(account1.privateKey).connect(provider as any);
const wallet2 = new Wallet(account2.privateKey).connect(provider as any);
const wallet3 = new Wallet(account3.privateKey).connect(provider as any);
const wallet4 = new Wallet(account4.privateKey).connect(provider as any);

let chainId: number;
let storageByteDeposit: bigint;
Expand Down Expand Up @@ -100,7 +98,7 @@ describe('transaction tests', () => {
value: BigNumber.from(amount),
});

const data = provider.validSubstrateResources({
const _data = provider.validSubstrateResources({
gasLimit: params.gasLimit,
gasPrice: params.gasPrice,
});
Expand Down Expand Up @@ -363,7 +361,7 @@ describe('transaction tests', () => {

describe('with legacy EIP-155 signature', () => {
it('has correct balance after transfer', async () => {
const balance1 = await queryBalance(account1.evmAddress);
const _balance1 = await queryBalance(account1.evmAddress);
const balance2 = await queryBalance(account2.evmAddress);

const transferTX: AcalaEvmTX = {
Expand All @@ -372,12 +370,12 @@ describe('transaction tests', () => {
};

const rawTx = await wallet1.signTransaction(transferTX);
const parsedTx = parseTransaction(rawTx);
const _parsedTx = parseTransaction(rawTx);

const response = await provider.sendTransaction(rawTx);
const receipt = await response.wait(0);
const _receipt = await response.wait(0);

const _balance1 = await queryBalance(account1.evmAddress);
const __balance1 = await queryBalance(account1.evmAddress);
const _balance2 = await queryBalance(account2.evmAddress);

// TODO: check sender's balance is correct
Expand All @@ -388,7 +386,7 @@ describe('transaction tests', () => {

describe('with EIP-1559 signature', () => {
it('has correct balance after transfer', async () => {
const balance1 = await queryBalance(account1.evmAddress);
const _balance1 = await queryBalance(account1.evmAddress);
const balance2 = await queryBalance(account2.evmAddress);

const priorityFee = BigNumber.from(2);
Expand All @@ -402,12 +400,12 @@ describe('transaction tests', () => {
};

const rawTx = await wallet1.signTransaction(transferTX);
const parsedTx = parseTransaction(rawTx);
const _parsedTx = parseTransaction(rawTx);

const response = await provider.sendTransaction(rawTx);
const receipt = await response.wait(0);
const _receipt = await response.wait(0);

const _balance1 = await queryBalance(account1.evmAddress);
const __balance1 = await queryBalance(account1.evmAddress);
const _balance2 = await queryBalance(account2.evmAddress);

// TODO: check sender's balance is correct
Expand All @@ -418,7 +416,7 @@ describe('transaction tests', () => {

describe('with EIP-712 signature', () => {
it('has correct balance after transfer', async () => {
const balance1 = await queryBalance(account1.evmAddress);
const _balance1 = await queryBalance(account1.evmAddress);
const balance2 = await queryBalance(account2.evmAddress);

const gasLimit = BigNumber.from('210000');
Expand All @@ -438,11 +436,11 @@ describe('transaction tests', () => {

const sig = signTransaction(account1.privateKey, transferTX);
const rawTx = serializeTransaction(transferTX, sig);
const parsedTx = parseTransaction(rawTx);
const _parsedTx = parseTransaction(rawTx);

await provider.sendTransaction(rawTx);

const _balance1 = await queryBalance(account1.evmAddress);
const __balance1 = await queryBalance(account1.evmAddress);
const _balance2 = await queryBalance(account2.evmAddress);

// TODO: check sender's balance is correct
Expand Down
5 changes: 4 additions & 1 deletion packages/eth-providers/src/__tests__/testUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,10 @@ type MochBlock = {
};
type MochChain = MochBlock[];

export const randHash = (): string => Math.floor(Math.random() * 66666666).toString(16);
export const randHash = (): string => {
const hash = Math.floor(Math.random() * 66666666).toString(16);
return '0x' + hash.padStart(64, '0');
};

export const randReceipt = (blockNumber: number, blockHash: string): FullReceipt =>
({
Expand Down
16 changes: 7 additions & 9 deletions packages/eth-providers/src/__tests__/utils.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -107,8 +107,6 @@ describe('runwithTiming', () => {
});

it('returns correct error for running errors', async () => {
const runningTime = 1000;
const funcRes = 'vegeta';
const ERR_MSG = 'goku';
const f = async () => {
throw new Error(ERR_MSG);
Expand Down Expand Up @@ -198,7 +196,7 @@ describe('getHealthResult', () => {
cacheInfo,
curFinalizedHeight,
ethCallTiming,
listenersCount: { newHead: 0, logs: 0 },
listenersCount: { newHead: 0, newFinalizedHead: 0, logs: 0 },
});

expect(res).toEqual(expect.objectContaining({
Expand All @@ -221,7 +219,7 @@ describe('getHealthResult', () => {
cacheInfo,
curFinalizedHeight,
ethCallTiming,
listenersCount: { newHead: 0, logs: 0 },
listenersCount: { newHead: 0, newFinalizedHead: 0, logs: 0 },
});

expect(res).toEqual(expect.objectContaining({
Expand Down Expand Up @@ -251,7 +249,7 @@ describe('getHealthResult', () => {
cacheInfo,
curFinalizedHeight: curFinalizedHeightBad,
ethCallTiming,
listenersCount: { newHead: 0, logs: 0 },
listenersCount: { newHead: 0, newFinalizedHead: 0, logs: 0 },
});

expect(res).toEqual(expect.objectContaining({
Expand Down Expand Up @@ -279,7 +277,7 @@ describe('getHealthResult', () => {
},
curFinalizedHeight,
ethCallTiming,
listenersCount: { newHead: 0, logs: 0 },
listenersCount: { newHead: 0, newFinalizedHead: 0, logs: 0 },
});

expect(res).toEqual(expect.objectContaining({
Expand All @@ -306,7 +304,7 @@ describe('getHealthResult', () => {
cacheInfo,
curFinalizedHeight,
ethCallTiming: ethCallTimingBad,
listenersCount: { newHead: 0, logs: 0 },
listenersCount: { newHead: 0, newFinalizedHead: 0, logs: 0 },
});

expect(res).toEqual(expect.objectContaining({
Expand Down Expand Up @@ -335,7 +333,7 @@ describe('getHealthResult', () => {
cacheInfo,
curFinalizedHeight,
ethCallTiming: ethCallTimingBad,
listenersCount: { newHead: 0, logs: 0 },
listenersCount: { newHead: 0, newFinalizedHead: 0, logs: 0 },
});

expect(res).toEqual(expect.objectContaining({
Expand All @@ -360,7 +358,7 @@ describe('getHealthResult', () => {
cacheInfo,
curFinalizedHeight,
ethCallTiming: ethCallTimingBad,
listenersCount: { newHead: 0, logs: 0 },
listenersCount: { newHead: 0, newFinalizedHead: 0, logs: 0 },
});

expect(res).toEqual(expect.objectContaining({
Expand Down
Loading

0 comments on commit 966862e

Please sign in to comment.