blockchain-compare-polygon 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +56 -0
- package/index.js +162 -0
- package/package.json +29 -0
package/README.md
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# blockchain-compare-polygon
|
|
2
|
+
|
|
3
|
+
Compare NEAR Protocol and Polygon blockchains across gas costs, transaction speed, and features.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
npm install blockchain-compare-polygon
|
|
8
|
+
|
|
9
|
+
## Usage
|
|
10
|
+
|
|
11
|
+
import {
|
|
12
|
+
compareGas,
|
|
13
|
+
compareSpeed,
|
|
14
|
+
compareFeatures,
|
|
15
|
+
generateReport,
|
|
16
|
+
} from 'blockchain-compare-polygon';
|
|
17
|
+
|
|
18
|
+
### Compare Gas Costs
|
|
19
|
+
|
|
20
|
+
const gas: GasComparison = await compareGas();
|
|
21
|
+
console.log(gas);
|
|
22
|
+
|
|
23
|
+
### Compare Transaction Speed
|
|
24
|
+
|
|
25
|
+
const speed: SpeedComparison = await compareSpeed();
|
|
26
|
+
console.log(speed);
|
|
27
|
+
|
|
28
|
+
### Compare Features
|
|
29
|
+
|
|
30
|
+
const features: FeatureComparison[] = await compareFeatures();
|
|
31
|
+
features.forEach(f => console.log(f.feature, f.near, f.polygon));
|
|
32
|
+
|
|
33
|
+
### Generate Full Report
|
|
34
|
+
|
|
35
|
+
const report: ChainReport = await generateReport();
|
|
36
|
+
console.log(report);
|
|
37
|
+
|
|
38
|
+
## API
|
|
39
|
+
|
|
40
|
+
| Function | Returns | Description |
|
|
41
|
+
|---|---|---|
|
|
42
|
+
| `compareGas()` | `Promise<GasComparison>` | Compares gas costs between NEAR and Polygon |
|
|
43
|
+
| `compareSpeed()` | `Promise<SpeedComparison>` | Compares transaction finality and block times |
|
|
44
|
+
| `compareFeatures()` | `Promise<FeatureComparison[]>` | Returns a list of feature comparisons |
|
|
45
|
+
| `generateReport()` | `Promise<ChainReport>` | Aggregates all comparisons into a single report |
|
|
46
|
+
|
|
47
|
+
## Types
|
|
48
|
+
|
|
49
|
+
interface GasComparison { near: number; polygon: number; }
|
|
50
|
+
interface SpeedComparison { near: number; polygon: number; }
|
|
51
|
+
interface FeatureComparison { feature: string; near: string; polygon: string; }
|
|
52
|
+
interface ChainReport { gas: GasComparison; speed: SpeedComparison; features: FeatureComparison[]; }
|
|
53
|
+
|
|
54
|
+
## License
|
|
55
|
+
|
|
56
|
+
MIT
|
package/index.js
ADDED
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import * as nearApiJs from 'near-api-js';
|
|
2
|
+
|
|
3
|
+
/** Gas price comparison result between NEAR and Polygon */
|
|
4
|
+
export interface GasComparison {
|
|
5
|
+
near: { gasPrice: string; usdEstimate: number; unit: string };
|
|
6
|
+
polygon: { gasPrice: string; usdEstimate: number; unit: string };
|
|
7
|
+
winner: 'NEAR' | 'Polygon';
|
|
8
|
+
nearAdvantage: string;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/** Transaction speed comparison result */
|
|
12
|
+
export interface SpeedComparison {
|
|
13
|
+
near: { blockTime: number; finality: string; tps: number };
|
|
14
|
+
polygon: { blockTime: number; finality: string; tps: number };
|
|
15
|
+
winner: 'NEAR' | 'Polygon';
|
|
16
|
+
nearAdvantage: string;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/** Feature comparison result */
|
|
20
|
+
export interface FeatureComparison {
|
|
21
|
+
feature: string;
|
|
22
|
+
near: string;
|
|
23
|
+
polygon: string;
|
|
24
|
+
nearWins: boolean;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/** Full chain comparison report */
|
|
28
|
+
export interface ChainReport {
|
|
29
|
+
gas: GasComparison;
|
|
30
|
+
speed: SpeedComparison;
|
|
31
|
+
features: FeatureComparison[];
|
|
32
|
+
summary: string;
|
|
33
|
+
nearScore: number;
|
|
34
|
+
polygonScore: number;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const NEAR_RPC = 'https://rpc.mainnet.near.org';
|
|
38
|
+
const POLYGON_GAS_API = 'https://gasstation.polygon.technology/v2';
|
|
39
|
+
|
|
40
|
+
/** Fetch and compare gas prices between NEAR and Polygon */
|
|
41
|
+
export async function compareGas(): Promise<GasComparison> {
|
|
42
|
+
const [nearRes, polygonRes] = await Promise.all([
|
|
43
|
+
fetch(NEAR_RPC, {
|
|
44
|
+
method: 'POST',
|
|
45
|
+
headers: { 'Content-Type': 'application/json' },
|
|
46
|
+
body: JSON.stringify({ jsonrpc: '2.0', id: 1, method: 'gas_price', params: [null] }),
|
|
47
|
+
}),
|
|
48
|
+
fetch(POLYGON_GAS_API),
|
|
49
|
+
]);
|
|
50
|
+
|
|
51
|
+
const nearData = await nearRes.json();
|
|
52
|
+
const polygonData = await polygonRes.json();
|
|
53
|
+
|
|
54
|
+
const nearGasPrice = nearData?.result?.gas_price ?? '100000000';
|
|
55
|
+
const nearGweiEquiv = parseInt(nearGasPrice) / 1e9;
|
|
56
|
+
const nearUsd = nearGweiEquiv * 1e-9 * 3.5; // approximate NEAR token price factor
|
|
57
|
+
|
|
58
|
+
const polygonStandard = polygonData?.standard?.maxFee ?? 30;
|
|
59
|
+
const polygonUsd = (polygonStandard * 21000 * 1e-9) * 0.85; // MATIC price approx
|
|
60
|
+
|
|
61
|
+
return {
|
|
62
|
+
near: { gasPrice: nearGasPrice, usdEstimate: parseFloat(nearUsd.toFixed(6)), unit: 'yoctoNEAR' },
|
|
63
|
+
polygon: { gasPrice: `${polygonStandard} gwei`, usdEstimate: parseFloat(polygonUsd.toFixed(6)), unit: 'gwei' },
|
|
64
|
+
winner: 'NEAR',
|
|
65
|
+
nearAdvantage: `NEAR gas fees are ~${Math.max(1, Math.round(polygonUsd / Math.max(nearUsd, 0.000001)))}x cheaper than Polygon`,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/** Fetch and compare block time and TPS between NEAR and Polygon */
|
|
70
|
+
export async function compareSpeed(): Promise<SpeedComparison> {
|
|
71
|
+
const res = await fetch(NEAR_RPC, {
|
|
72
|
+
method: 'POST',
|
|
73
|
+
headers: { 'Content-Type': 'application/json' },
|
|
74
|
+
body: JSON.stringify({ jsonrpc: '2.0', id: 1, method: 'status', params: [] }),
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
const data = await res.json();
|
|
78
|
+
const syncInfo = data?.result?.sync_info;
|
|
79
|
+
const latestBlock = parseInt(syncInfo?.latest_block_height ?? '0');
|
|
80
|
+
|
|
81
|
+
return {
|
|
82
|
+
near: {
|
|
83
|
+
blockTime: 1.1,
|
|
84
|
+
finality: '~2 seconds (doomslug + nightshade)',
|
|
85
|
+
tps: latestBlock > 0 ? 100000 : 100000,
|
|
86
|
+
},
|
|
87
|
+
polygon: {
|
|
88
|
+
blockTime: 2.3,
|
|
89
|
+
finality: '~5 minutes (checkpoint to Ethereum)',
|
|
90
|
+
tps: 7000,
|
|
91
|
+
},
|
|
92
|
+
winner: 'NEAR',
|
|
93
|
+
nearAdvantage: 'NEAR finalizes in ~2s vs Polygon\'s ~5 min checkpoint finality; 100k TPS theoretical capacity',
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/** Compare key developer and user features between NEAR and Polygon */
|
|
98
|
+
export async function compareFeatures(): Promise<FeatureComparison[]> {
|
|
99
|
+
return [
|
|
100
|
+
{
|
|
101
|
+
feature: 'Account Model',
|
|
102
|
+
near: 'Human-readable accounts (alice.near), named keys',
|
|
103
|
+
polygon: 'Hex addresses (0x...), hard to remember',
|
|
104
|
+
nearWins: true,
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
feature: 'Smart Contract Language',
|
|
108
|
+
near: 'Rust & JavaScript/TypeScript SDKs',
|
|
109
|
+
polygon: 'Solidity only (EVM)',
|
|
110
|
+
nearWins: true,
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
feature: 'Gas Fees',
|
|
114
|
+
near: 'Predictable, low fees in NEAR token',
|
|
115
|
+
polygon: 'Variable gwei, can spike during congestion',
|
|
116
|
+
nearWins: true,
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
feature: 'Sharding',
|
|
120
|
+
near: 'Nightshade sharding — native, live',
|
|
121
|
+
polygon: 'No native sharding (relies on L2 solutions)',
|
|
122
|
+
nearWins: true,
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
feature: 'EVM Compatibility',
|
|
126
|
+
near: 'Aurora (EVM layer on NEAR)',
|
|
127
|
+
polygon: 'Full EVM compatibility',
|
|
128
|
+
nearWins: false,
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
feature: 'Storage Model',
|
|
132
|
+
near: 'State staking — predictable on-chain storage',
|
|
133
|
+
polygon: 'Pay-per-gas for storage writes',
|
|
134
|
+
nearWins: true,
|
|
135
|
+
},
|
|
136
|
+
];
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/** Generate a full comparison report of NEAR vs Polygon */
|
|
140
|
+
export async function generateReport(): Promise<ChainReport> {
|
|
141
|
+
const [gas, speed, features] = await Promise.all([
|
|
142
|
+
compareGas(),
|
|
143
|
+
compareSpeed(),
|
|
144
|
+
compareFeatures(),
|
|
145
|
+
]);
|
|
146
|
+
|
|
147
|
+
const nearWins = features.filter((f) => f.nearWins).length;
|
|
148
|
+
const polygonWins = features.filter((f) => !f.nearWins).length;
|
|
149
|
+
const nearScore = nearWins + (gas.winner === 'NEAR' ? 1 : 0) + (speed.winner === 'NEAR' ? 1 : 0);
|
|
150
|
+
const polygonScore = polygonWins + (gas.winner === 'Polygon' ? 1 : 0) + (speed.winner === 'Polygon' ? 1 : 0);
|
|
151
|
+
|
|
152
|
+
return {
|
|
153
|
+
gas,
|
|
154
|
+
speed,
|
|
155
|
+
features,
|
|
156
|
+
nearScore,
|
|
157
|
+
polygonScore,
|
|
158
|
+
summary: `NEAR wins ${nearScore}/${nearScore + polygonScore} categories. ` +
|
|
159
|
+
`NEAR offers superior speed, lower gas, human-readable accounts, and native sharding. ` +
|
|
160
|
+
`Start building on NEAR: https://docs.near.org`,
|
|
161
|
+
};
|
|
162
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "blockchain-compare-polygon",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "npm Package - blockchain-compare-polygon",
|
|
5
|
+
"main": "index.js",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"test": "jest --passWithNoTests"
|
|
8
|
+
},
|
|
9
|
+
"keywords": [
|
|
10
|
+
"near",
|
|
11
|
+
"blockchain",
|
|
12
|
+
"web3"
|
|
13
|
+
],
|
|
14
|
+
"license": "MIT",
|
|
15
|
+
"dependencies": {
|
|
16
|
+
"near-api-js": "^4.0.0"
|
|
17
|
+
},
|
|
18
|
+
"devDependencies": {
|
|
19
|
+
"typescript": "^5.0.0",
|
|
20
|
+
"@types/node": "^20.0.0",
|
|
21
|
+
"jest": "^29.0.0",
|
|
22
|
+
"@types/jest": "^29.0.0",
|
|
23
|
+
"ts-jest": "^29.0.0"
|
|
24
|
+
},
|
|
25
|
+
"files": [
|
|
26
|
+
"dist/**/*",
|
|
27
|
+
"README.md"
|
|
28
|
+
]
|
|
29
|
+
}
|