Nyfa App generates automated crypto research reports as NFTs on Base network. Get instant analysis of market cap, price trends & news sentiment - all minted as verifiable "Not Financial Advice" tokens. Zero blockchain knowledge needed! 🔍🪙 #Web3 #DeFi
Prize Pool
Here's a detailed breakdown of the Nyfa App project:
Core Purpose: Nyfa App is a decentralized application (dApp) that transforms cryptocurrency research into verifiable digital assets. Its main innovation is the concept of "NoFA" (Not Financial Advice) tokens, which are NFTs that capture and verify crypto asset research at a specific point in time.
Key Components:
User Flow:
User selects a cryptocurrency to research
System automatically gathers and analyzes data
Creates a standardized PNG report
Automatically mints the report as an NFT
Provides user with verifiable proof of research
Blockchain Implementation:
The project essentially creates a bridge between traditional crypto research and blockchain verification, making it easy for users to create, verify, and share their cryptocurrency research while maintaining a permanent record on the blockchain. It removes traditional barriers to blockchain interaction while providing valuable research tools and verification capabilities.
Core Architecture:
Frontend: Next.js 15.1.6 with Tailwind CSS for styling Authentication: Privy Database: Supabase Blockchain Infrastructure:
Base Network (specifically Base Sepolia testnet) Wagmi OnchainKit AgentKit with Privy server wallet integration
The main technical integration shown in the document is between AgentKit and Privy server wallets, which enables:
Server-side wallet management through Privy Automated blockchain interactions using AgentKit's action providers Custom NFT minting with on-chain metadata storage using ERC721URIStorage Gasless transactions for end users Integration with Base Sepolia testnet
The document shows one key code example of the integration: javascriptCopyasync function getAgentKitFromPrivy(privyWalletId: string) { const privyWallet = await privy.walletApi.getWallet({ id: privyWalletId });
const account = await createViemAccount({ walletId: privyWallet.id, address: privyWallet.address, privy, });
const client = createWalletClient({
account,
chain: baseSepolia,
transport: http(https://lb.drpc.org/ogrpc?network=base-sepolia&dkey=${process.env.DRPC_API_KEY}
),
});
const walletProvider = new ViemWalletProvider(client); return await AgentKit.from({ walletProvider, actionProviders: [wallet, cdp, erc721, erc721uristorage], }); } And the custom ERC721URIStorage action provider: javascriptCopyconst erc721uristorage = customActionProvider<EvmWalletProvider>({ name: "erc721_uristorage", description: "Mint ERC721URIStorage NFTs", schema: mintParamsSchema, invoke: async (walletProvider, args) => { const { to, uri, contractAddress } = args;
const abi = parseAbi([
"function mint(address to, string memory uri) public returns (uint256)",
]);
const data = encodeFunctionData({
abi,
functionName: "mint",
args: [to, uri],
});
return await walletProvider.sendTransaction({
to: contractAddress,
data,
value: BigInt(0),
});
}, });