> For the complete documentation index, see [llms.txt](https://docs.pivotalchain.io/pivotal-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.pivotalchain.io/pivotal-docs/pivotalchain-tools/clients/ethers.js.md).

# ethers.js

[ethers.js](https://docs.ethers.org/v5/) is a JavaScript library that allows developers to interact with EVM-compatible blockchain networks.

You can use ethers.js to interact with smart contracts deployed on the Pivotal network.

***

### Install[​](https://docs.base.org/docs/tools/ethers#install) <a href="#install" id="install"></a>

To install ethers.js run the following command:

```
npm install --save ethers
```

### Setup[​](https://docs.base.org/docs/tools/ethers#setup) <a href="#setup" id="setup"></a>

Before you can start using ethers.js, you need to import it into your project.

Add the following line of code to the top of your file to import ethers.js:

```
const ethers = require('ethers');
```

### Connecting to Pivotal[​](https://docs.base.org/docs/tools/ethers#connecting-to-base) <a href="#connecting-to-base" id="connecting-to-base"></a>

You can connect to Pivotal by instantiating a new ethers.js `JsonRpcProvider` object with a RPC URL of the Pivotal network:

```
const ethers = require('ethers');

const url = 'https://mainnet.thepivotal.xyz';
const provider = new ethers.providers.JsonRpcProvider(url);
```

{% hint style="info" %}
To alternatively connect to Pivotal Sepolia (testnet), change the above URL from `https://mainnet.thepivotal.xyz` to `https://sepolia.thepivotal.xyz`.
{% endhint %}

### Reading data from the blockchain[​](https://docs.base.org/docs/tools/ethers#reading-data-from-the-blockchain) <a href="#reading-data-from-the-blockchain" id="reading-data-from-the-blockchain"></a>

Once you have created a provider, you can use it to read data from the Pivotal network.

For example, you can use the `getBlockNumber` method to get the latest block:

```
async function getLatestBlock() {
  const latestBlock = await provider.getBlockNumber();
  console.log(latestBlock);
}
```

### Writing data to the blockchain[​](https://docs.base.org/docs/tools/ethers#writing-data-to-the-blockchain) <a href="#writing-data-to-the-blockchain" id="writing-data-to-the-blockchain"></a>

In order to write data to the Pivotal network, you need to create a `Signer`.

You can create a `Signer` by instantiating a new ethers.js `Wallet` object, providing it with a private key and `Provider`.

```
const privateKey = 'PRIVATE_KEY';
const signer = new ethers.Wallet(privateKey, provider);
```

{% hint style="info" %}
`PRIVATE_KEY` is the private key of the wallet to use when creating the signer.
{% endhint %}

### Interacting with smart contracts[​](https://docs.base.org/docs/tools/ethers#interacting-with-smart-contracts) <a href="#interacting-with-smart-contracts" id="interacting-with-smart-contracts"></a>

You can use ethers.js to interact with a smart contract on Pivotal by instantiating a `Contract` object using the ABI and address of a deployed contract:

```
const abi = [
… // ABI of deployed contract
];

const contractAddress = "CONTRACT_ADDRESS"

// read only
const contract = new ethers.Contract(contractAddress, abi, provider);
```

For write-only contracts, provide a `Signer` object instead of a `Provider` object:

```
// write only
const contract = new ethers.Contract(contractAddress, abi, signer);
```

{% hint style="info" %}
`CONTRACT_ADDRESS` is the address of the deployed contract.
{% endhint %}

Once you have created a `Contract` object, you can use it to call desired methods on the smart contract:

```
async function setValue(value) {
  const tx = await contract.set(value);
  console.log(tx.hash);
}

async function getValue() {
  const value = await contract.get();
  console.log(value.toString());
}
```
