Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
50e9542
Merge pull request #787 from enkryptcom/develop
kvhnuke Feb 25, 2026
340fc60
fix: adjust fee for MEW referrer and update wallet identifier handlin…
kvhnuke Feb 26, 2026
57b18b7
fix: bump version to 0.0.9 in package.json
kvhnuke Feb 26, 2026
4a35d2c
Refactor code structure for improved readability and maintainability
kvhnuke Feb 26, 2026
0e80c0c
fix: update version to 2.17.0 in package.json
kvhnuke Feb 27, 2026
8cea407
fix: update layout and styling for network assets header and item com…
kvhnuke Mar 5, 2026
3d3c1b1
feat: enhance UI components with improved styling and animations
kvhnuke Mar 6, 2026
f834902
feat: add loading state and validation for metadata updates in dot-up…
kvhnuke Mar 16, 2026
3b08672
fix: update transaction fees for various providers in swap configuration
kvhnuke Mar 26, 2026
9d6456f
fix: update version to 0.0.16 in package.json
kvhnuke Mar 27, 2026
7f1cf13
feat: enable NFT tab on Rootstock
ahsan-javaiid Mar 27, 2026
93b7b55
Refactor code structure for improved readability and maintainability
kvhnuke Apr 6, 2026
32c085d
refactor: remove Telos activity handler and related configurations
kvhnuke Apr 6, 2026
11940a5
refactor: remove Taraxa network and related configurations
kvhnuke Apr 6, 2026
ab67051
fix: update Shibarium node URL to the correct endpoint
kvhnuke Apr 6, 2026
ee010ac
refactor: remove Edgeware network and related configurations
kvhnuke Apr 6, 2026
9ff1468
refactor: remove Amplitude network and related configurations
kvhnuke Apr 6, 2026
37156e9
Merge pull request #791 from ahsan-javaiid/feat/nft/rootstock
kvhnuke Apr 6, 2026
1339421
fix: ensure storageKeys are initialized for accessList and log errors…
kvhnuke Apr 6, 2026
337cd96
Merge branch 'devop/release-v2-17' of github.com:enkryptcom/enKrypt i…
kvhnuke Apr 6, 2026
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
940 changes: 940 additions & 0 deletions .yarn/releases/yarn-4.13.0.cjs

Large diffs are not rendered by default.

934 changes: 0 additions & 934 deletions .yarn/releases/yarn-4.5.1.cjs

This file was deleted.

4 changes: 3 additions & 1 deletion .yarnrc.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,6 @@ nodeLinker: node-modules

npmRegistryServer: "https://registry.yarnpkg.com/"

yarnPath: .yarn/releases/yarn-4.5.1.cjs
yarnPath: .yarn/releases/yarn-4.13.0.cjs

npmMinimalAgeGate: "5d"
10 changes: 5 additions & 5 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -32,15 +32,15 @@
"prepare": "husky"
},
"devDependencies": {
"@commitlint/cli": "^20.4.1",
"@commitlint/config-conventional": "^20.4.1",
"@swc/core": "^1.15.11",
"@commitlint/cli": "^20.5.0",
"@commitlint/config-conventional": "^20.5.0",
"@swc/core": "^1.15.21",
"concurrently": "^9.2.1",
"husky": "^9.1.7",
"node-notifier": "^10.0.1",
"nodemon": "^3.1.11",
"nodemon": "^3.1.14",
"ultra-runner": "^3.10.5",
"vite-plugin-node-polyfills": "0.25.0"
"vite-plugin-node-polyfills": "0.26.0"
},
"resolutions": {
"@zondax/ledger-cosmos-js/vue": "^3.5.12",
Expand Down
14 changes: 7 additions & 7 deletions packages/extension-bridge/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -44,12 +44,12 @@
"webextension-polyfill": "^0.12.0"
},
"devDependencies": {
"@types/node": "^22.19.11",
"@types/webextension-polyfill": "^0.12.4",
"@typescript-eslint/eslint-plugin": "^8.56.0",
"@typescript-eslint/parser": "^8.56.0",
"@types/node": "^22.19.15",
"@types/webextension-polyfill": "^0.12.5",
"@typescript-eslint/eslint-plugin": "^8.58.0",
"@typescript-eslint/parser": "^8.58.0",
"bumpp": "^10.4.1",
"eslint": "^9.39.2",
"eslint": "^9.39.4",
"eslint-config-airbnb-base": "^15.0.0",
"eslint-config-prettier": "^10.1.8",
"eslint-import-resolver-alias": "^1.1.2",
Expand All @@ -59,8 +59,8 @@
"ts-node": "^10.9.2",
"tsconfig-paths": "^4.2.0",
"tsup": "^8.5.1",
"type-fest": "^5.4.4",
"type-fest": "^5.5.0",
"typescript": "^5.9.3",
"typescript-eslint": "8.56.0"
"typescript-eslint": "8.58.0"
}
}
60 changes: 30 additions & 30 deletions packages/extension/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@enkryptcom/extension",
"version": "2.16.0",
"version": "2.17.0",
"private": true,
"type": "module",
"scripts": {
Expand All @@ -23,7 +23,7 @@
"watch:firefox": "yarn prebuild && cross-env BROWSER='firefox' vite"
},
"dependencies": {
"@amplitude/analytics-browser": "^2.35.0",
"@amplitude/analytics-browser": "^2.38.1",
"@enkryptcom/extension-bridge": "workspace:^",
"@enkryptcom/hw-wallets": "workspace:^",
"@enkryptcom/keyring": "workspace:^",
Expand All @@ -38,20 +38,20 @@
"@ethereumjs/wallet": "^2.0.4",
"@kadena/client": "^1.18.3",
"@kadena/pactjs-cli": "^1.18.3",
"@ledgerhq/hw-transport-webusb": "^6.30.0",
"@ledgerhq/hw-transport-webusb": "^6.33.0",
"@massalabs/massa-web3": "^5.3.0",
"@metamask/eth-sig-util": "^8.2.0",
"@metaplex-foundation/mpl-bubblegum": "^5.0.2",
"@metaplex-foundation/umi": "^1.5.1",
"@metaplex-foundation/umi-bundle-defaults": "^1.5.1",
"@polkadot/api": "^16.5.4",
"@polkadot/extension-inject": "^0.62.6",
"@polkadot/keyring": "^14.0.1",
"@polkadot/rpc-provider": "^16.5.4",
"@polkadot/types": "^16.5.4",
"@polkadot/types-known": "^16.5.4",
"@polkadot/ui-shared": "^3.16.4",
"@polkadot/util": "^14.0.1",
"@polkadot/api": "^16.5.6",
"@polkadot/extension-inject": "^0.63.1",
"@polkadot/keyring": "^14.0.3",
"@polkadot/rpc-provider": "^16.5.6",
"@polkadot/types": "^16.5.6",
"@polkadot/types-known": "^16.5.6",
"@polkadot/ui-shared": "^3.16.7",
"@polkadot/util": "^14.0.3",
"@polkadot/wasm-crypto": "^7.5.4",
"@solana-developers/helpers": "2.8.0",
"@solana/spl-token": "^0.4.14",
Expand All @@ -69,7 +69,7 @@
"ethereumjs-abi": "^0.6.8",
"eventemitter3": "^5.0.4",
"jdenticon": "^3.3.0",
"lodash": "^4.17.23",
"lodash": "^4.18.0",
"memoize-one": "^6.0.0",
"moment": "^2.30.1",
"nanoevents": "^9.1.0",
Expand All @@ -79,7 +79,7 @@
"switch-ts": "^2.0.0",
"url-parse": "^1.5.10",
"uuid": "^13.0.0",
"vue": "^3.5.28",
"vue": "^3.5.31",
"vue-echarts": "8.0.1",
"vue-router": "^4.6.4",
"vue3-lottie": "^3.3.1",
Expand All @@ -90,8 +90,8 @@
"zxcvbn": "^4.4.2"
},
"devDependencies": {
"@crxjs/vite-plugin": "^2.3.0",
"@rollup/plugin-commonjs": "^29.0.0",
"@crxjs/vite-plugin": "^2.4.0",
"@rollup/plugin-commonjs": "^29.0.2",
"@rollup/plugin-inject": "^5.0.5",
"@rollup/plugin-json": "^6.1.0",
"@rollup/plugin-node-resolve": "^16.0.3",
Expand All @@ -100,46 +100,46 @@
"@rollup/plugin-typescript": "^12.3.0",
"@tsconfig/node20": "^20.1.9",
"@types/bs58": "^5.0.0",
"@types/chrome": "^0.1.36",
"@types/chrome": "^0.1.38",
"@types/ethereumjs-abi": "^0.6.5",
"@types/events": "^3.0.3",
"@types/fs-extra": "^11.0.4",
"@types/less": "^3.0.8",
"@types/lodash": "^4.17.23",
"@types/node": "^22.19.11",
"@types/lodash": "^4.17.24",
"@types/node": "^22.19.15",
"@types/semver": "^7.7.1",
"@types/url-parse": "^1.4.11",
"@types/utf-8-validate": "^5.0.2",
"@types/uuid": "^11.0.0",
"@types/wif": "^2.0.5",
"@types/zxcvbn": "^4.4.5",
"@vitejs/plugin-vue": "^6.0.4",
"@vitejs/plugin-vue": "^6.0.5",
"@vue/eslint-config-prettier": "^10.2.0",
"@vue/eslint-config-typescript": "^14.7.0",
"@vue/tsconfig": "^0.8.1",
"@vueuse/core": "^14.2.1",
"cross-env": "^10.1.0",
"eslint": "^9.39.2",
"eslint": "^9.39.4",
"eslint-plugin-vue": "^10.8.0",
"fs-extra": "^11.3.3",
"jsdom": "^27.4.0",
"less": "^4.5.1",
"less-loader": "^12.3.1",
"fs-extra": "^11.3.4",
"jsdom": "^29.0.1",
"less": "^4.6.4",
"less-loader": "^12.3.2",
"npm-run-all2": "^8.0.4",
"prettier": "^3.8.1",
"rimraf": "^6.1.3",
"rollup": "^4.57.1",
"rollup-plugin-visualizer": "^6.0.5",
"rollup": "^4.60.1",
"rollup-plugin-visualizer": "^6.0.11",
"semver": "^7.7.4",
"systeminformation": "^5.31.1",
"systeminformation": "^5.31.5",
"tsup": "^8.5.1",
"typescript": "~5.9.3",
"url": "^0.11.4",
"vite": "^7.3.1",
"vite-plugin-node-polyfills": "0.25.0",
"vite-plugin-node-polyfills": "0.26.0",
"vite-tsconfig-paths": "^6.1.1",
"vitest": "^4.0.18",
"vue-tsc": "^3.2.4",
"vitest": "^4.1.2",
"vue-tsc": "^3.2.6",
"webextension-polyfill": "^0.12.0"
},
"installConfig": {
Expand Down
2 changes: 0 additions & 2 deletions packages/extension/src/libs/dapp-list/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,6 @@ const lists: Partial<Record<NetworkNames, string>> = {
'https://raw.githubusercontent.com/enkryptcom/dynamic-data/main/dapps/bifrost.json',
[NetworkNames.BifrostKusama]:
'https://raw.githubusercontent.com/enkryptcom/dynamic-data/main/dapps/bifrost.json',
[NetworkNames.Edgeware]:
'https://raw.githubusercontent.com/enkryptcom/dynamic-data/main/dapps/edg.json',
[NetworkNames.ZkSync]:
'https://raw.githubusercontent.com/enkryptcom/dynamic-data/main/dapps/zksync.json',
[NetworkNames.Rootstock]:
Expand Down
76 changes: 76 additions & 0 deletions packages/extension/src/libs/nft-handlers/blockscout.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
import { NFTCollection, NFTItem, NFTType } from '@/types/nft';
import { BlockscoutNFTItem } from '@/libs/nft-handlers/types/blockscout';
import { NodeType } from '@/types/provider';
import Networks from '@/providers/ethereum/networks';
import cacheFetch from '../cache-fetch';
import { ethers, Contract } from 'ethers';
const ROOTSTOCK_RPC_NODE = 'https://public-node.rsk.co';
const ERC721_METADATA_ABI = [
'function contractURI() view returns (string)'
];
const BLOCKSCOUT_ENDPOINT = 'https://rootstock.blockscout.com/api/v2/addresses';
const IPFS_ENDPOINT = 'https://ipfs.io/ipfs';
const CACHE_TTL = 60 * 1000;
const getAssetURL = (uri: string) => {
if (uri && uri.startsWith('ipfs://')) {
return `${IPFS_ENDPOINT}/${uri.slice(7)}`;
}

return uri;
};
const fetchNftCollectionDescription = async (network: NodeType, contractAddress: string): Promise<string | null> => {
try {
const supportedNetworks = [Networks.rootstock.name];
if (!supportedNetworks.includes(network.name)) {
return null;
}
const provider = new ethers.providers.JsonRpcProvider(ROOTSTOCK_RPC_NODE);
const contract = new Contract(contractAddress.toLowerCase(), ERC721_METADATA_ABI, provider);
const uri = await contract.contractURI();
const httpUrl = getAssetURL(uri);
const response = await fetch(httpUrl);
if (!response.ok) {
return null;
}
const metadata = await response.json();
return metadata.description;
} catch {
return null;
}
}
export default async (
network: NodeType,
address: string,
): Promise<NFTCollection[]> => {
const supportedNetworks = [Networks.rootstock.name];
if (!supportedNetworks.includes(network.name))
throw new Error('Blockscout: network not supported');
const fetchAll = (): Promise<BlockscoutNFTItem[]> => {
const query = `${BLOCKSCOUT_ENDPOINT}/${address}/nft/collections?type=ERC-721`;
return cacheFetch({ url: query }, CACHE_TTL).then(json => {
return json.items as BlockscoutNFTItem[];
});
};
const allItems = await fetchAll();
if (!allItems || !allItems.length) return [];
return Promise.all(allItems.map(async item => {
const ret: NFTCollection = {
name: item.token.name ?? 'Unnamed token',
description: await fetchNftCollectionDescription(network, item.token.address_hash),
image: item.token?.icon_url,
contract: item.token.address_hash,
items: item.token_instances.map(asset => {
const retAsset: NFTItem = {
contract: item.token.address_hash,
id: asset.id,
image: getAssetURL(asset.media_url),
name: asset?.metadata?.name ?? 'Unnamed NFT asset',
url: `https://rootstock.blockscout.com/token/${item.token.address_hash}/instance/${asset.id}`,
type: NFTType.ERC721,
};
return retAsset;
}),
};
return ret;
}));
};
39 changes: 39 additions & 0 deletions packages/extension/src/libs/nft-handlers/types/blockscout.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
export type BlockscoutNFTItem = {
amount: string;
token: Token;
token_instances: TokenInstance[];
};

export type Token = {
address_hash: string;
holders_count: string;
icon_url: string;
name: string | null;
type: string;
};

export type TokenInstance = {
id: string;
image_url: string;
media_url: string;
metadata: TokenMetadata;
owner: string;
token: Token;
token_type: string;
};

export type TokenMetadata = {
attributes?: Attribute[];
background_color?: string;
description?: string;
external_url?: string;
image_data?: string;
name: string;
image?: string;
};

export type Attribute = {
trait_type: string;
value: string | number;
display_type?: string;
};
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,12 @@ import EtherscanActivity from './providers/etherscan';
import OkcActivity from './providers/okc';
import TomoScan from './providers/tomoscan';
import OntEVMActivity from './providers/ont-evm';
import TelosActivity from './providers/telos';
import RoutescanActivity from './providers/routescan';
export {
RivetActivity,
EtherscanActivity,
OkcActivity,
OntEVMActivity,
TomoScan,
TelosActivity,
RoutescanActivity,
};
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ const NetworkEndpoints: Record<string, string> = {
[NetworkNames.KaruraEVM]: 'https://blockscout.karura.network/api?',
[NetworkNames.AstarEVM]: 'https://blockscout.com/astar/api?',
[NetworkNames.Optimism]: 'https://api.etherscan.io/v2/api?chainid=10&',
[NetworkNames.EdgeEVM]: 'https://edgscan.live/api?',
[NetworkNames.Rootstock]: 'https://blockscout.com/rsk/mainnet/api?',
[NetworkNames.RootstockTestnet]:
'https://rootstock-testnet.blockscout.com/api?',
Expand Down

This file was deleted.

Loading
Loading