Skip to content

Instantly share code, notes, and snippets.

@apechefnft
Created May 17, 2022 21:31
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save apechefnft/ce2d8be9aceeefcdb44fec7f3da68c11 to your computer and use it in GitHub Desktop.
Save apechefnft/ce2d8be9aceeefcdb44fec7f3da68c11 to your computer and use it in GitHub Desktop.
Compare private Ethereum nodes
const Web3 = require('web3');
const SECONDS = 1;
const providers = [];
providers.push({name: 'ApeChef🔪 Zapnode', url: '<ENTER URL HERE>'});
providers.push({name: 'JustCubes Hypernode', url: '<ENTER URL HERE>'});
providers.push({name: 'JustCubes Supernode (Llamaverse)', url: '<ENTER URL HERE>'});
providers.push({name: 'Infura', url: '<ENTER URL HERE>'});
providers.push({name: 'Alchemy', url: '<ENTER URL HERE>'});
providers.push({name: 'Zmok', url: '<ENTER URL HERE>'});
providers.push({name: 'Chainstack', url: '<ENTER URL HERE>'});
const runTest = async (url) => {
return new Promise((resolve) => {
let counter = 0;
const startTime = Date.now();
const web3 = new Web3(new Web3.providers.HttpProvider(url));
const checkBalance = async () => {
await web3.eth.getBalance('0x2E78bab6D52992812363FF86bD3B2A8f83Dfa717');
counter += 1;
if (Date.now() - startTime < SECONDS * 1000) checkBalance();
else resolve(counter);
};
checkBalance();
});
};
const topList = (providersList, heading) => {
// Sort by fastest
let sorted = providersList.sort((a, b) => b.calls - a.calls);
// Compare all with the slowest
console.log(`\n\n${heading}`);
const slowest = sorted[sorted.length -1].calls;
sorted.forEach((provider, index) => {
console.log(`${index + 1}. ${provider.name}. Speed ${provider.calls / slowest}x`);
});
};
(async () => {
// Run test
await providers.reduce(async (memo, provider) => {
await memo;
provider.calls = await runTest(provider.url);
console.log(`Benchmarking ${provider.name}... ${provider.calls} calls within ${SECONDS} seconds.`);
}, []);
// Full comparison
topList(providers, '--FULL COMPARISON--');
// Compare Zapnode with Supernode
let onlyCompare = providers.filter((p) => p.name === 'ApeChef🔪 Zapnode' || p.name === 'JustCubes Supernode (Llamaverse)');
topList(onlyCompare,
'--ZAPNODE VERSUS SUPERNODE--');
// Compare Zapnode with Hypernode
onlyCompare = providers.filter((p) => p.name === 'ApeChef🔪 Zapnode' || p.name === 'JustCubes Hypernode');
topList(onlyCompare,
'--ZAPNODE VERSUS HYPERNODE--');
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment