RPC API
RPC API
OneKey uses the window.$onekey.ethereum.request(args)
method to wrap an RPC API.
The API is based on an interface exposed by all Ethereum clients, along with a growing number of methods that may or may not be supported by other wallets.
Tip
All RPC method requests can return errors. Make sure to handle errors for every call to window.$onekey.ethereum.request(args)
.
Ethereum JSON-RPC Methods
For the Ethereum JSON-RPC API, please see the Ethereum wiki.
Important methods from this API include:
Permissions
OneKey introduced Web3 Wallet Permissions via EIP-2255. In this permissions system, each RPC method is either restricted or open. If a method is restricted, an external domain (like a web3 site) must have the corresponding permission in order to call it. Open methods, meanwhile, do not require permissions to call, but may require confirmation by the user in order to succeed (e.g. eth_sendTransaction
).
Currently, the only permission is eth_accounts
, which allows you to access the user's Ethereum address(es). More permissions will be added in the future.
Under the hood, permissions are plain, JSON-compatible objects, with a number of fields that are mostly used internally by OneKey. The following interface lists the fields that may be of interest to consumers:
The permissions system is implemented in the rpc-cap
package. If you're interested in learning more about the theory behind this capability-inspired permissions system, we encourage you to take a look at EIP-2255.
eth_requestAccounts
EIP-1102
This method is specified by EIP-1102. It is equivalent to the deprecated onekey.enable()
provider API method.
Under the hood, it calls wallet_requestPermissions
for the eth_accounts
permission. Since eth_accounts
is currently the only permission, this method is all you need for now.
Returns
string[]
- An array of a single, hexadecimal Ethereum address string.
Description
Requests that the user provides an Ethereum address to be identified by. Returns a Promise that resolves to an array of a single Ethereum address string. If the user denies the request, the Promise will reject with a 4001
error.
The request causes a OneKey popup to appear. You should only request the user's accounts in response to user action, such as a button click. You should always disable the button that caused the request to be dispatched, while the request is still pending.
If you can't retrieve the user's account(s), you should encourage the user to initiate an account request.
Example
wallet_getPermissions
Platform Availability
This RPC method is not yet available in OneKey Mobile.
Returns
Web3WalletPermission[]
- An array of the caller's permissions.
Description
Gets the caller's current permissions. Returns a Promise that resolves to an array of Web3WalletPermission
objects. If the caller has no permissions, the array will be empty.
wallet_requestPermissions
Platform Availability
This RPC method is not yet available in OneKey Mobile.
Parameters
Array
RequestedPermissions
- The requested permissions.
Returns
Web3WalletPermission[]
- An array of the caller's permissions.
Description
Requests the given permissions from the user. Returns a Promise that resolves to a non-empty array of Web3WalletPermission
objects, corresponding to the caller's current permissions. If the user denies the request, the Promise will reject with a 4001
error.
The request causes a OneKey popup to appear. You should only request permissions in response to user action, such as a button click.
Example
Other RPC Methods
eth_decrypt
Platform Availability
This RPC method is not yet available in OneKey Mobile.
Parameters
Array
string
- An encrypted message.string
- The address of the Ethereum account that can decrypt the message.
Returns
string
- The decrypted message.
Description
Requests that OneKey decrypts the given encrypted message. The message must have been encrypted using the public encryption key of the given Ethereum address. Returns a Promise that resolves to the decrypted message, or rejects if the decryption attempt fails.
See eth_getEncryptionPublicKey
for more information.
Example
eth_getEncryptionPublicKey
Platform Availability
This RPC method is not yet available in OneKey Mobile.
Parameters
Array
string
- The address of the Ethereum account whose encryption key should be retrieved.
Returns
string
- The public encryption key of the specified Ethereum account.
Description
Requests that the user shares their public encryption key. Returns a Promise that resolve to the public encryption key, or rejects if the user denied the request.
The public key is computed from entropy associated with the specified user account, using the nacl
implementation of the X25519_XSalsa20_Poly1305
algorithm.
Example
Encrypting
The point of the encryption key is of course to encrypt things. Here's an example of how to encrypt a message using eth-sig-util
:
wallet_addEthereumChain
EIP-3085
This method is specified by EIP-3085.
Parameters
Array
AddEthereumChainParameter
- Metadata about the chain that will be added to OneKey.
For the rpcUrls
and blockExplorerUrls
arrays, at least one element is required, and only the first element will be used.
Returns
null
- The method returns null
if the request was successful, and an error otherwise.
Description
Creates a confirmation asking the user to add the specified chain to OneKey. The user may choose to switch to the chain once it has been added.
As with any method that causes a confirmation to appear, wallet_addEthereumChain
should only be called as a result of direct user action, such as the click of a button.
OneKey stringently validates the parameters for this method, and will reject the request if any parameter is incorrectly formatted. In addition, OneKey will reject the request under the following circumstances:
If the RPC endpoint doesn't respond to RPC calls.
If the RPC endpoint returns a different chain ID when
eth_chainId
is called.If the chain ID corresponds to any default OneKey chains.
OneKey does not yet support chains with native currencies that do not have 18 decimals, but may do so in the future.
Last updated