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

API-72: first integration of chain simulator #1381

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
58 commits
Select commit Hold shift + click to select a range
96d3a1c
added dockerfile, workflow and entrypoint (#1364)
dragos-rebegea Oct 29, 2024
a815b28
Add guardianData to GatewayComponentRequest in GatewayService (#1377)
cfaur09 Nov 12, 2024
74c71ea
API-72: first integration of chain simulator
bogdan-rosianu Nov 14, 2024
f6638e9
API-72: npm init
bogdan-rosianu Nov 14, 2024
1aaeeac
API-72: refactoring
bogdan-rosianu Nov 14, 2024
7bd5b43
API-72: fix workflow file + cs start script
bogdan-rosianu Nov 14, 2024
7e105f4
API-72: fix workflow file
bogdan-rosianu Nov 14, 2024
ccc4712
API-72: update chain simulator tests and configuration
cfaur09 Nov 14, 2024
2cc680f
Enhance e2e test workflow: add API startup delay and shutdown step; i…
cfaur09 Nov 14, 2024
ed50e0f
Replace accounts e2e tests with new blocks e2e tests for improved cov…
cfaur09 Nov 15, 2024
4672d97
Update blocks e2e test to filter by nonce 0 for accurate count valida…
cfaur09 Nov 15, 2024
b6ad48a
Update blocks e2e test to adjust epoch filter and add validation for …
cfaur09 Nov 15, 2024
2dee24d
Add e2e test for GET /blocks/latest endpoint with property and type v…
cfaur09 Nov 15, 2024
58b9539
Add e2e test for blocks count with high epoch and nonce values
cfaur09 Nov 15, 2024
b211e0b
Remove scheduledRootHash from expected properties and type validation…
cfaur09 Nov 15, 2024
38083fb
Add e2e tests for GET /blocks and GET /miniblocks endpoints with stat…
cfaur09 Nov 15, 2024
e5258e4
Add e2e tests for GET /miniblocks endpoint with pagination and type f…
cfaur09 Nov 15, 2024
9554a75
Add e2e tests for GET /rounds
cfaur09 Nov 15, 2024
7672364
small refactoring
cfaur09 Nov 15, 2024
1d0494d
small refactoring
cfaur09 Nov 15, 2024
09362f1
small refactoring_2
cfaur09 Nov 15, 2024
d511195
small refactoring_2
cfaur09 Nov 15, 2024
44d34c0
update file formatting
cfaur09 Nov 15, 2024
b8bf473
Create results.cs-e2e.ts
cfaur09 Nov 15, 2024
fa18b04
Update results.cs-e2e.ts
cfaur09 Nov 16, 2024
6b64688
Update results.cs-e2e.ts
cfaur09 Nov 16, 2024
874aa18
Add issueMultipleESDT + tokens.cs-e2e.ts
cfaur09 Nov 16, 2024
fce09a0
Update tokens.cs-e2e.ts
cfaur09 Nov 16, 2024
db89051
Update tokens.cs-e2e.ts
cfaur09 Nov 16, 2024
cd618d2
Update tokens.cs-e2e.ts
cfaur09 Nov 17, 2024
f7b19d8
Update tokens.cs-e2e.ts
cfaur09 Nov 17, 2024
92ce317
API-72: fix workflow file (#1385)
dragos-rebegea Nov 18, 2024
470a829
Merge main development (#1386)
dragos-rebegea Nov 18, 2024
820bbf2
Merge branch 'main' into development
dragos-rebegea Nov 18, 2024
9037a37
Development (#1387)
dragos-rebegea Nov 18, 2024
dfc65cf
add EOL
cfaur09 Nov 20, 2024
540331f
add stop-chain-simulator script
cfaur09 Nov 20, 2024
a4cbeb0
API-91: type + subType fixes (#1390)
bogdan-rosianu Nov 21, 2024
3733c7d
fix get profile (#1391)
dragos-rebegea Nov 22, 2024
9638379
Merge branch 'main' into development
dragos-rebegea Nov 22, 2024
83876fb
Merge pull request #1392 from multiversx/development
dragos-rebegea Nov 22, 2024
5cf7be0
fix fields query in transactions (#1397)
cfaur09 Nov 27, 2024
429c410
hotfix
bogdan-rosianu Nov 27, 2024
f8ec9c1
Merge pull request #1398 from multiversx/hotfix-empty-token-type-from…
bogdan-rosianu Nov 28, 2024
36dd6bc
Update load-tests.yml
bogdan-rosianu Nov 28, 2024
b7ee557
Merge pull request #1400 from multiversx/update-load-test-workflow-tr…
bogdan-rosianu Nov 28, 2024
3f1bb7f
Multi transfer EGLD-000000 support (#1401)
dragos-rebegea Dec 2, 2024
bf46995
Merge branch 'development' into API-72-first-integration-of-cs-in-api…
cfaur09 Dec 2, 2024
768cb95
refactorin + adding utils checks
cfaur09 Dec 2, 2024
d185d50
move chain simulator operations into utils
cfaur09 Dec 2, 2024
a29e5f2
add issueMultipleNftsCollections + env Alice Address
cfaur09 Dec 2, 2024
8b3384b
update tokens and collections tests + added bob address in config
cfaur09 Dec 2, 2024
cd3eddb
Update collections.cs-e2e.ts
cfaur09 Dec 2, 2024
41e7039
update docker file + overridable-config
cfaur09 Dec 3, 2024
41c5aa5
revert chainsimulator image
cfaur09 Dec 3, 2024
f604ab9
update chainsimulator image
cfaur09 Dec 3, 2024
de7a2ca
fixes after review
cfaur09 Dec 3, 2024
91290e3
Update .gitignore
cfaur09 Dec 3, 2024
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
59 changes: 59 additions & 0 deletions .github/workflows/chain-simulator-e2e-tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
name: Chain simulator e2e tests workflow

on:
pull_request:

jobs:
test-chainsimulator-e2e:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [18.x]

steps:
- uses: actions/checkout@v3

- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
cache: 'npm'

- name: Build and start chain simulator
run: npm run start-chain-simulator

- name: Wait for services to be ready
run: |
echo "Waiting for services to be healthy..."
docker ps
docker logs chainsimulator
sleep 20 # Wait for 20 seconds to ensure services are up

- name: Print docker containers
run: docker ps

- name: Start API Docker containers
run: |
cd .
docker compose up -d

- name: Wait for API docker containers to start
run: |
sleep 20
docker ps

- run: npm ci
- run: npm run init

- name: Start API
run: |
npm run start:mainnet:e2e &
sleep 10 # Wait a little more to ensure the API is fully up

- name: Run e2e tests
run: npm run test:cs-e2e

- name: Stop API after tests
run: |
echo "Stopping the API..."
kill $(lsof -t -i:3001)
2 changes: 0 additions & 2 deletions .github/workflows/load-tests.yml
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
name: Load Tests

on:
push:
branches: [main, development]
pull_request:
branches: [main, development]

Expand Down
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -41,4 +41,7 @@ lerna-debug.log*

/src/plugins

.env
.env

# CS Environment variables
src/test/chain-simulator/config/.env
145 changes: 119 additions & 26 deletions config/config.e2e.mainnet.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,51 @@ network: 'mainnet'
metaChainShardId: 4294967295
api:
public: true
publicPort: 3001
private: true
graphql: true
privatePort: 4001
websocket: true
cron:
cacheWarmer: true
fastWarm: false
queueWorker: true
elasticUpdater: false
flags:
useRequestCaching: true
useKeepAliveAgent: true
useTracing: false
useRequestLogging: false
useVmQueryTracing: false
processNfts: true
collectionPropertiesFromGateway: false
features:
eventsNotifier:
enabled: false
port: 5674
url: 'amqp://guest:guest@127.0.0.1:5672'
exchange: 'all_events'
queue: 'api-process-logs-and-events'
guestCaching:
enabled: false
hitsThreshold: 100
ttl: 12
transactionPool:
enabled: false
transactionPoolWarmer:
enabled: false
cronExpression: '*/5 * * * * *'
ttlInSeconds: 60
updateCollectionExtraDetails:
enabled: false
updateAccountExtraDetails:
enabled: false
transfersLast24hUrl: 'https://tools.multiversx.com/growth-api/explorer/widgets/most-used/applications'
marketplace:
enabled: false
serviceUrl: 'https://nfts-graph.multiversx.com/graphql'
exchange:
enabled: false
serviceUrl: 'https://graph.xexchange.com/graphql'
dataApi:
enabled: false
serviceUrl: 'https://data-api.multiversx.com'
Expand All @@ -13,35 +55,93 @@ features:
maxExpirySeconds: 86400
acceptedOrigins:
- ''
admins:
- ''
jwtSecret: ''
stakingV4:
enabled: false
cronExpression: '*/5 * * * * *'
activationEpoch: 1391
nodeEpochsLeft:
enabled: false
transactionProcessor:
enabled: false
maxLookBehind: 1000
transactionCompleted:
enabled: false
maxLookBehind: 1000
logLevel: 'Error'
transactionBatch:
enabled: false
maxLookBehind: 1000
deepHistory:
enabled: false
url: ''
cron:
transactionProcessor: false
transactionProcessorMaxLookBehind: 1000
cacheWarmer: false
flags:
useRequestCaching: true
useKeepAliveAgent: true
useTracing: false
collectionPropertiesFromGateway: false
statusChecker:
enabled: false
thresholds:
tokens: 1000
nodes: 5000
providers: 150
tokenSupplyCount: 100
tokenAssets: 100
tokenAccounts: 1000
tokenTransactions: 1000
nodeValidators: 3260
nftScamInfo:
enabled: false
processNfts:
enabled: false
nftQueueName: 'api-process-nfts'
deadLetterQueueName: 'api-process-nfts-dlq'
tps:
enabled: false
maxLookBehindNonces: 100
nodesFetch:
enabled: false
serviceUrl: 'https://api.multiversx.com'
tokensFetch:
enabled: false
serviceUrl: 'https://api.multiversx.com'
providersFetch:
enabled: false
serviceUrl: 'https://api.multiversx.com'
assetsFetch:
enabled: false
assetesUrl: 'https://tools.multiversx.com/assets-cdn'
image:
width: 600
height: 600
type: 'png'
aws:
s3KeyId: ''
s3Secret: ''
s3Bucket: 'media.elrond.com'
s3Region: ''
urls:
self: 'https://api.multiversx.com'
self: 'http://localhost:3001'
elastic:
- 'https://index.multiversx.com'
- 'http://localhost:9200'
gateway:
- 'https://gateway.multiversx.com'
- 'http://localhost:8085'
verifier: 'https://play-api.multiversx.com'
redis: '127.0.0.1'
rabbitmq: 'amqp://127.0.0.1:5672'
providers: 'https://internal-delegation-api.multiversx.com/providers'
providers: 'https://delegation-api.multiversx.com/providers'
delegation: 'https://delegation-api.multiversx.com'
media: 'https://media.elrond.com'
nftThumbnails: 'https://media.elrond.com/nfts/thumbnail'
tmp: '/tmp'
ipfs: 'https://ipfs.io/ipfs'
socket: 'socket-api-fra.multiversx.com'
maiarId: 'https://id-api.multiversx.com'
indexer:
type: 'elastic'
maxPagination: 10000
database:
enabled: false
url: 'mongodb://127.0.0.1:27017/api?authSource=admin'
type: 'mysql'
host: 'localhost'
port: 3306
username: 'root'
Expand All @@ -50,7 +150,8 @@ database:
caching:
cacheTtl: 6
processTtl: 600
poolLimit: 10
poolLimit: 50
cacheDuration: 3
keepAliveTimeout:
downstream: 61000
upstream: 60000
Expand All @@ -69,14 +170,6 @@ inflation:
- 1130177
- 924690
- 719203
security:
admins:
jwtSecret:
test:
mockKeybases: false
mockNodes: false
mockTokens: false
mockPath: './src/test/mocks/'
transaction-action:
mex:
microServiceUrl: 'https://graph.xexchange.com/graphql'
nftProcess:
parallelism: 1
maxRetries: 3
10 changes: 8 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,9 @@
"start:mainnet": "npm run copy-mainnet-config & nest start",
"start:mainnet:watch": "npm run copy-mainnet-config & nest start --watch",
"start:mainnet:debug": "npm run copy-mainnet-config & nest start --watch --debug",
"start:mainnet:e2e": "npm run copy-e2e-mainnet-config & nest start",
"start:mainnet:e2e:watch": "npm run copy-e2e-mainnet-config & nest start --watch",
"start:mainnet:e2e:debug": "npm run copy-e2e-mainnet-config & nest start --watch --debug",
"lint": "eslint \"{src,apps,libs,test}/**/*.ts\"",
"lint:fix": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix",
"test": "npm run copy-mainnet-config & nest build & jest",
Expand All @@ -41,6 +44,7 @@
"test:e2e:local": "npm run test:e2e:warm & npm run test:e2e",
"test:api": "jest --config ./src/test/jest-api.json --runInBand --detectOpenHandles --forceExit",
"test:graph": "jest --config ./src/test/jest-graph-spec.json --runInBand --detectOpenHandles --forceExit",
"test:cs-e2e": "jest --config ./src/test/jest-chain-simulator.json --runInBand --detectOpenHandles --forceExit",
"init": "run-script-os",
"copy-mainnet-config": "run-script-os",
"copy-testnet-config": "run-script-os",
Expand Down Expand Up @@ -73,7 +77,9 @@
"copy-e2e-mainnet-config:nix": "cp ./config/config.e2e.mainnet.yaml ./config/config.yaml",
"copy-e2e-mocked-mainnet-config:nix": "cp ./config/config.e2e-mocked.mainnet.yaml ./config/config.yaml",
"copy-e2e-mainnet-config:windows": "copy .\\config\\config.e2e.mainnet.yaml .\\config\\config.yaml",
"copy-e2e-mocked-mainnet-config:windows": "copy .\\config\\config.e2e-mocked.mainnet.yaml .\\config\\config.yaml"
"copy-e2e-mocked-mainnet-config:windows": "copy .\\config\\config.e2e-mocked.mainnet.yaml .\\config\\config.yaml",
"start-chain-simulator": "docker compose -f \"src/test/chain-simulator/docker/docker-compose.yml\" up -d --build",
"stop-chain-simulator": "docker compose -f \"src/test/chain-simulator/docker/docker-compose.yml\" down"
},
"dependencies": {
"@aws-sdk/client-s3": "^3.54.0",
Expand Down Expand Up @@ -209,4 +215,4 @@
"node_modules"
]
}
}
}
3 changes: 1 addition & 2 deletions src/common/assets/assets.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -202,8 +202,7 @@ export class AssetsService {

const allAssets: { [key: string]: KeybaseIdentity } = {};
for (const asset of assets) {
const { identity, ...details } = asset;
allAssets[identity] = new KeybaseIdentity(details);
allAssets[asset.identity] = new KeybaseIdentity(asset);
}

return allAssets;
Expand Down
10 changes: 5 additions & 5 deletions src/common/keybase/keybase.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -97,12 +97,12 @@ export class KeybaseService {

async confirmIdentityProfiles(): Promise<void> {
const identities = await this.getDistinctIdentities();
const keybaseIdentities = identities.map(identity => this.getProfile(identity));
const keybaseIdentities = await Promise.all(identities.map(identity => this.getProfile(identity)));
await this.cachingService.set(CacheInfo.IdentityProfilesKeybases.key, keybaseIdentities, CacheInfo.IdentityProfilesKeybases.ttl);
}

getProfile(identity: string): KeybaseIdentity | null {
const keybaseLocal = this.getProfileFromAssets(identity);
async getProfile(identity: string): Promise<KeybaseIdentity | null> {
const keybaseLocal = await this.getProfileFromAssets(identity);
if (keybaseLocal) {
this.logger.log(`Got profile details from assets for identity '${identity}'`);
return keybaseLocal;
Expand All @@ -116,8 +116,8 @@ export class KeybaseService {
return identityInfo;
}

getProfileFromAssets(identity: string): KeybaseIdentity | null {
const info = this.readIdentityInfo(identity);
async getProfileFromAssets(identity: string): Promise<KeybaseIdentity | null> {
const info = await this.readIdentityInfo(identity);
if (!info) {
return null;
}
Expand Down
Loading
Loading