diff --git a/README.md b/README.md index 50eddd0..7486824 100644 --- a/README.md +++ b/README.md @@ -356,11 +356,12 @@ services. Users who want maximum privacy can point the RPC at their own node AutistMask uses two runtime libraries. All cryptographic operations are delegated to these libraries — see the Crypto Policy section below. -| Package | Version | License | Purpose | -| ------------------------- | ------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `ethers` | 6.16.0 | MIT | All Ethereum operations: BIP-39 mnemonic generation/validation, BIP-32/BIP-44 HD key derivation (`m/44'/60'/0'/0/n`), secp256k1 signing, transaction construction, ERC-20 contract interaction, JSON-RPC communication, address derivation (keccak256). | -| `libsodium-wrappers-sumo` | 0.8.2 | ISC | Password-based encryption of secrets at rest: Argon2id key derivation (`crypto_pwhash`), authenticated encryption (`crypto_secretbox` / XSalsa20-Poly1305). | -| `qrcode` | 1.5.4 | MIT | QR code generation for the Receive screen (renders address as scannable QR on canvas). | +| Package | Version | License | Purpose | +| -------------------------- | ------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `ethers` | 6.16.0 | MIT | All Ethereum operations: BIP-39 mnemonic generation/validation, BIP-32/BIP-44 HD key derivation (`m/44'/60'/0'/0/n`), secp256k1 signing, transaction construction, ERC-20 contract interaction, JSON-RPC communication, address derivation (keccak256). | +| `libsodium-wrappers-sumo` | 0.8.2 | ISC | Password-based encryption of secrets at rest: Argon2id key derivation (`crypto_pwhash`), authenticated encryption (`crypto_secretbox` / XSalsa20-Poly1305). | +| `qrcode` | 1.5.4 | MIT | QR code generation for the Receive screen (renders address as scannable QR on canvas). | +| `ethereum-blockies-base64` | 1.0.2 | ISC | Deterministic pixelated identicon generation from Ethereum addresses (same style used by Etherscan). | Dev dependencies (not shipped in extension): diff --git a/package.json b/package.json index 94a3ce6..f6aea86 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,7 @@ "tailwindcss": "^4.2.1" }, "dependencies": { + "ethereum-blockies-base64": "^1.0.2", "ethers": "^6.16.0", "libsodium-wrappers-sumo": "^0.8.2", "qrcode": "^1.5.4" diff --git a/src/popup/index.html b/src/popup/index.html index e863232..8d3d859 100644 --- a/src/popup/index.html +++ b/src/popup/index.html @@ -234,6 +234,10 @@ > < Back +
diff --git a/src/popup/views/addressDetail.js b/src/popup/views/addressDetail.js index 8cb3a03..c51f533 100644 --- a/src/popup/views/addressDetail.js +++ b/src/popup/views/addressDetail.js @@ -18,6 +18,7 @@ const { resolveEnsNames } = require("../../shared/ens"); const { updateSendBalance, renderSendTokenSelect } = require("./send"); const { log } = require("../../shared/log"); const QRCode = require("qrcode"); +const makeBlockie = require("ethereum-blockies-base64"); const EXT_ICON = `` + @@ -41,6 +42,14 @@ function show() { const ai = state.selectedAddress; $("address-title").textContent = wallet.name + " \u2014 Address " + (wi + 1) + "." + (ai + 1); + const blockieEl = $("address-jazzicon"); + blockieEl.innerHTML = ""; + const img = document.createElement("img"); + img.src = makeBlockie(addr.address); + img.width = 48; + img.height = 48; + img.style.imageRendering = "pixelated"; + blockieEl.appendChild(img); $("address-dot").innerHTML = addressDotHtml(addr.address); $("address-full").dataset.full = addr.address; $("address-full").textContent = addr.address; diff --git a/yarn.lock b/yarn.lock index 72d8531..0d080cb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1560,6 +1560,13 @@ esprima@^4.0.0: resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== +ethereum-blockies-base64@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/ethereum-blockies-base64/-/ethereum-blockies-base64-1.0.2.tgz#4aebca52142bf4d16a3144e6e2b59303e39ed2b3" + integrity sha512-Vg2HTm7slcWNKaRhCUl/L3b4KrB8ohQXdd5Pu3OI897EcR6tVRvUqdTwAyx+dnmoDzj8e2bwBLDQ50ByFmcz6w== + dependencies: + pnglib "0.0.1" + ethers@^6.16.0: version "6.16.0" resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.16.0.tgz#fff9b4f05d7a359c774ad6e91085a800f7fccf65" @@ -2552,6 +2559,11 @@ pngjs@^5.0.0: resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-5.0.0.tgz#e79dd2b215767fd9c04561c01236df960bce7fbb" integrity sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw== +pnglib@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/pnglib/-/pnglib-0.0.1.tgz#f9ab6f9c688f4a9d579ad8be28878a716e30c096" + integrity sha512-95ChzOoYLOPIyVmL+Y6X+abKGXUJlvOVLkB1QQkyXl7Uczc6FElUy/x01NS7r2GX6GRezloO/ecCX9h4U9KadA== + prettier@^3.8.1: version "3.8.1" resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.8.1.tgz#edf48977cf991558f4fcbd8a3ba6015ba2a3a173"