EIP-2015: Wallet Update Chain Method (#2015)

* Create eip-2015.md

* Include JSON RPC method in title

* add requires 155

* update nativeCurrency field for wallet_updateChain

* EIP-2015 format review changes

* Update EIP-2015 discussions-to link
This commit is contained in:
Pedro Gomes 2019-05-14 14:02:05 -04:00 committed by Alex Beregszaszi
parent 72657123e8
commit 53dfa16d12
1 changed files with 81 additions and 0 deletions

81
EIPS/eip-2015.md Normal file
View File

@ -0,0 +1,81 @@
---
eip: 2015
title: Wallet Update Chain JSON-RPC Method (`wallet_updateChain`)
author: Pedro Gomes (@pedrouid)
discussions-to: https://ethereum-magicians.org/t/eip-2015-wallet-update-chain-json-rpc-method-wallet-updatechain/3274
status: Draft
type: Standards Track
category: ERC
created: 2019-05-12
requires: 155, 1474
---
## Simple Summary
Wallets can update the active chain when connected to a Dapp but not vice-versa, with `wallet_updateChain` the Dapp will be able to request this change from the Wallet.
## Abstract
Dapp can request the Wallet to switch chains by providing the minimal parameters of `chainId`, `networkId`, `rpcUrl` and `nativeCurrency`. The Wallet will display a UI element to inform the user of this change.
## Motivation
Wallet and Dapp communication rely on the present provider that acts as middleware between the two. Using JSON-RPC methods, the Dapp is able to access not only the active accounts but also the active chain. With [EIP-1102](https://eips.ethereum.org/EIPS/eip-1102) we introduced the ability for Dapps to request access to the active accounts and the Wallet is able to provide a simple UI to inform the user of this action however the same is not currently possible for switching chains. The current pattern is to display some UI to request the user to switch chains within the Dapp, however this could be easily improved by triggering a UI from the Wallet side that can be approved or rejected by the user instead.
## Specification
The JSON RPC method will be part of `wallet_` namespaced methods which aim to improve the UX and interoperability between Dapps and Wallets.
### Required Parameters
- chainId (number): the id of the chain complaint with EIP-155
- networkId (number): the id of the chain's network
- rpcUrl (string): the url endpoint for RPC requests for this chain
- nativeCurrency (Object): includes two fields for `name` (string) and `symbol` (string)
### Best Practices
- The Wallet should display a UI view similar to a [EIP-1102](https://eips.ethereum.org/EIPS/eip-1102) informing the user that the currently connected Dapp wants to switch to the specified chain.
- the Wallet should default the rpcUrl to any existing endpoints matching a chainId known previously to the wallet, otherwise it will use the provided rpcUrl as a fallback.
- the Wallet should call the rpcUrl with `net_version` and `eth_chainId` to verify the provided chainId and networkId match the responses from the rpcUrl
- the Wallet should change all nativeCurrency symbols to the provided parameter
### Example 1
A JSON-RPC request from a Dapp to switch the Ethereum Goerli chain would be as follows:
```json
{
"id":1,
"jsonrpc": "2.0",
"method": "wallet_updateChain",
"params": [
{
"chainId": 5,
"networkId": 5,
"rpcUrl": "https://goerli.infura.io/v3/406405f9c65348f99d0d5c27104b2213",
"nativeCurrency": {
"name": "Goerli ETH",
"symbol": "gorETH"
}
}
]
}
```
### Example 2
A JSON-RPC request from a Dapp to switch the POA Network's xDAI chain would be as follows:
```json
{
"id":1,
"jsonrpc": "2.0",
"method": "wallet_updateChain",
"params": [
{
"chainId": 100,
"networkId": 100,
"rpcUrl": "https://dai.poa.network",
"nativeCurrency": {
"name": "xDAI",
"symbol": "xDAI"
}
}
]
}
```
## Copyright
Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/).