Security News
Research
Supply Chain Attack on Rspack npm Packages Injects Cryptojacking Malware
A supply chain attack on Rspack's npm packages injected cryptomining malware, potentially impacting thousands of developers.
@funkit/react
Advanced tools
FunKit empowers you to create feature-rich and extensible smart wallets built on account abstraction. Leveraging the FunKit, you can customize gas behavior, adopt multi-sig and common authentication method, monetize your application, execute any transactions from smart wallets, and much more.
This repo only covers FunKit React SDK which means to simplify the development experience of using fun account abstraction wallet for frontend. Check our Core SDK if you focus more on backend or do not want to use react hooks.
npm i @funkit/react --save
# or
yarn add @funkit/react
FunKit needs to be configured with an API key. Get a key by logging to our dashboard.
Import all required classes.
import {
convertToValidUserId,
useConnector,
useCreateFun,
configureNewFunStore,
MetamaskConnector,
usePrimaryAuth
} from "@funkit/react"
import { useState } from "react"
Set your environment variables describing how your smart wallets interact with blockchains. This can include chain, apiKey, optional gasSponsor, and connectors.
chain
- Each FunWallet exists on an EVM-compatible blockchain.apiKey
- You can get an API key by logging to our dashboard.gasSponsor
- All wallets have to pay gas to execute transactions on a blockchain. You can pre-fund the wallet with native tokens or you can have third parties to pay for gas by specifying a gasSponsor.connectors
- The login method for your usersconfigureNewFunStore({
config: {
chain: CHAIN_ID,
apiKey: API_KEY,
gasSponsor: {
sponsorAddress: SPONSOR_ADDRESS
}
},
connectors: [MetamaskConnector()]
})
Next, users need to login through connectors to provide a way for fun account abstraction to sign transactions. Here we add a button to activate/deactivate the connector upon click.
const ConnectorButton = ({ index }) => {
const { active, activate, deactivate, connectorName, connector } = useConnector({ index })
return (
<button
onClick={() => {
if (active) {
deactivate(connector)
return
}
activate(connector)
}}
>
{active ? "Unconnected" : "Connect"} {connectorName}{" "}
</button>
)
}
With the Auth instance that you just created, you can now initialize your FunWallet. Here are the FunWallet constructor parameters:
users
- This is a User[]
that holds all users
that can access your FunWallet
. For simplicity, we’re only including 1 user here.uniqueId
- This is a random seed that is generated from our Auth
instance. The purpose of this seed is to generate the address
of our FunWallet
.const { account: connectorAccount } = useConnector({
index: 0,
autoConnect: true,
})
const { initializeFunAccount, funWallet } = useCreateFun()
const [auth] = usePrimaryAuth()
const initializeSingleAuthFunAccount = async () => {
if (!connectorAccount) {
console.log("Please connect your wallet first!");
return
}
initializeFunAccount({
users: [{ userId: convertToValidUserId(connectorAccount) }],
uniqueId: await auth.getWalletUniqueId(),
}).catch()
}
Now we have the wallet object, we will show how to transfer some basic ethers to other addresses. Note that the smart wallet will only be created on the blockchain after executeOperation is finished.
const transferEth = async () => {
if (!connectorAccount) {
console.log("Please connect your wallet first!")
return
}
const op = await funWallet.transfer(auth, await auth.getUserId(), {
token: "eth",
to: await auth.getAddress(),
amount: AMOUNT,
})
setLoadings({ ...loadings, transfer: true })
const receipt = await funWallet.executeOperation(auth, op)
setTxIds({ ...txIds, transfer: receipt.txId })
setLoadings({ ...loadings, transfer: false })
}
You can test FunKit on Ethereum goerli testnet with the following configuration. We have a gas sponsor that will cover your gas cost for the first 200 operations so you don’t have to worry about pre-funding the wallet or setting up the gas sponsor to start.
configureNewFunStore({
config: {
chain: "goerli",
apiKey: API_KEY,
gasSponsor: {
sponsorAddress: "0xCB5D0b4569A39C217c243a436AC3feEe5dFeb9Ad",
},
},
connectors: [MetamaskConnector()],
})
FAQs
React interface for the Funkit Core SDK
The npm package @funkit/react receives a total of 0 weekly downloads. As such, @funkit/react popularity was classified as not popular.
We found that @funkit/react demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Research
A supply chain attack on Rspack's npm packages injected cryptomining malware, potentially impacting thousands of developers.
Research
Security News
Socket researchers discovered a malware campaign on npm delivering the Skuld infostealer via typosquatted packages, exposing sensitive data.
Security News
Sonar’s acquisition of Tidelift highlights a growing industry shift toward sustainable open source funding, addressing maintainer burnout and critical software dependencies.