Hi @anxolin. Thanks for your comments. Responses below:
I think it would be a good idea to also notify the dapp when the user reject the access, so can detect the case and give a better user feedback.
If dapps were notified when a user rejected provider access, that would expose enough information to allow malicious sites to continue uniquely identifying Ethereum users. For example, if a malicious site initiates a provider request, a user rejects access, and the malicious site is notified, the site now knows the user is an Ethereum user within a dapp browser. Even without provider or account access, a malicious site can still run targeted ad and phishing campaigns simply by knowing a certain IP address is associated with Ethereum use.
I agree that this means dapp UX will need to change, and there are discussions around this very topic. Still, the lack of notification of rejection is a crucial piece to this protocol’s privacy.
Also, would it make sense to allow also to request a list of provider details…
This is a very good idea. The request protocol outlined in this proposal was intentionally designed to be open-ended so that future EIPs can build on it and add new information to the request. @danfinlay had some thoughts around this idea as well, such as requesting a specific account type on a specific network when requesting a provider.
Could we just send it as as an argument when the extension triggers the listener?
Because the provider request protocol leverages
window.postMessage, it’s not possible to return the provider object as an argument to the listener. Data sent via
window.postMessage is serialized using structured cloning which means the provider object’s functions would be lost. Additionally, while some browsers support a third
transfer argument when calling
window.postMessage to transfer an object between two windows, browser support is very limited. The only viable way to respond with a full provider (for now) is global injection.
Another small detail, why the event called message and then we check for the type ETHEREUM_PROVIDER_SUCCESS? I think the event name can be an arbitrary name, so it can be more specific.
The protocol makes use of
window.postMessage to request a provider, and then listens for the browser to post a message using
window.postMessage in response. You bring up an interesting point: the dapp browser could respond by triggering an Ethereum-specific event listener, negating the need to sort through other posted messages based on a
type. Part of me likes the symmetry of posting a message, then listening for a posted message, but I will experiment with this today for security.