From ff95d688f9abbf182217eec714e502a799596973 Mon Sep 17 00:00:00 2001 From: shunjizhan Date: Wed, 1 Nov 2023 17:46:04 +0800 Subject: [PATCH 1/8] add shortcuit break for estimate gas --- packages/eth-providers/src/base-provider.ts | 88 +++++++++++++-------- 1 file changed, 53 insertions(+), 35 deletions(-) diff --git a/packages/eth-providers/src/base-provider.ts b/packages/eth-providers/src/base-provider.ts index d1522261e..e47c01785 100644 --- a/packages/eth-providers/src/base-provider.ts +++ b/packages/eth-providers/src/base-provider.ts @@ -689,7 +689,7 @@ export abstract class BaseProvider extends AbstractProvider { const blockTag = await this._ensureSafeModeBlockTagFinalization(await parseBlockTag(_blockTag)); const [address, blockHash] = await Promise.all([ - this._getAddress(addressOrName), + addressOrName, this._getBlockHash(blockTag), ]); @@ -740,7 +740,7 @@ export abstract class BaseProvider extends AbstractProvider { ): Promise => { const resolvedBlockTag = await blockTag; - const address = await this._getAddress(addressOrName); + const address = await addressOrName; const [substrateAddress, blockHash] = await Promise.all([ this.getSubstrateAddress(address), this._getBlockHash(blockTag), @@ -765,7 +765,7 @@ export abstract class BaseProvider extends AbstractProvider { if (blockTag === 'pending') return '0x'; const [address, blockHash] = await Promise.all([ - this._getAddress(addressOrName), + addressOrName, this._getBlockHash(blockTag), ]); @@ -862,7 +862,7 @@ export abstract class BaseProvider extends AbstractProvider { const blockTag = await this._ensureSafeModeBlockTagFinalization(await parseBlockTag(_blockTag)); const [address, blockHash, resolvedPosition] = await Promise.all([ - this._getAddress(addressOrName), + addressOrName, this._getBlockHash(blockTag), Promise.resolve(position).then(hexValue), ]); @@ -1108,44 +1108,67 @@ export abstract class BaseProvider extends AbstractProvider { storageLimit: STORAGE_LIMIT, }; - const { used_gas: usedGas, used_storage: usedStorage } = await this._ethCall(txRequest); + const { + used_gas: usedGas, + used_storage: usedStorage, + } = await this._ethCall(txRequest); + + /* ---------- + try using a gasLimit slightly more than actual used gas + if it already works, which should be the usual case + we don't need to waste time doing binary search + ---------- */ + let gasLimit = Math.floor(usedGas * 1.2); + let gasAlreadyWorks = true; + try { + await this._ethCall({ + ...txRequest, + gasLimit, + }); + } catch { + gasAlreadyWorks = false; + } - // binary search the best passing gasLimit - let lowest = MIN_GAS_LIMIT; - let highest = MAX_GAS_LIMIT; - let mid = Math.min(usedGas * 3, Math.floor((lowest + highest) / 2)); - let prevHighest = highest; - while (highest - lowest > 1) { - try { - await this._ethCall({ - ...txRequest, - gasLimit: mid, - }); - highest = mid; - - if ((prevHighest - highest) / prevHighest < 0.1) break; - prevHighest = highest; - } catch (e: any) { - if ((e.message as string).includes('revert') || (e.message as string).includes('outOfGas')) { - lowest = mid; - } else { - throw e; + if (!gasAlreadyWorks) { + // need to binary search the best passing gasLimit + let lowest = MIN_GAS_LIMIT; + let highest = MAX_GAS_LIMIT; + let mid = Math.min(usedGas * 3, Math.floor((lowest + highest) / 2)); + let prevHighest = highest; + while (highest - lowest > 1) { + try { + await this._ethCall({ + ...txRequest, + gasLimit: mid, + }); + highest = mid; + + if ((prevHighest - highest) / prevHighest < 0.1) break; + prevHighest = highest; + } catch (e: any) { + if ((e.message as string).includes('revert') || (e.message as string).includes('outOfGas')) { + lowest = mid; + } else { + throw e; + } } + + mid = Math.floor((highest + lowest) / 2); } - mid = Math.floor((highest + lowest) / 2); + gasLimit = highest; } return { - usedGas: BigNumber.from(usedGas), // actual used gas - gasLimit: BigNumber.from(highest), // gasLimit to pass execution + usedGas: BigNumber.from(usedGas), // actual used gas + gasLimit: BigNumber.from(gasLimit), // gasLimit to pass execution usedStorage: BigNumber.from(usedStorage), }; }; getSubstrateAddress = async (addressOrName: string, blockTag?: BlockTag | Promise): Promise => { const [address, blockHash] = await Promise.all([ - this._getAddress(addressOrName), + addressOrName, this._getBlockHash(blockTag), ]); @@ -1171,7 +1194,7 @@ export abstract class BaseProvider extends AbstractProvider { } const [address, blockHash] = await Promise.all([ - this._getAddress(addressOrName), + addressOrName, this._getBlockHash(blockTag), ]); @@ -1628,11 +1651,6 @@ export abstract class BaseProvider extends AbstractProvider { } }; - _getAddress = async (addressOrName: string | Promise): Promise => { - addressOrName = await addressOrName; - return addressOrName; - }; - // from chain only getReceiptAtBlockFromChain = async ( txHash: string | Promise, From 0585c5fd61cc1413713c289d10e991949eed8344 Mon Sep 17 00:00:00 2001 From: shunjizhan Date: Wed, 1 Nov 2023 18:15:24 +0800 Subject: [PATCH 2/8] update test snaphost --- packages/eth-rpc-adapter/src/__tests__/e2e/endpoint.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/eth-rpc-adapter/src/__tests__/e2e/endpoint.test.ts b/packages/eth-rpc-adapter/src/__tests__/e2e/endpoint.test.ts index 09468a3a2..9678267a9 100644 --- a/packages/eth-rpc-adapter/src/__tests__/e2e/endpoint.test.ts +++ b/packages/eth-rpc-adapter/src/__tests__/e2e/endpoint.test.ts @@ -1340,7 +1340,7 @@ describe('endpoint', () => { ]) ).data.result; expect(rawRes.gasPrice).to.equal('0x2e90f20000'); - expect(rawRes.gasLimit).to.equal('0x5728'); + expect(rawRes.gasLimit).to.equal('0x6270'); }); }); From 9e081e8cfc330465b962bfa7bcb68b6163b0e965 Mon Sep 17 00:00:00 2001 From: shunjizhan Date: Fri, 3 Nov 2023 14:34:30 +0800 Subject: [PATCH 3/8] fix odd gas calculation --- packages/bodhi/src/BodhiSigner.ts | 63 ++++++--------------- packages/eth-providers/package.json | 4 +- packages/eth-providers/src/base-provider.ts | 9 ++- yarn.lock | 34 +++++------ 4 files changed, 39 insertions(+), 71 deletions(-) diff --git a/packages/bodhi/src/BodhiSigner.ts b/packages/bodhi/src/BodhiSigner.ts index f668d965e..686f9e24a 100644 --- a/packages/bodhi/src/BodhiSigner.ts +++ b/packages/bodhi/src/BodhiSigner.ts @@ -208,58 +208,27 @@ export class BodhiSigner extends AbstractSigner implements TypedDataSigner { ..._transaction, }; - const resources = await this.provider.estimateResources(transaction); - - let gasLimit: BigNumber; - let storageLimit: BigNumber; - - let totalLimit = await transaction.gasLimit; - - if (totalLimit === null || totalLimit === undefined) { - gasLimit = resources.gasLimit; - storageLimit = resources.usedStorage; - totalLimit = resources.gasLimit.add(resources.usedStorage); - } else { - const estimateTotalLimit = resources.gasLimit.add(resources.usedStorage); - gasLimit = BigNumber.from(totalLimit).mul(resources.gasLimit).div(estimateTotalLimit).add(1); - storageLimit = BigNumber.from(totalLimit).mul(resources.usedStorage).div(estimateTotalLimit).add(1); - } - - transaction.gasLimit = totalLimit; + const { gasLimit, usedStorage: storageLimit } = await this.provider.estimateResources(transaction); const tx = await this.populateTransaction(transaction); - const data = tx.data?.toString() ?? '0x'; - const from = tx.from; - - if (!data) { - return logger.throwError('Request data not found'); - } - if (!from) { - return logger.throwError('Request from not found'); - } + const createParams = [ + data, + toBN(tx.value), + toBN(gasLimit), + toBN(storageLimit.isNegative() ? 0 : storageLimit), + (tx.accessList as any) || [], + ] as const; - let extrinsic: SubmittableExtrinsic<'promise'>; + const callParams = [ + tx.to, + ...createParams, + ] as const; - if (!tx.to) { - extrinsic = this.provider.api.tx.evm.create( - data, - toBN(tx.value), - toBN(gasLimit), - toBN(storageLimit.isNegative() ? 0 : storageLimit), - (tx.accessList as any) || [] - ); - } else { - extrinsic = this.provider.api.tx.evm.call( - tx.to, - data, - toBN(tx.value), - toBN(gasLimit), - toBN(storageLimit.isNegative() ? 0 : storageLimit), - (tx.accessList as any) || [] - ); - } + const extrinsic = tx.to + ? this.provider.api.tx.evm.call(...callParams) + : this.provider.api.tx.evm.create(...createParams); await extrinsic.signAsync(this.substrateAddress); @@ -270,7 +239,7 @@ export class BodhiSigner extends AbstractSigner implements TypedDataSigner { .then(() => { resolve({ hash: extrinsic.hash.toHex(), - from: from || '', + from: tx.from || '', confirmations: 0, nonce: toBN(tx.nonce).toNumber(), gasLimit: BigNumber.from(tx.gasLimit || '0'), diff --git a/packages/eth-providers/package.json b/packages/eth-providers/package.json index 788e9dc6d..1d919437f 100644 --- a/packages/eth-providers/package.json +++ b/packages/eth-providers/package.json @@ -10,7 +10,7 @@ "test:e2e": "vitest --run --config vitest.config.e2e.ts" }, "peerDependencies": { - "@acala-network/api": "~6.0.0", + "@acala-network/api": "~6.0.3", "@polkadot/api": "^10.9.1" }, "dependencies": { @@ -24,7 +24,7 @@ "lru-cache": "~7.8.2" }, "devDependencies": { - "@acala-network/api": "~6.0.0", + "@acala-network/api": "~6.0.3", "@types/bn.js": "~5.1.0", "@types/dd-trace": "^0.9.0", "@types/lru-cache": "~7.6.1", diff --git a/packages/eth-providers/src/base-provider.ts b/packages/eth-providers/src/base-provider.ts index e47c01785..4da463e7a 100644 --- a/packages/eth-providers/src/base-provider.ts +++ b/packages/eth-providers/src/base-provider.ts @@ -263,7 +263,7 @@ export interface CallInfo { fatal?: any; }; value: string; - used_gas: number; + used_gas: string; used_storage: number; logs: Log[]; }; @@ -1108,10 +1108,9 @@ export abstract class BaseProvider extends AbstractProvider { storageLimit: STORAGE_LIMIT, }; - const { - used_gas: usedGas, - used_storage: usedStorage, - } = await this._ethCall(txRequest); + const gasInfo = await this._ethCall(txRequest); + const usedGas = BigNumber.from(gasInfo.used_gas).toNumber(); + const usedStorage =gasInfo.used_storage; /* ---------- try using a gasLimit slightly more than actual used gas diff --git a/yarn.lock b/yarn.lock index 6568a88c6..85ee1a527 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12,26 +12,26 @@ __metadata: languageName: node linkType: hard -"@acala-network/api-derive@npm:6.0.0": - version: 6.0.0 - resolution: "@acala-network/api-derive@npm:6.0.0" +"@acala-network/api-derive@npm:6.0.3": + version: 6.0.3 + resolution: "@acala-network/api-derive@npm:6.0.3" dependencies: - "@acala-network/types": 6.0.0 + "@acala-network/types": 6.0.3 peerDependencies: "@polkadot/api": ^10.9.1 - checksum: 8656e7b65bfef498cac780d7beb0d3e43a59b5343d09a8b28ce7ec3537494b7477b0162a01b4f6c53260cfa7fa63c59e311b3a254020da6a104832826e6099ed + checksum: 371c1a3b0d2cc980667a494ae12f04b7d57feab8f0a764a1ec71f2e58d60259f1a0fc663448c93cb51f673cd10120eb12b9d4ae3c1361fcebce815f0505852bf languageName: node linkType: hard -"@acala-network/api@npm:~6.0.0": - version: 6.0.0 - resolution: "@acala-network/api@npm:6.0.0" +"@acala-network/api@npm:~6.0.3": + version: 6.0.3 + resolution: "@acala-network/api@npm:6.0.3" dependencies: - "@acala-network/api-derive": 6.0.0 - "@acala-network/types": 6.0.0 + "@acala-network/api-derive": 6.0.3 + "@acala-network/types": 6.0.3 peerDependencies: "@polkadot/api": ^10.9.1 - checksum: 5ec48f880b80ad7a9acf070dbd90938e6aae8248407a283c19560e80b21179fae35f4e4d828d9f1ac300be4e119800ece834df2c96f02dbc35e73be1e83da8ad + checksum: 8d9f018e8780368f7cf62f8675d8895543ff632344607880a711b195f8234e046541cfb5a9a81abdaec1618dd6b00d36b1f00e6d26b5029886b46d1a4ae9a04e languageName: node linkType: hard @@ -69,7 +69,7 @@ __metadata: version: 0.0.0-use.local resolution: "@acala-network/eth-providers@workspace:packages/eth-providers" dependencies: - "@acala-network/api": ~6.0.0 + "@acala-network/api": ~6.0.3 "@acala-network/contracts": 4.3.4 "@acala-network/eth-transactions": "workspace:*" "@types/bn.js": ~5.1.0 @@ -85,7 +85,7 @@ __metadata: lru-cache: ~7.8.2 vitest: 0.34.2 peerDependencies: - "@acala-network/api": ~6.0.0 + "@acala-network/api": ~6.0.3 "@polkadot/api": ^10.9.1 languageName: unknown linkType: soft @@ -150,12 +150,12 @@ __metadata: languageName: unknown linkType: soft -"@acala-network/types@npm:6.0.0": - version: 6.0.0 - resolution: "@acala-network/types@npm:6.0.0" +"@acala-network/types@npm:6.0.3": + version: 6.0.3 + resolution: "@acala-network/types@npm:6.0.3" peerDependencies: "@polkadot/api": ^10.9.1 - checksum: d5187f6eccf46e094cda7a69e23c6fd1f8221da4f1e7d30964c9769bb40795e0aa25c5a400c51b3ae4a2bb9dcc47996738febe08b7b4f2378ece7aa14461a74d + checksum: ce2ce43ae8cbfa155ef5f2811253cad9f19f3e32b1b7a71437c0741855dca3b1e16cc0e48ede2b46d7d256adfe3ff2b5f652cf0e8e2dc1803f5ef9aba6ac3659 languageName: node linkType: hard From 5f2335730cb3c8863d98dc4714408dc4c1d14c8c Mon Sep 17 00:00:00 2001 From: shunjizhan Date: Fri, 3 Nov 2023 14:55:05 +0800 Subject: [PATCH 4/8] add tests --- packages/eth-providers/src/base-provider.ts | 2 +- .../src/__tests__/e2e/consts.ts | 23 +++++++++++++++++++ .../src/__tests__/e2e/endpoint.test.ts | 20 ++++++++++++++++ .../src/__tests__/e2e/utils.ts | 10 +++++++- 4 files changed, 53 insertions(+), 2 deletions(-) diff --git a/packages/eth-providers/src/base-provider.ts b/packages/eth-providers/src/base-provider.ts index 4da463e7a..3da4851c4 100644 --- a/packages/eth-providers/src/base-provider.ts +++ b/packages/eth-providers/src/base-provider.ts @@ -1110,7 +1110,7 @@ export abstract class BaseProvider extends AbstractProvider { const gasInfo = await this._ethCall(txRequest); const usedGas = BigNumber.from(gasInfo.used_gas).toNumber(); - const usedStorage =gasInfo.used_storage; + const usedStorage = gasInfo.used_storage; /* ---------- try using a gasLimit slightly more than actual used gas diff --git a/packages/eth-rpc-adapter/src/__tests__/e2e/consts.ts b/packages/eth-rpc-adapter/src/__tests__/e2e/consts.ts index 0055831b1..5e7d3a3d6 100644 --- a/packages/eth-rpc-adapter/src/__tests__/e2e/consts.ts +++ b/packages/eth-rpc-adapter/src/__tests__/e2e/consts.ts @@ -767,3 +767,26 @@ export const ERC20_ABI = [ type: 'event', }, ]; + +/* ----- + contract GasMonster { + uint256 x = 1; + function run() external { + require(gasleft() > 1010000, "gaslimit not enough"); + x = x + 1; + } + } + ----- */ +export const GASMONSTER_BYTECODE = '6080604052600160005534801561001557600080fd5b506101d8806100256000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063c040622614610030575b600080fd5b61003861003a565b005b620f69505a1161007f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610076906100b9565b60405180910390fd5b600160005461008e91906100ea565b600081905550565b60006100a36013836100d9565b91506100ae82610179565b602082019050919050565b600060208201905081810360008301526100d281610096565b9050919050565b600082825260208201905092915050565b60006100f582610140565b915061010083610140565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156101355761013461014a565b5b828201905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f6761736c696d6974206e6f7420656e6f7567680000000000000000000000000060008201525056fea26469706673582212203f50c8d7ac2c3bcf6ebf8adbadba541fff53382a169109676559aabee8a78ddf64736f6c63430008070033'; + +export const GASMONSTER_ABI = [ + { + inputs: [], + name: 'run', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, +]; + +export const GAS_MONSTER_GAS_REQUIRED = 1010000; diff --git a/packages/eth-rpc-adapter/src/__tests__/e2e/endpoint.test.ts b/packages/eth-rpc-adapter/src/__tests__/e2e/endpoint.test.ts index 9678267a9..bf6190d36 100644 --- a/packages/eth-rpc-adapter/src/__tests__/e2e/endpoint.test.ts +++ b/packages/eth-rpc-adapter/src/__tests__/e2e/endpoint.test.ts @@ -64,11 +64,13 @@ import { getNonce, RPC_URL, net_listening, + deployGasMonster, } from './utils'; import { ADDRESS_ALICE, DETERMINISTIC_SETUP_DEX_ADDRESS, + GAS_MONSTER_GAS_REQUIRED, KARURA_CONTRACT_CALL_TX_HASH, KARURA_CONTRACT_DEPLOY_TX_HASH, KARURA_SEND_KAR_TX_HASH, @@ -2119,4 +2121,22 @@ describe('endpoint', () => { expect(res).to.deep.equal(true); }); }); + + describe('eth_estimateGas', () => { + const provider = new AcalaJsonRpcProvider(RPC_URL); + const wallet = new Wallet(evmAccounts[0].privateKey, provider); + + it('can deal with weird gas contract', async () => { + const gm = await deployGasMonster(wallet); + const tx = await gm.populateTransaction.run(); + + const { gasLimit } = await estimateGas(tx); + const bbb = (gasLimit.toNumber() % 100000) / 100; + + // should be passing gasLimit instead of usedGas + expect(bbb).to.gt(GAS_MONSTER_GAS_REQUIRED / 30000); + + await (await gm.run()).wait(); // make sure running has no error + }); + }); }); diff --git a/packages/eth-rpc-adapter/src/__tests__/e2e/utils.ts b/packages/eth-rpc-adapter/src/__tests__/e2e/utils.ts index b2f4c76f5..22d3b5ae1 100644 --- a/packages/eth-rpc-adapter/src/__tests__/e2e/utils.ts +++ b/packages/eth-rpc-adapter/src/__tests__/e2e/utils.ts @@ -5,7 +5,7 @@ import { hexValue } from '@ethersproject/bytes'; import { parseEther } from 'ethers/lib/utils'; import axios from 'axios'; -import { ERC20_ABI, ERC20_BYTECODE, LogHexified } from './consts'; +import { ERC20_ABI, ERC20_BYTECODE, GASMONSTER_ABI, GASMONSTER_BYTECODE, LogHexified } from './consts'; import { JsonRpcError } from '../../server'; export const NODE_RPC_URL = process.env.ENDPOINT_URL || 'ws://127.0.0.1:9944'; @@ -114,3 +114,11 @@ export const deployErc20 = async (wallet: Signer) => { return token; }; + +export const deployGasMonster = async (wallet: Signer) => { + const GM = new ContractFactory(GASMONSTER_ABI, GASMONSTER_BYTECODE, wallet); + const gm = await GM.deploy(); + await gm.deployed(); + + return gm; +}; From c83837e249a7f2ae44c35de25ca10ab82a580e6f Mon Sep 17 00:00:00 2001 From: shunjizhan Date: Fri, 3 Nov 2023 15:31:37 +0800 Subject: [PATCH 5/8] fix lint and snapshot --- packages/bodhi/src/BodhiSigner.ts | 2 +- packages/eth-providers/src/__tests__/utils.test.ts | 2 +- packages/eth-rpc-adapter/src/__tests__/e2e/endpoint.test.ts | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/bodhi/src/BodhiSigner.ts b/packages/bodhi/src/BodhiSigner.ts index 686f9e24a..25ac18549 100644 --- a/packages/bodhi/src/BodhiSigner.ts +++ b/packages/bodhi/src/BodhiSigner.ts @@ -11,7 +11,7 @@ import { Deferrable } from '@ethersproject/properties'; import { KeyringPair } from '@polkadot/keyring/types'; import { Logger } from '@ethersproject/logger'; import { MultiSigner } from './MultiSigner'; -import { Signer, SubmittableExtrinsic } from '@polkadot/api/types'; +import { Signer } from '@polkadot/api/types'; import { SubmittableResult } from '@polkadot/api'; import { SubstrateSigner } from './SubstrateSigner'; import { TransactionRequest, TransactionResponse } from '@ethersproject/abstract-provider'; diff --git a/packages/eth-providers/src/__tests__/utils.test.ts b/packages/eth-providers/src/__tests__/utils.test.ts index 62b558266..e37d463ff 100644 --- a/packages/eth-providers/src/__tests__/utils.test.ts +++ b/packages/eth-providers/src/__tests__/utils.test.ts @@ -413,7 +413,7 @@ describe('eth call error handling', () => { describe('checkEvmExecutionError', () => { const commonData = { - used_gas: 0, + used_gas: '0x0', used_storage: 0, logs: [], }; diff --git a/packages/eth-rpc-adapter/src/__tests__/e2e/endpoint.test.ts b/packages/eth-rpc-adapter/src/__tests__/e2e/endpoint.test.ts index bf6190d36..54695c402 100644 --- a/packages/eth-rpc-adapter/src/__tests__/e2e/endpoint.test.ts +++ b/packages/eth-rpc-adapter/src/__tests__/e2e/endpoint.test.ts @@ -633,7 +633,7 @@ describe('endpoint', () => { blockNumber: '0xa', transactionIndex: '0x0', // gasPrice: '0x7b501b0da7', - gas: '0x1e8481', + gas: '0x1fd91', input: '0x3d8d96200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000e8d4a51000000000000000000000000000000000000000000000000000000000e8d4a51000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000001', v: '0x25', @@ -652,7 +652,7 @@ describe('endpoint', () => { blockNumber: '0x9', transactionIndex: '0x0', // gasPrice: '0x71ca23a4e3', - gas: '0x1e8481', + gas: '0x1fd91', input: '0x3d8d962000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000e8d4a510000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000010000000000000000000000000000000000000000000100000000000000000002', v: '0x25', @@ -671,7 +671,7 @@ describe('endpoint', () => { blockNumber: '0x6', transactionIndex: '0x0', // gasPrice: '0x7b3ad33de2', - gas: '0x1e8481', + gas: '0x1fd91', input: '0x6fc4b4e50000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000e8d4a510000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000001', v: '0x25', From 6a59d1620047cb04bde99aad73eaf8a5c0b72693 Mon Sep 17 00:00:00 2001 From: shunjizhan Date: Fri, 3 Nov 2023 15:51:15 +0800 Subject: [PATCH 6/8] fix --- packages/eth-rpc-adapter/src/__tests__/e2e/endpoint.test.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/eth-rpc-adapter/src/__tests__/e2e/endpoint.test.ts b/packages/eth-rpc-adapter/src/__tests__/e2e/endpoint.test.ts index 54695c402..21093dae4 100644 --- a/packages/eth-rpc-adapter/src/__tests__/e2e/endpoint.test.ts +++ b/packages/eth-rpc-adapter/src/__tests__/e2e/endpoint.test.ts @@ -633,7 +633,7 @@ describe('endpoint', () => { blockNumber: '0xa', transactionIndex: '0x0', // gasPrice: '0x7b501b0da7', - gas: '0x1fd91', + gas: '0x25a7f', input: '0x3d8d96200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000e8d4a51000000000000000000000000000000000000000000000000000000000e8d4a51000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000001', v: '0x25', @@ -652,7 +652,7 @@ describe('endpoint', () => { blockNumber: '0x9', transactionIndex: '0x0', // gasPrice: '0x71ca23a4e3', - gas: '0x1fd91', + gas: '0x25a7f', input: '0x3d8d962000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000e8d4a510000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000010000000000000000000000000000000000000000000100000000000000000002', v: '0x25', @@ -671,7 +671,7 @@ describe('endpoint', () => { blockNumber: '0x6', transactionIndex: '0x0', // gasPrice: '0x7b3ad33de2', - gas: '0x1fd91', + gas: '0x25a7f', input: '0x6fc4b4e50000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000e8d4a510000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000001', v: '0x25', From 3b88224b9ca1bf7498fd26ec0744d8bc93259189 Mon Sep 17 00:00:00 2001 From: shunjizhan Date: Fri, 3 Nov 2023 22:24:28 +0800 Subject: [PATCH 7/8] use bail 999 --- packages/eth-rpc-adapter/src/__tests__/e2e/endpoint.test.ts | 6 +++--- packages/eth-rpc-adapter/vitest.config.e2e.ts | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/eth-rpc-adapter/src/__tests__/e2e/endpoint.test.ts b/packages/eth-rpc-adapter/src/__tests__/e2e/endpoint.test.ts index 21093dae4..54695c402 100644 --- a/packages/eth-rpc-adapter/src/__tests__/e2e/endpoint.test.ts +++ b/packages/eth-rpc-adapter/src/__tests__/e2e/endpoint.test.ts @@ -633,7 +633,7 @@ describe('endpoint', () => { blockNumber: '0xa', transactionIndex: '0x0', // gasPrice: '0x7b501b0da7', - gas: '0x25a7f', + gas: '0x1fd91', input: '0x3d8d96200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000e8d4a51000000000000000000000000000000000000000000000000000000000e8d4a51000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000001', v: '0x25', @@ -652,7 +652,7 @@ describe('endpoint', () => { blockNumber: '0x9', transactionIndex: '0x0', // gasPrice: '0x71ca23a4e3', - gas: '0x25a7f', + gas: '0x1fd91', input: '0x3d8d962000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000e8d4a510000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000010000000000000000000000000000000000000000000100000000000000000002', v: '0x25', @@ -671,7 +671,7 @@ describe('endpoint', () => { blockNumber: '0x6', transactionIndex: '0x0', // gasPrice: '0x7b3ad33de2', - gas: '0x25a7f', + gas: '0x1fd91', input: '0x6fc4b4e50000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000e8d4a510000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000001', v: '0x25', diff --git a/packages/eth-rpc-adapter/vitest.config.e2e.ts b/packages/eth-rpc-adapter/vitest.config.e2e.ts index e556efc4b..b19013e1b 100644 --- a/packages/eth-rpc-adapter/vitest.config.e2e.ts +++ b/packages/eth-rpc-adapter/vitest.config.e2e.ts @@ -9,6 +9,7 @@ export default defineConfig({ hookTimeout: 60_000, environment: 'node', exclude: ['src/__tests__/utils.test.ts'], + bail: 999, }, plugins: [swc.vite(), tsconfigPaths()], }); From 45a22b395eb9432cc885b9696e723d2b3602f346 Mon Sep 17 00:00:00 2001 From: Shunji Zhan Date: Mon, 13 Nov 2023 13:16:44 +0800 Subject: [PATCH 8/8] use snapshot for endpoint tests (#878) * use snapshot for endpoint tests * to deterministic snapshot * update snapshot --- examples/docker-compose-bodhi-stack.yml | 6 +- .../e2e/__snapshots__/endpoint.test.ts.snap | 542 ++++++++++++++++++ .../src/__tests__/e2e/consts.ts | 270 --------- .../src/__tests__/e2e/endpoint.test.ts | 310 ++-------- .../src/__tests__/e2e/utils.ts | 24 + 5 files changed, 627 insertions(+), 525 deletions(-) create mode 100644 packages/eth-rpc-adapter/src/__tests__/e2e/__snapshots__/endpoint.test.ts.snap diff --git a/examples/docker-compose-bodhi-stack.yml b/examples/docker-compose-bodhi-stack.yml index 222fa3b2f..cf8906a4e 100644 --- a/examples/docker-compose-bodhi-stack.yml +++ b/examples/docker-compose-bodhi-stack.yml @@ -1,6 +1,6 @@ services: mandala-node: - image: ghcr.io/acalanetwork/mandala-node:sha-fe67fd1 + image: ghcr.io/acalanetwork/mandala-node:sha-37d9e36 container_name: mandala-node ports: - 9944:9944 @@ -22,7 +22,7 @@ services: POSTGRES_PASSWORD: postgres subquery-node: - image: acala/evm-subql:2.7.11 + image: acala/evm-subql:2.7.13 container_name: subquery-node ports: - 3000:3000 @@ -69,7 +69,7 @@ services: - --indexer=http://subquery-node:3000 eth-rpc-adapter-server: - image: acala/eth-rpc-adapter:2.7.11 + image: acala/eth-rpc-adapter:2.7.13 container_name: eth-rpc-adapter-server restart: always depends_on: diff --git a/packages/eth-rpc-adapter/src/__tests__/e2e/__snapshots__/endpoint.test.ts.snap b/packages/eth-rpc-adapter/src/__tests__/e2e/__snapshots__/endpoint.test.ts.snap new file mode 100644 index 000000000..15bb85bfc --- /dev/null +++ b/packages/eth-rpc-adapter/src/__tests__/e2e/__snapshots__/endpoint.test.ts.snap @@ -0,0 +1,542 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`endpoint > eth_getBlockByNumber > when there are >= 2 EVM transactions 1`] = ` +{ + "difficulty": "0x0", + "extraData": "0x", + "gasLimit": "0x1c99c80", + "gasUsed": "0x36c64", + "hash": "0xbdae06c67294bca57bffd390c997d6730a837e1c11252d9bba00cac7384c1f16", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "miner": "0xaa8b848056f89fc7f3bcc7c0a790ab8280423100", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "number": "0x25623f", + "parentHash": "0xfd3443eda6f3c9406b31175d9d8b9d497a0d3163f093d122ccb7d6c373e22fff", + "receiptsRoot": "0xdbed29fd64f319f13f6c58311eb910fdc3c2e7aa686d58b822afee9469eee766", + "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "size": "0x398e", + "stateRoot": "0x86203b2bd6ae7978c1f53cca5a57bf216b83f247fbcdb26ca55c760e39741074", + "timestamp": "0x62f8bc54", + "totalDifficulty": "0x0", + "transactions": [ + { + "blockHash": "0xbdae06c67294bca57bffd390c997d6730a837e1c11252d9bba00cac7384c1f16", + "blockNumber": "0x25623f", + "from": "0x9cb3b68e0c48c53b70f465bda3ba6481a9cb7720", + "gas": "0x2b3e6", + "gasPrice": "0x15fde28667", + "hash": "0x7b0361f47dc0be798cb9f7d115d74d68960e685714c515df81dd1a17e3db0cff", + "input": "0x36877dceeac06b4f60edb2a940a2170eea5cef018dc569f5d98b8176f5da7ea640c9bd2700000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000fef000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000010000000000000000008400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000001550f7dca7000000000000000000000000000000000000000000000000000000000000000000d64a08aa86bbf7225c35a44854c181d80022883dc9dde1976f77aa984c841d7a8410102cd33c78438b8f2d7c1eb1b053c0630ebc5787b1dfcab0c019811dc32fbb532aa57f8293f2be947ac467d9d8dae7e700fba81a21745eb1bfbbdff26785b26edd7f83ddfb4c64a8e95afb16d4567f4899ebf1b12fddfeee80b89c755943ed8e9c4bec1dbd12cb450b8cedb4b622744e376cc0da08225111572522010fd0d49e12e0b6acb81cb419c3f4c187b0b4c15377be15efa1f3b23b60d73263eb10c87abdcafb6b60c06f42145596c0eeecacb8d86e69e4210787250f7eef601c96163f1d8a0aa98b7cd67da0b8f69fcaa70e4649b0107d65a86e8940fb4197578b903a43eeca16395c04cc9bd080ed66ba205706331b9572f1bf2c528e7af23f46b637b37a59a219b36fed2c4ae586bfdec199ae0b3cc261dae4854dca625a6a79913258b595af6a8abbabb043bb5d6ca6f0553ed59e05cc8b25a6f10b40ffe598c36bad9b6f945a1e85d980c5bf5b016059e0aee384a32a729d393b5214f2638a08918e3dea5e9eded8b0060a49195b0e18e4c698fb9dfe8f2d16bc47494b70ceb", + "nonce": "0x3", + "r": "0x1b5e176d927f8e9ab405058b2d2457392da3e20f328b16ddabcebc33eaac5fea", + "s": "0x4ba69724e8f69de52f0125ad8b3c5c2cef33019bac3249e2c0a2192766d1721c", + "to": "0x30385059196602a1498f5f8ef91f3450e3a7b27a", + "transactionIndex": "0x0", + "v": "0x25", + "value": "0x0", + }, + { + "blockHash": "0xbdae06c67294bca57bffd390c997d6730a837e1c11252d9bba00cac7384c1f16", + "blockNumber": "0x25623f", + "from": "0xc760da3c525c8511938c35613684c3f6175c01a5", + "gas": "0x200b20", + "gasPrice": "0xb460f6718", + "hash": "0x9824e1111ba926db7df3091ec45344f224a3086daf5580eaf7ab3e6bf5a6dde6", + "input": "0x", + "nonce": "0x65", + "r": "0x1b5e176d927f8e9ab405058b2d2457392da3e20f328b16ddabcebc33eaac5fea", + "s": "0x4ba69724e8f69de52f0125ad8b3c5c2cef33019bac3249e2c0a2192766d1721c", + "to": "0x1f3a10587a20114ea25ba1b388ee2dd4a337ce27", + "transactionIndex": "0x1", + "v": "0x25", + "value": "0x0", + }, + ], + "transactionsRoot": "0xdbed29fd64f319f13f6c58311eb910fdc3c2e7aa686d58b822afee9469eee766", + "uncles": [], +} +`; + +exports[`endpoint > eth_getBlockByNumber > when there are >= 2 EVM transactions 2`] = ` +{ + "difficulty": "0x0", + "extraData": "0x", + "gasLimit": "0x1c99c80", + "gasUsed": "0x36c64", + "hash": "0xbdae06c67294bca57bffd390c997d6730a837e1c11252d9bba00cac7384c1f16", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "miner": "0xaa8b848056f89fc7f3bcc7c0a790ab8280423100", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "number": "0x25623f", + "parentHash": "0xfd3443eda6f3c9406b31175d9d8b9d497a0d3163f093d122ccb7d6c373e22fff", + "receiptsRoot": "0xdbed29fd64f319f13f6c58311eb910fdc3c2e7aa686d58b822afee9469eee766", + "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "size": "0x398e", + "stateRoot": "0x86203b2bd6ae7978c1f53cca5a57bf216b83f247fbcdb26ca55c760e39741074", + "timestamp": "0x62f8bc54", + "totalDifficulty": "0x0", + "transactions": [ + "0x7b0361f47dc0be798cb9f7d115d74d68960e685714c515df81dd1a17e3db0cff", + "0x9824e1111ba926db7df3091ec45344f224a3086daf5580eaf7ab3e6bf5a6dde6", + ], + "transactionsRoot": "0xdbed29fd64f319f13f6c58311eb910fdc3c2e7aa686d58b822afee9469eee766", + "uncles": [], +} +`; + +exports[`endpoint > eth_getBlockByNumber > when there are 0 EVM transactions 1`] = ` +{ + "difficulty": "0x0", + "extraData": "0x", + "gasLimit": "0x1c99c80", + "gasUsed": "0x0", + "hash": "0x5108a4f02624cc0fca4d68ab3429503249525218a1c23f38a2cf40b1f3456fab", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "miner": "0x520425df7e86cb8dffd8fd140b075140b28f9629", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "number": "0x1bbe4c", + "parentHash": "0x0af99e49b978dfeddc023f32a96fc4907aa99409c1804380fca5e0767ca5624f", + "receiptsRoot": "0x9482be879e7e6984d5c4071ef21fff39232c95331f12b14c0ca70e7eb6ef9df4", + "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "size": "0x1e5f", + "stateRoot": "0xb234e197e811f9402fc3cc9b46a953d7c20ff54fbe5a65fa89315d786a6839fe", + "timestamp": "0x626b3a76", + "totalDifficulty": "0x0", + "transactions": [], + "transactionsRoot": "0x9482be879e7e6984d5c4071ef21fff39232c95331f12b14c0ca70e7eb6ef9df4", + "uncles": [], +} +`; + +exports[`endpoint > eth_getBlockByNumber > when there are 0 EVM transactions 2`] = ` +{ + "difficulty": "0x0", + "extraData": "0x", + "gasLimit": "0x1c99c80", + "gasUsed": "0x0", + "hash": "0x5108a4f02624cc0fca4d68ab3429503249525218a1c23f38a2cf40b1f3456fab", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "miner": "0x520425df7e86cb8dffd8fd140b075140b28f9629", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "number": "0x1bbe4c", + "parentHash": "0x0af99e49b978dfeddc023f32a96fc4907aa99409c1804380fca5e0767ca5624f", + "receiptsRoot": "0x9482be879e7e6984d5c4071ef21fff39232c95331f12b14c0ca70e7eb6ef9df4", + "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "size": "0x1e5f", + "stateRoot": "0xb234e197e811f9402fc3cc9b46a953d7c20ff54fbe5a65fa89315d786a6839fe", + "timestamp": "0x626b3a76", + "totalDifficulty": "0x0", + "transactions": [], + "transactionsRoot": "0x9482be879e7e6984d5c4071ef21fff39232c95331f12b14c0ca70e7eb6ef9df4", + "uncles": [], +} +`; + +exports[`endpoint > eth_getBlockByNumber > when there are 1 EVM transactions 1`] = ` +{ + "difficulty": "0x0", + "extraData": "0x", + "gasLimit": "0x1c99c80", + "gasUsed": "0x3181f", + "hash": "0xab9f0519e9f9885861da35765dad61161c5f939c66b4c4b7091f7e9555e9f92f", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "miner": "0x576482c15d3e4ec12c0577c611d3ed05eadfed46", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "number": "0x1bbf96", + "parentHash": "0xf7e284c6d581bb34c2234c5c0a60ed1303a88e905328f4b7fc76c93e2da15c51", + "receiptsRoot": "0xcf70602c561d49922720605e4a670cdacd0474477c126cb6459f0e3ae3c1fd4b", + "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "size": "0x1f5a", + "stateRoot": "0xa02039723e96992aca76880a27b3d3da63bcbef0e932f27a7180276a2033c040", + "timestamp": "0x626b5756", + "totalDifficulty": "0x0", + "transactions": [ + { + "blockHash": "0xab9f0519e9f9885861da35765dad61161c5f939c66b4c4b7091f7e9555e9f92f", + "blockNumber": "0x1bbf96", + "from": "0x0000000000000000000000000000000000000000", + "gas": "0x200b20", + "gasPrice": "0x4ced5668c50", + "hash": "0x79090e3e64da12012839fb40f95ad03703a6d3c999c262b4196796f9753861ca", + "input": "0x", + "nonce": "0x1cb", + "r": "0x1b5e176d927f8e9ab405058b2d2457392da3e20f328b16ddabcebc33eaac5fea", + "s": "0x4ba69724e8f69de52f0125ad8b3c5c2cef33019bac3249e2c0a2192766d1721c", + "to": null, + "transactionIndex": "0x0", + "v": "0x25", + "value": "0x0", + }, + ], + "transactionsRoot": "0xcf70602c561d49922720605e4a670cdacd0474477c126cb6459f0e3ae3c1fd4b", + "uncles": [], +} +`; + +exports[`endpoint > eth_getBlockByNumber > when there are 1 EVM transactions 2`] = ` +{ + "difficulty": "0x0", + "extraData": "0x", + "gasLimit": "0x1c99c80", + "gasUsed": "0x3181f", + "hash": "0xab9f0519e9f9885861da35765dad61161c5f939c66b4c4b7091f7e9555e9f92f", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "miner": "0x576482c15d3e4ec12c0577c611d3ed05eadfed46", + "mixHash": "0x0000000000000000000000000000000000000000000000000000000000000000", + "nonce": "0x0000000000000000", + "number": "0x1bbf96", + "parentHash": "0xf7e284c6d581bb34c2234c5c0a60ed1303a88e905328f4b7fc76c93e2da15c51", + "receiptsRoot": "0xcf70602c561d49922720605e4a670cdacd0474477c126cb6459f0e3ae3c1fd4b", + "sha3Uncles": "0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347", + "size": "0x1f5a", + "stateRoot": "0xa02039723e96992aca76880a27b3d3da63bcbef0e932f27a7180276a2033c040", + "timestamp": "0x626b5756", + "totalDifficulty": "0x0", + "transactions": [ + "0x79090e3e64da12012839fb40f95ad03703a6d3c999c262b4196796f9753861ca", + ], + "transactionsRoot": "0xcf70602c561d49922720605e4a670cdacd0474477c126cb6459f0e3ae3c1fd4b", + "uncles": [], +} +`; + +exports[`endpoint > eth_getTransactionByHash > finds correct tx when hash exist for local transactions 1`] = ` +{ + "blockNumber": "0xa", + "from": "0x82a258cb20e2adb4788153cd5eb5839615ece9a0", + "gas": "0x1fd91", + "gasPrice": "0x252bd4aa7a", + "input": "0x3d8d96200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000e8d4a51000000000000000000000000000000000000000000000000000000000e8d4a51000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000001", + "nonce": "0x6", + "r": "0x1b5e176d927f8e9ab405058b2d2457392da3e20f328b16ddabcebc33eaac5fea", + "s": "0x4ba69724e8f69de52f0125ad8b3c5c2cef33019bac3249e2c0a2192766d1721c", + "to": "0x0230135fded668a3f7894966b14f42e65da322e4", + "transactionIndex": "0x0", + "v": "0x25", + "value": "0xde0b6b3a7640000", +} +`; + +exports[`endpoint > eth_getTransactionByHash > finds correct tx when hash exist for local transactions 2`] = ` +{ + "blockNumber": "0x9", + "from": "0x82a258cb20e2adb4788153cd5eb5839615ece9a0", + "gas": "0x25a7f", + "gasPrice": "0x229d8bad01", + "input": "0x3d8d962000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000e8d4a510000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000010000000000000000000000000000000000000000000100000000000000000002", + "nonce": "0x5", + "r": "0x1b5e176d927f8e9ab405058b2d2457392da3e20f328b16ddabcebc33eaac5fea", + "s": "0x4ba69724e8f69de52f0125ad8b3c5c2cef33019bac3249e2c0a2192766d1721c", + "to": "0x0230135fded668a3f7894966b14f42e65da322e4", + "transactionIndex": "0x0", + "v": "0x25", + "value": "0xde0b6b3a7640000", +} +`; + +exports[`endpoint > eth_getTransactionByHash > finds correct tx when hash exist for local transactions 3`] = ` +{ + "blockNumber": "0x6", + "from": "0x82a258cb20e2adb4788153cd5eb5839615ece9a0", + "gas": "0x1fdca", + "gasPrice": "0x2529a6b58c", + "input": "0x6fc4b4e50000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000e8d4a510000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000001", + "nonce": "0x2", + "r": "0x1b5e176d927f8e9ab405058b2d2457392da3e20f328b16ddabcebc33eaac5fea", + "s": "0x4ba69724e8f69de52f0125ad8b3c5c2cef33019bac3249e2c0a2192766d1721c", + "to": "0x0230135fded668a3f7894966b14f42e65da322e4", + "transactionIndex": "0x0", + "v": "0x25", + "value": "0xde0b6b3a7640000", +} +`; + +exports[`endpoint > eth_getTransactionByHash > finds correct tx when hash exist for local transactions 4`] = ` +{ + "blockNumber": "0x14", + "from": "0x82a258cb20e2adb4788153cd5eb5839615ece9a0", + "gas": "0x200b20", + "gasPrice": "0x41d4ad9224", + "input": "0x", + "nonce": "0x10", + "r": "0x1b5e176d927f8e9ab405058b2d2457392da3e20f328b16ddabcebc33eaac5fea", + "s": "0x4ba69724e8f69de52f0125ad8b3c5c2cef33019bac3249e2c0a2192766d1721c", + "to": "0x532394de2ca885b7e0306a2e258074cca4e42449", + "transactionIndex": "0x0", + "v": "0x25", + "value": "0x0", +} +`; + +exports[`endpoint > eth_getTransactionByHash > returns correct result for public karura transactions 1`] = ` +{ + "blockNumber": "0x2ac207", + "from": "0x99537d82f6f4aad1419dd14952b512c7959a2904", + "gas": "0xc3500", + "gasPrice": "0xc691dc448", + "input": "0x29941edd7ba288a014555c9b1446b215605b4f6803e68a8b430bcbc08e75400e4b38a1a10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000002a8aa000000000000000000000000000000000000000000000000000000000002ac150", + "nonce": "0x98", + "r": "0x1b5e176d927f8e9ab405058b2d2457392da3e20f328b16ddabcebc33eaac5fea", + "s": "0x4ba69724e8f69de52f0125ad8b3c5c2cef33019bac3249e2c0a2192766d1721c", + "to": "0xff066331be693be721994cf19905b2dc7475c5c9", + "transactionIndex": "0x0", + "v": "0x25", + "value": "0x0", +} +`; + +exports[`endpoint > eth_getTransactionByHash > returns correct result for public karura transactions 2`] = ` +{ + "blockNumber": "0x1bd799", + "from": "0xe2e2d9e31d7e1cc1178fe0d1c5950f6c809816a3", + "gas": "0x1406f40", + "gasPrice": "0x2e73326680e", + "input": "0x608060405234801561001057600080fd5b5060405161078f38038061078f83398101604081905261002f91610314565b818161005c60017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd61042c565b6000805160206107488339815191521461008657634e487b7160e01b600052600160045260246000fd5b6100928282600061009b565b50505050610491565b6100a4836100d1565b6000825111806100b15750805b156100cc576100ca838361011160201b6100291760201c565b505b505050565b6100da8161013d565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606101368383604051806060016040528060278152602001610768602791396101fd565b9392505050565b610150816102d260201b6100551760201c565b6101b75760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084015b60405180910390fd5b806101dc60008051602061074883398151915260001b6102d860201b61005b1760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060833b61025c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016101ae565b600080856001600160a01b03168560405161027791906103dd565b600060405180830381855af49150503d80600081146102b2576040519150601f19603f3d011682016040523d82523d6000602084013e6102b7565b606091505b5090925090506102c88282866102db565b9695505050505050565b3b151590565b90565b606083156102ea575081610136565b8251156102fa5782518084602001fd5b8160405162461bcd60e51b81526004016101ae91906103f9565b60008060408385031215610326578182fd5b82516001600160a01b038116811461033c578283fd5b60208401519092506001600160401b0380821115610358578283fd5b818501915085601f83011261036b578283fd5b81518181111561037d5761037d61047b565b604051601f8201601f19908116603f011681019083821181831017156103a5576103a561047b565b816040528281528860208487010111156103bd578586fd5b6103ce83602083016020880161044f565b80955050505050509250929050565b600082516103ef81846020870161044f565b9190910192915050565b602081526000825180602084015261041881604085016020870161044f565b601f01601f19169190910160400192915050565b60008282101561044a57634e487b7160e01b81526011600452602481fd5b500390565b60005b8381101561046a578181015183820152602001610452565b838111156100ca5750506000910152565b634e487b7160e01b600052604160045260246000fd5b6102a8806104a06000396000f3fe60806040523661001357610011610017565b005b6100115b61002761002261005e565b610096565b565b606061004e838360405180606001604052806027815260200161024c602791396100ba565b9392505050565b3b151590565b90565b60006100917f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156100b5573d6000f35b3d6000fd5b6060833b61011e5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084015b60405180910390fd5b600080856001600160a01b03168560405161013991906101cc565b600060405180830381855af49150503d8060008114610174576040519150601f19603f3d011682016040523d82523d6000602084013e610179565b606091505b5091509150610189828286610193565b9695505050505050565b606083156101a257508161004e565b8251156101b25782518084602001fd5b8160405162461bcd60e51b815260040161011591906101e8565b600082516101de81846020870161021b565b9190910192915050565b602081526000825180602084015261020781604085016020870161021b565b601f01601f19169190910160400192915050565b60005b8381101561023657818101518382015260200161021e565b83811115610245576000848401525b5050505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212203ee6993445d26cb1f3937811bd071a1164dee553ec2fc9b1ae9ba0be2a91946f64736f6c63430008040033360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564000000000000000000000000141fba8ad5d61bdab45a047cf60b5ad9784987fb000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000e434a5fcd4000000000000000000000000c0946f51ddd63e12c51b23f5814b43c9bc8aa70000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000b00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000100000000000000000000000058cc3ae5c097b213ce3c81979e1b9f9570746aa500000000000000000000000000000000000000000000000000000000", + "nonce": "0x4", + "r": "0x1b5e176d927f8e9ab405058b2d2457392da3e20f328b16ddabcebc33eaac5fea", + "s": "0x4ba69724e8f69de52f0125ad8b3c5c2cef33019bac3249e2c0a2192766d1721c", + "to": null, + "transactionIndex": "0x0", + "v": "0x25", + "value": "0x0", +} +`; + +exports[`endpoint > eth_getTransactionByHash > returns correct result for public karura transactions 3`] = ` +{ + "blockNumber": "0x2ac93c", + "from": "0xffffd2ff9b840f6bd74f80df8e532b4d7886ffff", + "gas": "0x5728", + "gasPrice": "0x1bb7d40e19", + "input": "0x", + "nonce": "0x41", + "r": "0x1b5e176d927f8e9ab405058b2d2457392da3e20f328b16ddabcebc33eaac5fea", + "s": "0x4ba69724e8f69de52f0125ad8b3c5c2cef33019bac3249e2c0a2192766d1721c", + "to": "0xffffd2ff9b840f6bd74f80df8e532b4d7886ffff", + "transactionIndex": "0x0", + "v": "0x25", + "value": "0x1121d33597384000", +} +`; + +exports[`endpoint > eth_getTransactionReceipt > returns correct result for public karura transactions 1`] = ` +{ + "blockNumber": "0x2ac207", + "contractAddress": null, + "cumulativeGasUsed": "0x0", + "effectiveGasPrice": "0xc691dc448", + "from": "0x99537d82f6f4aad1419dd14952b512c7959a2904", + "gasUsed": "0x12a44", + "logs": [ + { + "address": "0xff066331be693be721994cf19905b2dc7475c5c9", + "blockNumber": "0x2ac207", + "data": "0x00000000000000000000000000000000000000000000000000000000002a8aa000000000000000000000000000000000000000000000000000000000002ac150000000000000000000000000000000000000000000000000000000006340cef600000000000000000000000000000000000000000000000000000000002ac207", + "logIndex": "0x0", + "topics": [ + "0x9e6c2a5268879d41429e8c2d6f88e2c3d1a20752070e9afb3f6b9aa9dbb01a90", + "0x0000000000000000000000000000000000000000000000000000000000000012", + "0x7ba288a014555c9b1446b215605b4f6803e68a8b430bcbc08e75400e4b38a1a1", + "0x0000000000000000000000000000000000000000000000000000000000000000", + ], + "transactionIndex": "0x0", + }, + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "status": "0x1", + "to": "0xff066331be693be721994cf19905b2dc7475c5c9", + "transactionIndex": "0x0", + "type": "0x0", +} +`; + +exports[`endpoint > eth_getTransactionReceipt > returns correct result for public karura transactions 2`] = ` +{ + "blockNumber": "0x1bd799", + "contractAddress": "0xa321448d90d4e5b0a732867c18ea198e75cac48e", + "cumulativeGasUsed": "0x0", + "effectiveGasPrice": "0x2e73326680e", + "from": "0xe2e2d9e31d7e1cc1178fe0d1c5950f6c809816a3", + "gasUsed": "0x560dc", + "logs": [ + { + "address": "0xa321448d90d4e5b0a732867c18ea198e75cac48e", + "blockNumber": "0x1bd799", + "data": "0x", + "logIndex": "0x0", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x000000000000000000000000141fba8ad5d61bdab45a047cf60b5ad9784987fb", + ], + "transactionIndex": "0x0", + }, + { + "address": "0xa321448d90d4e5b0a732867c18ea198e75cac48e", + "blockNumber": "0x1bd799", + "data": "0x", + "logIndex": "0x1", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x000000000000000000000000c0946f51ddd63e12c51b23f5814b43c9bc8aa700", + ], + "transactionIndex": "0x0", + }, + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "status": "0x1", + "to": null, + "transactionIndex": "0x0", + "type": "0x0", +} +`; + +exports[`endpoint > eth_getTransactionReceipt > returns correct result for public karura transactions 3`] = ` +{ + "blockNumber": "0x2ac93c", + "contractAddress": null, + "cumulativeGasUsed": "0x0", + "effectiveGasPrice": "0x1bb7d40e19", + "from": "0xffffd2ff9b840f6bd74f80df8e532b4d7886ffff", + "gasUsed": "0x5208", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "status": "0x1", + "to": "0xffffd2ff9b840f6bd74f80df8e532b4d7886ffff", + "transactionIndex": "0x0", + "type": "0x0", +} +`; + +exports[`endpoint > eth_getTransactionReceipt > returns correct result when hash exist for local transactions 1`] = ` +{ + "blockNumber": "0xa", + "contractAddress": null, + "cumulativeGasUsed": "0x0", + "effectiveGasPrice": "0x252bd4aa7a", + "from": "0x82a258cb20e2adb4788153cd5eb5839615ece9a0", + "gasUsed": "0x1a8a4", + "logs": [ + { + "address": "0x0000000000000000000000000000000000000803", + "blockNumber": "0xa", + "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000748849ea0c000000000000000000000000000000000000000000000000000000e8d4a51000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000001", + "logIndex": "0x0", + "topics": [ + "0x7b1ccce9b5299ff0ae3d9adc0855268a4ad3527b2bcde01ccadde2fb878ecb8a", + "0x0000000000000000000000000230135fded668a3f7894966b14f42e65da322e4", + ], + "transactionIndex": "0x0", + }, + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "status": "0x1", + "to": "0x0230135fded668a3f7894966b14f42e65da322e4", + "transactionIndex": "0x0", + "type": "0x0", +} +`; + +exports[`endpoint > eth_getTransactionReceipt > returns correct result when hash exist for local transactions 2`] = ` +{ + "blockNumber": "0x9", + "contractAddress": null, + "cumulativeGasUsed": "0x0", + "effectiveGasPrice": "0x229d8bad01", + "from": "0x82a258cb20e2adb4788153cd5eb5839615ece9a0", + "gasUsed": "0x1f615", + "logs": [ + { + "address": "0x0000000000000000000000000000000000000803", + "blockNumber": "0x9", + "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000010000000000000000000000000000000000000000000100000000000000000002", + "logIndex": "0x0", + "topics": [ + "0x7b1ccce9b5299ff0ae3d9adc0855268a4ad3527b2bcde01ccadde2fb878ecb8a", + "0x0000000000000000000000000230135fded668a3f7894966b14f42e65da322e4", + ], + "transactionIndex": "0x0", + }, + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "status": "0x1", + "to": "0x0230135fded668a3f7894966b14f42e65da322e4", + "transactionIndex": "0x0", + "type": "0x0", +} +`; + +exports[`endpoint > eth_getTransactionReceipt > returns correct result when hash exist for local transactions 3`] = ` +{ + "blockNumber": "0x6", + "contractAddress": null, + "cumulativeGasUsed": "0x0", + "effectiveGasPrice": "0x2529a6b58c", + "from": "0x82a258cb20e2adb4788153cd5eb5839615ece9a0", + "gasUsed": "0x1a8d3", + "logs": [ + { + "address": "0x0000000000000000000000000000000000000803", + "blockNumber": "0x6", + "data": "0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000e8d4a51000000000000000000000000000000000000000000000000000000001d131f6171f000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000001", + "logIndex": "0x0", + "topics": [ + "0x7b1ccce9b5299ff0ae3d9adc0855268a4ad3527b2bcde01ccadde2fb878ecb8a", + "0x0000000000000000000000000230135fded668a3f7894966b14f42e65da322e4", + ], + "transactionIndex": "0x0", + }, + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "status": "0x1", + "to": "0x0230135fded668a3f7894966b14f42e65da322e4", + "transactionIndex": "0x0", + "type": "0x0", +} +`; + +exports[`endpoint > eth_getTransactionReceipt > returns correct result when hash exist for local transactions 4`] = ` +{ + "blockNumber": "0x14", + "contractAddress": null, + "cumulativeGasUsed": "0x0", + "effectiveGasPrice": "0x41d4ad9224", + "from": "0x82a258cb20e2adb4788153cd5eb5839615ece9a0", + "gasUsed": "0xcbbd", + "logs": [ + { + "address": "0x532394de2ca885b7e0306a2e258074cca4e42449", + "blockNumber": "0x14", + "data": "0x0000000000000000000000000000000000000000000000000000000000002710", + "logIndex": "0x0", + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x00000000000000000000000082a258cb20e2adb4788153cd5eb5839615ece9a0", + "0x000000000000000000000000905c015e38c24ed973fd6075541a124c621fa743", + ], + "transactionIndex": "0x0", + }, + { + "address": "0xe85ef9063dd28f157eb97ca03f50f4a3bdecd37e", + "blockNumber": "0x14", + "data": "0x00000000000000000000000000000000000000000000000000000000000003e8", + "logIndex": "0x1", + "topics": [ + "0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef", + "0x00000000000000000000000082a258cb20e2adb4788153cd5eb5839615ece9a0", + "0x000000000000000000000000905c015e38c24ed973fd6075541a124c621fa743", + ], + "transactionIndex": "0x0", + }, + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "status": "0x1", + "to": "0x532394de2ca885b7e0306a2e258074cca4e42449", + "transactionIndex": "0x0", + "type": "0x0", +} +`; diff --git a/packages/eth-rpc-adapter/src/__tests__/e2e/consts.ts b/packages/eth-rpc-adapter/src/__tests__/e2e/consts.ts index 5e7d3a3d6..2321fa2dd 100644 --- a/packages/eth-rpc-adapter/src/__tests__/e2e/consts.ts +++ b/packages/eth-rpc-adapter/src/__tests__/e2e/consts.ts @@ -1,5 +1,3 @@ -import { DUMMY_LOGS_BLOOM } from '@acala-network/eth-providers'; - export interface LogHexified { blockNumber: string; blockHash: string; @@ -215,274 +213,6 @@ export const log22_1 = { export const allLogs = [log6, log7, log8, log9, log10, log11, log12, log13, log14, log20_0, log20_1, log22_0, log22_1] as LogHexified[]; -export const karuraBlock2449983 = { - hash: '0xbdae06c67294bca57bffd390c997d6730a837e1c11252d9bba00cac7384c1f16', - parentHash: '0xfd3443eda6f3c9406b31175d9d8b9d497a0d3163f093d122ccb7d6c373e22fff', - number: '0x25623f', - stateRoot: '0x86203b2bd6ae7978c1f53cca5a57bf216b83f247fbcdb26ca55c760e39741074', - transactionsRoot: '0xdbed29fd64f319f13f6c58311eb910fdc3c2e7aa686d58b822afee9469eee766', - timestamp: '0x62f8bc54', - nonce: '0x0000000000000000', - mixHash: '0x0000000000000000000000000000000000000000000000000000000000000000', - difficulty: '0x0', - totalDifficulty: '0x0', - gasLimit: '0x1c99c80', - gasUsed: '0x36c64', - miner: '0xaa8b848056f89fc7f3bcc7c0a790ab8280423100', - extraData: '0x', - sha3Uncles: '0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347', - receiptsRoot: '0xdbed29fd64f319f13f6c58311eb910fdc3c2e7aa686d58b822afee9469eee766', - logsBloom: DUMMY_LOGS_BLOOM, - size: '0x398e', - uncles: [], - transactions: [ - { - blockHash: '0xbdae06c67294bca57bffd390c997d6730a837e1c11252d9bba00cac7384c1f16', - blockNumber: '0x25623f', - transactionIndex: '0x0', - hash: '0x7b0361f47dc0be798cb9f7d115d74d68960e685714c515df81dd1a17e3db0cff', - from: '0x9cb3b68e0c48c53b70f465bda3ba6481a9cb7720', - gasPrice: '0x15fde28667', - value: '0x0', - gas: '0x2b3e6', - input: - '0x36877dceeac06b4f60edb2a940a2170eea5cef018dc569f5d98b8176f5da7ea640c9bd2700000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000fef000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000001400000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000010000000000000000008400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000001550f7dca7000000000000000000000000000000000000000000000000000000000000000000d64a08aa86bbf7225c35a44854c181d80022883dc9dde1976f77aa984c841d7a8410102cd33c78438b8f2d7c1eb1b053c0630ebc5787b1dfcab0c019811dc32fbb532aa57f8293f2be947ac467d9d8dae7e700fba81a21745eb1bfbbdff26785b26edd7f83ddfb4c64a8e95afb16d4567f4899ebf1b12fddfeee80b89c755943ed8e9c4bec1dbd12cb450b8cedb4b622744e376cc0da08225111572522010fd0d49e12e0b6acb81cb419c3f4c187b0b4c15377be15efa1f3b23b60d73263eb10c87abdcafb6b60c06f42145596c0eeecacb8d86e69e4210787250f7eef601c96163f1d8a0aa98b7cd67da0b8f69fcaa70e4649b0107d65a86e8940fb4197578b903a43eeca16395c04cc9bd080ed66ba205706331b9572f1bf2c528e7af23f46b637b37a59a219b36fed2c4ae586bfdec199ae0b3cc261dae4854dca625a6a79913258b595af6a8abbabb043bb5d6ca6f0553ed59e05cc8b25a6f10b40ffe598c36bad9b6f945a1e85d980c5bf5b016059e0aee384a32a729d393b5214f2638a08918e3dea5e9eded8b0060a49195b0e18e4c698fb9dfe8f2d16bc47494b70ceb', - to: '0x30385059196602a1498f5f8ef91f3450e3a7b27a', - nonce: '0x3', - v: '0x25', - r: '0x1b5e176d927f8e9ab405058b2d2457392da3e20f328b16ddabcebc33eaac5fea', - s: '0x4ba69724e8f69de52f0125ad8b3c5c2cef33019bac3249e2c0a2192766d1721c', - }, - { - blockHash: '0xbdae06c67294bca57bffd390c997d6730a837e1c11252d9bba00cac7384c1f16', - blockNumber: '0x25623f', - transactionIndex: '0x1', - hash: '0x9824e1111ba926db7df3091ec45344f224a3086daf5580eaf7ab3e6bf5a6dde6', - from: '0xc760da3c525c8511938c35613684c3f6175c01a5', - gasPrice: '0xb460f6718', - value: '0x0', - gas: '0x200b20', - input: '0x', - to: '0x1f3a10587a20114ea25ba1b388ee2dd4a337ce27', - nonce: '0x65', - v: '0x25', - r: '0x1b5e176d927f8e9ab405058b2d2457392da3e20f328b16ddabcebc33eaac5fea', - s: '0x4ba69724e8f69de52f0125ad8b3c5c2cef33019bac3249e2c0a2192766d1721c', - }, - ], -}; - -export const karuraBlock1818188 = { - hash: '0x5108a4f02624cc0fca4d68ab3429503249525218a1c23f38a2cf40b1f3456fab', - parentHash: '0x0af99e49b978dfeddc023f32a96fc4907aa99409c1804380fca5e0767ca5624f', - number: '0x1bbe4c', - stateRoot: '0xb234e197e811f9402fc3cc9b46a953d7c20ff54fbe5a65fa89315d786a6839fe', - transactionsRoot: '0x9482be879e7e6984d5c4071ef21fff39232c95331f12b14c0ca70e7eb6ef9df4', - timestamp: '0x626b3a76', - nonce: '0x0000000000000000', - mixHash: '0x0000000000000000000000000000000000000000000000000000000000000000', - difficulty: '0x0', - totalDifficulty: '0x0', - gasLimit: '0x1c99c80', - gasUsed: '0x0', - miner: '0x520425df7e86cb8dffd8fd140b075140b28f9629', - extraData: '0x', - sha3Uncles: '0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347', - receiptsRoot: '0x9482be879e7e6984d5c4071ef21fff39232c95331f12b14c0ca70e7eb6ef9df4', - logsBloom: DUMMY_LOGS_BLOOM, - size: '0x1e5f', - uncles: [], - transactions: [], -}; - -export const karuraBlock1818518 = { - hash: '0xab9f0519e9f9885861da35765dad61161c5f939c66b4c4b7091f7e9555e9f92f', - parentHash: '0xf7e284c6d581bb34c2234c5c0a60ed1303a88e905328f4b7fc76c93e2da15c51', - number: '0x1bbf96', - stateRoot: '0xa02039723e96992aca76880a27b3d3da63bcbef0e932f27a7180276a2033c040', - transactionsRoot: '0xcf70602c561d49922720605e4a670cdacd0474477c126cb6459f0e3ae3c1fd4b', - timestamp: '0x626b5756', - nonce: '0x0000000000000000', - mixHash: '0x0000000000000000000000000000000000000000000000000000000000000000', - difficulty: '0x0', - totalDifficulty: '0x0', - gasLimit: '0x1c99c80', - gasUsed: '0x3181f', - miner: '0x576482c15d3e4ec12c0577c611d3ed05eadfed46', - extraData: '0x', - sha3Uncles: '0x1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347', - receiptsRoot: '0xcf70602c561d49922720605e4a670cdacd0474477c126cb6459f0e3ae3c1fd4b', - logsBloom: DUMMY_LOGS_BLOOM, - size: '0x1f5a', - uncles: [], - transactions: [ - { - blockHash: '0xab9f0519e9f9885861da35765dad61161c5f939c66b4c4b7091f7e9555e9f92f', - blockNumber: '0x1bbf96', - transactionIndex: '0x0', - hash: '0x79090e3e64da12012839fb40f95ad03703a6d3c999c262b4196796f9753861ca', - from: '0x0000000000000000000000000000000000000000', - gasPrice: '0x4ced5668c50', - value: '0x0', - gas: '0x200b20', - input: '0x', - to: null, - nonce: '0x1cb', - v: '0x25', - r: '0x1b5e176d927f8e9ab405058b2d2457392da3e20f328b16ddabcebc33eaac5fea', - s: '0x4ba69724e8f69de52f0125ad8b3c5c2cef33019bac3249e2c0a2192766d1721c', - }, - ], -}; - -export const karuraContractCallTxReceipt = { - to: '0xff066331be693be721994cf19905b2dc7475c5c9', - from: '0x99537d82f6f4aad1419dd14952b512c7959a2904', - contractAddress: null, - transactionIndex: '0x0', - gasUsed: '0x12a44', - logsBloom: DUMMY_LOGS_BLOOM, - blockHash: '0x073b225ae078184815ed7e3d51c35ab44cef6cba3a9cde2bbf6e360e2844cc55', - transactionHash: '0x33661888b04c81858c3603994eeb9a294c57b585bd86b4663ccd5e4fd7f2c325', - logs: [ - { - transactionIndex: '0x0', - blockNumber: '0x2ac207', - transactionHash: '0x33661888b04c81858c3603994eeb9a294c57b585bd86b4663ccd5e4fd7f2c325', - address: '0xff066331be693be721994cf19905b2dc7475c5c9', - topics: [ - '0x9e6c2a5268879d41429e8c2d6f88e2c3d1a20752070e9afb3f6b9aa9dbb01a90', - '0x0000000000000000000000000000000000000000000000000000000000000012', - '0x7ba288a014555c9b1446b215605b4f6803e68a8b430bcbc08e75400e4b38a1a1', - '0x0000000000000000000000000000000000000000000000000000000000000000', - ], - data: '0x00000000000000000000000000000000000000000000000000000000002a8aa000000000000000000000000000000000000000000000000000000000002ac150000000000000000000000000000000000000000000000000000000006340cef600000000000000000000000000000000000000000000000000000000002ac207', - logIndex: '0x0', - blockHash: '0x073b225ae078184815ed7e3d51c35ab44cef6cba3a9cde2bbf6e360e2844cc55', - }, - ], - blockNumber: '0x2ac207', - cumulativeGasUsed: '0x0', - effectiveGasPrice: '0xc691dc448', - status: '0x1', - type: '0x0', -}; - -export const karuraSendKarTxReceipt = { - to: '0xffffd2ff9b840f6bd74f80df8e532b4d7886ffff', - from: '0xffffd2ff9b840f6bd74f80df8e532b4d7886ffff', - contractAddress: null, - transactionIndex: '0x0', - gasUsed: '0x5208', - logsBloom: DUMMY_LOGS_BLOOM, - blockHash: '0x4a73ca4a52fa1a6bd1328414194230cbfe3b0d7922cf026fbb31ce7db498de33', - transactionHash: '0x69493fd597760d5ad3a81ebbbb48abcc686d33814e097b1db9fc172341c36dae', - logs: [], - blockNumber: '0x2ac93c', - cumulativeGasUsed: '0x0', - effectiveGasPrice: '0x1bb7d40e19', - status: '0x1', - type: '0x0', -}; - -export const karuraContractDeployTxReceipt = { - to: null, - from: '0xe2e2d9e31d7e1cc1178fe0d1c5950f6c809816a3', - contractAddress: '0xa321448d90d4e5b0a732867c18ea198e75cac48e', - transactionIndex: '0x0', - gasUsed: '0x560dc', - logsBloom: DUMMY_LOGS_BLOOM, - blockHash: '0x6b1378795aeedc85a88d40b2d48cf0e2408f783ba84f7cea068bfbb3ff3ad90a', - transactionHash: '0x56a429edfc1c07d7fd4c048e6e868dbaaa632fc329e7bb7ed744a48bca5bb493', - logs: [ - { - transactionIndex: '0x0', - blockNumber: '0x1bd799', - transactionHash: '0x56a429edfc1c07d7fd4c048e6e868dbaaa632fc329e7bb7ed744a48bca5bb493', - address: '0xa321448d90d4e5b0a732867c18ea198e75cac48e', - topics: [ - '0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b', - '0x000000000000000000000000141fba8ad5d61bdab45a047cf60b5ad9784987fb', - ], - data: '0x', - logIndex: '0x0', - blockHash: '0x6b1378795aeedc85a88d40b2d48cf0e2408f783ba84f7cea068bfbb3ff3ad90a', - }, - { - transactionIndex: '0x0', - blockNumber: '0x1bd799', - transactionHash: '0x56a429edfc1c07d7fd4c048e6e868dbaaa632fc329e7bb7ed744a48bca5bb493', - address: '0xa321448d90d4e5b0a732867c18ea198e75cac48e', - topics: [ - '0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b', - '0x000000000000000000000000c0946f51ddd63e12c51b23f5814b43c9bc8aa700', - ], - data: '0x', - logIndex: '0x1', - blockHash: '0x6b1378795aeedc85a88d40b2d48cf0e2408f783ba84f7cea068bfbb3ff3ad90a', - }, - ], - blockNumber: '0x1bd799', - cumulativeGasUsed: '0x0', - effectiveGasPrice: '0x2e73326680e', - status: '0x1', - type: '0x0', -}; - -export const karuraSendKarTx = { - blockHash: '0x4a73ca4a52fa1a6bd1328414194230cbfe3b0d7922cf026fbb31ce7db498de33', - blockNumber: '0x2ac93c', - transactionIndex: '0x0', - hash: '0x69493fd597760d5ad3a81ebbbb48abcc686d33814e097b1db9fc172341c36dae', - from: '0xffffd2ff9b840f6bd74f80df8e532b4d7886ffff', - gasPrice: '0x1bb7d40e19', - value: '0x1121d33597384000', - gas: '0x5728', - input: '0x', - to: '0xffffd2ff9b840f6bd74f80df8e532b4d7886ffff', - nonce: '0x41', - v: '0x25', - r: '0x1b5e176d927f8e9ab405058b2d2457392da3e20f328b16ddabcebc33eaac5fea', - s: '0x4ba69724e8f69de52f0125ad8b3c5c2cef33019bac3249e2c0a2192766d1721c', -}; - -export const karuraContractCallTx = { - blockHash: '0x073b225ae078184815ed7e3d51c35ab44cef6cba3a9cde2bbf6e360e2844cc55', - blockNumber: '0x2ac207', - transactionIndex: '0x0', - hash: '0x33661888b04c81858c3603994eeb9a294c57b585bd86b4663ccd5e4fd7f2c325', - from: '0x99537d82f6f4aad1419dd14952b512c7959a2904', - gasPrice: '0xc691dc448', - value: '0x0', - gas: '0xc3500', - input: - '0x29941edd7ba288a014555c9b1446b215605b4f6803e68a8b430bcbc08e75400e4b38a1a10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000002a8aa000000000000000000000000000000000000000000000000000000000002ac150', - to: '0xff066331be693be721994cf19905b2dc7475c5c9', - nonce: '0x98', - v: '0x25', - r: '0x1b5e176d927f8e9ab405058b2d2457392da3e20f328b16ddabcebc33eaac5fea', - s: '0x4ba69724e8f69de52f0125ad8b3c5c2cef33019bac3249e2c0a2192766d1721c', -}; - -export const karuraContractDeployTx = { - blockHash: '0x6b1378795aeedc85a88d40b2d48cf0e2408f783ba84f7cea068bfbb3ff3ad90a', - blockNumber: '0x1bd799', - transactionIndex: '0x0', - hash: '0x56a429edfc1c07d7fd4c048e6e868dbaaa632fc329e7bb7ed744a48bca5bb493', - from: '0xe2e2d9e31d7e1cc1178fe0d1c5950f6c809816a3', - gasPrice: '0x2e73326680e', - value: '0x0', - gas: '0x1406f40', - input: - '0x608060405234801561001057600080fd5b5060405161078f38038061078f83398101604081905261002f91610314565b818161005c60017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd61042c565b6000805160206107488339815191521461008657634e487b7160e01b600052600160045260246000fd5b6100928282600061009b565b50505050610491565b6100a4836100d1565b6000825111806100b15750805b156100cc576100ca838361011160201b6100291760201c565b505b505050565b6100da8161013d565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606101368383604051806060016040528060278152602001610768602791396101fd565b9392505050565b610150816102d260201b6100551760201c565b6101b75760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084015b60405180910390fd5b806101dc60008051602061074883398151915260001b6102d860201b61005b1760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060833b61025c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016101ae565b600080856001600160a01b03168560405161027791906103dd565b600060405180830381855af49150503d80600081146102b2576040519150601f19603f3d011682016040523d82523d6000602084013e6102b7565b606091505b5090925090506102c88282866102db565b9695505050505050565b3b151590565b90565b606083156102ea575081610136565b8251156102fa5782518084602001fd5b8160405162461bcd60e51b81526004016101ae91906103f9565b60008060408385031215610326578182fd5b82516001600160a01b038116811461033c578283fd5b60208401519092506001600160401b0380821115610358578283fd5b818501915085601f83011261036b578283fd5b81518181111561037d5761037d61047b565b604051601f8201601f19908116603f011681019083821181831017156103a5576103a561047b565b816040528281528860208487010111156103bd578586fd5b6103ce83602083016020880161044f565b80955050505050509250929050565b600082516103ef81846020870161044f565b9190910192915050565b602081526000825180602084015261041881604085016020870161044f565b601f01601f19169190910160400192915050565b60008282101561044a57634e487b7160e01b81526011600452602481fd5b500390565b60005b8381101561046a578181015183820152602001610452565b838111156100ca5750506000910152565b634e487b7160e01b600052604160045260246000fd5b6102a8806104a06000396000f3fe60806040523661001357610011610017565b005b6100115b61002761002261005e565b610096565b565b606061004e838360405180606001604052806027815260200161024c602791396100ba565b9392505050565b3b151590565b90565b60006100917f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b3660008037600080366000845af43d6000803e8080156100b5573d6000f35b3d6000fd5b6060833b61011e5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084015b60405180910390fd5b600080856001600160a01b03168560405161013991906101cc565b600060405180830381855af49150503d8060008114610174576040519150601f19603f3d011682016040523d82523d6000602084013e610179565b606091505b5091509150610189828286610193565b9695505050505050565b606083156101a257508161004e565b8251156101b25782518084602001fd5b8160405162461bcd60e51b815260040161011591906101e8565b600082516101de81846020870161021b565b9190910192915050565b602081526000825180602084015261020781604085016020870161021b565b601f01601f19169190910160400192915050565b60005b8381101561023657818101518382015260200161021e565b83811115610245576000848401525b5050505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212203ee6993445d26cb1f3937811bd071a1164dee553ec2fc9b1ae9ba0be2a91946f64736f6c63430008040033360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564000000000000000000000000141fba8ad5d61bdab45a047cf60b5ad9784987fb000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000e434a5fcd4000000000000000000000000c0946f51ddd63e12c51b23f5814b43c9bc8aa70000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000b00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000100000000000000000000000058cc3ae5c097b213ce3c81979e1b9f9570746aa500000000000000000000000000000000000000000000000000000000', - to: null, - nonce: '0x4', - v: '0x25', - r: '0x1b5e176d927f8e9ab405058b2d2457392da3e20f328b16ddabcebc33eaac5fea', - s: '0x4ba69724e8f69de52f0125ad8b3c5c2cef33019bac3249e2c0a2192766d1721c', -}; - - export const ERC20_BYTECODE = '6060604052341561000f57600080fd5b604051610dd1380380610dd18339810160405280805190602001909190805182019190602001805190602001909190805182019190505083600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008190555082600390805190602001906100a79291906100e3565b5081600460006101000a81548160ff021916908360ff16021790555080600590805190602001906100d99291906100e3565b5050505050610188565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061012457805160ff1916838001178555610152565b82800160010185558215610152579182015b82811115610151578251825591602001919060010190610136565b5b50905061015f9190610163565b5090565b61018591905b80821115610181576000816000905550600101610169565b5090565b90565b610c3a806101976000396000f3006060604052600436106100af576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806306fdde03146100b4578063095ea7b31461014257806318160ddd1461019c57806323b872dd146101c557806327e235e31461023e578063313ce5671461028b5780635c658165146102ba57806370a082311461032657806395d89b4114610373578063a9059cbb14610401578063dd62ed3e1461045b575b600080fd5b34156100bf57600080fd5b6100c76104c7565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101075780820151818401526020810190506100ec565b50505050905090810190601f1680156101345780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561014d57600080fd5b610182600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610565565b604051808215151515815260200191505060405180910390f35b34156101a757600080fd5b6101af610657565b6040518082815260200191505060405180910390f35b34156101d057600080fd5b610224600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803590602001909190505061065d565b604051808215151515815260200191505060405180910390f35b341561024957600080fd5b610275600480803573ffffffffffffffffffffffffffffffffffffffff169060200190919050506108f7565b6040518082815260200191505060405180910390f35b341561029657600080fd5b61029e61090f565b604051808260ff1660ff16815260200191505060405180910390f35b34156102c557600080fd5b610310600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610922565b6040518082815260200191505060405180910390f35b341561033157600080fd5b61035d600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610947565b6040518082815260200191505060405180910390f35b341561037e57600080fd5b610386610990565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156103c65780820151818401526020810190506103ab565b50505050905090810190601f1680156103f35780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561040c57600080fd5b610441600480803573ffffffffffffffffffffffffffffffffffffffff16906020019091908035906020019091905050610a2e565b604051808215151515815260200191505060405180910390f35b341561046657600080fd5b6104b1600480803573ffffffffffffffffffffffffffffffffffffffff1690602001909190803573ffffffffffffffffffffffffffffffffffffffff16906020019091905050610b87565b6040518082815260200191505060405180910390f35b60038054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561055d5780601f106105325761010080835404028352916020019161055d565b820191906000526020600020905b81548152906001019060200180831161054057829003601f168201915b505050505081565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b60005481565b600080600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541015801561072e5750828110155b151561073957600080fd5b82600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555082600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8110156108865782600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a360019150509392505050565b60016020528060005260406000206000915090505481565b600460009054906101000a900460ff1681565b6002602052816000526040600020602052806000526040600020600091509150505481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60058054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610a265780601f106109fb57610100808354040283529160200191610a26565b820191906000526020600020905b815481529060010190602001808311610a0957829003601f168201915b505050505081565b600081600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410151515610a7e57600080fd5b81600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050929150505600a165627a7a72305820df254047bc8f2904ad3e966b6db116d703bebd40efadadb5e738c836ffc8f58a0029'; export const ERC20_ABI = [ diff --git a/packages/eth-rpc-adapter/src/__tests__/e2e/endpoint.test.ts b/packages/eth-rpc-adapter/src/__tests__/e2e/endpoint.test.ts index 54695c402..c138d4ab3 100644 --- a/packages/eth-rpc-adapter/src/__tests__/e2e/endpoint.test.ts +++ b/packages/eth-rpc-adapter/src/__tests__/e2e/endpoint.test.ts @@ -10,7 +10,7 @@ import { import { ApiPromise, WsProvider } from '@polkadot/api'; import { BigNumber } from '@ethersproject/bignumber'; import { Contract } from '@ethersproject/contracts'; -import { AcalaJsonRpcProvider, DUMMY_LOGS_BLOOM, EvmRpcProvider, ONE_HUNDRED_GWEI, nativeToEthDecimal, sleep } from '@acala-network/eth-providers'; +import { AcalaJsonRpcProvider, EvmRpcProvider, ONE_HUNDRED_GWEI, nativeToEthDecimal, sleep } from '@acala-network/eth-providers'; import { Interface, formatEther, parseEther, parseUnits } from 'ethers/lib/utils'; import { SubqlProvider } from '@acala-network/eth-providers/utils/subqlProvider'; import { Wallet } from '@ethersproject/wallet'; @@ -65,6 +65,7 @@ import { RPC_URL, net_listening, deployGasMonster, + toDeterministic, } from './utils'; import { @@ -78,15 +79,6 @@ import { allLogs, deployHelloWorldData, evmAccounts, - karuraBlock1818188, - karuraBlock1818518, - karuraBlock2449983, - karuraContractCallTx, - karuraContractCallTxReceipt, - karuraContractDeployTx, - karuraContractDeployTxReceipt, - karuraSendKarTx, - karuraSendKarTxReceipt, log22_0, log22_1, } from './consts'; @@ -161,156 +153,29 @@ describe('endpoint', () => { describe('eth_getTransactionReceipt', () => { it('returns correct result when hash exist for local transactions', async () => { const allTxReceipts = await subql.getAllTxReceipts(); - expect(allTxReceipts.length).to.greaterThan(0); - let txR = allTxReceipts.find((r) => r.blockNumber === '10'); - let res = await eth_getTransactionReceipt([txR.transactionHash]); - expect(res.data.result).to.deep.contains({ - to: '0x0230135fded668a3f7894966b14f42e65da322e4', - from: ADDRESS_ALICE, - contractAddress: null, - transactionIndex: '0x0', - gasUsed: '0x1a8a4', - logsBloom: DUMMY_LOGS_BLOOM, - blockHash: txR.blockHash, - transactionHash: txR.transactionHash, - logs: [ - { - transactionIndex: '0x0', - blockNumber: '0xa', - transactionHash: txR.transactionHash, - address: '0x0000000000000000000000000000000000000803', - topics: [ - '0x7b1ccce9b5299ff0ae3d9adc0855268a4ad3527b2bcde01ccadde2fb878ecb8a', - '0x0000000000000000000000000230135fded668a3f7894966b14f42e65da322e4', - ], - data: '0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000748849ea0c000000000000000000000000000000000000000000000000000000e8d4a51000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000001', - logIndex: '0x0', - blockHash: txR.blockHash, - }, - ], - blockNumber: '0xa', - cumulativeGasUsed: '0x0', // FIXME: - // effectiveGasPrice: '0x7b501b0da7', - status: '0x1', - type: '0x0', - }); - - txR = allTxReceipts.find((r) => r.blockNumber === '9'); - res = await eth_getTransactionReceipt([txR.transactionHash]); - expect(res.data.result).to.deep.contain({ - to: '0x0230135fded668a3f7894966b14f42e65da322e4', - from: ADDRESS_ALICE, - contractAddress: null, - transactionIndex: '0x0', - gasUsed: '0x1f615', - logsBloom: DUMMY_LOGS_BLOOM, - blockHash: txR.blockHash, - transactionHash: txR.transactionHash, - logs: [ - { - transactionIndex: '0x0', - blockNumber: '0x9', - transactionHash: txR.transactionHash, - address: '0x0000000000000000000000000000000000000803', - topics: [ - '0x7b1ccce9b5299ff0ae3d9adc0855268a4ad3527b2bcde01ccadde2fb878ecb8a', - '0x0000000000000000000000000230135fded668a3f7894966b14f42e65da322e4', - ], - data: '0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000010000000000000000000000000000000000000000000100000000000000000002', - logIndex: '0x0', - blockHash: txR.blockHash, - }, - ], - blockNumber: '0x9', - cumulativeGasUsed: '0x0', // FIXME: - // effectiveGasPrice: '0x71ca23a4e3', - status: '0x1', - type: '0x0', - }); + const tx1 = allTxReceipts.find((r) => r.blockNumber === '10'); + const tx2 = allTxReceipts.find((r) => r.blockNumber === '9'); + const tx3 = allTxReceipts.find((r) => r.blockNumber === '6'); + const tx4 = allTxReceipts.find((r) => r.blockNumber === '20'); - txR = allTxReceipts.find((r) => r.blockNumber === '6'); - res = await eth_getTransactionReceipt([txR.transactionHash]); - expect(res.data.result).to.deep.contain({ - to: '0x0230135fded668a3f7894966b14f42e65da322e4', - from: ADDRESS_ALICE, - contractAddress: null, - transactionIndex: '0x0', - gasUsed: '0x1a8d3', - logsBloom: DUMMY_LOGS_BLOOM, - blockHash: txR.blockHash, - transactionHash: txR.transactionHash, - logs: [ - { - transactionIndex: '0x0', - blockNumber: '0x6', - transactionHash: txR.transactionHash, - address: '0x0000000000000000000000000000000000000803', - topics: [ - '0x7b1ccce9b5299ff0ae3d9adc0855268a4ad3527b2bcde01ccadde2fb878ecb8a', - '0x0000000000000000000000000230135fded668a3f7894966b14f42e65da322e4', - ], - data: '0x0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000e8d4a51000000000000000000000000000000000000000000000000000000001d131f6171f000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000001', - logIndex: '0x0', - blockHash: txR.blockHash, - }, - ], - blockNumber: '0x6', - cumulativeGasUsed: '0x0', // FIXME: - // effectiveGasPrice: '0x7b3ad33de2', - status: '0x1', - type: '0x0', - }); + const [ + res1, + res2, + res3, + res4, // dex.swap with erc20 tokens + ] = await Promise.all([ + eth_getTransactionReceipt([tx1.transactionHash]), + eth_getTransactionReceipt([tx2.transactionHash]), + eth_getTransactionReceipt([tx3.transactionHash]), + eth_getTransactionReceipt([tx4.transactionHash]), + ]); - // dex.swap with erc20 - txR = allTxReceipts.find((r) => r.blockNumber === '20'); - res = await eth_getTransactionReceipt([txR.transactionHash]); - expect(res.data.result).to.deep.contain({ - to: DETERMINISTIC_SETUP_DEX_ADDRESS, - from: ADDRESS_ALICE, - contractAddress: null, - transactionIndex: '0x0', - gasUsed: '0xcbbd', - logsBloom: DUMMY_LOGS_BLOOM, - blockHash: txR.blockHash, - transactionHash: txR.transactionHash, - logs: [ - { - transactionIndex: '0x0', - blockNumber: '0x14', - transactionHash: txR.transactionHash, - address: DETERMINISTIC_SETUP_DEX_ADDRESS, - topics: [ - '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef', - '0x00000000000000000000000082a258cb20e2adb4788153cd5eb5839615ece9a0', - '0x000000000000000000000000905c015e38c24ed973fd6075541a124c621fa743', - ], - data: '0x0000000000000000000000000000000000000000000000000000000000002710', - logIndex: '0x0', - blockHash: txR.blockHash, - }, - { - transactionIndex: '0x0', - blockNumber: '0x14', - transactionHash: txR.transactionHash, - address: '0xe85ef9063dd28f157eb97ca03f50f4a3bdecd37e', - topics: [ - '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef', - '0x00000000000000000000000082a258cb20e2adb4788153cd5eb5839615ece9a0', - '0x000000000000000000000000905c015e38c24ed973fd6075541a124c621fa743', - ], - data: '0x00000000000000000000000000000000000000000000000000000000000003e8', - logIndex: '0x1', - blockHash: txR.blockHash, - }, - ], - blockNumber: '0x14', - cumulativeGasUsed: '0x0', - // effectiveGasPrice: '0x8885941ca0', - status: '0x1', - type: '0x0', - }); + expect(toDeterministic(res1.data.result)).toMatchSnapshot(); + expect(toDeterministic(res2.data.result)).toMatchSnapshot(); + expect(toDeterministic(res3.data.result)).toMatchSnapshot(); + expect(toDeterministic(res4.data.result)).toMatchSnapshot(); }); it('returns correct result for public karura transactions', async () => { @@ -319,7 +184,11 @@ describe('endpoint', () => { return; } - const [contractCallRes, contractDeployRes, sendKarRes] = await Promise.all([ + const [ + contractCallRes, + contractDeployRes, + sendKarRes, + ] = await Promise.all([ eth_getTransactionReceipt_karura([KARURA_CONTRACT_CALL_TX_HASH]), eth_getTransactionReceipt_karura([KARURA_CONTRACT_DEPLOY_TX_HASH]), eth_getTransactionReceipt_karura([KARURA_SEND_KAR_TX_HASH]), @@ -329,9 +198,9 @@ describe('endpoint', () => { expect(contractDeployRes.status).to.equal(200); expect(sendKarRes.status).to.equal(200); - expect(contractCallRes.data.result).to.deep.equal(karuraContractCallTxReceipt); - expect(contractDeployRes.data.result).to.deep.equal(karuraContractDeployTxReceipt); - expect(sendKarRes.data.result).to.deep.equal(karuraSendKarTxReceipt); + expect(toDeterministic(contractCallRes.data.result)).toMatchSnapshot(); + expect(toDeterministic(contractDeployRes.data.result)).toMatchSnapshot(); + expect(toDeterministic(sendKarRes.data.result)).toMatchSnapshot(); }); it('return correct error or null', async () => { @@ -627,81 +496,22 @@ describe('endpoint', () => { const tx3 = allTxReceipts.find((r) => r.blockNumber === '6'); const tx4 = allTxReceipts.find((r) => r.blockNumber === '20'); - let res = await eth_getTransactionByHash([tx1.transactionHash]); - expect(res.data.result).to.deep.contain({ - blockHash: tx1.blockHash, - blockNumber: '0xa', - transactionIndex: '0x0', - // gasPrice: '0x7b501b0da7', - gas: '0x1fd91', - input: - '0x3d8d96200000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000e8d4a51000000000000000000000000000000000000000000000000000000000e8d4a51000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000001', - v: '0x25', - r: '0x1b5e176d927f8e9ab405058b2d2457392da3e20f328b16ddabcebc33eaac5fea', - s: '0x4ba69724e8f69de52f0125ad8b3c5c2cef33019bac3249e2c0a2192766d1721c', - hash: tx1.transactionHash, - nonce: '0x6', - from: ADDRESS_ALICE, - to: '0x0230135fded668a3f7894966b14f42e65da322e4', - value: '0xde0b6b3a7640000', - }); - - res = await eth_getTransactionByHash([tx2.transactionHash]); - expect(res.data.result).to.deep.contain({ - blockHash: tx2.blockHash, - blockNumber: '0x9', - transactionIndex: '0x0', - // gasPrice: '0x71ca23a4e3', - gas: '0x1fd91', - input: - '0x3d8d962000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000e8d4a510000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000010000000000000000000000000000000000000000000100000000000000000002', - v: '0x25', - r: '0x1b5e176d927f8e9ab405058b2d2457392da3e20f328b16ddabcebc33eaac5fea', - s: '0x4ba69724e8f69de52f0125ad8b3c5c2cef33019bac3249e2c0a2192766d1721c', - hash: tx2.transactionHash, - nonce: '0x5', - from: ADDRESS_ALICE, - to: '0x0230135fded668a3f7894966b14f42e65da322e4', - value: '0xde0b6b3a7640000', - }); - - res = await eth_getTransactionByHash([tx3.transactionHash]); - expect(res.data.result).to.deep.contain({ - blockHash: tx3.blockHash, - blockNumber: '0x6', - transactionIndex: '0x0', - // gasPrice: '0x7b3ad33de2', - gas: '0x1fd91', - input: - '0x6fc4b4e50000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000e8d4a510000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000001', - v: '0x25', - r: '0x1b5e176d927f8e9ab405058b2d2457392da3e20f328b16ddabcebc33eaac5fea', - s: '0x4ba69724e8f69de52f0125ad8b3c5c2cef33019bac3249e2c0a2192766d1721c', - hash: tx3.transactionHash, - nonce: '0x2', - from: ADDRESS_ALICE, - to: '0x0230135fded668a3f7894966b14f42e65da322e4', - value: '0xde0b6b3a7640000', - }); + const [ + res1, + res2, + res3, + res4, // dex.swap with erc20 tokens + ] = await Promise.all([ + eth_getTransactionByHash([tx1.transactionHash]), + eth_getTransactionByHash([tx2.transactionHash]), + eth_getTransactionByHash([tx3.transactionHash]), + eth_getTransactionByHash([tx4.transactionHash]), + ]); - // dex.swap with erc20 tokens - res = await eth_getTransactionByHash([tx4.transactionHash]); - expect(res.data.result).to.deep.contain({ - blockHash: tx4.blockHash, - blockNumber: '0x14', - transactionIndex: '0x0', - hash: tx4.transactionHash, - from: ADDRESS_ALICE, - // gasPrice: '0x8885941ca0', - value: '0x0', - gas: '0x200b20', - input: '0x', - to: DETERMINISTIC_SETUP_DEX_ADDRESS, - nonce: '0x10', - v: '0x25', - r: '0x1b5e176d927f8e9ab405058b2d2457392da3e20f328b16ddabcebc33eaac5fea', - s: '0x4ba69724e8f69de52f0125ad8b3c5c2cef33019bac3249e2c0a2192766d1721c', - }); + expect(toDeterministic(res1.data.result)).toMatchSnapshot(); + expect(toDeterministic(res2.data.result)).toMatchSnapshot(); + expect(toDeterministic(res3.data.result)).toMatchSnapshot(); + expect(toDeterministic(res4.data.result)).toMatchSnapshot(); }); it('returns correct result for public karura transactions', async () => { @@ -710,7 +520,11 @@ describe('endpoint', () => { return; } - const [contractCallRes, contractDeployRes, sendKarRes] = await Promise.all([ + const [ + contractCallRes, + contractDeployRes, + sendKarRes, + ] = await Promise.all([ eth_getTransactionByHash_karura([KARURA_CONTRACT_CALL_TX_HASH]), eth_getTransactionByHash_karura([KARURA_CONTRACT_DEPLOY_TX_HASH]), eth_getTransactionByHash_karura([KARURA_SEND_KAR_TX_HASH]), @@ -720,9 +534,9 @@ describe('endpoint', () => { expect(contractDeployRes.status).to.equal(200); expect(sendKarRes.status).to.equal(200); - expect(contractCallRes.data.result).to.deep.equal(karuraContractCallTx); - expect(contractDeployRes.data.result).to.deep.equal(karuraContractDeployTx); - expect(sendKarRes.data.result).to.deep.equal(karuraSendKarTx); + expect(toDeterministic(contractCallRes.data.result)).toMatchSnapshot(); + expect(toDeterministic(contractDeployRes.data.result)).toMatchSnapshot(); + expect(toDeterministic(sendKarRes.data.result)).toMatchSnapshot(); }); it.skip('returns correct result when tx is pending', async () => { @@ -1364,32 +1178,24 @@ describe('endpoint', () => { const resFull = (await eth_getBlockByNumber_karura([1818188, true])).data.result; const res = (await eth_getBlockByNumber_karura([1818188, false])).data.result; - const block1818188NotFull = karuraBlock1818188; - - expect(resFull).to.deep.equal(karuraBlock1818188); - expect(res).to.deep.equal(block1818188NotFull); + expect(resFull).toMatchSnapshot(); + expect(res).toMatchSnapshot(); }); it('when there are 1 EVM transactions', async () => { const resFull = (await eth_getBlockByNumber_karura([1818518, true])).data.result; const res = (await eth_getBlockByNumber_karura([1818518, false])).data.result; - const block1818518NotFull = { ...karuraBlock1818518 }; - block1818518NotFull.transactions = karuraBlock1818518.transactions.map((t) => t.hash) as any; - - expect(resFull).to.deep.equal(karuraBlock1818518); - expect(res).to.deep.equal(block1818518NotFull); + expect(resFull).toMatchSnapshot(); + expect(res).toMatchSnapshot(); }); it('when there are >= 2 EVM transactions', async () => { const resFull = (await eth_getBlockByNumber_karura([2449983, true])).data.result; const res = (await eth_getBlockByNumber_karura([2449983, false])).data.result; - const block2449983NotFull = { ...karuraBlock2449983 }; - block2449983NotFull.transactions = karuraBlock2449983.transactions.map((t) => t.hash) as any; - - expect(resFull).to.deep.equal(karuraBlock2449983); - expect(res).to.deep.equal(block2449983NotFull); + expect(resFull).toMatchSnapshot(); + expect(res).toMatchSnapshot(); }); }); diff --git a/packages/eth-rpc-adapter/src/__tests__/e2e/utils.ts b/packages/eth-rpc-adapter/src/__tests__/e2e/utils.ts index 22d3b5ae1..41e80e166 100644 --- a/packages/eth-rpc-adapter/src/__tests__/e2e/utils.ts +++ b/packages/eth-rpc-adapter/src/__tests__/e2e/utils.ts @@ -122,3 +122,27 @@ export const deployGasMonster = async (wallet: Signer) => { return gm; }; + +interface IndeterministicObj { + blockHash?: string; + transactionHash?: string; + hash?: string; +} + +const toDeterministicObj = (obj: T) => { + const res = { ...obj }; + delete res.blockHash; + delete res.transactionHash; + delete res.hash; + + return res; +}; + +export const toDeterministic = (data: any) => { + const res = toDeterministicObj(data); + if (res.logs) { + res.logs = res.logs.map(toDeterministicObj); + } + + return res; +};