# Integrate Embedded Wallets with the Ethereum Blockchain in React Native

> Integrate Embedded Wallets with the Ethereum Blockchain in React Native | Embedded Wallets

While using the Web3Auth React Native SDK, you get a [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) provider, similar to the [MetaMask Provider](https://docs.metamask.io/guide/ethereum-provider.html). This provider can be used with libraries like [`web3.js`](https://docs.web3js.org/), [`ethers.js`](https://docs.ethers.io/v5/getting-started/) etc. to make [Ethereum](https://ethereum.org/) blockchain calls like getting the user's `account`, fetching `balance`, `sign transaction`, `send transaction`, `read` from and `write` to the smart contract, etc. We have highlighted a few here to get you started.

## Chain details for Ethereum

<Tabs
 defaultValue="mainnet"
  values={[
    { label: "Mainnet", value: "mainnet" },
    { label: "Sepolia Testnet", value: "sepolia" },
    { label: "Holesky Testnet", value: "holesky" },
  ]}
>
<TabItem value="mainnet">

- **Chain ID:** 0x1
- **RPC URL:** You can use our bundled RPC service from Infura, or your own choice of RPC service for production.
- **Display Name:** Ethereum Mainnet
- **Block Explorer Link:** `https://etherscan.io`
- **Ticker:** ETH
- **Ticker Name:** Ethereum

</TabItem>

<TabItem value="sepolia">

- **Chain ID:** 0xaa36a7
- **Public RPC URL:** `https://ethereum-sepolia.publicnode.com`
- **Display Name:** Ethereum Sepolia Testnet
- **Block Explorer Link:** `https://sepolia.etherscan.io`
- **Ticker:** ETH
- **Ticker Name:** SepoliaETH

</TabItem>

<TabItem value="holesky">

- **Chain ID:** 0x4268
- **Public RPC URL:** `https://rpc.holesky.ethpandaops.io`
- **Display Name:** Ethereum Holesky Testnet
- **Block Explorer Link:** `https://holesky.etherscan.io`
- **Ticker:** ETH
- **Ticker Name:** HoleskyETH

</TabItem>
</Tabs>

## Installation

To interact with an EVM blockchain in React Native, you can use any [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) compatible package such as
[`web3.js`](https://docs.web3js.org/) or [`ethers.js`](https://docs.ethers.io/v5/getting-started/).

In this example, we use `ethers.js` to demonstrate how to make blockchain calls using it with Web3Auth.

- Install the `ethers.js` package using `npm` or `yarn`:

```bash npm2yarn
npm install @ethersproject/shims ethers
```

- Import the packages and shims into your codebase:

```tsx
// Import the required shims

// Import the ethers library

```

:::info

We have followed [this guide](https://docs.ethers.org/v5/cookbook/react-native/#cookbook-reactnative) to set up the `ethers.js` package in React Native.

:::

## Initializing provider

Using `eip155` as `chainNamespace` while initializing `web3auth` will provide an [`EIP1193`](https://eips.ethereum.org/EIPS/eip-1193) compatible provider as **`web3auth.provider`** after successful authentication.

### Getting the `chainConfig`

<Tabs
 defaultValue="mainnet"
  values={[
    { label: "Mainnet", value: "mainnet", },
    { label: "Testnet", value: "testnet", },
  ]}
>
<TabItem
  value="mainnet"
>

```typescript

const chainConfig = getEvmChainConfig(1, 'your_web3auth_client_id')
```

</TabItem>

<TabItem
  value="testnet"
>

```typescript

const chainConfig = getEvmChainConfig(11155111, 'your_web3auth_client_id')
```

</TabItem>
</Tabs>

## Initialize

```typescript

const [provider, setProvider] = useState<IProvider | null>(null)

const ethereumPrivateKeyProvider = new EthereumPrivateKeyProvider({
  config: {
    chainConfig,
  },
})

const web3auth = new Web3Auth(WebBrowser, EncryptedStorage, {
  clientId,
  network: WEB3AUTH_NETWORK.SAPPHIRE_MAINNET, // or other networks
})

await ethereumPrivateKeyProvider.setupProvider(web3auth.privKey)

setProvider(ethereumPrivateKeyProvider)
```

## Get account

```tsx
// For ethers v5
// const ethersProvider = new ethers.providers.Web3Provider(this.provider);
const ethersProvider = new ethers.BrowserProvider(provider!)

// For ethers v5
// const signer = ethersProvider.getSigner();
const signer = await ethersProvider.getSigner()

// Get user's Ethereum public address
const address = signer.getAddress()
uiConsole(address)
```

## Get balance

```tsx
// For ethers v5
// const ethersProvider = new ethers.providers.Web3Provider(this.provider);
const ethersProvider = new ethers.BrowserProvider(provider!)

// For ethers v5
// const signer = ethersProvider.getSigner();
const signer = await ethersProvider.getSigner()

// Get user's Ethereum public address
const address = signer.getAddress()

// Get user's balance in ether
// For ethers v5
// const balance = ethers.utils.formatEther(
// await ethersProvider.getBalance(address) // Balance is in wei
// );
const balance = ethers.formatEther(
  await ethersProvider.getBalance(address) // Balance is in wei
)
```

## Send transaction

```tsx
const ethersProvider = ethers.getDefaultProvider(providerUrl)
const wallet = new ethers.Wallet(key, ethersProvider)

const destination = '0x40e1c367Eca34250cAF1bc8330E9EddfD403fC56'

// Convert 1 ether to wei
const amount = ethers.utils.parseEther('0.001')

// Submit transaction to the blockchain
//focus-start
const tx = await wallet.sendTransaction({
  to: destination,
  value: amount,
  maxPriorityFeePerGas: '5000000000', // Max priority fee per gas
  maxFeePerGas: '6000000000000', // Max fee per gas
})
//focus-end
```

## Sign a message

```tsx
// For ethers v5
// const ethersProvider = new ethers.providers.Web3Provider(this.provider);
const ethersProvider = new ethers.BrowserProvider(provider!)

// For ethers v5
// const signer = ethersProvider.getSigner();
const signer = await ethersProvider.getSigner()
const originalMessage = 'YOUR_MESSAGE'

// Sign the message
const signedMessage = await signer.signMessage(originalMessage)
```
