Frequently Asked Questions And Answers.
1. What is native meta-transaction? How to make my contract native meta-transaction enabled?
Native meta transactions let users communicate directly to smart contracts with signed messages. These Signed messages can be relayed by any third party without changing the actual “sender” value.
To enable native meta-transaction in your contract, make sure to remove and msg.sender and msg.value dependency from your contract. All the input parameters should be signed by the user using his private key and Signature verification should happen on the contract itself and sender address should be recovered on the contract after successful signature verification.
To help users and to keep a standard way of enabling native meta-transaction on the contract, we along with the Ethereum community, have created a standard and secure protocol for this Follow this for step by step guide.
2. I have inherited “EIP712MetaTransaction.sol” in my contract, now while sending transactions I am getting “Signature & Signer does not match” error, why?
This is a very common error. Make sure the values (name & version respectively) you have provided while inheriting EIP712MetaTransaction into your contract like below example
contract TestContract is EIP712MetaTransaction("TestContract","1") {
//your implementation
should be same while setting the domainData in your script.
let domainData = {
name: "TestContract",
version: "1",
verifyingContract: "your Contract address"
chainId: 42
3. Why do I have to change msg.sender to _msgSender()? Is it Safe?
Yes, it's perfectly safe. Our contracts are audited by QuantStamp & MixedBytes.
4. What values should I put in the domainData of "EIP712MetaTransaction.sol"?
As described in point 2, values in domainData can be set to anything as per your choice but they should match the values set during inheriting the EIP712MetaTransaction in your contract.
5. Why is Metamask asking me to pay the fee? This is the case where Biconomy is not properly integrated in the code. Few debugging checks you can do: a). First, set the debug flag while initialising Biconomy as true const biconomy = new Biconomy(provider,{apiKey: "<apiKey>", debug: true}); b). Before calling the method check if the web3 object has Biconomy set as its provider. c). Check if the Smart Contract and Apis are registered properly on the Biconomy Dashboard
Still facing the issue, contact us.
6. Can I create two instances of Biconomy at runtime (one on L1 & second on L2)?
Yes you can create two instances of Biconomy with their own provider object pointing to different networks.
But this use case is mostly when some part of your dapp is on Ethereum and some part is on Layer 2 (Matic or xDai etc) and the user wallet RPC URL is pointing to ethereum mainnet. In this case you can create the second instance of Biconomy using the provider object pointing explicitly to Layer2 blockchain and then use meta transactions to interact on Layer. Check Network Agnostic Transactions section for more details.
7. I have integrated Biconomy properly, but still, transactions are not going via mexa SDK.
Check the version on mexa SDK and the web3. Make sure you have installed the latest version of mexa, and web3 version >= 1.3.0. You can check here for the latest version of the Mexa SDK.
As a last resort, you can also use our Native API directly in your code, in case you don't want to use the SDK.
Here is an example of how to use Native Api in your code.
8. What happens to my transaction when Biconomy relays it? Is it safe? What if you change the Data of the transaction?
Biconomy is non-custodial and trustless. Any transaction coming to our platform, is Signed by the user with his private key. The User Signs the Data , this data has all the input params in encrypted form.
Signed data along with actual data params is relayed by Biconomy, as the Data is encrypted and Signed with user's private key , its impossible for Biconomy to Change the data.
In case Biconomy change it, on the contract level the Signed data and the data input params sent along with it , gets matched, to check if the signed params and the actual params are same. if not, the Signature verification fails, hence the transactions fails.
9. Can you share with me some demo of native meta-transaction, where I can see and run on my local to see how it works?
Yes, of course. Please check below:
You can explore different branches in the repository for other examples like doing meta transactions using ethers.js at backend using private key or example where end user pays the gas fee in ERC20 tokens and more.
10. Which version of mexa SDK should I use?
You can check here for the latest version of the Mexa SDK.
11. Is Mexa ether.js compatible?
Yes, Mexa SDK is ether.js compatible. 12. I have a vanilla javascript project, how can I use Biconomy in it?
We have Mexa SDK version for plain JS projects also. Check here under "Let's get Started" section's Standalone JS File tab
13. Which networks does Biconomy support?
14. Biconomy is currently operating in a semi-centralised model, are there plans to decentralise?
Biconomy is following a path of progressive decentralisation. The current semi centralised model ensures non-custody of user funds and achieves a high degree of security. We believe progressively decentralising will help us ensure greater security and increased community activity going forward. So in case you’re interested in being a part of our journey and community, do get in touch!
15. How does Biconomy differ from alternative approaches such as GSN?
Biconomy Pros:
  • Dashboard for developers to more granular control on meta transaction usage.
  • Quick 2 step integration with no extra smart contract deployments.
  • No need to worry about protocol changes or new trends on blockchain. Biconomy makes sure the system is up to date with market trends.
  • Less gas per transaction as no extra hops on-chain and payments are processed off-chain.
  • Gas fee can be paid in stable tokens or ERC20 tokens.
  • You can do network agnostic transactions - No need to change RPC URL in Metamask while doing transactions on Layer2
Biconomy Cons:
  • Not decentralized, so need to trust Biconomy servers for relaying transactions.
GSN Pros:
  • Decentralized system, so no need to trust any single relayer.
  • GSN2 is simpler than GSN1, so comparatively easy to set up.
  • Relayers can be paid in ERC20 tokens while paying back the fees.
GSN Cons:
  • Extra setup is required.
  • High relayers fees.
  • Regular monitoring of DApp funds is required to repay the relayers.
  • High transaction fee, as extra processing is done on chain like multiple hops, checking dapp deposits, relayer payments.
  • 70 cents costlier than Biconomy, per transaction.