Skip to main content

How to onboard users in your game and make a gasless transaction

Community member contribution

The following document was contributed by @joalavedra. Give them a shoutout if you find it useful!

Openfort is a headless wallet solution that helps developers integrate authentication, private key management, and account abstraction into their dApps. By abstracting away the complexities of blockchain interactions, Openfort allows you to build Web3 applications with a Web2-like user experience without requiring end users to manage private keys or hold cryptocurrency.

Openfort enables you to:

  • Implement secure authentication and key management
  • Create and manage smart contract wallets
  • Enable gasless and sponsored transactions

Check out Openfort's Documentation to get started.

Openfort dashboard

The Openfort dashboard allows you to:

  • Create and manage projects
  • Generate API keys
  • Configure authentication providers
  • Monitor transactions and analytics
  • Set up webhooks for real-time notifications
Openfort Dashboard

Please check out the docs to learn more about using the Openfort Dashboard. Click here to access the Openfort Dashboard.

How to implement a gasless transaction on Arbitrum using Openfort

With Openfort, you can sponsor transactions for your users, meaning that in-game wallets don't need native tokens to execute transactions, such as minting an NFT. This guide will walk you through the process of implementing a gasless transaction to mint an NFT on Arbitrum.

1. Import the NFT Contract

First, you need to import the smart contract you'll be interacting with. In this case, we'll use an NFT contract with a 'mint' function.

curl https://api.openfort.xyz/v1/contracts \
-u "$YOUR_SECRET_KEY:" \
-d 'name=NFT Contract' \
-d 'chainId=42161' \
-d 'address=YOUR_CONTRACT_ADDRESS'

Replace YOUR_CONTRACT_ADDRESS with the address of your NFT contract on Arbitrum.

2. Set up the Gas Policy

Create a new policy to sponsor gas fees for users:

curl https://api.openfort.xyz/v1/policies \
-H "Authorization: Bearer $YOUR_SECRET_KEY" \
-d chainId=42161 \
-d name="Arbitrum NFT Sponsor" \
-d "strategy[sponsorSchema]=pay_for_user"

Then, add a policy rule for the NFT contract:

curl https://api.openfort.xyz/v1/policies/:id/policy_rules \
-H "Authorization: Bearer $YOUR_SECRET_KEY" \
-d type="contract_functions" \
-d functionName="mint" \
-d contract="con_..."

Replace :id with the policy ID returned from the previous step, and con_... with your contract ID.

3. Create a gasless transaction

Now, let's create a transaction to mint an NFT without the user paying for gas:

const Openfort = require('@openfort/openfort-node').default;
const openfort = new Openfort(YOUR_SECRET_KEY);

const policyId = 'pol_...'; // Your policy ID from step 2

const transactionIntent = await openfort.transactionIntents.create({
chainId: 42161, // Arbitrum One
policy: policyId,
optimistic: true,
interactions: {
contract: 'con_....', // Your NFT contract ID
functionName: 'mint',
functionArgs: ['0x...'] // Address to receive the NFT
}
});

4. Optional: specify the player

If you want to associate the transaction with a specific player:

const Openfort = require('@openfort/openfort-node').default;
const openfort = new Openfort(YOUR_SECRET_KEY);

const playerId = 'pla_...'; // Your player ID
const policyId = 'pol_...'; // Your policy ID from step 2

const transactionIntent = await openfort.transactionIntents.create({
player: playerId,
chainId: 42161, // Arbitrum One
policy: policyId,
optimistic: true,
interactions: {
contract: 'con_....', // Your NFT contract ID
functionName: 'mint',
functionArgs: [playerId] // Minting to the player's address
}
});

By following these steps, you've created a gasless transaction on Arbitrum using Openfort. The user can now mint an NFT without needing to hold ETH for gas fees. Remember to handle the response from the transactionIntents.create call in your application to provide feedback to the user about the minting process.

Detailed tutorial

For a more detailed tutorial, please refer to the Openfort Quick Start Guide.

Connect with Openfort

Need further assistance? Reach out to Openfort for support and stay updated: