Automatically merged updates to draft EIP(s) 1102

Hi, I'm a bot! This change was automatically merged because:

 - It only modifies existing Draft or Last Call EIP(s)
 - The PR was approved or written by at least one author of each modified EIP
 - The build is passing
This commit is contained in:
Paul Bouchon 2018-07-03 17:42:37 -04:00 committed by EIP Automerge Bot
parent 26a4fbc197
commit 8032466701
1 changed files with 14 additions and 9 deletions

View File

@ -2,7 +2,7 @@
eip: 1102
title: Opt-in provider access
author: Paul Bouchon <mail@bitpshr.net>
discussions-to: https://ethereum-magicians.org/t/opt-in-web3-access/414
discussions-to: https://ethereum-magicians.org/t/eip-1102-opt-in-provider-access/414
status: Draft
type: Standards Track
category: Interface
@ -37,22 +37,27 @@ IF web3 is undefined
START dapp
REQUEST[1] Ethereum provider
IF user approves
NOTIFY[2] dapp
INJECT[2] provider API
NOTIFY[3] dapp
CONTINUE dapp
IF user rejects
IF non-Ethereum environment
NOOP[3]
NOOP[4]
```
#### `[1] REQUEST`
Dapps MUST request an Ethereum provider API by sending a message using the [`window.postMessage`](https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage) API. This message MUST be sent with a payload object containing a `type` property with a value of `ETHEREUM_PROVIDER_REQUEST`.
Dapps MUST request an Ethereum provider API by sending a message using the [`window.postMessage`](https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage) API. This message MUST be sent with a payload object containing a `type` property with a value of ETHEREUM_PROVIDER_REQUEST and an optional `id` property corresponding to an identifier of a specific wallet provider, such as "METAMASK".
#### `[2] NOTIFY`
#### `[2] INJECT`
Ethereum-enabled DOM environments MUST notify dapps of successful provider API exposure by sending a message using the [`window.postMessage`](https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage) API. This message MUST be sent with a payload object containing a `type` property with a value of `ETHEREUM_PROVIDER_SUCCESS` and an `ethereum` property containing an Ethereum provider object that conforms to [ethereum/interfaces#16](https://github.com/ethereum/interfaces/issues/16).
Ethereum-enabled DOM environments MUST expose an Ethereum provider API as a global `ETHEREUM_PROVIDER` variable on the `window` object.
#### `[3] NOOP`
#### `[3] NOTIFY`
Ethereum-enabled DOM environments MUST notify dapps of successful provider API exposure by sending a message using the [`window.postMessage`](https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage) API. This message MUST be sent with a payload object containing a `type` property with a value of ETHEREUM_PROVIDER_SUCCESS" and an optional `id` property corresponding to an identifier of a specific wallet provider, such as "METAMASK"
#### `[4] NOOP`
If a user rejects access to the Ethereum provider API on an untrusted site, the site itself MUST NOT be notified in any way; notification of a rejection would allow third-party tools to still identify that a client is Ethereum-enabled despite not being granted access to any provider API.
@ -61,12 +66,12 @@ If a user rejects access to the Ethereum provider API on an untrusted site, the
The following example demonstrates one possible implementation of this strategy in a browser-based DOM environment. Note that Ethereum-enabled environments on other platforms would most likely use platform-specific native messaging protocols, not `postMessage`.
```js
// Listen for provider API
// Listen for provider API exposure
window.addEventListener('message', function (event) {
if (!event.data || !event.data.type) { return; }
if (event.data.type === 'ETHEREUM_PROVIDER_SUCCESS') {
// Provider API exposed, continue
const networkVersion = await event.data.ethereum.send('net_version', []);
const networkVersion = await ETHEREUM_PROVIDER.send('net_version', []);
console.log(networkVersion);
}
});