Ethereum provider API
The NeoLine extension wallet injects an Ethereum provider, as specified by EIP-1193, into the browser at window.NEOLineNeoX.
You can use this provider in your dapp to request users' Ethereum accounts, read on-chain data, and have the user sign messages and transactions.
let provider;
window.addEventListener('eip6963:announceProvider', (event) => {
if (event.detail.provider.isNEOLine) {
provider = event.detail.provider;
}
});
window.dispatchEvent(new Event('eip6963:requestProvider'));
Properties
isNEOLine
isNEOLine
This property is true
if the user has NeoLine installed, and false
otherwise.
Example
provider.isNEOLine // Or window.NEOLineNeoX.isNEOLine if you don't support EIP-6963.
Methods
request()
request()
This method is used to submit JSON-RPC API requests to Ethereum using NeoLine.
Parameters
An object containing:
method: string - The JSON-RPC API method name.
params: array or object - (Optional) Parameters of the RPC method. In practice, if a method has parameters, they're almost always of type array.
Returns
A promise that resolves to the result of the RPC method call. If the request fails, the promise rejects with an error.
Example
The following is an example of using request()
to call eth_sendTransaction
:
provider // Or window.NEOLineNeoX if you don't support EIP-6963.
.request({
method: "eth_sendTransaction",
params: [
{
from: "0xE45e9AdC2B51514849ea5B38dF37d1a65e6D52f5",
to: "0x7Cd07BCbcCF30d71E768F5228b56d5B7Cc07f674",
value: "0x3b9aca00", // 1_000_000_000
},
],
})
.then((result) => {
// The result varies by RPC method.
// For example, this method returns a transaction hash hexadecimal string upon success.
})
.catch((error) => {
// If the request fails, the Promise rejects with an error.
})
NeoLine Wallet supports many standardized Ethereum RPC methods, including:
eth_sendRawTransaction
eth_blockNumber
eth_call
eth_estimateGas
...
Events
The NeoLine provider emits events using the Node.js EventEmitter
API. The following is an example of listening to the accountsChanged
event.
You should remove listeners after you're done listening to an event (for example, on component unmount
in React).
function handleAccountsChanged(accounts) {
// Handle new accounts, or lack thereof.
}
provider // Or window.NEOLineNeoX if you don't support EIP-6963.
.on("accountsChanged", handleAccountsChanged)
// Later
provider // Or window.NEOLineNeoX if you don't support EIP-6963.
.removeListener("accountsChanged", handleAccountsChanged)
accountsChanged
accountsChanged
provider // Or window.NEOLineNeoX if you don't support EIP-6963.
.on("accountsChanged", handler: (accounts: string[]) => void);
The provider emits this event when the return value of the eth_accounts
RPC method changes. eth_accounts
returns either an empty array, or an array that contains the addresses of the accounts the caller is permitted to access with the most recently used account first. Callers are identified by their URL origin, which means that all sites with the same origin share the same permissions.
chainChanged
chainChanged
provider // Or window.NEOLineNeoX if you don't support EIP-6963.
.on("chainChanged", handler: (chainId: string) => void);
The provider emits this event when the currently connected chain changes. Listen to this event to detect a user's network.
Remove event listeners
removeListener
removeListener
Use the removeListener
method to remove specific event listeners from an EventEmitter
object. In the following example removeListener
is used to remove the chainChanged
and accountsChanged
events:
// Use window.NEOLineNeoX instead of provider if EIP-6963 is not supported.
// Add listeners
provider.on("accountsChanged", updateWallet)
provider.on("chainChanged", updateWalletAndAccounts)
// Remove individual listeners
provider.removeListener("accountsChanged", updateWallet)
provider.removeListener("chainChanged", updateWalletAndAccounts)
Errors
All errors returned by the NeoLine provider follow this interface:
interface ProviderRpcError extends Error {
message: string
code: number
data?: unknown
}
The request()
provider method throws errors eagerly. You can use the error code
property to determine why the request failed. Common codes and their meaning include:
4001
- The request is rejected by the user.-32602
- The parameters are invalid.-32603
- Internal error.
最后更新于
这有帮助吗?