FAQ
Frequently Asked Questions and Common Misconceptions
If your question is not answered below, please consider posting it to the Request Network Discussions page on Github.
Is Request Network a blockchain, smart contract platform, or L2 scaling solution?
No. Request Network is not a blockchain, smart contract platform, or scaling solution. Rather, it's a protocol for storing payment requests and facilitating on-chain payments. It stores payment requests in IPFS with CID hashes stored on Gnosis Chain. It uses The Graph for on-chain event indexing. It processes payments across a variety of supported payment chains.
Do I need a Request Node on <Chain> to request funds on <Chain>?
No, you don't need a Request Node on <Chain> to request funds on <Chain>. Requests are created on Gnosis Chain (or on a testnet like Sepolia) regardless of where the payment(s) will occur. Payment(s) can occur on any of our supported payment chains.
To help builders get started quickly, the Request Network Foundation operates several Request Node Gateways that are free for anyone to use. These gateways offer endpoints for creating and retrieving requests.
Requests created on the Gnosis Chain are "real" and should exist forever. Requests created on Sepolia are "test" requests and will exist only as long as the testnet exists.
Can a Request Node modify a request's contents before persisting it to IPFS and on-chain?
No. A Request Node cannot change a request's contents before persisting it to IPFS and on-chain because doing so would invalidate the signature. This is true for private, encrypted requests as well. The Request Node cannot forge the end-user's signature.
Can I create a request without using a Request Node?
No. Today, a Request Node is required to interact with the Request Network IPFS Network. That said, it is possible to make the end-user pay the protocol fee when creating a request instead of the Request Node. To do this, inject an HttpMetaMaskDataAccess
into the frontend RequestNetwork
instance.
Is the address that signs to create a request the same address that receives the payment?
Not necessarily. The address that signs to create a request is not necessarily the same address that receives the payment. They can be different.
The address that signs to create a request is the signer
when creating a request via createRequest()
in the Request Network SDK. It's usually the payee identity but can alternatively be the payer identity.
The address that receives the payment is defined by the payment network, usually at paymentNetwork.parameters.paymentAddress
.
This design allows for a single payee identity to have potentially multiple payment addresses.
Are requests in Request Network stored fully on-chain?
No. Request Network is a hybrid on/off-chain protocol storing the majority of request contents in IPFS. Only the content-addressable ID (CID) is stored on-chain, on Gnosis Chain.
Can I make a payment *before* creating a request?
Yes. Payments are linked to requests via a paymentReference
which is derived from the requestId
which is derived from the request contents. Therefore, it is possible to calculate the paymentReference
, send a payment using the paymentReference
as input to the smart contract, and then create a request.
Details:
Sending a payment before creating the request can be done using functions in the
payment-processor
package.The higher-level
request-client.js
package doesn't support payments before the request is created.This
paymentReference
consists of the last 8 bytes of a salted hash of therequestId
:last8Bytes(hash(lowercase(requestId + salt + info)))
:requestId
is the id of the requestsalt
is a random number with at least 8 bytes of randomness. It must be unique to each requestinfo
is the JSON-stringified string of thepaymentInfo
for a payment, orrefundInfo
for a refund.lowercase()
transforms all characters to lowercasehash()
is a keccak256 hash functionlast8Bytes()
take the last 8 bytes
Does Request Network support requests for fiat currency?
Yes and No.
Requests can be denominated in fiat currencies like USD, EUR, etc. (ISO 4217 currencies) but our payment smart contracts only support payments in cryptocurrencies. We call these Conversion payments, in which the requested fiat amount is converted to the appropriate cryptocurrency amount using on-chain price feeds at the moment of payment.
It is possible to implement fiat payments using Declarative Requests, where the payer declares that the payment was sent and the payee declares that the payment was received.
Can I access a user's historical invoices created via Request Finance?
Yes. It is possible to request access to a user's Request Finance invoices using the add-stakeholder
web component which is just a thin wrapper around the Request Finance Add Stakeholders API. They display a dialog that prompts the end-user to grant access to 1 invoice at a time.
Details:
Request Finance invoices are encrypted.
Request Network Foundation cannot grant access to encrypted requests in Request Finance.
Can I create a request via a smart contract call?
No. It is not currently possible to create a request via a smart contract call. However, RequestNetwork/public-issues#15 is in our roadmap to make this possible.
The recommended way to create a request is using the Request Network SDK via a frontend so the payee or payer can sign to create the request.
Does Request Network support cross-chain payments where the payer sends funds on one chain and the payee receives funds on a different chain?
No. Request Network does not currently support cross-chain payments. All of the supported payment types involve the payer sending funds and the payee receiving funds on the same chain.
We would be open to integrating a cross-chain payment system but would need to balance it against the other priorities in our backlog.
Does Request Network support private requests?
Yes. See Private Requests using Encryption
Does Request Network support private payments?
No. Request Network does not currently support private payments. All of the supported payment types use public blockchains on which all transactions are public.
We would be open to integrating a private payment system but would need to balance it against the other priorities in our backlog.
Can I use my own payment infrastructure with Request Network requests?
Yes. Request Network is open to integrating 3rd party payment infrastructure as long as the integration is open-source and results in Pull Requests (PRs) into the Request Network SDK that enables all of the Builders in our ecosystem to benefit and use the payment infrastructure.
Request Network payment detection relies on events emitted during the payment transaction that contain a paymentReference
which ties the payment to the request. The paymentReference
is an 8-byte hash derived from the request ID.
Option 1: Update the 3rd party payment smart contract to emit the paymentReference
event.
paymentReference
event.This means adding a new payment network. This would require updates to the following components:
payment-subgraph repo - indexes on-chain payment events
requestNetwork monorepo
payment-detection - functions to query the payment-subgraph
advanced-logic - payment network definitions
payment-processing - functions to call the smart contracts
request-client - functions to create and update requests
Example
These PRs added the ERC20TransferableReceivable payment network
Option 2: Update the 3rd party payment smart contract to call one of the existing Request Network payment network smart contracts.
In this case, the existing payment detection system should work out of the box without changes. This may, or may not involve adding a new payment network. This would require updates to the following components:
requestNetwork monorepo
payment-processing - functions to call the smart contracts
request-client - functions to create and update requests
Option 3: Deploy a One Time Proxy smart contract for each request.
This option is not yet available and will be implemented in #1283
Last updated