-
Notifications
You must be signed in to change notification settings - Fork 2.4k
Ethereum Provider API
Brave injects a windows.ethereum
provider object on all pages.
This object is defined by EIP-1193.
This object gives websites the ability to:
- Make requests to an Ethereum node (or a compatible network) to read data from the blockchain
- Request permission to 1 or more Ethereum accounts
- Ask the user (if given permission previously) to sign / submit a transaction
- Ask the user (if given permission previously) to sign a message
interface RequestArguments {
readonly method: string;
readonly params?: readonly unknown[] | object;
}
Provider.request(args: RequestArguments): Promise<unknown>;
Provider.isConnected(): boolean;
The Provider emits connect when it:
- first connects to a chain after being initialized.
- first connects to a chain, after the disconnect event was emitted.
interface ProviderConnectInfo {
readonly chainId: string;
}
Provider.on('connect', listener: (connectInfo: ProviderConnectInfo) => void): Provider;
The Provider emits disconnect when it becomes disconnected from all chains.
Provider.on('disconnect', listener: (error: ProviderRpcError) => void): Provider;
The Provider emits chainChanged when connecting to a new chain.
Provider.on('chainChanged', listener: (chainId: string) => void): Provider;
The Provider emits accountsChanged if the accounts returned from the Provider (eth_accounts) change.
Provider.on('accountsChanged', listener: (accounts: string[]) => void): Provider;
Websites can call:
window.ethereum.request({ method: 'eth_requestAccounts' })
To make a request for permissions to an account. If granted, the website will be able to see the allowed account address. The website will also be able to ask the user to approve (sing / send) transactions and to sign data. Signing transactions and messages require separate approval after the initial account approval.
Permissions can be revoked in brave://settings/content/ethereum A user can also open up the wallet panel and disconnect a connected site when they are on that site.
Websites can request that alternate chains be added by using:
window.ethereum.request({ method: 'wallet_addEthereumChain' }, params)
wallet_addEthereumChain
accepts a single object parameter, specified by the following TypeScript interface:
interface AddEthereumChainParameter {
chainId: string;
blockExplorerUrls?: string[];
chainName?: string;
iconUrls?: string[];
nativeCurrency?: {
name: string;
symbol: string;
decimals: number;
};
rpcUrls?: string[];
}
Sites can request that a transaction be signed / sent by using the eth_sendTransaction
method.
For more information, see: https://eth.wiki/json-rpc/API#eth_sendtransaction
Signing data can be done with:
eth_sign
personal_sign
signTypedData
-
signTypedData_v1
(same assignTypedData
) signTypedData_v3
signTypedData_v4
These are not implemented yet in Brave and they are being tracked here: https://github.com/brave/brave-browser/issues/17986
A number of legacy provider methods are provided for backwards compatibility:
Allows a website to request permissions.
This method is superseded by a request
with eth_requestAccounts
.
Provider.request({ method: 'eth_requestAccounts' })
Provider.sendAsync(request: Object, callback: Function): void;
This method is superseded by request
.
Provider.send(...args: unknown[]): unknown;
This method is superseded by request
.
Not yet implemented, but Brave may implement it.
This event close
is superseded by disconnect
.
Not yet implemented, but Brave may implement it.
The event networkChanged
is superseded by chainChanged
.
This event is superseded by message
.
Brave has not implemented this event yet.
The message event is intended for arbitrary notifications not covered by other events.
The event will be emitted with an object argument of the following form:
interface ProviderMessage {
readonly type: string;
readonly data: unknown;
}
Chain ID | Network name |
---|---|
0x1 | Ethereum mainnet |
0x3 | Ropsten Testnet |
0x3 | Ropsten Testnet |
0x5 | Rinkeby Testnet |
0x2a | Kovan Testnet |
The Ethereum provider object can be disabled from brave://settings/wallet
by changing the Default cryptocurrency wallet to None
.