Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Move evm logic to evm utils #521

Merged
merged 12 commits into from
Jul 25, 2022
Merged
Show file tree
Hide file tree
Changes from 10 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 10 additions & 1 deletion .changeset/config.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,16 @@
"$schema": "https://unpkg.com/@changesets/[email protected]/schema.json",
"changelog": ["@changesets/changelog-github", { "repo": "MoralisWeb3/Moralis-JS-SDK" }],
"commit": false,
"fixed": [["@moralisweb3/core", "@moralisweb3/evm-api"]],
"fixed": [
[
"@moralisweb3/core",
"@moralisweb3/auth",
"@moralisweb3/api",
"@moralisweb3/evm-utils",
"@moralisweb3/evm-api",
"@moralisweb3/sol-api"
]
],
"linked": [],
"access": "public",
"baseBranch": "alpha",
Expand Down
12 changes: 12 additions & 0 deletions .changeset/itchy-nails-push.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
---
'test-node': patch
'@moralisweb3/api': patch
'@moralisweb3/auth': patch
'@moralisweb3/core': patch
'@moralisweb3/evm-api': patch
'@moralisweb3/evm-utils': patch
'@moralisweb3/integration': patch
'moralis': patch
---

Moved all Evm logic to @moralisweb3/evm-utils
2 changes: 1 addition & 1 deletion .eslintrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ module.exports = {
parser: '@typescript-eslint/parser',
plugins: ['@typescript-eslint', 'jest'],
extends: ['eslint:recommended', 'plugin:@typescript-eslint/recommended'],
ignorePatterns: ['**/lib/**/*', '**/*.test.ts', '**/dist/**/*', '**/build/**/*', '**/generated/**/*
ignorePatterns: ['**/lib/**/*', '**/*.test.ts', '**/dist/**/*', '**/build/**/*', '**/generated/**/*'],
env: {
browser: true,
es6: true,
Expand Down
1 change: 1 addition & 0 deletions demos/test-node/src/Tester.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ export async function smokeTest(groupName: string, name: string, getValue: () =>
console.log(`✅ (${groupName}) ${name} = ${trim(JSON.stringify(value), 32)}`);
successCount++;
} catch (e) {
console.log(e);
console.error(`❌ ${name} = ${e}`);
// console.error(e);
errorCount++;
Expand Down
8 changes: 6 additions & 2 deletions demos/test-node/tsconfig.json
Original file line number Diff line number Diff line change
@@ -1,12 +1,16 @@
{
"extends": "../../tsconfig.package.json",
"compilerOptions": {
"module": "commonjs",
"target": "es2017",
"outDir": "build",
"outDir": "./build/",
"declarationDir": "./build/",
"rootDir": "./src",
"strict": true,
"esModuleInterop": true,
"moduleResolution": "node",
"lib": ["es2017"]
"lib": ["es2017"],
"composite": false
},
"include": ["src"]
}
1 change: 1 addition & 0 deletions jest.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ module.exports = {
// Map workspaces to their source code so that Jest can resolve them correctly.
moduleNameMapper: {
'^@moralisweb3/evm-api': '<rootDir>/../evmApi/src',
'^@moralisweb3/evm-utils': '<rootDir>/../evmUtils/src',
'^@moralisweb3/api': '<rootDir>/../api/src',
'^@moralisweb3/core': '<rootDir>/../core/src',
'^@moralisweb3/(.*)$': '<rootDir>/../$1/src',
Expand Down
2 changes: 1 addition & 1 deletion nx.json
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
"tasksRunnerOptions": {
"default": {
"options": {
"cacheableOperations": ["build", "lint", "test"]
"cacheableOperations": ["build", "format", "lint", "test"]
}
}
}
Expand Down
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
"jest": "28",
"msw": "^0.43.0",
"nx": "^14.4.3",
"prettier": "^2.7.1",
"ts-jest": "^28.0.3",
"typescript": "^4.5.5",
"yarn": "^1.22.17"
Expand Down
12 changes: 2 additions & 10 deletions packages/api/src/ApiResultAdapter.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { ApiErrorCode, EvmAddress, EvmChain, MoralisApiError, MoralisDataObject } from '@moralisweb3/core';
import { ApiErrorCode, MoralisApiError, MoralisData, MoralisDataObject } from '@moralisweb3/core';

// TODO: make part of core config? The challenge in that case is to make sure it is Typed correctly
export enum ApiFormatType {
Expand All @@ -18,15 +18,7 @@ export type InputApiResult<Value extends object = object> =

export type AdaptedApiResult<Value extends object = object> =
| {
[key in keyof Value]:
| string
| boolean
| number
| null
| EvmAddress
| EvmChain
| MoralisDataObject
| AdaptedApiResult;
[key in keyof Value]: string | boolean | number | null | MoralisData | MoralisDataObject | AdaptedApiResult;
}
| AdaptedApiResult[];

Expand Down
7 changes: 4 additions & 3 deletions packages/api/src/paginatedResolver.test.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
import { ApiConfig } from './config/ApiConfig';
import axios from 'axios';
import { EvmAddress, EvmAddressish, EvmChain, EvmChainish, MoralisCoreProvider } from '@moralisweb3/core';
import { EvmAddress, EvmAddressish, EvmChain, EvmChainish } from '@moralisweb3/evm-utils';
import { BodyType } from './Resolver';
import { ApiPaginatedOptions, ApiPaginatedResolver, ApiPaginatedResponse } from './PaginatedResolver';
import { setupApi } from './test/setup';

const MOCK_API_KEY = 'test-api-key';
const API_ROOT = 'https://deep-index.moralis.io/api/v2';
Expand Down Expand Up @@ -67,9 +68,9 @@ describe('ApiResolver', () => {
unknown
>;
beforeAll(() => {
const core = MoralisCoreProvider.getDefault();
core.config.registerKey(ApiConfig.apiKey);
const core = setupApi();
core.config.set(ApiConfig.apiKey, MOCK_API_KEY);

const mockRequest = jest.spyOn(axios, 'request');
mockRequest.mockImplementation((options) => {
if (
Expand Down
6 changes: 3 additions & 3 deletions packages/api/src/resolver.test.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import { ApiConfig } from './config/ApiConfig';
import { ApiFormatType } from './ApiResultAdapter';
import axios from 'axios';
import { MoralisCoreProvider } from '@moralisweb3/core';
import { ApiResolver } from './Resolver';
import { setupApi } from './test/setup';

const MOCK_API_KEY = 'test-api-key';
const API_ROOT = 'https://deep-index.moralis.io/api/v2';
Expand Down Expand Up @@ -32,9 +32,9 @@ describe('ApiResolver', () => {
>;

beforeAll(() => {
const core = MoralisCoreProvider.getDefault();
core.config.registerKey(ApiConfig.apiKey);
const core = setupApi();
core.config.set(ApiConfig.apiKey, MOCK_API_KEY);

const mockRequest = jest.spyOn(axios, 'request');
mockRequest.mockImplementation((options) => {
if (options.url === `${API_ROOT}/info/endpointWeights` && options.method === 'GET') {
Expand Down
13 changes: 13 additions & 0 deletions packages/api/src/test/setup.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
import { MoralisCoreProvider } from '@moralisweb3/core';
import { MoralisEvmUtils } from '@moralisweb3/evm-utils';
import { MoralisApi } from '@moralisweb3/api';

export const setupApi = () => {
const core = MoralisCoreProvider.getDefault();
const api = MoralisApi.create();
const evmUtils = MoralisEvmUtils.create();

core.registerModules([api, evmUtils]);

return core;
};
3 changes: 2 additions & 1 deletion packages/auth/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
},
"dependencies": {
"@moralisweb3/core": "^2.0.0-alpha.2",
"@moralisweb3/api": "^2.0.0-alpha.2"
"@moralisweb3/api": "^2.0.0-alpha.2",
"@moralisweb3/evm-utils": "^2.0.0-alpha.2"
}
}
3 changes: 2 additions & 1 deletion packages/auth/src/methods/requestMessage.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { AuthErrorCode, EvmAddress, EvmAddressish, EvmChain, EvmChainish, MoralisAuthError } from '@moralisweb3/core';
import { AuthErrorCode, MoralisAuthError } from '@moralisweb3/core';
import { EvmAddress, EvmAddressish, EvmChain, EvmChainish } from '@moralisweb3/evm-utils';
import { initializeChallengeResolver } from '../resolvers/initializeChallenge';

export enum AuthNetwork {
Expand Down
3 changes: 2 additions & 1 deletion packages/auth/src/resolvers/completeChallenge.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { EvmAddress, EvmChain, maybe, toCamelCase } from '@moralisweb3/core';
import { maybe, toCamelCase } from '@moralisweb3/core';
import { EvmAddress, EvmChain } from '@moralisweb3/evm-utils';
import { ApiResolver } from '@moralisweb3/api';
import { operations } from '../generated/types';
import { BASE_URL } from '../MoralisAuth';
Expand Down
2 changes: 0 additions & 2 deletions packages/core/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,8 @@
"typescript": "^4.5.5"
},
"dependencies": {
"@ethersproject/address": "^5.6.0",
"@ethersproject/bignumber": "^5.6.0",
"@ethersproject/units": "^5.6.0",
Comment on lines 32 to 33
Copy link
Collaborator

@b4rtaz b4rtaz Jul 22, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we need these dependencies here?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Only as long as it is being used by the Sol datatypes in core.

"@ethersproject/transactions": "^5.6.0",
"@xstate/fsm": "^2.0.0",
"eventemitter3": "^4.0.7",
"axios": "^0.27.2"
Expand Down
17 changes: 1 addition & 16 deletions packages/core/src/Config/CoreConfig.test.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import { EvmChainish } from '../dataTypes';
import { Config, ConfigKey } from './Config';
import { BuildEnvironment, CoreConfig, EvmAddressFormat, EvmChainIdFormat, LogLevel, Network } from './CoreConfig';
import { BuildEnvironment, CoreConfig, LogLevel, Network } from './CoreConfig';
import { CoreConfigSetup } from './CoreConfigSetup';

describe('CoreConfig', () => {
Expand All @@ -22,18 +21,4 @@ describe('CoreConfig', () => {
testSetAndGet<LogLevel>(CoreConfig.logLevel, 'off');
testSetAndGet<BuildEnvironment>(CoreConfig.buidEnvironment, 'react-native');
testSetAndGet<Network>(CoreConfig.defaultNetwork, 'Solana');

describe('defaultEvmApiChain', () => {
testSetAndGet<EvmChainish>(CoreConfig.defaultEvmApiChain, 100);
testSetAndGet<EvmChainish>(CoreConfig.defaultEvmApiChain, '0x100');

it('throws an error if a evm chain is invalid', () => {
expect(() => config.set(CoreConfig.defaultEvmApiChain, 'INVALID_CHAIN')).toThrowError(
'[C0005] Invalid provided chain',
);
});
});

testSetAndGet<EvmChainIdFormat>(CoreConfig.formatEvmChainId, 'decimal');
testSetAndGet<EvmAddressFormat>(CoreConfig.formatEvmAddress, 'checksum');
});
14 changes: 0 additions & 14 deletions packages/core/src/Config/CoreConfig.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import { EvmChainish } from '../dataTypes/EvmChainish';
import { ConfigKey } from './Config';

export type LogLevel = 'verbose' | 'debug' | 'info' | 'warning' | 'error' | 'off';
Expand All @@ -23,17 +22,4 @@ export const CoreConfig = {
name: 'defaultNetwork',
defaultValue: 'Evm',
} as ConfigKey<Network>,
defaultEvmApiChain: {
name: 'defaultEvmApiChain',
defaultValue: '0x1',
} as ConfigKey<EvmChainish>,

formatEvmChainId: {
name: 'formatEvmChainId',
defaultValue: 'hex',
} as ConfigKey<EvmChainIdFormat>,
formatEvmAddress: {
name: 'formatEvmAddress',
defaultValue: 'lowercase',
} as ConfigKey<EvmAddressFormat>,
};
5 changes: 0 additions & 5 deletions packages/core/src/Config/CoreConfigSetup.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,11 @@
import { Config } from './Config';
import { CoreConfig } from './CoreConfig';
import { CoreConfigValidator } from './CoreConfigValidator';

export class CoreConfigSetup {
public static register(config: Config) {
config.registerKey(CoreConfig.logLevel);
config.registerKey(CoreConfig.buidEnvironment);

config.registerKey(CoreConfig.defaultNetwork);
config.registerKey(CoreConfig.defaultEvmApiChain, (v) => CoreConfigValidator.requireValidChain(v));

config.registerKey(CoreConfig.formatEvmChainId);
config.registerKey(CoreConfig.formatEvmAddress);
}
}
14 changes: 0 additions & 14 deletions packages/core/src/Config/CoreConfigValidator.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
import { BuildEnvironment } from './CoreConfig';
import { Config } from './Config';
import { EvmChainParser } from '../dataTypes/EvmChainParser';
import { EvmChainish } from '../dataTypes/EvmChainish';

export class CoreConfigValidator {
public static requireNodeBuidEnvironment(config: Config) {
Expand All @@ -10,16 +8,4 @@ export class CoreConfigValidator {
}
return null;
}

public static requireValidChain(value: EvmChainish) {
// TODO: validate if chain is valid api chain
if (typeof value === 'string' || typeof value === 'number') {
try {
EvmChainParser.parse(value);
} catch (error) {
return error.message;
}
}
return null;
}
}
16 changes: 15 additions & 1 deletion packages/core/src/Config/MoralisConfig.ts
Original file line number Diff line number Diff line change
@@ -1,22 +1,36 @@
import { SolNetworkish } from '../dataTypes';
import { CoreConfig } from './CoreConfig';
import { CoreConfig, EvmAddressFormat, EvmChainIdFormat } from './CoreConfig';
import { EvmChainish } from './interfaces/EvmChainish';

// @moralisweb3/core
type CoreConfigType = typeof CoreConfig;
type CoreConfigValues = { [Key in keyof CoreConfigType]: CoreConfigType[Key]['defaultValue'] };

// @moralisweb3/evm-utils
interface EvmUtilsConfigValues {
formatEvmAddress: EvmAddressFormat;
formatEvmChainId: EvmChainIdFormat;
}

// @moralisweb3/api
interface ApiConfigValues {
apiKey: string;
}

// @moralisweb3/evm-api
interface EvmApiConfigValues {
defaultEvmApiChain: EvmChainish;
}

// @moralisweb3/sol-api
interface SolApiConfigValues {
defaultSolNetwork: SolNetworkish;
}

export type MoralisConfigValues =
| CoreConfigValues
| EvmUtilsConfigValues
| ApiConfigValues
| EvmApiConfigValues
| SolApiConfigValues
| { [key: string]: string | number }; // Other, not strong typed values.
1 change: 1 addition & 0 deletions packages/core/src/Config/index.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
export * from './Config';
export * from './CoreConfig';
export * from './MoralisConfig';
export * from './interfaces';
12 changes: 12 additions & 0 deletions packages/core/src/Config/interfaces/EvmChainish.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
/**
* Note this is just an interface, used in the core config.
* The implementations are located in the @moralisweb3/evm-utils package.
*/

export interface EvmChainable {
decimal: number;
hex: string;
apiHex: string;
}

export type EvmChainish = EvmChainable | string | number;
1 change: 1 addition & 0 deletions packages/core/src/Config/interfaces/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export * from './EvmChainish';
6 changes: 0 additions & 6 deletions packages/core/src/dataTypes/EvmTransaction/index.ts

This file was deleted.

7 changes: 0 additions & 7 deletions packages/core/src/dataTypes/index.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,4 @@
export * from './EvmChain';
export * from './EvmChainish';
export * from './EvmAddress';
export * from './EvmNative';
export * from './EvmTransaction';
export * from './EvmTransactionLog';
export * from './SolNetwork';
export * from './SolAddress';
export * from './SolNative';
export * from './tokens';
export * from './abstract';
3 changes: 0 additions & 3 deletions packages/core/src/dataTypes/tokens/index.ts

This file was deleted.

1 change: 1 addition & 0 deletions packages/core/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,6 @@ export * from './State';
export * from './dataTypes';
export * from './controllers';
export * from './utils';
export * from './Assert';

export default MoralisCore;
1 change: 1 addition & 0 deletions packages/evmApi/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
"dependencies": {
"@moralisweb3/api": "^2.0.0-alpha.2",
"@moralisweb3/core": "^2.0.0-alpha.2",
"@moralisweb3/evm-utils": "^2.0.0-alpha.2",
"ethers": "^5.6.2"
}
}
Loading