Quickstart - Browser
This page will introduce the primary operations provided by Request Network’s SDK while using the Web3SignatureProvider to sign requests with a private key stored inside a wallet.
This approach works well for Browser environments with access to a web3 wallet.
Create a request
To create an unencrypted ERC-20 request, first connect to an ethers v5 Provider and Signer or wagmi / viem WalletClient.
Unfortunately, the Request Network SDK does not yet support ethers v6.
import { providers } from "ethers";
let provider;
if (process.env.WEB3_PROVIDER_URL === undefined) {
// Connect to Metamask and other injected wallets
provider = new providers.Web3Provider(window.ethereum);
} else {
// Connect to your own Ethereum node or 3rd party node provider
provider = new providers.JsonRpcProvider(process.env.WEB3_PROVIDER_URL);
}
// getDefaultProvider() won't work because it doesn't include a Signer.import { useWalletClient } from "wagmi";
const { data: walletClient } = useWalletClient();Very similar to wagmi, but without using hooks. Construct your own WalletClient object.
Then, construct a Web3SignatureProvider, passing in the ethers Provider or viem WalletClient.
Then, construct a RequestNetwork, passing in the:
Request Node URL. In this example, we use the Sepolia Request Node Gateway.
Web3SignatureProviderconstructed in the previous step.
Then, prepare the Request creation parameters:
Then, call createRequest() to prepare a Request object.
Finally, call request.waitForConfirmation() to wait until:
The request contents are persisted in IPFS
The Content-addressable ID (CID) is stored on-chain
The resulting on-chain event is indexed by the storage subgraph.
CodeSandBox: Create a request
Pay a request
First, construct a RequestNetwork object and connect it to a Request Node. In this example, we use the Sepolia Request Node Gateway:
Then, retrieve the request and get the request data. Take note of the current request balance, to be used later for payment detection.
Then, construct an ethers v5 Provider and Signer. These allow you to read and write to the chain, respectively.
Unfortunately, the Request Network SDK does not yet support ethers v6.
Ethers.js Adapters copied from https://wagmi.sh/react/ethers-adapters
Very similar to wagmi, but without using hooks. Instead, call publicClientToProvider() or walletClientToSigner()
Then, check that the payer has sufficient funds using hasSufficientFunds()
Then, in the case of an ERC-20 request, check that the payer has granted sufficient approval using hasErc20Approval(). If not, submit an approval transaction using approveErc20. Wait for an appropriate number of block confirmations. On Sepolia or Ethereum, 2 block confirmations should suffice. Other chains may require more.
Finally, pay the request using payRequest()
You can detect that the payment was successful by polling the request and waiting until the request balance is greater than or equal to the expected amount.
CodeSandBox: Create and pay a request and detect a payment
Video: Create and pay a request and detect a payment
Retrieve a user's requests
First, construct a RequestNetwork object and connect it to a Request Node. In this example, we use the Sepolia Request Node Gateway:
Then, call fromIdentity() to get an array of Request objects or fromRequestId() to get a single Request object. This function retrieves the Requests stored in IPFS and queries on-chain events to determine the balances paid so far. Finally, call getData() on each Request to get the request contents.
CodeSandBox: Retrieve a user's requests
Video: Retrieve a user's requests
Last updated
Was this helpful?