dethcrypto / dethcode

View source of deployed Ethereum contracts in VSCode
https://etherscan.deth.net/address/0xa3a7b6f88361f48403514059f1f16c8e78d60eec#code
1.35k stars 105 forks source link

Shared Storage #39

Closed hasparus closed 2 years ago

hasparus commented 2 years ago

Closes https://github.com/dethcrypto/ethereum-code-viewer/issues/24

Goal: Settings should be merged between all Ethereum Code Viewer domains

Currently, for every Etherscan instance (i.e. blockchain explorer with Etherscan-compatible API and URL scheme), we have a rewrite in Vercel config pointing to the same app.

In every domain we're hosted on, VSCode saves data to LocalStorage and IndexedDB using:

We could mess with the VSCode host implementation and move the storage itself to an iframe.

Instead, we're moving the app to one domain ecv.deth.net which can be opened inside of an iframe, and all existing domains will be from now on just entry-points.

image

Thus, Ethereum Code Viewer has 3 "levels" from now on.

Caveats

getLayoutMap

Running the app in the iframe instead of a "storage iframe" simplifies storage, but we encounter a problem due to privacy mitigations of navigator.getLayoutMap.

Failed to execute 'getLayoutMap' on 'Keyboard': getLayoutMap() must be called from a top-level browsing context.: Error: Failed to execute 'getLayoutMap' on 'Keyboard': getLayoutMap() must be called from a top-level browsing context.

See https://wicg.github.io/keyboard-map/#privacy-mitigations.

I've worked around it by exposing top-level getLayoutMap by post-message from top-level iframe and monkey-patching navigator.getLayoutMap in the vscode-host, but shadowing [keyboardLayoutService.ts] might have been an alternative (possibly better?) solution. I'm still not 100% sure if shadowing/swizzling incurs less maintenance burden than monkey-patching in the long term.

[keyboardlayoutservice.ts]: https://github.com/microsoft/vscode/blob/2d23c42a936db1c7b3b06f918cde29561cc47cd6/src/vs/workbench/services/keybinding/browser/keyboardLayoutService.ts

document.title

We'd like VSCode to be responsible for setting document title again.

I've added a MutationObserver to watch for document.title changes. Alternatively, we could "swizzle/shadow" in VSCode's browser/parts/titlebar/titlebarPart.ts, but I'm trying to avoid shadowing whenever it's possible.

github-actions[bot] commented 2 years ago

Deploy preview for ethereum-code-viewer ready!

Built with commit 80d0d7d1e1f9edde2d20cb36fcb6f9f4f3ada8ba

✅ Preview: https://ethereum-code-viewer-ntwlronq6-dethcrypto.vercel.app

This pull request is being automatically deployed with vercel-action

github-actions[bot] commented 2 years ago

Deploy preview for ethereum-code-viewer ready!

Built with commit 4ca82183dc9f0fb01b221e81dd521651d2acd19f

✅ Preview: https://ethereum-code-viewer-6n7mnvjan-dethcrypto.vercel.app

This pull request is being automatically deployed with vercel-action

github-actions[bot] commented 2 years ago

Deploy preview for ethereum-code-viewer ready!

Built with commit 95ac292c3874b10f68e2184ada752963262612f0

✅ Preview: https://ethereum-code-viewer-77k5pbxi2-dethcrypto.vercel.app

This pull request is being automatically deployed with vercel-action

github-actions[bot] commented 2 years ago

Deploy preview for ethereum-code-viewer ready!

Built with commit 5edb404bc4e241b4ab56884dece9db2ed8620662

✅ Preview: https://ethereum-code-viewer-ek9bng9mi-dethcrypto.vercel.app

This pull request is being automatically deployed with vercel-action