UNPKG

@0xfutbol/id

Version:

React component library with shared providers for 0xFutbol ID

97 lines (96 loc) 3.67 kB
'use strict';var index=require('./index-gEYw6hWC.js');require('react'),require('react/jsx-runtime'),require('@0xfutbol/id-sign'),require('react-use'),require('@0xfutbol/constants'),require('thirdweb'),require('@matchain/matchid-sdk-react'),require('@tanstack/react-query'),require('@matchain/matchid-sdk-react/index.css'),require('react-dom');// we do not send multiple batches so this stays consistent const BATCH_ID = 0n; /** * @internal - only exported for testing */ async function prepareBiconomyTransaction({ account, serializableTransaction, transaction, gasless, }) { const forwarderContract = index.at({ address: gasless.relayerForwarderAddress, chain: transaction.chain, client: transaction.client, }); // get the nonce const nonce = await index.P({ contract: forwarderContract, method: "function getNonce(address,uint256) view returns (uint256)", params: [account.address, BATCH_ID], }); const deadline = Math.floor(Date.now() / 1000) + (gasless.deadlineSeconds ?? 3600); const request = { from: account.address, to: serializableTransaction.to, token: index.ad, txGas: serializableTransaction.gas, tokenGasPrice: 0n, batchId: BATCH_ID, batchNonce: nonce, deadline: deadline, data: serializableTransaction.data, }; if (!request.to) { throw new Error("Cannot send a transaction without a `to` address"); } if (!request.txGas) { throw new Error("Cannot send a transaction without a `gas` value"); } if (!request.data) { throw new Error("Cannot send a transaction without a `data` value"); } // create the hash const message = index.a0([ { type: "address" }, { type: "address" }, { type: "address" }, { type: "uint256" }, { type: "uint256" }, { type: "uint256" }, { type: "uint256" }, { type: "bytes32" }, ], [ index.d(request.from), index.d(request.to), index.d(request.token), request.txGas, request.tokenGasPrice, request.batchId, request.batchNonce, index.au(request.data), ]); const signature = await account.signMessage({ message }); return [request, signature]; } /** * @internal */ async function relayBiconomyTransaction(options) { const [request, signature] = await prepareBiconomyTransaction(options); // send the transaction to the biconomy api const response = await fetch("https://api.biconomy.io/api/v2/meta-tx/native", { method: "POST", body: index.s({ apiId: options.gasless.apiId, params: [request, signature], from: request.from, to: request.to, gasLimit: request.txGas, }), headers: { "x-api-key": options.gasless.apiKey, "Content-Type": "application/json;charset=utf-8", }, }); if (!response.ok) { response.body?.cancel(); throw new Error(`Failed to send transaction: ${await response.text()}`); } const json = await response.json(); const transactionHash = json.txHash; if (index.j(transactionHash)) { return { transactionHash: transactionHash, chain: options.transaction.chain, client: options.transaction.client, }; } throw new Error(`Failed to send transaction: ${index.s(json)}`); }exports.prepareBiconomyTransaction=prepareBiconomyTransaction;exports.relayBiconomyTransaction=relayBiconomyTransaction;//# sourceMappingURL=biconomy-PecqWcy6.js.map