├── .gitignore ├── .gitmodules ├── AI ├── coinbase-ai-agent │ ├── .env.example │ ├── .gitignore │ ├── README.md │ ├── package.json │ ├── src │ │ ├── agent.ts │ │ ├── autonomous.ts │ │ ├── checkMentions.ts │ │ └── test.ts │ └── tsconfig.json ├── evm-mcp-server │ ├── .gitignore │ ├── README.md │ ├── chains.ts │ ├── claude_desktop_config.json │ ├── clients.ts │ ├── index.ts │ ├── package.json │ ├── prompts.ts │ ├── resources.ts │ ├── tools-merged.png │ ├── tools.ts │ └── tsconfig.json └── solana-mcp │ ├── README.md │ ├── claude_desktop_config.json │ ├── index.ts │ ├── package.json │ ├── solana-mcp-claude.png │ └── tsconfig.json ├── LICENSE ├── QuickAlerts ├── Telegram_bot │ ├── README.md │ ├── index.js │ ├── package-lock.json │ └── package.json └── Twitter_bot │ ├── README.md │ ├── index.js │ ├── package-lock.json │ └── package.json ├── README.md ├── Streams ├── README.md ├── ai-bot-discord │ ├── .env.example │ ├── actions │ │ ├── getMetrics.js │ │ └── openaiHelper.js │ ├── main.js │ └── package.json ├── app.js ├── dex-metrics-dashboard │ ├── .gitignore │ ├── README.md │ ├── app │ │ ├── favicon.ico │ │ ├── globals.css │ │ ├── layout.js │ │ └── page.js │ ├── components │ │ ├── BlockInput.js │ │ ├── DexSection.js │ │ ├── ErrorMessage.js │ │ ├── GeneralMetrics.js │ │ └── TopTokens.js │ ├── eslint.config.mjs │ ├── jsconfig.json │ ├── next.config.mjs │ ├── package-lock.json │ ├── package.json │ ├── postcss.config.mjs │ ├── public │ │ ├── file.svg │ │ ├── globe.svg │ │ ├── jupiter-logo.png │ │ ├── next.svg │ │ ├── phoenix-logo.png │ │ ├── raydium-logo.png │ │ ├── vercel.svg │ │ └── window.svg │ └── tailwind.config.mjs ├── package-lock.json ├── package.json ├── postcss.config.js ├── qs-react-app │ ├── README.md │ ├── package-lock.json │ ├── package.json │ ├── public │ │ ├── favicon.ico │ │ ├── index.html │ │ ├── logo192.png │ │ ├── logo512.png │ │ ├── manifest.json │ │ └── robots.txt │ ├── src │ │ ├── App.css │ │ ├── App.js │ │ ├── App.test.js │ │ ├── DashboardTab.js │ │ ├── LogsTab.js │ │ ├── MainPage.js │ │ ├── index.css │ │ ├── index.js │ │ ├── logo.svg │ │ ├── reportWebVitals.js │ │ └── setupTests.js │ └── tailwind.config.js ├── tailwind.config.js └── wallet-allowance-checker-app │ ├── README.md │ ├── example.env │ ├── package-lock.json │ ├── package.json │ ├── public │ ├── favicon.ico │ ├── index.html │ ├── logo192.png │ ├── logo512.png │ ├── manifest.json │ └── robots.txt │ ├── server.js │ └── src │ ├── App.css │ ├── App.js │ ├── App.test.js │ ├── components │ └── WalletApprovalSearch.js │ ├── index.css │ ├── index.js │ ├── logo.svg │ ├── reportWebVitals.js │ └── setupTests.js ├── TEMPLATE_README.md ├── base └── telegram-trading-bot │ ├── .env.example │ ├── .gitignore │ ├── README.md │ ├── index.ts │ ├── nodemon.json │ ├── package.json │ ├── public │ └── telegram-test-combined.png │ ├── src │ ├── commands │ │ ├── balance-history.ts │ │ ├── buy.ts │ │ ├── deposit.ts │ │ ├── import-export.ts │ │ ├── sell.ts │ │ ├── settings.ts │ │ ├── start-help.ts │ │ ├── wallet.ts │ │ └── withdraw.ts │ ├── context.ts │ ├── lib │ │ ├── database.ts │ │ ├── encryption.ts │ │ ├── history.ts │ │ ├── swap.ts │ │ └── token-wallet.ts │ ├── types │ │ ├── commands.ts │ │ ├── config.ts │ │ └── wallet.ts │ └── utils │ │ ├── abis.ts │ │ ├── constants.ts │ │ ├── formatters.ts │ │ ├── keyboardHelper.ts │ │ └── validators.ts │ └── tsconfig.json ├── binance └── bep20 │ ├── README.md │ └── bep20.sol ├── bitcoin └── transaction-report-generator │ ├── README.md │ ├── python │ ├── .env.example │ ├── README.md │ ├── app.py │ ├── blockbook_methods.py │ ├── calculate_variables.py │ ├── generate_reports.py │ ├── image.png │ ├── interfaces.py │ └── requirements.txt │ ├── timezones.txt │ └── typescript │ ├── .env.example │ ├── README.md │ ├── app.ts │ ├── blockbookMethods.ts │ ├── calculateVariables.ts │ ├── generateReport.ts │ ├── image.png │ ├── interfaces.ts │ ├── package.json │ └── tsconfig.json ├── console-api └── grafana-dashboard │ ├── README.md │ ├── docker-compose.yaml │ ├── grafana │ ├── dashboards │ │ └── QuickNode Console API.json │ └── provisioning │ │ ├── dashboards │ │ └── main.yaml │ │ └── datasources │ │ └── prometheus-source.yaml │ └── prometheus │ └── prometheus.yaml ├── courses └── solana-basics │ ├── final │ ├── .env.example │ ├── .eslintrc.json │ ├── .gitignore │ ├── README.md │ ├── app │ │ ├── favicon.ico │ │ ├── games │ │ │ └── [gamePda] │ │ │ │ └── page.tsx │ │ ├── globals.css │ │ ├── layout.tsx │ │ └── page.tsx │ ├── components │ │ ├── Balance.tsx │ │ ├── Board.tsx │ │ ├── Game.tsx │ │ ├── GameList.tsx │ │ ├── Main.tsx │ │ ├── Navbar.tsx │ │ ├── PlayerStats.tsx │ │ ├── SendTransactionButtons │ │ │ ├── ClaimReward.tsx │ │ │ ├── CreateGame.tsx │ │ │ ├── CreatePlayer.tsx │ │ │ ├── JoinGame.tsx │ │ │ ├── Play.tsx │ │ │ ├── SendMemo.tsx │ │ │ └── SendTransactionTemplate.tsx │ │ └── SolanaProviders.tsx │ ├── next.config.js │ ├── package-lock.json │ ├── package.json │ ├── postcss.config.js │ ├── public │ │ ├── next.svg │ │ └── vercel.svg │ ├── tailwind.config.ts │ ├── tsconfig.json │ └── utils │ │ ├── constants.ts │ │ ├── game │ │ ├── gameClient.ts │ │ ├── idl │ │ │ ├── idl.json │ │ │ └── idl.ts │ │ ├── types.ts │ │ └── useGame.tsx │ │ └── utils.ts │ ├── progress │ ├── .env.example │ ├── .eslintrc.json │ ├── .gitignore │ ├── README.md │ ├── app │ │ ├── favicon.ico │ │ ├── globals.css │ │ ├── layout.tsx │ │ └── page.tsx │ ├── components │ │ ├── Balance.tsx │ │ ├── Main.tsx │ │ ├── Navbar.tsx │ │ ├── SendTransactionButtons │ │ │ ├── SendMemo.tsx │ │ │ └── SendTransactionTemplate.tsx │ │ └── SolanaProviders.tsx │ ├── next.config.js │ ├── package-lock.json │ ├── package.json │ ├── postcss.config.js │ ├── public │ │ ├── next.svg │ │ └── vercel.svg │ ├── tailwind.config.ts │ ├── tsconfig.json │ └── utils │ │ ├── constants.ts │ │ └── utils.ts │ └── starter │ ├── .eslintrc.json │ ├── .gitignore │ ├── README.md │ ├── app │ ├── favicon.ico │ ├── globals.css │ ├── layout.tsx │ └── page.tsx │ ├── next.config.js │ ├── package-lock.json │ ├── package.json │ ├── postcss.config.js │ ├── public │ ├── next.svg │ └── vercel.svg │ ├── tailwind.config.ts │ └── tsconfig.json ├── defi └── uniswap-v3-swaps │ ├── .env.example │ ├── abis │ ├── factory.json │ ├── pool.json │ ├── quoter.json │ ├── swaprouter.json │ ├── usdc.json │ └── weth.json │ ├── index.js │ ├── package-lock.json │ └── package.json ├── enhanced-apis ├── NFT-Collection-Explorer │ ├── README.md │ ├── mobile │ │ ├── .gitignore │ │ ├── App.js │ │ ├── app.json │ │ ├── assets │ │ │ ├── adaptive-icon.png │ │ │ ├── favicon.png │ │ │ ├── icon.png │ │ │ └── splash.png │ │ ├── babel.config.js │ │ ├── package-lock.json │ │ └── package.json │ ├── scripts │ │ ├── .env.example │ │ ├── README.md │ │ ├── fetchNFTCollectionDetails.js │ │ ├── fetchNFTs.js │ │ ├── fetchNFTsByCollection.js │ │ ├── getTokenMetadataByContractAddress.js │ │ ├── getTokenMetadataBySymbol.js │ │ ├── getTransactionReceiptsByAddress.js │ │ ├── getTransfersByNFT.js │ │ ├── getWalletTokenBalance.js │ │ ├── getWalletTokenTransactions.js │ │ ├── package.json │ │ ├── pnpm-lock.yaml │ │ └── verifyNFTsOwner.js │ └── web │ │ ├── .env.example │ │ ├── .gitignore │ │ ├── next.config.mjs │ │ ├── package-lock.json │ │ ├── package.json │ │ ├── postcss.config.cjs │ │ ├── prettier.config.cjs │ │ ├── src │ │ ├── env │ │ │ ├── client.mjs │ │ │ ├── schema.mjs │ │ │ └── server.mjs │ │ ├── pages │ │ │ ├── _app.tsx │ │ │ ├── balance.tsx │ │ │ ├── beta │ │ │ │ ├── nfts.tsx │ │ │ │ ├── owner.tsx │ │ │ │ ├── token-address.tsx │ │ │ │ ├── token-symbol.tsx │ │ │ │ ├── transactions.tsx │ │ │ │ └── transfers.tsx │ │ │ ├── collections.tsx │ │ │ ├── details.tsx │ │ │ └── index.tsx │ │ └── styles │ │ │ ├── globals.css │ │ │ └── index.ts │ │ ├── tailwind.config.cjs │ │ ├── tsconfig.json │ │ └── vercel.json ├── get-receipts-by-address │ ├── .env.example │ ├── .gitignore │ ├── README.md │ ├── index.js │ ├── package-lock.json │ └── package.json └── token_balance_app │ ├── README.md │ ├── licence.md │ ├── package-lock.json │ ├── package.json │ ├── public │ ├── favicon.ico │ ├── index.html │ ├── logo192.png │ ├── logo512.png │ ├── manifest.json │ └── robots.txt │ ├── src │ ├── App.css │ ├── App.js │ ├── App.test.js │ ├── index.css │ ├── index.js │ ├── logo.svg │ ├── reportWebVitals.js │ └── setupTests.js │ └── tailwind.config.js ├── ethereum ├── ABI │ ├── README.md │ └── test.sol ├── aave-flash-loan │ ├── FlashLoan.sol │ └── README.md ├── audit-token-activity │ ├── README.md │ ├── index.js │ └── package.json ├── audit-wallet-activity │ └── wallet_auditor.py ├── blink-starter-monad │ ├── .eslintrc.json │ ├── .gitignore │ ├── README.md │ ├── contracts │ │ └── protomon.sol │ ├── next.config.mjs │ ├── package-lock.json │ ├── package.json │ ├── postcss.config.mjs │ ├── public │ │ ├── blinks-nft-1.png │ │ ├── blinks-nft-2.png │ │ ├── dialect-logo-black.png │ │ ├── dialect-logo-white.png │ │ ├── dialect-monad-logo.png │ │ ├── icon-code.svg │ │ ├── icon-cog.svg │ │ ├── icon-github.svg │ │ ├── icon-x.svg │ │ ├── logo-frame.svg │ │ ├── logo-github.svg │ │ ├── logo-globe.svg │ │ ├── logo-readme.svg │ │ ├── nft-mint.png │ │ ├── screenshot-blink-scaffold-monad.png │ │ ├── tip-mon.png │ │ └── transfer-mon.png │ ├── src │ │ ├── app │ │ │ ├── api │ │ │ │ └── actions │ │ │ │ │ └── mint-nft │ │ │ │ │ └── route.ts │ │ │ ├── favicon.ico │ │ │ ├── fonts │ │ │ │ ├── GeistMonoVF.woff │ │ │ │ └── GeistVF.woff │ │ │ ├── globals.css │ │ │ ├── layout.tsx │ │ │ └── page.tsx │ │ ├── components │ │ │ ├── chip.tsx │ │ │ ├── menu-button.tsx │ │ │ ├── navbar.tsx │ │ │ └── step-card.tsx │ │ ├── config.ts │ │ ├── monad.ts │ │ └── provider.tsx │ ├── tailwind.config.ts │ └── tsconfig.json ├── eip-7702 │ ├── .github │ │ └── workflows │ │ │ └── test.yml │ ├── .gitignore │ ├── README-Foundry.md │ ├── README.md │ ├── foundry.toml │ ├── remappings.txt │ ├── script │ │ └── BatchCallAndSponsor.s.sol │ ├── src │ │ └── BatchCallAndSponsor.sol │ └── test │ │ └── BatchCallAndSponsor.t.sol ├── erc-20 │ ├── README.md │ ├── erc20_with_library.sol │ └── erc20_without_library.sol ├── erc-20_balance │ ├── README.md │ └── index.js ├── erc-6551 │ ├── README.md │ ├── contracts │ │ ├── ERC16551Registry.sol │ │ ├── ExampleERC6551Account.sol │ │ └── MyToken.sol │ ├── hardhat.config.js │ ├── interfaces │ │ ├── IERC6551Account.sol │ │ ├── IERC6551Executable.sol │ │ └── IERC6551Registry.sol │ ├── lib │ │ └── ERC6551BytecodeLib.sol │ ├── package-lock.json │ ├── package.json │ └── scripts │ │ ├── createAccount.js │ │ └── interactAccount.js ├── explorer │ ├── README.md │ ├── explorer.html │ └── img │ │ └── logo.png ├── farcaster-frames │ ├── .env.example │ ├── .gitignore │ ├── README.md │ ├── images │ │ ├── 1.png │ │ └── 2.png │ ├── package.json │ ├── src │ │ ├── config.ts │ │ ├── index.ts │ │ ├── types.ts │ │ └── utils │ │ │ ├── ethers.ts │ │ │ └── frame.ts │ └── tsconfig.json ├── staking │ ├── EthereumStakingOptionsIn2023.png │ ├── README.md │ ├── ethereum-staking-options.png │ └── staking-options.svg ├── wave-portal-svelte │ ├── README.md │ └── code │ │ ├── wave-portal-complete │ │ ├── .env.example │ │ ├── .gitignore │ │ ├── README.md │ │ ├── artifacts │ │ │ ├── build-info │ │ │ │ └── bf35a4157c5a9a039e9148ed175935f6.json │ │ │ └── contracts │ │ │ │ └── Wave-Portal.sol │ │ │ │ ├── WavePortal.dbg.json │ │ │ │ └── WavePortal.json │ │ ├── cache │ │ │ └── solidity-files-cache.json │ │ ├── contracts │ │ │ └── Wave-Portal.sol │ │ ├── hardhat.config.js │ │ ├── package.json │ │ ├── public │ │ │ ├── favicon.png │ │ │ ├── global.css │ │ │ └── index.html │ │ ├── rollup.config.js │ │ ├── scripts │ │ │ ├── deploy.js │ │ │ └── setupTypeScript.js │ │ ├── src │ │ │ ├── App.svelte │ │ │ ├── artifacts │ │ │ │ ├── build-info │ │ │ │ │ └── 678dccce1603b6e071bd3b944135e20b.json │ │ │ │ └── contracts │ │ │ │ │ └── Wave-Portal.sol │ │ │ │ │ ├── WavePortal.dbg.json │ │ │ │ │ └── WavePortal.json │ │ │ ├── components │ │ │ │ ├── Bio.svelte │ │ │ │ ├── SendWave.svelte │ │ │ │ ├── TwitterIcon.svelte │ │ │ │ ├── Wallet.svelte │ │ │ │ ├── Wave.svelte │ │ │ │ ├── WaveList.svelte │ │ │ │ └── header.svelte │ │ │ └── main.js │ │ ├── test │ │ │ └── sample-test.js │ │ └── yarn.lock │ │ └── wave-portal-starter-boilerplate │ │ ├── .gitignore │ │ ├── README.md │ │ ├── package.json │ │ ├── public │ │ ├── favicon.png │ │ ├── global.css │ │ └── index.html │ │ ├── rollup.config.js │ │ ├── scripts │ │ └── setupTypeScript.js │ │ ├── src │ │ ├── App.svelte │ │ ├── components │ │ │ ├── Bio.svelte │ │ │ ├── Header.svelte │ │ │ ├── SendWave.svelte │ │ │ ├── TwitterIcon.Svelte │ │ │ ├── Wallet.svelte │ │ │ ├── Wave.svelte │ │ │ └── WaveList.svelte │ │ └── main.js │ │ └── yarn.lock └── web3-stack │ ├── README.md │ ├── ethprice.sol │ └── price.js ├── polygon ├── erc721a-implementation │ ├── .gitignore │ ├── README.md │ ├── contracts │ │ ├── BatchNFTs.sol │ │ ├── ERC721A.sol │ │ ├── Ownable.sol │ │ ├── interfaces │ │ │ └── IERC721A.sol │ │ └── utils │ │ │ └── Context.sol │ ├── hardhat.config.js │ ├── package-lock.json │ ├── package.json │ ├── scripts │ │ ├── deploy.js │ │ └── mint.js │ └── test │ │ └── Lock.js ├── polygon-ethers │ ├── .env.example │ ├── .gitignore │ ├── README.md │ ├── abi.json │ ├── mint.js │ ├── package-lock.json │ └── package.json ├── polygon-hello-world │ └── HelloWorld.sol └── polygon-truffle │ ├── .gitignore │ ├── README.md │ ├── contracts │ ├── .gitkeep │ ├── ERC1155Token.sol │ └── FactoryERC1155.sol │ ├── migrations │ ├── .gitkeep │ └── 2_deploy_migration.js │ ├── package-lock.json │ ├── package.json │ ├── test │ └── .gitkeep │ └── truffle-config.js ├── sample-dapps ├── aml-and-cft-compliant-dapp │ ├── README.md │ ├── foundry │ │ ├── .env.sample │ │ ├── .gitignore │ │ ├── .gitmodules │ │ ├── README.md │ │ ├── foundry.toml │ │ ├── remappings.txt │ │ ├── script │ │ │ └── RiskBasedStaking.s.sol │ │ └── src │ │ │ └── RiskBasedStaking.sol │ ├── next-app │ │ ├── .env.sample │ │ ├── .gitignore │ │ ├── README.md │ │ ├── eslint.config.mjs │ │ ├── next.config.ts │ │ ├── package.json │ │ ├── public │ │ │ ├── file.svg │ │ │ ├── globe.svg │ │ │ ├── next.svg │ │ │ ├── vercel.svg │ │ │ └── window.svg │ │ ├── src │ │ │ ├── app │ │ │ │ ├── api │ │ │ │ │ └── check-risk │ │ │ │ │ │ ├── route.ts │ │ │ │ │ │ └── source.js │ │ │ │ ├── favicon.ico │ │ │ │ ├── globals.css │ │ │ │ ├── layout.tsx │ │ │ │ ├── page.module.css │ │ │ │ └── page.tsx │ │ │ ├── components │ │ │ │ ├── Header.tsx │ │ │ │ ├── HomePage.tsx │ │ │ │ ├── InfoBanner.tsx │ │ │ │ ├── Providers.tsx │ │ │ │ └── StakingForm.tsx │ │ │ ├── config │ │ │ │ └── wagmiConfig.ts │ │ │ ├── hooks │ │ │ │ ├── useRiskCheck.ts │ │ │ │ └── useStakingContract.ts │ │ │ └── lib │ │ │ │ └── RiskBasedStaking.ts │ │ └── tsconfig.json │ └── public │ │ └── app-overview.png ├── bitcoin-transaction-report-generator │ ├── .env.example │ ├── README.md │ ├── index.html │ ├── package.json │ ├── postcss.config.js │ ├── public │ │ ├── demo.png │ │ └── vite.svg │ ├── src │ │ ├── App.css │ │ ├── App.tsx │ │ ├── assets │ │ │ └── react.svg │ │ ├── components │ │ │ ├── ExpandableCell.tsx │ │ │ ├── ReportForm.tsx │ │ │ └── ResultTable.tsx │ │ ├── helpers │ │ │ ├── blockbookMethods.ts │ │ │ ├── calculateVariables.ts │ │ │ └── convertToCsv.ts │ │ ├── index.css │ │ ├── interfaces.ts │ │ ├── main.tsx │ │ └── vite-env.d.ts │ ├── tailwind.config.js │ ├── tsconfig.json │ ├── tsconfig.node.json │ └── vite.config.ts ├── coinbase-x402 │ ├── .env.local │ ├── README.md │ ├── handlers │ │ └── videoAccessHandler.js │ ├── package-lock.json │ ├── package.json │ ├── public │ │ ├── authenticate.html │ │ ├── index.html │ │ ├── main.js │ │ ├── style.css │ │ └── video-content.html │ ├── server.js │ └── utils │ │ └── log.js ├── crypto-portfolio-tracker-with-the-crypto-market-data-api │ ├── .env.sample │ ├── .eslintrc.cjs │ ├── .gitignore │ ├── README.md │ ├── index.html │ ├── package.json │ ├── postcss.config.js │ ├── public │ │ ├── overview.png │ │ └── vite.svg │ ├── src │ │ ├── App.css │ │ ├── App.tsx │ │ ├── assets │ │ │ └── react.svg │ │ ├── components │ │ │ ├── Header.tsx │ │ │ ├── HistoricalChart.tsx │ │ │ ├── PortfolioControls.tsx │ │ │ ├── PortfolioInput.tsx │ │ │ ├── PortfolioPieChart.tsx │ │ │ └── PortfolioSummary.tsx │ │ ├── index.css │ │ ├── interfaces │ │ │ └── index.ts │ │ ├── main.tsx │ │ ├── services │ │ │ └── cryptoAPI.ts │ │ ├── utils │ │ │ ├── colorPalette.ts │ │ │ ├── csvExporter.ts │ │ │ └── portfolioUtils.ts │ │ └── vite-env.d.ts │ ├── tailwind.config.js │ ├── tsconfig.json │ ├── tsconfig.node.json │ └── vite.config.ts ├── ethereum-aave-liquidation-tracker │ ├── .env.example │ ├── .gitignore │ ├── README.md │ ├── components.json │ ├── eslint.config.js │ ├── index.html │ ├── package-lock.json │ ├── package.json │ ├── postcss.config.js │ ├── public │ │ ├── app-icon.svg │ │ └── screenshots │ │ │ ├── liquidations-table.png │ │ │ └── overview.png │ ├── qnServerless │ │ ├── functions.js │ │ └── stream.js │ ├── src │ │ ├── App.css │ │ ├── App.tsx │ │ ├── components │ │ │ ├── Dashboard.tsx │ │ │ ├── QuickNodeBanner.tsx │ │ │ ├── analytics │ │ │ │ ├── AssetDistribution.tsx │ │ │ │ ├── LiquidationTrends.tsx │ │ │ │ └── MetricsPanel.tsx │ │ │ ├── liquidations │ │ │ │ ├── FiltersPanel.tsx │ │ │ │ ├── LiquidationsTable.tsx │ │ │ │ └── TablePagination.tsx │ │ │ ├── theme-provider.tsx │ │ │ └── ui │ │ │ │ ├── accordion.tsx │ │ │ │ ├── alert-dialog.tsx │ │ │ │ ├── alert.tsx │ │ │ │ ├── aspect-ratio.tsx │ │ │ │ ├── avatar.tsx │ │ │ │ ├── badge.tsx │ │ │ │ ├── breadcrumb.tsx │ │ │ │ ├── button.tsx │ │ │ │ ├── calendar.tsx │ │ │ │ ├── card.tsx │ │ │ │ ├── carousel.tsx │ │ │ │ ├── chart.tsx │ │ │ │ ├── checkbox.tsx │ │ │ │ ├── collapsible.tsx │ │ │ │ ├── command.tsx │ │ │ │ ├── context-menu.tsx │ │ │ │ ├── dialog.tsx │ │ │ │ ├── drawer.tsx │ │ │ │ ├── dropdown-menu.tsx │ │ │ │ ├── form.tsx │ │ │ │ ├── hover-card.tsx │ │ │ │ ├── input-otp.tsx │ │ │ │ ├── input.tsx │ │ │ │ ├── label.tsx │ │ │ │ ├── menubar.tsx │ │ │ │ ├── navigation-menu.tsx │ │ │ │ ├── pagination.tsx │ │ │ │ ├── popover.tsx │ │ │ │ ├── progress.tsx │ │ │ │ ├── radio-group.tsx │ │ │ │ ├── resizable.tsx │ │ │ │ ├── scroll-area.tsx │ │ │ │ ├── select.tsx │ │ │ │ ├── separator.tsx │ │ │ │ ├── sheet.tsx │ │ │ │ ├── skeleton.tsx │ │ │ │ ├── slider.tsx │ │ │ │ ├── sonner.tsx │ │ │ │ ├── switch.tsx │ │ │ │ ├── table.tsx │ │ │ │ ├── tabs.tsx │ │ │ │ ├── textarea.tsx │ │ │ │ ├── toast.tsx │ │ │ │ ├── toaster.tsx │ │ │ │ ├── toggle-group.tsx │ │ │ │ ├── toggle.tsx │ │ │ │ └── tooltip.tsx │ │ ├── hooks │ │ │ ├── use-toast.ts │ │ │ ├── useAssetDistribution.ts │ │ │ ├── useDashboardMetrics.ts │ │ │ ├── useLiquidationTrends.ts │ │ │ └── useLiquidations.ts │ │ ├── index.css │ │ ├── lib │ │ │ ├── supabase.ts │ │ │ └── utils.ts │ │ ├── main.tsx │ │ ├── types │ │ │ └── liquidation.ts │ │ └── vite-env.d.ts │ ├── tailwind.config.js │ ├── tsconfig.app.json │ ├── tsconfig.json │ ├── tsconfig.node.json │ └── vite.config.ts ├── ethereum-dex-trade-performance-analyzer │ ├── .env.example │ ├── .gitignore │ ├── README.md │ ├── eslint.config.js │ ├── index.html │ ├── package.json │ ├── postcss.config.js │ ├── public │ │ ├── app-overview.png │ │ ├── app-token-details.png │ │ └── vite.svg │ ├── src │ │ ├── App.css │ │ ├── App.tsx │ │ ├── assets │ │ │ └── react.svg │ │ ├── components │ │ │ ├── OverallStatsDisplay.tsx │ │ │ ├── TokenPerformanceTable.tsx │ │ │ └── WalletSearch.tsx │ │ ├── index.css │ │ ├── interfaces │ │ │ ├── OverallStats.ts │ │ │ └── TokenPerformance.ts │ │ ├── main.tsx │ │ ├── services │ │ │ └── api.ts │ │ └── vite-env.d.ts │ ├── tailwind.config.js │ ├── tsconfig.app.json │ ├── tsconfig.json │ ├── tsconfig.node.json │ └── vite.config.ts ├── ethereum-transaction-report-generator │ ├── .env.example │ ├── .gitignore │ ├── README.md │ ├── index.html │ ├── package.json │ ├── postcss.config.js │ ├── public │ │ ├── demo.png │ │ └── vite.svg │ ├── src │ │ ├── App.css │ │ ├── App.tsx │ │ ├── assets │ │ │ └── react.svg │ │ ├── components │ │ │ ├── CopyIcon.tsx │ │ │ ├── ReportForm.tsx │ │ │ └── ResultTable.tsx │ │ ├── helpers │ │ │ ├── blockbookMethods.ts │ │ │ ├── calculateVariables.ts │ │ │ └── convertToCsv.ts │ │ ├── index.css │ │ ├── interfaces.ts │ │ ├── main.tsx │ │ └── vite-env.d.ts │ ├── tailwind.config.js │ ├── tsconfig.json │ ├── tsconfig.node.json │ └── vite.config.ts ├── ethereum-wallet-explorer │ ├── .env.example │ ├── .eslintrc.json │ ├── .gitignore │ ├── README.md │ ├── components.json │ ├── next.config.mjs │ ├── package-lock.json │ ├── package.json │ ├── postcss.config.js │ ├── public │ │ ├── demo1.png │ │ └── demo2.png │ ├── src │ │ ├── app │ │ │ ├── api │ │ │ │ ├── resolve │ │ │ │ │ └── route.ts │ │ │ │ ├── utils │ │ │ │ │ └── helpers.ts │ │ │ │ └── wallet │ │ │ │ │ ├── balance │ │ │ │ │ └── route.ts │ │ │ │ │ ├── nfts │ │ │ │ │ └── route.ts │ │ │ │ │ ├── tokens │ │ │ │ │ └── route.ts │ │ │ │ │ └── transactions │ │ │ │ │ └── route.ts │ │ │ ├── favicon.ico │ │ │ ├── globals.css │ │ │ ├── layout.tsx │ │ │ ├── page.tsx │ │ │ └── wallet │ │ │ │ └── [wallet] │ │ │ │ └── page.tsx │ │ ├── components │ │ │ ├── explorer │ │ │ │ ├── balance │ │ │ │ │ ├── Balance.tsx │ │ │ │ │ └── BalanceCard.tsx │ │ │ │ ├── helpers │ │ │ │ │ └── TableSkeleton.tsx │ │ │ │ ├── nfts │ │ │ │ │ ├── NFTsCard.tsx │ │ │ │ │ └── NFTsTable.tsx │ │ │ │ ├── tokens │ │ │ │ │ ├── TokensCard.tsx │ │ │ │ │ ├── TokensTable.tsx │ │ │ │ │ └── types.ts │ │ │ │ └── transactions │ │ │ │ │ ├── TransactionsCard.tsx │ │ │ │ │ └── TransactionsTable.tsx │ │ │ ├── header │ │ │ │ ├── Header.tsx │ │ │ │ └── Search.tsx │ │ │ └── ui │ │ │ │ ├── button.tsx │ │ │ │ ├── card.tsx │ │ │ │ ├── input.tsx │ │ │ │ ├── skeleton.tsx │ │ │ │ └── table.tsx │ │ └── lib │ │ │ └── utils.ts │ ├── tailwind.config.ts │ └── tsconfig.json ├── evm-token-factory │ ├── .env.example │ ├── .eslintrc.json │ ├── .gitignore │ ├── README.md │ ├── app │ │ ├── api │ │ │ └── evm │ │ │ │ └── createToken │ │ │ │ └── route.ts │ │ ├── components │ │ │ ├── Connect.tsx │ │ │ ├── Footer.tsx │ │ │ └── Navbar.tsx │ │ ├── favicon.ico │ │ ├── globals.css │ │ ├── layout.tsx │ │ ├── page.tsx │ │ └── utils │ │ │ ├── abi.json │ │ │ └── ethereum.ts │ ├── context │ │ └── web3modal.tsx │ ├── contracts │ │ ├── .gitignore │ │ ├── README.md │ │ ├── foundry.toml │ │ ├── remappings.txt │ │ ├── script │ │ │ ├── Counter.s.sol │ │ │ └── CreateToken.s.sol │ │ ├── src │ │ │ ├── Counter.sol │ │ │ ├── Factory.sol │ │ │ └── Token.sol │ │ └── test │ │ │ ├── Counter.t.sol │ │ │ ├── Factory.t.sol │ │ │ └── Token.t.sol │ ├── next.config.mjs │ ├── package-lock.json │ ├── package.json │ ├── postcss.config.mjs │ ├── public │ │ ├── next.svg │ │ ├── preview.png │ │ ├── preview2.png │ │ └── vercel.svg │ ├── tailwind.config.ts │ └── tsconfig.json ├── solana-action-blinker │ ├── .env.example │ ├── .eslintrc.json │ ├── .gitignore │ ├── README.md │ ├── app │ │ ├── api │ │ │ ├── actions │ │ │ │ ├── donate │ │ │ │ │ └── route.ts │ │ │ │ └── memo │ │ │ │ │ └── route.ts │ │ │ └── solana │ │ │ │ └── sendAndConfirm │ │ │ │ └── route.ts │ │ ├── favicon.ico │ │ ├── globals.css │ │ ├── layout.tsx │ │ └── page.tsx │ ├── components │ │ ├── ActionComponents │ │ │ ├── ActionButtons.tsx │ │ │ ├── ActionDetails.tsx │ │ │ ├── ActionForm.tsx │ │ │ ├── ActionUrlSearchForm.tsx │ │ │ └── ParsedAction.tsx │ │ ├── Blink.tsx │ │ ├── Container.tsx │ │ ├── ErrorMessage.tsx │ │ ├── InfoBox.tsx │ │ ├── Navbar.tsx │ │ ├── SolanaProviders.tsx │ │ └── Spinner.tsx │ ├── hooks │ │ ├── useActionFetch.ts │ │ └── useTransactionProcessor.ts │ ├── next.config.mjs │ ├── package-lock.json │ ├── package.json │ ├── postcss.config.mjs │ ├── public │ │ ├── next.svg │ │ ├── parsed-jup.png │ │ ├── preview.png │ │ ├── qn-pixel.png │ │ └── vercel.svg │ ├── tailwind.config.ts │ ├── tsconfig.json │ └── utils │ │ ├── constants.ts │ │ ├── solana.ts │ │ └── utils.ts ├── solana-staking-ui │ ├── .env.example │ ├── .gitignore │ ├── .prettierrc │ ├── README.md │ ├── app │ │ ├── api │ │ │ ├── balance │ │ │ │ └── route.ts │ │ │ ├── stake │ │ │ │ ├── fetch │ │ │ │ │ └── route.ts │ │ │ │ └── generate │ │ │ │ │ └── route.ts │ │ │ └── transaction │ │ │ │ └── confirm │ │ │ │ └── route.ts │ │ ├── globals.css │ │ ├── layout.tsx │ │ └── page.tsx │ ├── components │ │ ├── ErrorDialog.tsx │ │ ├── Nav.tsx │ │ ├── Title.tsx │ │ ├── WalletConnectButton.tsx │ │ ├── WalletDisconnectButton.tsx │ │ └── stake │ │ │ ├── FeaturesList.tsx │ │ │ ├── StakeAccountsTable.tsx │ │ │ ├── StakeButton.tsx │ │ │ ├── StakeSuccessModal.tsx │ │ │ ├── StakingForm.tsx │ │ │ ├── ValidatorInfo.tsx │ │ │ └── WalletHeader.tsx │ ├── context │ │ ├── SelectedWalletAccountContext.tsx │ │ └── SelectedWalletAccountContextProvider.tsx │ ├── eslint.config.mjs │ ├── hooks │ │ └── useIsWalletConnected.tsx │ ├── next.config.ts │ ├── package.json │ ├── pnpm-lock.yaml │ ├── postcss.config.mjs │ ├── public │ │ ├── favicon.ico │ │ ├── favicon.png │ │ ├── file.svg │ │ ├── globe.svg │ │ ├── next.svg │ │ ├── preview.png │ │ ├── quicknode.svg │ │ ├── solana-logo.svg │ │ ├── vercel.svg │ │ └── window.svg │ ├── tailwind.config.ts │ ├── tsconfig.json │ └── utils │ │ ├── config.ts │ │ ├── constants.ts │ │ ├── errors.tsx │ │ └── solana │ │ ├── address.ts │ │ ├── balance.ts │ │ ├── price.ts │ │ ├── rpc.ts │ │ ├── stake │ │ ├── get-stake-accounts.ts │ │ ├── stake-filters.ts │ │ ├── stake-instructions.ts │ │ └── struct.ts │ │ └── status.ts ├── solana-token-maker │ ├── .env.example │ ├── .eslintrc.json │ ├── .gitignore │ ├── README.md │ ├── app │ │ ├── api │ │ │ ├── solana │ │ │ │ ├── balance │ │ │ │ │ └── route.ts │ │ │ │ ├── createMintTx │ │ │ │ │ └── route.ts │ │ │ │ └── sendAndConfirm │ │ │ │ │ └── route.ts │ │ │ └── upload │ │ │ │ ├── image │ │ │ │ └── route.ts │ │ │ │ └── json │ │ │ │ └── route.ts │ │ ├── favicon.ico │ │ ├── globals.css │ │ ├── layout.tsx │ │ └── page.tsx │ ├── components │ │ ├── MetadataForm.tsx │ │ ├── MintButton.tsx │ │ ├── Minter.tsx │ │ ├── Navbar.tsx │ │ ├── SolanaProviders.tsx │ │ ├── Spinner.tsx │ │ └── Uploader.tsx │ ├── next.config.mjs │ ├── package-lock.json │ ├── package.json │ ├── postcss.config.js │ ├── public │ │ └── preview.png │ ├── tailwind.config.ts │ ├── tsconfig.json │ └── utils │ │ ├── constants.ts │ │ ├── solana.ts │ │ ├── spl.ts │ │ ├── types.ts │ │ └── utils.ts └── solana-wallet-explorer │ ├── .env.example │ ├── .eslintrc.json │ ├── .gitignore │ ├── README.md │ ├── components.json │ ├── next.config.mjs │ ├── package-lock.json │ ├── package.json │ ├── postcss.config.js │ ├── public │ ├── demo.png │ ├── next.svg │ └── vercel.svg │ ├── src │ ├── app │ │ ├── api │ │ │ ├── utils │ │ │ │ ├── constants.ts │ │ │ │ └── helpers.ts │ │ │ └── wallet │ │ │ │ ├── balance │ │ │ │ └── route.ts │ │ │ │ ├── das │ │ │ │ ├── route.ts │ │ │ │ └── types.ts │ │ │ │ ├── tokens │ │ │ │ └── route.ts │ │ │ │ └── tx │ │ │ │ └── route.ts │ │ ├── favicon.ico │ │ ├── globals.css │ │ ├── layout.tsx │ │ ├── page.tsx │ │ └── wallet │ │ │ └── [wallet] │ │ │ └── page.tsx │ ├── components │ │ ├── explorer │ │ │ ├── balance │ │ │ │ ├── Balance.tsx │ │ │ │ └── BalanceCard.tsx │ │ │ ├── helpers │ │ │ │ └── TableSkeleton.tsx │ │ │ ├── nfts │ │ │ │ ├── NftCard.tsx │ │ │ │ └── NftRow.tsx │ │ │ ├── tokens │ │ │ │ ├── TokenCard.tsx │ │ │ │ ├── TokenTable.tsx │ │ │ │ └── types.ts │ │ │ └── transactions │ │ │ │ ├── TransactionsCard.tsx │ │ │ │ ├── TransactionsTable.tsx │ │ │ │ └── types.ts │ │ ├── header │ │ │ ├── Header.tsx │ │ │ └── Search.tsx │ │ └── ui │ │ │ ├── button.tsx │ │ │ ├── card.tsx │ │ │ ├── input.tsx │ │ │ ├── skeleton.tsx │ │ │ └── table.tsx │ └── lib │ │ └── utils.ts │ ├── tailwind.config.ts │ └── tsconfig.json ├── solana ├── account-deserialization │ ├── .env.example │ ├── app.ts │ ├── package.json │ └── raydium-idl.json ├── authentication │ ├── .env.local.example │ ├── LICENSE │ ├── README.md │ ├── components │ │ ├── access-denied.tsx │ │ ├── footer.module.css │ │ ├── footer.tsx │ │ ├── header.module.css │ │ ├── header.tsx │ │ └── layout.tsx │ ├── middleware.ts │ ├── next-auth.d.ts │ ├── next-env.d.ts │ ├── package.json │ ├── pages │ │ ├── _app.tsx │ │ ├── admin.tsx │ │ ├── api-example.tsx │ │ ├── api │ │ │ ├── auth │ │ │ │ └── [...nextauth].ts │ │ │ └── examples │ │ │ │ └── protected.ts │ │ ├── client.tsx │ │ ├── index.tsx │ │ ├── me.tsx │ │ ├── policy.tsx │ │ ├── protected.tsx │ │ └── styles.css │ ├── process.d.ts │ ├── steps.md │ ├── tsconfig.json │ └── utils │ │ └── SigninMessage.ts ├── bulk-sol-drop │ ├── .env.example │ ├── .gitignore │ ├── README.md │ ├── app.ts │ ├── dropList.ts │ ├── package-lock.json │ ├── package.json │ ├── tsconfig.json │ └── wallet.ts ├── candy-machine │ ├── deprecated │ │ └── assets │ │ │ ├── 0.json │ │ │ ├── 0.png │ │ │ ├── 1.json │ │ │ ├── 1.png │ │ │ ├── 2.json │ │ │ ├── 2.png │ │ │ ├── 3.json │ │ │ ├── 3.png │ │ │ ├── 4.json │ │ │ ├── 4.png │ │ │ ├── 5.json │ │ │ ├── 5.png │ │ │ ├── 6.json │ │ │ ├── 6.png │ │ │ ├── 7.json │ │ │ ├── 7.png │ │ │ ├── 8.json │ │ │ ├── 8.png │ │ │ ├── 9.json │ │ │ └── 9.png │ └── v3 │ │ └── burn-spl-video │ │ ├── assets │ │ ├── 0.json │ │ ├── 0.png │ │ ├── 1.json │ │ ├── 1.png │ │ ├── 2.json │ │ ├── 2.png │ │ ├── collection.json │ │ └── collection.png │ │ ├── config.json │ │ ├── next.config.js │ │ ├── onClick.ts │ │ └── resources.md ├── compressed-nfts │ └── mint-nft.ts ├── explorer-clone-part-1 │ ├── checkpoint1.tsx │ ├── starter │ │ ├── .babelrc │ │ ├── .env.example │ │ ├── .eslintignore │ │ ├── .eslintrc.json │ │ ├── .github │ │ │ ├── dependabot.yml │ │ │ └── workflows │ │ │ │ └── frontend.yml │ │ ├── .gitignore │ │ ├── Dockerfile │ │ ├── LICENSE │ │ ├── README.md │ │ ├── next-env.d.ts │ │ ├── next.config.js │ │ ├── package-lock.json │ │ ├── package.json │ │ ├── postcss.config.js │ │ ├── public │ │ │ ├── favicon.ico │ │ │ ├── logo.svg │ │ │ └── vercel.svg │ │ ├── scaffold-desktop.png │ │ ├── scaffold-mobile.png │ │ ├── src │ │ │ ├── components │ │ │ │ ├── AppBar.tsx │ │ │ │ ├── ContentContainer.tsx │ │ │ │ ├── Footer.tsx │ │ │ │ ├── GetTokens.tsx │ │ │ │ ├── NetworkSwitcher.tsx │ │ │ │ ├── Notification.tsx │ │ │ │ ├── RequestAirdrop.tsx │ │ │ │ ├── SendTransaction.tsx │ │ │ │ ├── SignMessage.tsx │ │ │ │ └── template.tsx │ │ │ ├── contexts │ │ │ │ ├── AutoConnectProvider.tsx │ │ │ │ ├── ContextProvider.tsx │ │ │ │ └── NetworkConfigurationProvider.tsx │ │ │ ├── hooks │ │ │ │ └── useQueryContext.tsx │ │ │ ├── models │ │ │ │ └── types.ts │ │ │ ├── pages │ │ │ │ ├── _app.tsx │ │ │ │ ├── _document.tsx │ │ │ │ ├── api │ │ │ │ │ └── hello.ts │ │ │ │ ├── basics.tsx │ │ │ │ └── index.tsx │ │ │ ├── stores │ │ │ │ ├── useNotificationStore.tsx │ │ │ │ └── useUserSOLBalanceStore.tsx │ │ │ ├── styles │ │ │ │ └── globals.css │ │ │ ├── utils │ │ │ │ ├── explorer.ts │ │ │ │ └── notifications.tsx │ │ │ └── views │ │ │ │ ├── basics │ │ │ │ └── index.tsx │ │ │ │ ├── home │ │ │ │ └── index.tsx │ │ │ │ └── index.tsx │ │ ├── tailwind.config.js │ │ ├── tsconfig.json │ │ └── yarn.lock │ └── template.tsx ├── explorer-clone-part-2 │ ├── TransactionDetail.tsx │ └── starter │ │ ├── .babelrc │ │ ├── .env.example │ │ ├── .eslintignore │ │ ├── .eslintrc.json │ │ ├── .github │ │ ├── dependabot.yml │ │ └── workflows │ │ │ └── frontend.yml │ │ ├── .gitignore │ │ ├── Dockerfile │ │ ├── LICENSE │ │ ├── README.md │ │ ├── next-env.d.ts │ │ ├── next.config.js │ │ ├── package-lock.json │ │ ├── package.json │ │ ├── postcss.config.js │ │ ├── public │ │ ├── favicon.ico │ │ ├── logo.svg │ │ └── vercel.svg │ │ ├── scaffold-desktop.png │ │ ├── scaffold-mobile.png │ │ ├── src │ │ ├── components │ │ │ ├── AppBar.tsx │ │ │ ├── ContentContainer.tsx │ │ │ ├── Footer.tsx │ │ │ ├── GetTokens.tsx │ │ │ ├── NetworkSwitcher.tsx │ │ │ ├── Notification.tsx │ │ │ ├── RequestAirdrop.tsx │ │ │ ├── SendTransaction.tsx │ │ │ ├── SignMessage.tsx │ │ │ ├── TransactionsLog.tsx │ │ │ └── template.tsx │ │ ├── contexts │ │ │ ├── AutoConnectProvider.tsx │ │ │ ├── ContextProvider.tsx │ │ │ └── NetworkConfigurationProvider.tsx │ │ ├── hooks │ │ │ └── useQueryContext.tsx │ │ ├── models │ │ │ └── types.ts │ │ ├── pages │ │ │ ├── _app.tsx │ │ │ ├── _document.tsx │ │ │ ├── api │ │ │ │ └── hello.ts │ │ │ ├── basics.tsx │ │ │ ├── explorer.tsx │ │ │ └── index.tsx │ │ ├── stores │ │ │ ├── useNotificationStore.tsx │ │ │ └── useUserSOLBalanceStore.tsx │ │ ├── styles │ │ │ └── globals.css │ │ ├── utils │ │ │ ├── explorer.ts │ │ │ └── notifications.tsx │ │ └── views │ │ │ ├── basics │ │ │ └── index.tsx │ │ │ ├── explorer │ │ │ └── index.tsx │ │ │ ├── home │ │ │ └── index.tsx │ │ │ └── index.tsx │ │ ├── tailwind.config.js │ │ ├── tsconfig.json │ │ └── yarn.lock ├── explorer-clone-part-3 │ └── starter │ │ ├── .babelrc │ │ ├── .env.example │ │ ├── .eslintignore │ │ ├── .eslintrc.json │ │ ├── .github │ │ ├── dependabot.yml │ │ └── workflows │ │ │ └── frontend.yml │ │ ├── .gitignore │ │ ├── Dockerfile │ │ ├── LICENSE │ │ ├── README.md │ │ ├── next-env.d.ts │ │ ├── next.config.js │ │ ├── package-lock.json │ │ ├── package.json │ │ ├── postcss.config.js │ │ ├── public │ │ ├── favicon.ico │ │ ├── logo.svg │ │ └── vercel.svg │ │ ├── scaffold-desktop.png │ │ ├── scaffold-mobile.png │ │ ├── src │ │ ├── components │ │ │ ├── AppBar.tsx │ │ │ ├── ContentContainer.tsx │ │ │ ├── Footer.tsx │ │ │ ├── GetTokens.tsx │ │ │ ├── NetworkSwitcher.tsx │ │ │ ├── Notification.tsx │ │ │ ├── RequestAirdrop.tsx │ │ │ ├── SendTransaction.tsx │ │ │ ├── SignMessage.tsx │ │ │ ├── TransactionDetail.tsx │ │ │ ├── TransactionsLog.tsx │ │ │ └── template.tsx │ │ ├── contexts │ │ │ ├── AutoConnectProvider.tsx │ │ │ ├── ContextProvider.tsx │ │ │ └── NetworkConfigurationProvider.tsx │ │ ├── hooks │ │ │ └── useQueryContext.tsx │ │ ├── models │ │ │ └── types.ts │ │ ├── pages │ │ │ ├── _app.tsx │ │ │ ├── _document.tsx │ │ │ ├── api │ │ │ │ └── hello.ts │ │ │ ├── basics.tsx │ │ │ ├── explorer.tsx │ │ │ ├── index.tsx │ │ │ └── tx │ │ │ │ └── [txid].tsx │ │ ├── stores │ │ │ ├── useNotificationStore.tsx │ │ │ └── useUserSOLBalanceStore.tsx │ │ ├── styles │ │ │ └── globals.css │ │ ├── utils │ │ │ ├── explorer.ts │ │ │ └── notifications.tsx │ │ └── views │ │ │ ├── basics │ │ │ └── index.tsx │ │ │ ├── explorer │ │ │ ├── index.tsx │ │ │ └── tx.tsx │ │ │ ├── home │ │ │ └── index.tsx │ │ │ └── index.tsx │ │ ├── tailwind.config.js │ │ ├── tsconfig.json │ │ └── yarn.lock ├── functions │ └── wallet-portfolio │ │ ├── README.md │ │ ├── example.js │ │ └── example.ts ├── fungible-SPL-token │ ├── mint.ts │ ├── mintVersionedTest.ts │ └── wallet.ts ├── jupiter-bot │ ├── .env.example │ ├── README.md │ ├── bot.ts │ ├── index.ts │ └── package.json ├── jupiter-jito │ ├── .env.local │ ├── README.md │ ├── index.ts │ └── package.json ├── mint-nft │ ├── app.ts │ └── updateMetadata.ts ├── new-wallet-airdrop │ └── wallet.ts ├── priority-fees-addon │ ├── app.ts │ └── types.ts ├── pump-fun-api │ ├── .env.example │ ├── index.ts │ ├── package.json │ ├── tsconfig.json │ └── types.ts ├── pump-yellowstone-copy-trader │ ├── .env.example │ ├── bot.js │ └── package.json ├── raydium-swap-ts │ └── src │ │ ├── config.ts │ │ ├── example.env │ │ ├── main.ts │ │ └── raydium-swap.ts ├── sns-domains │ ├── .env.example │ ├── .npmrc │ ├── .yarnrc.yml │ ├── README.md │ ├── index.ts │ ├── package-lock.json │ └── package.json ├── sol-get-tokens │ ├── .env.example │ ├── .gitignore │ ├── .npmrc │ ├── .yarnrc.yml │ ├── README.md │ ├── index.ts │ ├── package-lock.json │ └── package.json ├── solana-pay │ ├── README.md │ ├── custom-program-implementation │ │ ├── index.tsx │ │ └── pay.ts │ └── payment-portal │ │ ├── index.tsx │ │ └── pay.ts ├── solang │ └── scoreboard │ │ ├── Anchor.toml │ │ ├── package.json │ │ ├── solidity │ │ └── scoreboard.sol │ │ ├── target │ │ ├── idl │ │ │ └── scoreboard.json │ │ └── types │ │ │ └── scoreboard.ts │ │ ├── tests │ │ └── scoreboard.ts │ │ └── tsconfig.json ├── token-extensions │ ├── nft │ │ └── app.ts │ └── scaled-ui-amount │ │ ├── README.md │ │ ├── kit │ │ ├── package.json │ │ ├── token-creator.ts │ │ └── tsconfig.json │ │ └── web3 │ │ ├── package.json │ │ ├── token-creator.ts │ │ └── tsconfig.json ├── versioned-tx │ ├── lookupTables.ts │ └── versionedTest.ts ├── web3.js-2.0 │ ├── basics │ │ └── transferSol.ts │ ├── deserialize │ │ ├── .env.example │ │ ├── app.ts │ │ ├── package.json │ │ └── raydium-idl.json │ ├── fungibles │ │ └── fungibles.ts │ ├── helpers │ │ └── index.ts │ ├── jito-bundles │ │ └── lilJit.ts │ ├── optimized-tx │ │ ├── README.md │ │ ├── example.ts │ │ └── src │ │ │ ├── QuickNodeSolana.ts │ │ │ ├── constants │ │ │ ├── defaults.ts │ │ │ └── index.ts │ │ │ ├── index.ts │ │ │ ├── types │ │ │ ├── config.ts │ │ │ ├── index.ts │ │ │ ├── priority-fees.ts │ │ │ └── transaction.ts │ │ │ └── utils │ │ │ ├── index.ts │ │ │ └── transport.ts │ ├── package.json │ ├── pump-fun-api │ │ ├── .env.example │ │ ├── index.ts │ │ ├── package.json │ │ ├── tsconfig.json │ │ └── types.ts │ ├── quicknode-addons │ │ ├── guide1.ts │ │ ├── guide2.ts │ │ └── types.ts │ └── tsconfig.json ├── websockets │ └── app.ts └── yellowstone │ ├── python │ └── pumpfun │ │ ├── README.md │ │ ├── generated │ │ ├── __init__.py │ │ ├── geyser_pb2.py │ │ ├── geyser_pb2.pyi │ │ ├── geyser_pb2_grpc.py │ │ ├── solana_storage_pb2.py │ │ ├── solana_storage_pb2.pyi │ │ └── solana_storage_pb2_grpc.py │ │ ├── main.py │ │ ├── proto │ │ ├── geyser.proto │ │ └── solana-storage.proto │ │ └── requirements.txt │ └── rust │ └── pumpfun │ ├── Cargo.toml │ ├── README.md │ └── src │ └── main.rs ├── stacks ├── stacks-nft │ ├── .gitignore │ ├── .vscode │ │ ├── settings.json │ │ └── tasks.json │ ├── Clarinet.toml │ ├── README.md │ ├── contracts │ │ ├── nft-factory.clar │ │ └── nft-trait.clar │ └── settings │ │ └── Devnet.toml └── stacks-smart-contract │ ├── .gitignore │ ├── .vscode │ ├── settings.json │ └── tasks.json │ ├── Clarinet.toml │ ├── README.md │ ├── contracts │ └── storage-contract.clar │ ├── settings │ └── Devnet.toml │ └── tests │ └── storage-contract_test.ts └── tron ├── README.md └── protobuf-file └── api.pb.go /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .DS_Store 3 | .env 4 | 5 | __pycache__/ 6 | *.pyc 7 | *.pyo 8 | *.pyd -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "sample-dapps/evm-token-factory/smart-contracts/lib/forge-std"] 2 | path = sample-dapps/evm-token-factory/smart-contracts/lib/forge-std 3 | url = https://github.com/foundry-rs/forge-std 4 | [submodule "sample-dapps/evm-token-factory/smart-contracts/lib/openzeppelin-contracts"] 5 | path = sample-dapps/evm-token-factory/smart-contracts/lib/openzeppelin-contracts 6 | url = https://github.com/OpenZeppelin/openzeppelin-contracts 7 | -------------------------------------------------------------------------------- /AI/coinbase-ai-agent/.env.example: -------------------------------------------------------------------------------- 1 | TWITTER_API_KEY="twitter-api-key" 2 | TWITTER_API_SECRET="twitter-api-secret" 3 | TWITTER_ACCESS_TOKEN="twitter-access-token" 4 | TWITTER_ACCESS_SECRET="twitter-access-secret" 5 | TWITTER_USER_ID="twitter-user-id" 6 | 7 | OPENAI_API_KEY="openai-api-key" 8 | 9 | CDP_API_KEY_NAME="cdp-api-key-name" 10 | CDP_API_KEY_PRIVATE_KEY="cdp-api-key-private-key" -------------------------------------------------------------------------------- /AI/coinbase-ai-agent/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .env 3 | wallet_data.txt -------------------------------------------------------------------------------- /AI/coinbase-ai-agent/src/autonomous.ts: -------------------------------------------------------------------------------- 1 | import { BaseAIAgent } from "./agent"; 2 | 3 | async function startAutonomous() { 4 | try { 5 | const agent = new BaseAIAgent(); 6 | await agent.initialize(); 7 | console.log("Starting autonomous mode..."); 8 | await agent.runAutonomousMode().catch(console.error); 9 | } catch (error) { 10 | console.error("Error in autonomous mode:", error); 11 | } 12 | } 13 | 14 | if (require.main === module) { 15 | startAutonomous(); 16 | } 17 | -------------------------------------------------------------------------------- /AI/coinbase-ai-agent/src/checkMentions.ts: -------------------------------------------------------------------------------- 1 | import { BaseAIAgent } from "./agent"; 2 | 3 | async function startPolling() { 4 | try { 5 | const agent = new BaseAIAgent(); 6 | await agent.initialize(); 7 | console.log("Starting mentions polling mode..."); 8 | await agent.pollMentions().catch(console.error); 9 | } catch (error) { 10 | console.error("Error in polling mode:", error); 11 | } 12 | } 13 | 14 | if (require.main === module) { 15 | startPolling(); 16 | } 17 | -------------------------------------------------------------------------------- /AI/evm-mcp-server/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .env 3 | build -------------------------------------------------------------------------------- /AI/evm-mcp-server/claude_desktop_config.json: -------------------------------------------------------------------------------- 1 | // Sample Claude Desktop configuration file 2 | { 3 | "mcpServers": { 4 | "evm": { 5 | "command": "node", 6 | "args": ["/absolute-path-to/build/index.js"], 7 | "env": { 8 | "QN_ENDPOINT_NAME": "your-quicknode-endpoint-name", 9 | "QN_TOKEN_ID": "your-quicknode-token-id" 10 | } 11 | } 12 | } 13 | } -------------------------------------------------------------------------------- /AI/evm-mcp-server/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "evm-mcp-server", 3 | "version": "1.0.0", 4 | "description": "A console-based MCP-compliant server for EVM blockchain data access", 5 | "main": "index.js", 6 | "scripts": { 7 | "build": "tsc", 8 | "start": "ts-node index.ts" 9 | }, 10 | "keywords": [], 11 | "author": "", 12 | "license": "ISC", 13 | "dependencies": { 14 | "@modelcontextprotocol/sdk": "^1.10.2", 15 | "viem": "^2.28.0", 16 | "zod": "^3.24.3" 17 | }, 18 | "devDependencies": { 19 | "@types/node": "^22.14.1", 20 | "typescript": "^5.8.3" 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /AI/evm-mcp-server/tools-merged.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/AI/evm-mcp-server/tools-merged.png -------------------------------------------------------------------------------- /AI/evm-mcp-server/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2022", 4 | "module": "NodeNext", 5 | "moduleResolution": "NodeNext", 6 | "esModuleInterop": true, 7 | "strict": true, 8 | "outDir": "./build", 9 | "rootDir": "./", 10 | "skipLibCheck": true, 11 | "forceConsistentCasingInFileNames": true 12 | }, 13 | "include": ["*.ts", "src/**/*.ts"], 14 | "exclude": ["node_modules", "build"] 15 | } 16 | -------------------------------------------------------------------------------- /AI/solana-mcp/claude_desktop_config.json: -------------------------------------------------------------------------------- 1 | { 2 | "mcpServers": { 3 | "solana": { 4 | "command": "node", 5 | "args": [ 6 | "/absolute/path/to/build/index.js" 7 | ], 8 | "env": { 9 | "SOLANA_RPC_ENDPOINT": "https://example.solana-mainnet.quiknode.pro/123456/" 10 | } 11 | } 12 | } 13 | } 14 | 15 | 16 | -------------------------------------------------------------------------------- /AI/solana-mcp/solana-mcp-claude.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/AI/solana-mcp/solana-mcp-claude.png -------------------------------------------------------------------------------- /AI/solana-mcp/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2022", 4 | "module": "NodeNext", 5 | "moduleResolution": "NodeNext", 6 | "esModuleInterop": true, 7 | "strict": true, 8 | "outDir": "./build", 9 | "rootDir": "./", 10 | "skipLibCheck": true, 11 | "forceConsistentCasingInFileNames": true 12 | }, 13 | "include": ["*.ts"], 14 | "exclude": ["node_modules", "build"] 15 | } -------------------------------------------------------------------------------- /QuickAlerts/Telegram_bot/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "telegram_bot", 3 | "version": "1.0.0", 4 | "description": "A bot to get QuickAlerts Stream and send it to Telegram", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1", 8 | "start": "node index.js", 9 | "dev": "nodemon index.js" 10 | }, 11 | "author": "Sahil Sen", 12 | "license": "ISC", 13 | "dependencies": { 14 | "dotenv": "^16.0.3", 15 | "express": "^4.18.2", 16 | "node-telegram-bot-api": "^0.61.0", 17 | "nodemon": "^2.0.20" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /QuickAlerts/Twitter_bot/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "quickalerts-app", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC", 12 | "dependencies": { 13 | "dotenv": "^16.3.1", 14 | "ethers": "^5.7.2", 15 | "express": "^4.18.2", 16 | "twitter-api-v2": "^1.15.0" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # QuickNode Guide Examples 2 | 3 | A collection of example applications from QuickNode's [guides](https://quicknode.com/guides) and more. 4 | 5 | When contributing add a README.md file to your directory with step-by-step info to run the project. Get the template from [TEMPLATE_README.md](https://github.com/quiknode-labs/qn-guide-examples/blob/main/TEMPLATE_README.md) -------------------------------------------------------------------------------- /Streams/ai-bot-discord/.env.example: -------------------------------------------------------------------------------- 1 | DISCORD_TOKEN=your_discord_bot_token 2 | OPENAI_API_KEY=openai_api_key 3 | DATABASE_URL=postgres_sql_database_url -------------------------------------------------------------------------------- /Streams/ai-bot-discord/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "block-metrics-bot", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC", 12 | "dependencies": { 13 | "discord.js": "^14.17.3", 14 | "dotenv": "^16.4.7", 15 | "openai": "^4.78.0", 16 | "pg": "^8.13.1" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Streams/dex-metrics-dashboard/app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/Streams/dex-metrics-dashboard/app/favicon.ico -------------------------------------------------------------------------------- /Streams/dex-metrics-dashboard/app/globals.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | 5 | :root { 6 | --background: #ffffff; 7 | --foreground: #171717; 8 | } 9 | 10 | @media (prefers-color-scheme: dark) { 11 | :root { 12 | --background: #0a0a0a; 13 | --foreground: #ededed; 14 | } 15 | } 16 | 17 | body { 18 | color: var(--foreground); 19 | background: var(--background); 20 | font-family: Arial, Helvetica, sans-serif; 21 | } 22 | -------------------------------------------------------------------------------- /Streams/dex-metrics-dashboard/app/layout.js: -------------------------------------------------------------------------------- 1 | import { Inter } from 'next/font/google' 2 | import './globals.css' 3 | 4 | const inter = Inter({ subsets: ['latin'] }) 5 | 6 | export const metadata = { 7 | title: 'Solana DEX Metrics', 8 | description: 'Block-level DEX metrics for Solana', 9 | } 10 | 11 | export default function RootLayout({ children }) { 12 | return ( 13 | 14 | {children} 15 | 16 | ) 17 | } -------------------------------------------------------------------------------- /Streams/dex-metrics-dashboard/eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import { dirname } from "path"; 2 | import { fileURLToPath } from "url"; 3 | import { FlatCompat } from "@eslint/eslintrc"; 4 | 5 | const __filename = fileURLToPath(import.meta.url); 6 | const __dirname = dirname(__filename); 7 | 8 | const compat = new FlatCompat({ 9 | baseDirectory: __dirname, 10 | }); 11 | 12 | const eslintConfig = [...compat.extends("next/core-web-vitals")]; 13 | 14 | export default eslintConfig; 15 | -------------------------------------------------------------------------------- /Streams/dex-metrics-dashboard/jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "paths": { 4 | "@/*": ["./*"] 5 | } 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /Streams/dex-metrics-dashboard/next.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | const nextConfig = {}; 3 | 4 | export default nextConfig; 5 | -------------------------------------------------------------------------------- /Streams/dex-metrics-dashboard/postcss.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('postcss-load-config').Config} */ 2 | const config = { 3 | plugins: { 4 | tailwindcss: {}, 5 | }, 6 | }; 7 | 8 | export default config; 9 | -------------------------------------------------------------------------------- /Streams/dex-metrics-dashboard/public/file.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Streams/dex-metrics-dashboard/public/jupiter-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/Streams/dex-metrics-dashboard/public/jupiter-logo.png -------------------------------------------------------------------------------- /Streams/dex-metrics-dashboard/public/phoenix-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/Streams/dex-metrics-dashboard/public/phoenix-logo.png -------------------------------------------------------------------------------- /Streams/dex-metrics-dashboard/public/raydium-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/Streams/dex-metrics-dashboard/public/raydium-logo.png -------------------------------------------------------------------------------- /Streams/dex-metrics-dashboard/public/vercel.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Streams/dex-metrics-dashboard/public/window.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Streams/dex-metrics-dashboard/tailwind.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('tailwindcss').Config} */ 2 | export default { 3 | content: [ 4 | "./pages/**/*.{js,ts,jsx,tsx,mdx}", 5 | "./components/**/*.{js,ts,jsx,tsx,mdx}", 6 | "./app/**/*.{js,ts,jsx,tsx,mdx}", 7 | ], 8 | theme: { 9 | extend: { 10 | colors: { 11 | background: "var(--background)", 12 | foreground: "var(--foreground)", 13 | }, 14 | }, 15 | }, 16 | plugins: [], 17 | }; 18 | -------------------------------------------------------------------------------- /Streams/postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /Streams/qs-react-app/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/Streams/qs-react-app/public/favicon.ico -------------------------------------------------------------------------------- /Streams/qs-react-app/public/logo192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/Streams/qs-react-app/public/logo192.png -------------------------------------------------------------------------------- /Streams/qs-react-app/public/logo512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/Streams/qs-react-app/public/logo512.png -------------------------------------------------------------------------------- /Streams/qs-react-app/public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /Streams/qs-react-app/src/App.test.js: -------------------------------------------------------------------------------- 1 | import { render, screen } from '@testing-library/react'; 2 | import App from './App'; 3 | 4 | test('renders learn react link', () => { 5 | render(); 6 | const linkElement = screen.getByText(/learn react/i); 7 | expect(linkElement).toBeInTheDocument(); 8 | }); 9 | -------------------------------------------------------------------------------- /Streams/qs-react-app/src/reportWebVitals.js: -------------------------------------------------------------------------------- 1 | const reportWebVitals = onPerfEntry => { 2 | if (onPerfEntry && onPerfEntry instanceof Function) { 3 | import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { 4 | getCLS(onPerfEntry); 5 | getFID(onPerfEntry); 6 | getFCP(onPerfEntry); 7 | getLCP(onPerfEntry); 8 | getTTFB(onPerfEntry); 9 | }); 10 | } 11 | }; 12 | 13 | export default reportWebVitals; 14 | -------------------------------------------------------------------------------- /Streams/qs-react-app/src/setupTests.js: -------------------------------------------------------------------------------- 1 | // jest-dom adds custom jest matchers for asserting on DOM nodes. 2 | // allows you to do things like: 3 | // expect(element).toHaveTextContent(/react/i) 4 | // learn more: https://github.com/testing-library/jest-dom 5 | import '@testing-library/jest-dom'; 6 | -------------------------------------------------------------------------------- /Streams/qs-react-app/tailwind.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | purge: ['./src/**/*.{js,jsx,ts,tsx}', './public/index.html'], 3 | darkMode: false, // or 'media' or 'class' 4 | theme: { 5 | extend: {}, 6 | }, 7 | variants: { 8 | extend: {}, 9 | }, 10 | plugins: [], 11 | }; -------------------------------------------------------------------------------- /Streams/tailwind.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('tailwindcss').Config} */ 2 | module.exports = { 3 | content: [], 4 | theme: { 5 | extend: {}, 6 | }, 7 | plugins: [], 8 | } 9 | 10 | -------------------------------------------------------------------------------- /Streams/wallet-allowance-checker-app/example.env: -------------------------------------------------------------------------------- 1 | REACT_APP_QUICKNODE_ENDPOINT= 2 | 3 | # Database configuration 4 | DB_USER= 5 | DB_HOST= 6 | DB_NAME= 7 | DB_PASSWORD= 8 | DB_PORT= -------------------------------------------------------------------------------- /Streams/wallet-allowance-checker-app/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/Streams/wallet-allowance-checker-app/public/favicon.ico -------------------------------------------------------------------------------- /Streams/wallet-allowance-checker-app/public/logo192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/Streams/wallet-allowance-checker-app/public/logo192.png -------------------------------------------------------------------------------- /Streams/wallet-allowance-checker-app/public/logo512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/Streams/wallet-allowance-checker-app/public/logo512.png -------------------------------------------------------------------------------- /Streams/wallet-allowance-checker-app/public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /Streams/wallet-allowance-checker-app/src/App.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import WalletApprovalSearch from './components/WalletApprovalSearch'; 3 | 4 | function App() { 5 | return ( 6 |
7 | 8 |
9 | ); 10 | } 11 | 12 | export default App; -------------------------------------------------------------------------------- /Streams/wallet-allowance-checker-app/src/App.test.js: -------------------------------------------------------------------------------- 1 | import { render, screen } from '@testing-library/react'; 2 | import App from './App'; 3 | 4 | test('renders learn react link', () => { 5 | render(); 6 | const linkElement = screen.getByText(/learn react/i); 7 | expect(linkElement).toBeInTheDocument(); 8 | }); 9 | -------------------------------------------------------------------------------- /Streams/wallet-allowance-checker-app/src/index.css: -------------------------------------------------------------------------------- 1 | body { 2 | margin: 0; 3 | font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 4 | 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', 5 | sans-serif; 6 | -webkit-font-smoothing: antialiased; 7 | -moz-osx-font-smoothing: grayscale; 8 | } 9 | 10 | code { 11 | font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', 12 | monospace; 13 | } 14 | -------------------------------------------------------------------------------- /Streams/wallet-allowance-checker-app/src/reportWebVitals.js: -------------------------------------------------------------------------------- 1 | const reportWebVitals = onPerfEntry => { 2 | if (onPerfEntry && onPerfEntry instanceof Function) { 3 | import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { 4 | getCLS(onPerfEntry); 5 | getFID(onPerfEntry); 6 | getFCP(onPerfEntry); 7 | getLCP(onPerfEntry); 8 | getTTFB(onPerfEntry); 9 | }); 10 | } 11 | }; 12 | 13 | export default reportWebVitals; 14 | -------------------------------------------------------------------------------- /Streams/wallet-allowance-checker-app/src/setupTests.js: -------------------------------------------------------------------------------- 1 | // jest-dom adds custom jest matchers for asserting on DOM nodes. 2 | // allows you to do things like: 3 | // expect(element).toHaveTextContent(/react/i) 4 | // learn more: https://github.com/testing-library/jest-dom 5 | import '@testing-library/jest-dom'; 6 | -------------------------------------------------------------------------------- /base/telegram-trading-bot/.env.example: -------------------------------------------------------------------------------- 1 | # Telegram Bot Token 2 | TELEGRAM_BOT_TOKEN= 3 | 4 | # QuickNode RPC URL (with MEV protection) 5 | QUICKNODE_RPC= 6 | 7 | # Wallet Encryption Key (32 characters) - "openssl rand -hex 32" 8 | WALLET_ENCRYPTION_KEY= 9 | 10 | # Database Path (optional) 11 | DB_PATH=./database.sqlite 12 | 13 | # Base Chain ID 14 | CHAIN_ID=8453 15 | 16 | # Default Slippage (percentage) 17 | DEFAULT_SLIPPAGE=1 18 | 19 | # Default Gas Priority (low, medium, high) 20 | DEFAULT_GAS_PRIORITY=medium 21 | -------------------------------------------------------------------------------- /base/telegram-trading-bot/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | .env 4 | database.sqlite -------------------------------------------------------------------------------- /base/telegram-trading-bot/nodemon.json: -------------------------------------------------------------------------------- 1 | { 2 | "watch": ["."], 3 | "ext": "ts,json", 4 | "ignore": ["node_modules"], 5 | "exec": "ts-node index.ts" 6 | } 7 | -------------------------------------------------------------------------------- /base/telegram-trading-bot/public/telegram-test-combined.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/base/telegram-trading-bot/public/telegram-test-combined.png -------------------------------------------------------------------------------- /base/telegram-trading-bot/src/context.ts: -------------------------------------------------------------------------------- 1 | import { Context, SessionFlavor } from "grammy"; 2 | import { SessionData } from "./types/commands"; 3 | 4 | // Custom context type with session data 5 | export type BotContext = Context & SessionFlavor; 6 | 7 | // Helper function to create a new session 8 | export function createInitialSessionData(): SessionData { 9 | return { 10 | userId: undefined, 11 | walletAddress: undefined, 12 | currentAction: undefined, 13 | tempData: {}, 14 | settings: undefined, 15 | }; 16 | } 17 | -------------------------------------------------------------------------------- /base/telegram-trading-bot/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2020", // allows top-level await in async functions 4 | "module": "CommonJS", // required for better-sqlite3 5 | "moduleResolution": "node", 6 | "esModuleInterop": true, // allows default imports for CJS libs 7 | "strict": true, 8 | "outDir": "./dist", 9 | "resolveJsonModule": true, 10 | "skipLibCheck": true, 11 | "forceConsistentCasingInFileNames": true 12 | }, 13 | "include": ["src/**/*"], 14 | "exclude": ["node_modules"] 15 | } 16 | -------------------------------------------------------------------------------- /binance/bep20/README.md: -------------------------------------------------------------------------------- 1 | # Create a BEP20 Token 2 | 3 | This project is based on the guide, [How to Create a BEP20 Token](https://www.quicknode.com/guides/smart-contract-development/how-to-create-a-bep20-token?utm_source=qn-github&utm_campaign=bep20&utm_content=sign-up&utm_medium=generic) by Noah Hein. 4 | 5 | ## Clone Example Monorepo 6 | 7 | To begin, clone the `qn-guide-examples` repo and navigate to this project's directory. 8 | 9 | ```bash 10 | git clone https://github.com/quiknode-labs/qn-guide-examples.git 11 | cd qn-guide-examples/binance/bep20 12 | ``` 13 | -------------------------------------------------------------------------------- /binance/bep20/bep20.sol: -------------------------------------------------------------------------------- 1 | // contracts/BEP20.sol 2 | // SPDX-License-Identifier: MIT 3 | pragma solidity ^0.8.0; 4 | 5 | import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; 6 | 7 | contract BEP20 is ERC20 { 8 | constructor(uint256 initialSupply) ERC20("BEP20Test", "BPT") { 9 | _mint(msg.sender, initialSupply); 10 | } 11 | } -------------------------------------------------------------------------------- /bitcoin/transaction-report-generator/python/.env.example: -------------------------------------------------------------------------------- 1 | QUICKNODE_ENDPOINT = "YOUR_QUICKNODE_BITCOIN_ENDPOINT_URL" 2 | -------------------------------------------------------------------------------- /bitcoin/transaction-report-generator/python/image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/bitcoin/transaction-report-generator/python/image.png -------------------------------------------------------------------------------- /bitcoin/transaction-report-generator/python/requirements.txt: -------------------------------------------------------------------------------- 1 | aiofiles>=23.2.1 2 | aiohttp>=3.9.3 3 | python-dotenv>=1.0.1 4 | python_dateutil>=2.9.0 5 | -------------------------------------------------------------------------------- /bitcoin/transaction-report-generator/typescript/.env.example: -------------------------------------------------------------------------------- 1 | QUICKNODE_ENDPOINT = "YOUR_QUICKNODE_BITCOIN_ENDPOINT_URL" 2 | -------------------------------------------------------------------------------- /bitcoin/transaction-report-generator/typescript/image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/bitcoin/transaction-report-generator/typescript/image.png -------------------------------------------------------------------------------- /bitcoin/transaction-report-generator/typescript/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "bitcoin-transaction-reports", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "Sergen Uysal", 11 | "license": "ISC", 12 | "dependencies": { 13 | "axios": "^1.6.7", 14 | "dotenv": "^16.4.5", 15 | "fs-extra": "^11.2.0", 16 | "luxon": "^3.4.4" 17 | }, 18 | "devDependencies": { 19 | "@types/fs-extra": "^11.0.4", 20 | "@types/luxon": "^3.4.2" 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /console-api/grafana-dashboard/grafana/provisioning/dashboards/main.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: 1 2 | 3 | providers: 4 | - name: "Dashboard provider" 5 | orgId: 1 6 | type: file 7 | disableDeletion: false 8 | updateIntervalSeconds: 10 9 | allowUiUpdates: false 10 | options: 11 | path: /var/lib/grafana/dashboards 12 | foldersFromFilesStructure: true -------------------------------------------------------------------------------- /console-api/grafana-dashboard/grafana/provisioning/datasources/prometheus-source.yaml: -------------------------------------------------------------------------------- 1 | apiVersion: 1 2 | 3 | datasources: 4 | - name: Prometheus 5 | type: prometheus 6 | access: proxy 7 | url: http://prometheus:9090 8 | isDefault: true 9 | editable: true -------------------------------------------------------------------------------- /console-api/grafana-dashboard/prometheus/prometheus.yaml: -------------------------------------------------------------------------------- 1 | global: 2 | scrape_interval: 30s 3 | 4 | scrape_configs: 5 | - job_name: "quicknode_prometheus_exporter" 6 | metrics_path: "v0/prometheus/metrics" 7 | scheme: "http" 8 | authorization: 9 | type: "bearer" 10 | credentials: "" 11 | static_configs: 12 | - targets: ["api.quicknode.com"] 13 | -------------------------------------------------------------------------------- /courses/solana-basics/final/.env.example: -------------------------------------------------------------------------------- 1 | NEXT_PUBLIC_ENDPOINT=https://sample.solana-devnet.quiknode.pro/123456/ 2 | NEXT_PUBLIC_CLUSTER=devnet 3 | NEXT_PUBLIC_PROGRAM_ADDRESS=QTTmCrRSrMhPtZS431TSmtiosubJoqfExRhi7JHcJhC 4 | -------------------------------------------------------------------------------- /courses/solana-basics/final/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "next/core-web-vitals" 3 | } 4 | -------------------------------------------------------------------------------- /courses/solana-basics/final/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | .yarn/install-state.gz 8 | 9 | # testing 10 | /coverage 11 | 12 | # next.js 13 | /.next/ 14 | /out/ 15 | 16 | # production 17 | /build 18 | 19 | # misc 20 | .DS_Store 21 | *.pem 22 | 23 | # debug 24 | npm-debug.log* 25 | yarn-debug.log* 26 | yarn-error.log* 27 | 28 | # local env files 29 | .env*.local 30 | 31 | # vercel 32 | .vercel 33 | 34 | # typescript 35 | *.tsbuildinfo 36 | next-env.d.ts 37 | -------------------------------------------------------------------------------- /courses/solana-basics/final/app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/courses/solana-basics/final/app/favicon.ico -------------------------------------------------------------------------------- /courses/solana-basics/final/app/games/[gamePda]/page.tsx: -------------------------------------------------------------------------------- 1 | 'use client' 2 | 3 | import React from 'react'; 4 | import SolanaProviders from '@/components/SolanaProviders'; 5 | import Navbar from '@/components/Navbar'; 6 | import Board from '@/components/Board'; 7 | 8 | export default function Page({ params }: { params: { gamePda: string } }) { 9 | 10 | return ( 11 | 12 | 13 | 14 | 15 | ); 16 | } -------------------------------------------------------------------------------- /courses/solana-basics/final/app/layout.tsx: -------------------------------------------------------------------------------- 1 | import type { Metadata } from 'next' 2 | import { Inter } from 'next/font/google' 3 | import './globals.css' 4 | 5 | const inter = Inter({ subsets: ['latin'] }) 6 | 7 | export const metadata: Metadata = { 8 | title: 'Quick-Tac-Toe', 9 | description: 'Solana Basics Course', 10 | } 11 | 12 | export default function RootLayout({ 13 | children, 14 | }: { 15 | children: React.ReactNode 16 | }) { 17 | return ( 18 | 19 | {children} 20 | 21 | ) 22 | } 23 | -------------------------------------------------------------------------------- /courses/solana-basics/final/app/page.tsx: -------------------------------------------------------------------------------- 1 | 'use client' 2 | 3 | import React from 'react'; 4 | import SolanaProviders from '@/components/SolanaProviders'; 5 | import Navbar from '@/components/Navbar'; 6 | import Game from '@/components/Game'; 7 | 8 | export default function Home() { 9 | 10 | return ( 11 | 12 | 13 | 14 | 15 | ) 16 | } 17 | -------------------------------------------------------------------------------- /courses/solana-basics/final/next.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | const nextConfig = {} 3 | 4 | module.exports = nextConfig 5 | -------------------------------------------------------------------------------- /courses/solana-basics/final/postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /courses/solana-basics/final/utils/utils.ts: -------------------------------------------------------------------------------- 1 | import { Cluster } from "@solana/web3.js"; 2 | 3 | export const getExplorerUrl = (signature: string, cluster: Cluster) => { 4 | return `https://explorer.solana.com/tx/${signature}?cluster=${cluster}`; 5 | } 6 | export const shortenHash = (str:string) => { 7 | return `${str.slice(0, 4)}...${str.slice(-4)}`; 8 | } 9 | 10 | -------------------------------------------------------------------------------- /courses/solana-basics/progress/.env.example: -------------------------------------------------------------------------------- 1 | NEXT_PUBLIC_ENDPOINT=https://sample.solana-devnet.quiknode.pro/123456/ 2 | NEXT_PUBLIC_CLUSTER=devnet 3 | -------------------------------------------------------------------------------- /courses/solana-basics/progress/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "next/core-web-vitals" 3 | } 4 | -------------------------------------------------------------------------------- /courses/solana-basics/progress/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | .yarn/install-state.gz 8 | 9 | # testing 10 | /coverage 11 | 12 | # next.js 13 | /.next/ 14 | /out/ 15 | 16 | # production 17 | /build 18 | 19 | # misc 20 | .DS_Store 21 | *.pem 22 | 23 | # debug 24 | npm-debug.log* 25 | yarn-debug.log* 26 | yarn-error.log* 27 | 28 | # local env files 29 | .env*.local 30 | 31 | # vercel 32 | .vercel 33 | 34 | # typescript 35 | *.tsbuildinfo 36 | next-env.d.ts 37 | -------------------------------------------------------------------------------- /courses/solana-basics/progress/app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/courses/solana-basics/progress/app/favicon.ico -------------------------------------------------------------------------------- /courses/solana-basics/progress/app/layout.tsx: -------------------------------------------------------------------------------- 1 | import type { Metadata } from 'next' 2 | import { Inter } from 'next/font/google' 3 | import './globals.css' 4 | 5 | const inter = Inter({ subsets: ['latin'] }) 6 | 7 | export const metadata: Metadata = { 8 | title: 'Quick-Tac-Toe', 9 | description: 'Solana Basics Course', 10 | } 11 | 12 | export default function RootLayout({ 13 | children, 14 | }: { 15 | children: React.ReactNode 16 | }) { 17 | return ( 18 | 19 | {children} 20 | 21 | ) 22 | } 23 | -------------------------------------------------------------------------------- /courses/solana-basics/progress/app/page.tsx: -------------------------------------------------------------------------------- 1 | 'use client' 2 | 3 | import React from 'react'; 4 | import SolanaProviders from '@/components/SolanaProviders'; 5 | import Navbar from '@/components/Navbar'; 6 | import Main from '@/components/Main'; 7 | 8 | export default function Home() { 9 | 10 | return ( 11 | 12 | 13 |
14 | 15 | ) 16 | } 17 | -------------------------------------------------------------------------------- /courses/solana-basics/progress/next.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | const nextConfig = {} 3 | 4 | module.exports = nextConfig 5 | -------------------------------------------------------------------------------- /courses/solana-basics/progress/postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /courses/solana-basics/progress/utils/constants.ts: -------------------------------------------------------------------------------- 1 | import { WalletAdapterNetwork } from "@solana/wallet-adapter-base"; 2 | import { Cluster, PublicKey, clusterApiUrl } from "@solana/web3.js"; 3 | 4 | export const cluster: Cluster = process.env.NEXT_PUBLIC_CLUSTER as Cluster || 'devnet'; 5 | export const endpoint: string = process.env.NEXT_PUBLIC_URL || clusterApiUrl(WalletAdapterNetwork.Devnet); 6 | //export const endpoint: string = 'http://127.0.0.1:8899'; 7 | -------------------------------------------------------------------------------- /courses/solana-basics/progress/utils/utils.ts: -------------------------------------------------------------------------------- 1 | import { Cluster } from "@solana/web3.js"; 2 | 3 | export const getExplorerUrl = (signature: string, cluster: Cluster) => { 4 | return `https://explorer.solana.com/tx/${signature}?cluster=${cluster}`; 5 | } 6 | export const shortenHash = (str:string) => { 7 | return `${str.slice(0, 4)}...${str.slice(-4)}`; 8 | } 9 | 10 | -------------------------------------------------------------------------------- /courses/solana-basics/starter/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "next/core-web-vitals" 3 | } 4 | -------------------------------------------------------------------------------- /courses/solana-basics/starter/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | .yarn/install-state.gz 8 | 9 | # testing 10 | /coverage 11 | 12 | # next.js 13 | /.next/ 14 | /out/ 15 | 16 | # production 17 | /build 18 | 19 | # misc 20 | .DS_Store 21 | *.pem 22 | 23 | # debug 24 | npm-debug.log* 25 | yarn-debug.log* 26 | yarn-error.log* 27 | 28 | # local env files 29 | .env*.local 30 | 31 | # vercel 32 | .vercel 33 | 34 | # typescript 35 | *.tsbuildinfo 36 | next-env.d.ts 37 | -------------------------------------------------------------------------------- /courses/solana-basics/starter/app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/courses/solana-basics/starter/app/favicon.ico -------------------------------------------------------------------------------- /courses/solana-basics/starter/app/layout.tsx: -------------------------------------------------------------------------------- 1 | import type { Metadata } from 'next' 2 | import { Inter } from 'next/font/google' 3 | import './globals.css' 4 | 5 | const inter = Inter({ subsets: ['latin'] }) 6 | 7 | export const metadata: Metadata = { 8 | title: 'Starter App', 9 | description: 'Solana Basics Course', 10 | } 11 | 12 | export default function RootLayout({ 13 | children, 14 | }: { 15 | children: React.ReactNode 16 | }) { 17 | return ( 18 | 19 | {children} 20 | 21 | ) 22 | } 23 | -------------------------------------------------------------------------------- /courses/solana-basics/starter/app/page.tsx: -------------------------------------------------------------------------------- 1 | 'use client' 2 | 3 | import React from 'react'; 4 | 5 | 6 | export default function Home() { 7 | 8 | return ( 9 |
10 | Starter Content 11 |
12 | ) 13 | } 14 | -------------------------------------------------------------------------------- /courses/solana-basics/starter/next.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | const nextConfig = {} 3 | 4 | module.exports = nextConfig 5 | -------------------------------------------------------------------------------- /courses/solana-basics/starter/postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /defi/uniswap-v3-swaps/.env.example: -------------------------------------------------------------------------------- 1 | RPC_URL=https://ethereum-sepolia.quiknode.pro 2 | PRIVATE_KEY= -------------------------------------------------------------------------------- /defi/uniswap-v3-swaps/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "uniswap-v3-swaps", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "type": "module", 7 | "scripts": { 8 | "test": "echo \"Error: no test specified\" && exit 1" 9 | }, 10 | "keywords": [], 11 | "author": "", 12 | "license": "ISC", 13 | "dependencies": { 14 | "dotenv": "^16.4.5", 15 | "ethers": "^6.13.0" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /enhanced-apis/NFT-Collection-Explorer/mobile/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | .expo/ 3 | dist/ 4 | npm-debug.* 5 | *.jks 6 | *.p8 7 | *.p12 8 | *.key 9 | *.mobileprovision 10 | *.orig.* 11 | web-build/ 12 | 13 | # macOS 14 | .DS_Store 15 | -------------------------------------------------------------------------------- /enhanced-apis/NFT-Collection-Explorer/mobile/App.js: -------------------------------------------------------------------------------- 1 | import { StatusBar } from 'expo-status-bar'; 2 | import { StyleSheet, Text, View } from 'react-native'; 3 | 4 | export default function App() { 5 | return ( 6 | 7 | Open up App.js to start working on your app! 8 | 9 | 10 | ); 11 | } 12 | 13 | const styles = StyleSheet.create({ 14 | container: { 15 | flex: 1, 16 | backgroundColor: '#fff', 17 | alignItems: 'center', 18 | justifyContent: 'center', 19 | }, 20 | }); 21 | -------------------------------------------------------------------------------- /enhanced-apis/NFT-Collection-Explorer/mobile/assets/adaptive-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/enhanced-apis/NFT-Collection-Explorer/mobile/assets/adaptive-icon.png -------------------------------------------------------------------------------- /enhanced-apis/NFT-Collection-Explorer/mobile/assets/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/enhanced-apis/NFT-Collection-Explorer/mobile/assets/favicon.png -------------------------------------------------------------------------------- /enhanced-apis/NFT-Collection-Explorer/mobile/assets/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/enhanced-apis/NFT-Collection-Explorer/mobile/assets/icon.png -------------------------------------------------------------------------------- /enhanced-apis/NFT-Collection-Explorer/mobile/assets/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/enhanced-apis/NFT-Collection-Explorer/mobile/assets/splash.png -------------------------------------------------------------------------------- /enhanced-apis/NFT-Collection-Explorer/mobile/babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = function(api) { 2 | api.cache(true); 3 | return { 4 | presets: ['babel-preset-expo'], 5 | }; 6 | }; 7 | -------------------------------------------------------------------------------- /enhanced-apis/NFT-Collection-Explorer/mobile/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "production-wallet-app", 3 | "version": "1.0.0", 4 | "main": "node_modules/expo/AppEntry.js", 5 | "scripts": { 6 | "start": "expo start", 7 | "android": "expo start --android", 8 | "ios": "expo start --ios", 9 | "web": "expo start --web" 10 | }, 11 | "dependencies": { 12 | "expo": "~47.0.8", 13 | "expo-status-bar": "~1.4.2", 14 | "react": "18.1.0", 15 | "react-native": "0.70.5" 16 | }, 17 | "devDependencies": { 18 | "@babel/core": "^7.12.9" 19 | }, 20 | "private": true 21 | } 22 | -------------------------------------------------------------------------------- /enhanced-apis/NFT-Collection-Explorer/scripts/.env.example: -------------------------------------------------------------------------------- 1 | QUICKNODE_URL= -------------------------------------------------------------------------------- /enhanced-apis/NFT-Collection-Explorer/scripts/fetchNFTCollectionDetails.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config(); 2 | const ethers = require("ethers"); 3 | 4 | (async () => { 5 | const provider = new ethers.providers.JsonRpcProvider(process.env.QUICKNODE_URL); 6 | provider.connection.headers = { "x-qn-api-version": 1 }; 7 | const heads = await provider.send("qn_fetchNFTCollectionDetails", { 8 | contracts: [ 9 | "0x60E4d786628Fea6478F785A6d7e704777c86a7c6", 10 | "0x7Bd29408f11D2bFC23c34f18275bBf23bB716Bc7", 11 | ], 12 | }); 13 | console.log(heads); 14 | })(); -------------------------------------------------------------------------------- /enhanced-apis/NFT-Collection-Explorer/scripts/fetchNFTsByCollection.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config(); 2 | const ethers = require("ethers"); 3 | 4 | (async () => { 5 | const provider = new ethers.providers.JsonRpcProvider(process.env.QUICKNODE_URL); 6 | const heads = await provider.send("qn_fetchNFTsByCollection", { 7 | collection: "0x60E4d786628Fea6478F785A6d7e704777c86a7c6", 8 | omitFields: ["imageUrl", "traits"], 9 | page: 1, 10 | perPage: 10, 11 | }); 12 | console.log(heads); 13 | })(); 14 | -------------------------------------------------------------------------------- /enhanced-apis/NFT-Collection-Explorer/scripts/getTokenMetadataByContractAddress.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config(); 2 | const ethers = require("ethers"); 3 | 4 | (async () => { 5 | const provider = new ethers.providers.JsonRpcProvider(process.env.QUICKNODE_URL); 6 | const heads = await provider.send("qn_getTokenMetadataByContractAddress", { 7 | contract: "0x4d224452801ACEd8B2F0aebE155379bb5D594381", 8 | }); 9 | console.log(heads); 10 | })(); -------------------------------------------------------------------------------- /enhanced-apis/NFT-Collection-Explorer/scripts/getTokenMetadataBySymbol.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config(); 2 | const ethers = require("ethers"); 3 | 4 | (async () => { 5 | const provider = new ethers.providers.JsonRpcProvider(process.env.QUICKNODE_URL); 6 | const heads = await provider.send("qn_getTokenMetadataBySymbol", { 7 | symbol: "USDC", 8 | }); 9 | console.log(heads); 10 | })(); 11 | -------------------------------------------------------------------------------- /enhanced-apis/NFT-Collection-Explorer/scripts/getTransfersByNFT.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config(); 2 | const ethers = require("ethers"); 3 | 4 | (async () => { 5 | const provider = new ethers.providers.JsonRpcProvider(process.env.QUICKNODE_URL); 6 | const heads = await provider.send("qn_getTransfersByNFT", { 7 | collection: "0x60E4d786628Fea6478F785A6d7e704777c86a7c6", 8 | collectionTokenId: "1", 9 | page: 1, 10 | perPage: 10, 11 | }); 12 | console.log(heads); 13 | })(); 14 | -------------------------------------------------------------------------------- /enhanced-apis/NFT-Collection-Explorer/scripts/getWalletTokenBalance.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config(); 2 | const ethers = require("ethers"); 3 | 4 | (async () => { 5 | const provider = new ethers.providers.JsonRpcProvider(process.env.QUICKNODE_URL); 6 | provider.connection.headers = { "x-qn-api-version": 1 }; 7 | const heads = await provider.send("qn_getWalletTokenBalance", { 8 | wallet: "0xd8da6bf26964af9d7eed9e03e53415d37aa96045", 9 | }); 10 | console.log(heads); 11 | })(); -------------------------------------------------------------------------------- /enhanced-apis/NFT-Collection-Explorer/scripts/getWalletTokenTransactions.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config(); 2 | const ethers = require("ethers"); 3 | 4 | (async () => { 5 | const provider = new ethers.providers.JsonRpcProvider(process.env.QUICKNODE_URL); 6 | const heads = await provider.send("qn_getWalletTokenTransactions", { 7 | address: "0xd8da6bf26964af9d7eed9e03e53415d37aa96045", 8 | contract: "0x95aD61b0a150d79219dCF64E1E6Cc01f0B64C4cE", 9 | page: 1, 10 | perPage: 10, 11 | }); 12 | console.log(heads); 13 | })(); 14 | -------------------------------------------------------------------------------- /enhanced-apis/NFT-Collection-Explorer/scripts/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "scripts", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC", 12 | "devDependencies": { 13 | "dotenv": "^16.0.3", 14 | "ethers": "^5.7.2" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /enhanced-apis/NFT-Collection-Explorer/scripts/verifyNFTsOwner.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config(); 2 | const ethers = require("ethers"); 3 | 4 | (async () => { 5 | const provider = new ethers.providers.JsonRpcProvider(process.env.QUICKNODE_URL); 6 | provider.connection.headers = { "x-qn-api-version": 1 }; 7 | const heads = await provider.send("qn_verifyNFTsOwner", [ 8 | "0x91b51c173a4bdaa1a60e234fc3f705a16d228740", 9 | [ 10 | "0x2106c00ac7da0a3430ae667879139e832307aeaa:3643", 11 | "0xd07dc4262bcdbf85190c01c996b4c06a461d2430:133803", 12 | ], 13 | ]); 14 | console.log(heads); 15 | })(); 16 | -------------------------------------------------------------------------------- /enhanced-apis/NFT-Collection-Explorer/web/.env.example: -------------------------------------------------------------------------------- 1 | NEXT_PUBLIC_QN_URL=YOUR_URL_HERE 2 | -------------------------------------------------------------------------------- /enhanced-apis/NFT-Collection-Explorer/web/next.config.mjs: -------------------------------------------------------------------------------- 1 | // @ts-check 2 | /** 3 | * Run `build` or `dev` with `SKIP_ENV_VALIDATION` to skip env validation. 4 | * This is especially useful for Docker builds. 5 | */ 6 | !process.env.SKIP_ENV_VALIDATION && (await import("./src/env/server.mjs")); 7 | 8 | /** @type {import("next").NextConfig} */ 9 | const config = { 10 | typescript: { 11 | ignoreBuildErrors: true, 12 | }, 13 | reactStrictMode: true, 14 | swcMinify: true, 15 | i18n: { 16 | locales: ["en"], 17 | defaultLocale: "en", 18 | }, 19 | }; 20 | export default config; 21 | -------------------------------------------------------------------------------- /enhanced-apis/NFT-Collection-Explorer/web/postcss.config.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | }; 7 | -------------------------------------------------------------------------------- /enhanced-apis/NFT-Collection-Explorer/web/prettier.config.cjs: -------------------------------------------------------------------------------- 1 | /** @type {import("prettier").Config} */ 2 | module.exports = { 3 | plugins: [require.resolve("prettier-plugin-tailwindcss")], 4 | }; 5 | -------------------------------------------------------------------------------- /enhanced-apis/NFT-Collection-Explorer/web/src/pages/_app.tsx: -------------------------------------------------------------------------------- 1 | // next/src/pages/_app.tsx 2 | 3 | import { type AppType } from "next/dist/shared/lib/utils" 4 | import "../styles/globals.css" 5 | 6 | const MyApp: AppType = ({ Component, pageProps }) => { 7 | return 8 | } 9 | 10 | export default MyApp -------------------------------------------------------------------------------- /enhanced-apis/NFT-Collection-Explorer/web/tailwind.config.cjs: -------------------------------------------------------------------------------- 1 | /** @type {import('tailwindcss').Config} */ 2 | module.exports = { 3 | content: ["./src/**/*.{js,ts,jsx,tsx}"], 4 | theme: { 5 | extend: {}, 6 | }, 7 | plugins: [], 8 | }; 9 | -------------------------------------------------------------------------------- /enhanced-apis/NFT-Collection-Explorer/web/vercel.json: -------------------------------------------------------------------------------- 1 | { 2 | "buildCommand": "pnpm build", 3 | "outputDirectory": ".next", 4 | "devCommand": "pnpm dev", 5 | "installCommand": "pnpm i" 6 | } -------------------------------------------------------------------------------- /enhanced-apis/get-receipts-by-address/.env.example: -------------------------------------------------------------------------------- 1 | QUICKNODE_RPC_ENDPOINT= -------------------------------------------------------------------------------- /enhanced-apis/get-receipts-by-address/.gitignore: -------------------------------------------------------------------------------- 1 | .env 2 | node_modules 3 | .DS_Store -------------------------------------------------------------------------------- /enhanced-apis/get-receipts-by-address/README.md: -------------------------------------------------------------------------------- 1 | # :warning: The RPC method used in this app is under maintenance and is not usable at the moment :warning: 2 | -------------------------------------------------------------------------------- /enhanced-apis/get-receipts-by-address/index.js: -------------------------------------------------------------------------------- 1 | require('dotenv').config(); 2 | const ethers = require("ethers"); 3 | const { QUICKNODE_RPC_ENDPOINT } = process.env; 4 | 5 | (async () => { 6 | const provider = new ethers.providers.JsonRpcProvider(QUICKNODE_RPC_ENDPOINT); 7 | const heads = await provider.send("qn_getTransactionReceiptsByAddress", [ 8 | { 9 | fromBlock: "0xee8784", 10 | toBlock: "0xee878e", 11 | accounts: ["0xa21a16ec22a940990922220e4ab5bf4c2310f556"], 12 | hashOnly: true, 13 | } 14 | ]); 15 | console.log(heads); 16 | })(); -------------------------------------------------------------------------------- /enhanced-apis/get-receipts-by-address/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "get-receipts-by-address", 3 | "version": "1.0.0", 4 | "description": "How to use qn_getTransactionReceiptsByAddress method with Ethers.js", 5 | "main": "index.js", 6 | "scripts": { 7 | "start": "node index.js" 8 | }, 9 | "license": "MIT", 10 | "devDependencies": { 11 | "dotenv": "^16.0.3", 12 | "ethers": "^5.7.1" 13 | } 14 | } -------------------------------------------------------------------------------- /enhanced-apis/token_balance_app/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/enhanced-apis/token_balance_app/public/favicon.ico -------------------------------------------------------------------------------- /enhanced-apis/token_balance_app/public/logo192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/enhanced-apis/token_balance_app/public/logo192.png -------------------------------------------------------------------------------- /enhanced-apis/token_balance_app/public/logo512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/enhanced-apis/token_balance_app/public/logo512.png -------------------------------------------------------------------------------- /enhanced-apis/token_balance_app/public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /enhanced-apis/token_balance_app/src/App.test.js: -------------------------------------------------------------------------------- 1 | import { render, screen } from '@testing-library/react'; 2 | import App from './App'; 3 | 4 | test('renders learn react link', () => { 5 | render(); 6 | const linkElement = screen.getByText(/learn react/i); 7 | expect(linkElement).toBeInTheDocument(); 8 | }); 9 | -------------------------------------------------------------------------------- /enhanced-apis/token_balance_app/src/index.css: -------------------------------------------------------------------------------- 1 | body { 2 | margin: 0; 3 | font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 4 | 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', 5 | sans-serif; 6 | -webkit-font-smoothing: antialiased; 7 | -moz-osx-font-smoothing: grayscale; 8 | } 9 | 10 | code { 11 | font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', 12 | monospace; 13 | } 14 | -------------------------------------------------------------------------------- /enhanced-apis/token_balance_app/src/reportWebVitals.js: -------------------------------------------------------------------------------- 1 | const reportWebVitals = onPerfEntry => { 2 | if (onPerfEntry && onPerfEntry instanceof Function) { 3 | import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { 4 | getCLS(onPerfEntry); 5 | getFID(onPerfEntry); 6 | getFCP(onPerfEntry); 7 | getLCP(onPerfEntry); 8 | getTTFB(onPerfEntry); 9 | }); 10 | } 11 | }; 12 | 13 | export default reportWebVitals; 14 | -------------------------------------------------------------------------------- /enhanced-apis/token_balance_app/src/setupTests.js: -------------------------------------------------------------------------------- 1 | // jest-dom adds custom jest matchers for asserting on DOM nodes. 2 | // allows you to do things like: 3 | // expect(element).toHaveTextContent(/react/i) 4 | // learn more: https://github.com/testing-library/jest-dom 5 | import '@testing-library/jest-dom'; 6 | -------------------------------------------------------------------------------- /enhanced-apis/token_balance_app/tailwind.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('tailwindcss').Config} */ 2 | module.exports = { 3 | content: ["./src/**/*.{html,js,jsx}"], 4 | theme: { 5 | extend: {}, 6 | }, 7 | plugins: [], 8 | } 9 | -------------------------------------------------------------------------------- /ethereum/ABI/test.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | pragma solidity ^0.8.0; 3 | 4 | contract test { 5 | 6 | uint256 private count = 0; 7 | 8 | function increment() public { 9 | count += 1; 10 | } 11 | 12 | function getCount() public view returns (uint256) { 13 | return count; 14 | } 15 | 16 | } -------------------------------------------------------------------------------- /ethereum/audit-token-activity/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "audit-token-activity", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "type": "module", 7 | "scripts": { 8 | "test": "echo \"Error: no test specified\" && exit 1" 9 | }, 10 | "keywords": [], 11 | "author": "Sergen Uysal", 12 | "license": "ISC", 13 | "dependencies": { 14 | "@quicknode/sdk": "^1.1.4", 15 | "cli-progress": "^3.12.0", 16 | "fs-extra": "^11.1.1" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /ethereum/blink-starter-monad/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["next/core-web-vitals", "next/typescript"] 3 | } 4 | -------------------------------------------------------------------------------- /ethereum/blink-starter-monad/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | .yarn/install-state.gz 8 | 9 | # testing 10 | /coverage 11 | 12 | # next.js 13 | /.next/ 14 | /out/ 15 | 16 | # production 17 | /build 18 | 19 | # misc 20 | .DS_Store 21 | *.pem 22 | 23 | # debug 24 | npm-debug.log* 25 | yarn-debug.log* 26 | yarn-error.log* 27 | 28 | 29 | # vercel 30 | .vercel 31 | 32 | # typescript 33 | *.tsbuildinfo 34 | next-env.d.ts 35 | -------------------------------------------------------------------------------- /ethereum/blink-starter-monad/next.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | const nextConfig = {}; 3 | 4 | export default nextConfig; 5 | -------------------------------------------------------------------------------- /ethereum/blink-starter-monad/postcss.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('postcss-load-config').Config} */ 2 | const config = { 3 | plugins: { 4 | tailwindcss: {}, 5 | }, 6 | }; 7 | 8 | export default config; 9 | -------------------------------------------------------------------------------- /ethereum/blink-starter-monad/public/blinks-nft-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/ethereum/blink-starter-monad/public/blinks-nft-1.png -------------------------------------------------------------------------------- /ethereum/blink-starter-monad/public/blinks-nft-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/ethereum/blink-starter-monad/public/blinks-nft-2.png -------------------------------------------------------------------------------- /ethereum/blink-starter-monad/public/dialect-logo-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/ethereum/blink-starter-monad/public/dialect-logo-black.png -------------------------------------------------------------------------------- /ethereum/blink-starter-monad/public/dialect-logo-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/ethereum/blink-starter-monad/public/dialect-logo-white.png -------------------------------------------------------------------------------- /ethereum/blink-starter-monad/public/dialect-monad-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/ethereum/blink-starter-monad/public/dialect-monad-logo.png -------------------------------------------------------------------------------- /ethereum/blink-starter-monad/public/icon-code.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /ethereum/blink-starter-monad/public/icon-x.svg: -------------------------------------------------------------------------------- 1 | 6 | 7 | -------------------------------------------------------------------------------- /ethereum/blink-starter-monad/public/nft-mint.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/ethereum/blink-starter-monad/public/nft-mint.png -------------------------------------------------------------------------------- /ethereum/blink-starter-monad/public/screenshot-blink-scaffold-monad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/ethereum/blink-starter-monad/public/screenshot-blink-scaffold-monad.png -------------------------------------------------------------------------------- /ethereum/blink-starter-monad/public/tip-mon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/ethereum/blink-starter-monad/public/tip-mon.png -------------------------------------------------------------------------------- /ethereum/blink-starter-monad/public/transfer-mon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/ethereum/blink-starter-monad/public/transfer-mon.png -------------------------------------------------------------------------------- /ethereum/blink-starter-monad/src/app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/ethereum/blink-starter-monad/src/app/favicon.ico -------------------------------------------------------------------------------- /ethereum/blink-starter-monad/src/app/fonts/GeistMonoVF.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/ethereum/blink-starter-monad/src/app/fonts/GeistMonoVF.woff -------------------------------------------------------------------------------- /ethereum/blink-starter-monad/src/app/fonts/GeistVF.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/ethereum/blink-starter-monad/src/app/fonts/GeistVF.woff -------------------------------------------------------------------------------- /ethereum/blink-starter-monad/src/config.ts: -------------------------------------------------------------------------------- 1 | import { http, createConfig } from "wagmi"; 2 | import { monad } from "@/monad"; 3 | import { injected } from "wagmi/connectors"; 4 | 5 | // Wagmi config: only Monad 6 | export const config = createConfig({ 7 | chains: [monad], 8 | connectors: [ 9 | injected(), 10 | ], 11 | transports: { 12 | [monad.id]: http(), 13 | }, 14 | }); 15 | -------------------------------------------------------------------------------- /ethereum/blink-starter-monad/src/monad.ts: -------------------------------------------------------------------------------- 1 | import { defineChain } from "viem"; 2 | 3 | // Monad chain definition 4 | export const monad = /*#__PURE__*/ defineChain({ 5 | id: 10143, 6 | name: "Monad Testnet", 7 | nativeCurrency: { name: "Monad", symbol: "MON", decimals: 18 }, 8 | rpcUrls: { 9 | default: { 10 | http: ["process.env.MONAD_ENDPOINT_URL as string"], 11 | }, 12 | }, 13 | testnet: true, 14 | }); 15 | -------------------------------------------------------------------------------- /ethereum/blink-starter-monad/tailwind.config.ts: -------------------------------------------------------------------------------- 1 | import type { Config } from "tailwindcss"; 2 | 3 | const config: Config = { 4 | content: [ 5 | "./src/pages/**/*.{js,ts,jsx,tsx,mdx}", 6 | "./src/components/**/*.{js,ts,jsx,tsx,mdx}", 7 | "./src/app/**/*.{js,ts,jsx,tsx,mdx}", 8 | ], 9 | theme: { 10 | extend: { 11 | colors: { 12 | background: "var(--background)", 13 | foreground: "var(--foreground)", 14 | }, 15 | }, 16 | }, 17 | plugins: [], 18 | }; 19 | export default config; 20 | -------------------------------------------------------------------------------- /ethereum/eip-7702/.gitignore: -------------------------------------------------------------------------------- 1 | # Compiler files 2 | cache/ 3 | out/ 4 | 5 | # Ignores development broadcast logs 6 | !/broadcast 7 | /broadcast/*/31337/ 8 | /broadcast/**/dry-run/ 9 | 10 | # Docs 11 | docs/ 12 | 13 | # Dotenv file 14 | .env 15 | -------------------------------------------------------------------------------- /ethereum/eip-7702/foundry.toml: -------------------------------------------------------------------------------- 1 | [profile.default] 2 | src = "src" 3 | out = "out" 4 | libs = ["lib"] 5 | evm_version = "prague" 6 | # See more config options https://github.com/foundry-rs/foundry/blob/master/crates/config/README.md#all-options 7 | -------------------------------------------------------------------------------- /ethereum/eip-7702/remappings.txt: -------------------------------------------------------------------------------- 1 | @openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/ 2 | erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/ 3 | forge-std/=lib/forge-std/src/ 4 | halmos-cheatcodes/=lib/openzeppelin-contracts/lib/halmos-cheatcodes/src/ 5 | openzeppelin-contracts/=lib/openzeppelin-contracts/ 6 | -------------------------------------------------------------------------------- /ethereum/erc-20/erc20_with_library.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | pragma solidity ^0.8.0; 3 | 4 | import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; 5 | 6 | contract GLDToken is ERC20 { 7 | constructor() ERC20("QuickNode Coin", "QKC") { 8 | _mint(msg.sender, 10000 * 10 ** decimals()); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /ethereum/erc-20_balance/README.md: -------------------------------------------------------------------------------- 1 | # Get the balance of an ERC-20 token 2 | 3 | This project is based on the guide, [How to get the balance of an ERC-20 token](https://www.quicknode.com/guides/web3-sdks/how-to-get-the-balance-of-an-erc-20-token?utm_source=qn-github&utm_campaign=erc20_balance&utm_content=sign-up&utm_medium=generic) by Noah Hein. 4 | 5 | ## Clone Example Monorepo 6 | 7 | To begin, clone the `qn-guide-examples` repo and navigate to this project's directory. 8 | 9 | ```bash 10 | git clone https://github.com/quiknode-labs/qn-guide-examples.git 11 | cd qn-guide-examples/ethereum/erc-20 12 | ``` 13 | -------------------------------------------------------------------------------- /ethereum/erc-6551/hardhat.config.js: -------------------------------------------------------------------------------- 1 | /** @type import('hardhat/config').HardhatUserConfig */ 2 | require("@nomicfoundation/hardhat-toolbox"); 3 | require("dotenv").config() 4 | module.exports = { 5 | defaultNetwork: "sepolia", 6 | solidity: "0.8.19", 7 | networks: { 8 | hardhat: { 9 | }, 10 | sepolia: { 11 | url: process.env.RPC_URL, 12 | accounts: [process.env.PRIVATE_KEY] 13 | } 14 | } 15 | }; 16 | -------------------------------------------------------------------------------- /ethereum/erc-6551/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "token-bound-accounts", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC", 12 | "devDependencies": { 13 | "hardhat": "^2.17.3" 14 | }, 15 | "dependencies": { 16 | "@nomicfoundation/hardhat-toolbox": "^3.0.0", 17 | "@openzeppelin/contracts": "^4.9.3", 18 | "dotenv": "^16.3.1" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /ethereum/explorer/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/ethereum/explorer/img/logo.png -------------------------------------------------------------------------------- /ethereum/farcaster-frames/.env.example: -------------------------------------------------------------------------------- 1 | QUICKNODE_HTTP_ENDPOINT="https:/quiknode.pro/12345/" 2 | HUBBLE_URL="https://7f38-174-138-84-0.ngrok-example-url.app" ## POINTS TO PORT 2281 3 | NGROK_URL="https://85e4-2601-589-4984-73d0.ngrok-example-url.app" # POINTS TO PORT 8080 4 | NEYNAR_API_KEY="API_KEY" # IF NOT RUNNING HUBBLE NODE SERVING HTTP -------------------------------------------------------------------------------- /ethereum/farcaster-frames/.gitignore: -------------------------------------------------------------------------------- 1 | .env 2 | node_modules/ 3 | -------------------------------------------------------------------------------- /ethereum/farcaster-frames/images/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/ethereum/farcaster-frames/images/1.png -------------------------------------------------------------------------------- /ethereum/farcaster-frames/images/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/ethereum/farcaster-frames/images/2.png -------------------------------------------------------------------------------- /ethereum/farcaster-frames/src/config.ts: -------------------------------------------------------------------------------- 1 | export const contractsInfo = { 2 | "USD Coin": { address: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', collateralFactor: 0.85, id: "usd"}, 3 | "LINK": { address: '0x514910771AF9Ca656af840dff83E8264EcF986CA', collateralFactor: 0.75, id: "link"}, 4 | "Wrapped BTC": { address: '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599', collateralFactor: 0.70, id: "bitcoin"}, 5 | "Ethereum": { address: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', collateralFactor: 0.83, id: "ethereum"}, 6 | }; 7 | -------------------------------------------------------------------------------- /ethereum/farcaster-frames/src/types.ts: -------------------------------------------------------------------------------- 1 | export interface TokenBalance { 2 | name: string; 3 | address: string; 4 | totalBalance: string; 5 | decimals: string; 6 | } 7 | 8 | export interface IFrameProps { 9 | frame?: string; 10 | imageUrl: string; 11 | buttons?: string[]; 12 | postUrl?: string; 13 | aspectRatio?: string; 14 | action?: string; 15 | target?: string; 16 | } -------------------------------------------------------------------------------- /ethereum/staking/EthereumStakingOptionsIn2023.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/ethereum/staking/EthereumStakingOptionsIn2023.png -------------------------------------------------------------------------------- /ethereum/staking/ethereum-staking-options.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/ethereum/staking/ethereum-staking-options.png -------------------------------------------------------------------------------- /ethereum/wave-portal-svelte/README.md: -------------------------------------------------------------------------------- 1 | Repository for the guide Written by @Nazeeh21 -- https://www.quicknode.com/guides/ethereum-development/smart-contracts/integrate-your-svelte-app-with-a-smart-contract 2 | -------------------------------------------------------------------------------- /ethereum/wave-portal-svelte/code/wave-portal-complete/.env.example: -------------------------------------------------------------------------------- 1 | SEPOLIA_NODE_URL= 2 | ACCOUNTS= -------------------------------------------------------------------------------- /ethereum/wave-portal-svelte/code/wave-portal-complete/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /public/build/ 3 | 4 | .env 5 | .DS_Store 6 | -------------------------------------------------------------------------------- /ethereum/wave-portal-svelte/code/wave-portal-complete/README.md: -------------------------------------------------------------------------------- 1 | # Wave-Portal Complete 2 | 3 | This is the reference code folder for the article to follow along. 4 | 5 | ## To run it locally 6 | 7 | ```shell 8 | git clone https://github.com/quiknode-labs/qn-guide-examples.git 9 | cd qn-guide-examples/ethereum/wave-portal-svelte/code/wave-portal-complete 10 | yarn 11 | yarn dev 12 | ``` 13 | -------------------------------------------------------------------------------- /ethereum/wave-portal-svelte/code/wave-portal-complete/artifacts/contracts/Wave-Portal.sol/WavePortal.dbg.json: -------------------------------------------------------------------------------- 1 | { 2 | "_format": "hh-sol-dbg-1", 3 | "buildInfo": "..\\..\\build-info\\bf35a4157c5a9a039e9148ed175935f6.json" 4 | } 5 | -------------------------------------------------------------------------------- /ethereum/wave-portal-svelte/code/wave-portal-complete/public/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/ethereum/wave-portal-svelte/code/wave-portal-complete/public/favicon.png -------------------------------------------------------------------------------- /ethereum/wave-portal-svelte/code/wave-portal-complete/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Svelte app 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /ethereum/wave-portal-svelte/code/wave-portal-complete/src/artifacts/contracts/Wave-Portal.sol/WavePortal.dbg.json: -------------------------------------------------------------------------------- 1 | { 2 | "_format": "hh-sol-dbg-1", 3 | "buildInfo": "..\\..\\build-info\\678dccce1603b6e071bd3b944135e20b.json" 4 | } 5 | -------------------------------------------------------------------------------- /ethereum/wave-portal-svelte/code/wave-portal-complete/src/components/Bio.svelte: -------------------------------------------------------------------------------- 1 |
2 |

Hi there! I'm Nazeeh, a Full Stack Dev from India learning about Web3.

3 |

Connect your wallet to wave at me, send me some cake or share some hype!

4 |
5 | 6 | -------------------------------------------------------------------------------- /ethereum/wave-portal-svelte/code/wave-portal-complete/src/main.js: -------------------------------------------------------------------------------- 1 | import App from './App.svelte'; 2 | 3 | const app = new App({ 4 | target: document.body, 5 | props: { 6 | } 7 | }); 8 | 9 | export default app; -------------------------------------------------------------------------------- /ethereum/wave-portal-svelte/code/wave-portal-starter-boilerplate/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /public/build/ 3 | 4 | .DS_Store 5 | -------------------------------------------------------------------------------- /ethereum/wave-portal-svelte/code/wave-portal-starter-boilerplate/README.md: -------------------------------------------------------------------------------- 1 | # This is the starting boilerplate for the article 2 | 3 | ### To get started run the following commands 4 | 5 | ```shell 6 | git clone https://github.com/quiknode-labs/qn-guide-examples.git 7 | cd qn-guide-examples/ethereum/wave-portal-svelte/code/wave-portal-boilerplate 8 | yarn 9 | yarn dev 10 | ``` 11 | 12 | After setting up the boilerplate locally, follow the article - https://www.quicknode.com/guides/ethereum-development/smart-contracts/integrate-your-svelte-app-with-a-smart-contract#deploying-to-ropsten-testnet 13 | -------------------------------------------------------------------------------- /ethereum/wave-portal-svelte/code/wave-portal-starter-boilerplate/public/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/ethereum/wave-portal-svelte/code/wave-portal-starter-boilerplate/public/favicon.png -------------------------------------------------------------------------------- /ethereum/wave-portal-svelte/code/wave-portal-starter-boilerplate/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Svelte app 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /ethereum/wave-portal-svelte/code/wave-portal-starter-boilerplate/src/components/Bio.svelte: -------------------------------------------------------------------------------- 1 |
2 |

Hi there! I'm Nazeeh, a Full Stack Dev from India learning about Web3.

3 |

Connect your wallet to wave at me, send me some cake or share some hype!

4 |
5 | 6 | -------------------------------------------------------------------------------- /ethereum/wave-portal-svelte/code/wave-portal-starter-boilerplate/src/main.js: -------------------------------------------------------------------------------- 1 | import App from './App.svelte'; 2 | 3 | const app = new App({ 4 | target: document.body, 5 | props: { 6 | } 7 | }); 8 | 9 | export default app; -------------------------------------------------------------------------------- /ethereum/web3-stack/README.md: -------------------------------------------------------------------------------- 1 | # The Web3 Developer Stack 2 | 3 | This project is based on the guide, [The Web3 Developer Stack](https://www.quicknode.com/guides/web3-sdks/the-web3-developer-stack?utm_source=qn-github&utm_campaign=web3_stack&utm_content=sign-up&utm_medium=generic) by Sahil Sen. 4 | 5 | ## Clone Example Monorepo 6 | 7 | To begin, clone the `qn-guide-examples` repo and navigate to this project's directory. 8 | 9 | ```bash 10 | git clone https://github.com/quiknode-labs/qn-guide-examples.git 11 | cd qn-guide-examples/ethereum/web3-stack 12 | ``` 13 | -------------------------------------------------------------------------------- /polygon/erc721a-implementation/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .env 3 | coverage 4 | coverage.json 5 | typechain 6 | typechain-types 7 | 8 | #Hardhat files 9 | cache 10 | artifacts 11 | 12 | -------------------------------------------------------------------------------- /polygon/erc721a-implementation/hardhat.config.js: -------------------------------------------------------------------------------- 1 | require("@nomicfoundation/hardhat-toolbox"); 2 | require("dotenv").config(); 3 | 4 | /** @type import('hardhat/config').HardhatUserConfig */ 5 | module.exports = { 6 | solidity: { 7 | version: "0.8.17", 8 | settings: { 9 | optimizer: { 10 | enabled: true, 11 | runs: 200 12 | } 13 | } 14 | }, 15 | networks: { 16 | hardhat: { 17 | }, 18 | mumbai: { 19 | url: process.env.RPC_URL, 20 | accounts: [process.env.PRIVATE_KEY] 21 | } 22 | }, 23 | }; -------------------------------------------------------------------------------- /polygon/erc721a-implementation/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "hardhat-project", 3 | "devDependencies": { 4 | "@nomicfoundation/hardhat-toolbox": "^2.0.0", 5 | "hardhat": "^2.12.1" 6 | }, 7 | "dependencies": { 8 | "dotenv": "^16.0.3" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /polygon/polygon-ethers/.env.example: -------------------------------------------------------------------------------- 1 | QUICKNODE_HTTP_ENDPOINT= 2 | PRIVATE_KEY= -------------------------------------------------------------------------------- /polygon/polygon-ethers/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .DS_Store 3 | .env -------------------------------------------------------------------------------- /polygon/polygon-ethers/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "mintwithethers", 3 | "version": "1.0.0", 4 | "description": "How to mint an NFT on Polygon with Ethers", 5 | "main": "index.js", 6 | "type": "module", 7 | "scripts": { 8 | "mint": "node mint.js" 9 | }, 10 | "keywords": [ "QuickNode", "Polygon", "Ethers" ], 11 | "license": "MIT", 12 | "devDependencies": { 13 | "dotenv": "^16.0.3", 14 | "ethers": "^5.7.2" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /polygon/polygon-truffle/.gitignore: -------------------------------------------------------------------------------- 1 | .secret 2 | node_modules 3 | build 4 | .DS_Store 5 | .env -------------------------------------------------------------------------------- /polygon/polygon-truffle/contracts/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/polygon/polygon-truffle/contracts/.gitkeep -------------------------------------------------------------------------------- /polygon/polygon-truffle/migrations/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/polygon/polygon-truffle/migrations/.gitkeep -------------------------------------------------------------------------------- /polygon/polygon-truffle/migrations/2_deploy_migration.js: -------------------------------------------------------------------------------- 1 | // migrations/2_deploy_migration.js 2 | 3 | var factoryContract = artifacts.require("FactoryERC1155"); 4 | 5 | module.exports = function(deployer) { 6 | deployer.deploy(factoryContract); 7 | } -------------------------------------------------------------------------------- /polygon/polygon-truffle/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "devDependencies": { 3 | "@openzeppelin/contracts": "^4.7.3", 4 | "@truffle/hdwallet-provider": "^2.1.0", 5 | "truffle-plugin-verify": "^0.5.31" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /polygon/polygon-truffle/test/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/polygon/polygon-truffle/test/.gitkeep -------------------------------------------------------------------------------- /sample-dapps/aml-and-cft-compliant-dapp/foundry/.env.sample: -------------------------------------------------------------------------------- 1 | BASE_RPC_URL= 2 | BASESCAN_API_KEY= -------------------------------------------------------------------------------- /sample-dapps/aml-and-cft-compliant-dapp/foundry/.gitignore: -------------------------------------------------------------------------------- 1 | # Compiler files 2 | cache/ 3 | out/ 4 | 5 | # Ignores development broadcast logs 6 | !/broadcast 7 | /broadcast/*/31337/ 8 | /broadcast/**/dry-run/ 9 | 10 | # Docs 11 | docs/ 12 | 13 | # Dotenv file 14 | .env 15 | -------------------------------------------------------------------------------- /sample-dapps/aml-and-cft-compliant-dapp/foundry/.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "lib/forge-std"] 2 | path = lib/forge-std 3 | url = https://github.com/foundry-rs/forge-std 4 | [submodule "lib/foundry-chainlink-toolkit"] 5 | path = lib/foundry-chainlink-toolkit 6 | url = https://github.com/smartcontractkit/foundry-chainlink-toolkit 7 | -------------------------------------------------------------------------------- /sample-dapps/aml-and-cft-compliant-dapp/foundry/foundry.toml: -------------------------------------------------------------------------------- 1 | [profile.default] 2 | src = "src" 3 | out = "out" 4 | libs = ["lib"] 5 | 6 | [rpc_endpoints] 7 | base = "${BASE_RPC_URL}" 8 | 9 | [etherscan] 10 | base = { key = "${BASESCAN_API_KEY}", url = "https://api.basescan.org/api" } 11 | 12 | # See more config options https://github.com/foundry-rs/foundry/blob/master/crates/config/README.md#all-options -------------------------------------------------------------------------------- /sample-dapps/aml-and-cft-compliant-dapp/next-app/.env.sample: -------------------------------------------------------------------------------- 1 | WALLETCONNECT_PROJECT_ID= 2 | PRIVATE_KEY= 3 | QUICKNODE_ENDPOINT= 4 | CONTRACT_ADDRESS= 5 | SUBSCRIPTION_ID= -------------------------------------------------------------------------------- /sample-dapps/aml-and-cft-compliant-dapp/next-app/next.config.ts: -------------------------------------------------------------------------------- 1 | import type { NextConfig } from "next"; 2 | 3 | const nextConfig: NextConfig = { 4 | webpack: (config, { isServer }) => { 5 | // Only apply this on the server-side bundle 6 | if (isServer) { 7 | // Mark these modules as external so webpack doesn't try to bundle them 8 | config.externals.push( 9 | "@trufflesuite/uws-js-unofficial", 10 | "ganache", 11 | "@chainlink/functions-toolkit" 12 | ); 13 | } 14 | 15 | return config; 16 | }, 17 | }; 18 | 19 | export default nextConfig; 20 | -------------------------------------------------------------------------------- /sample-dapps/aml-and-cft-compliant-dapp/next-app/public/file.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /sample-dapps/aml-and-cft-compliant-dapp/next-app/public/vercel.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /sample-dapps/aml-and-cft-compliant-dapp/next-app/public/window.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /sample-dapps/aml-and-cft-compliant-dapp/next-app/src/app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/sample-dapps/aml-and-cft-compliant-dapp/next-app/src/app/favicon.ico -------------------------------------------------------------------------------- /sample-dapps/aml-and-cft-compliant-dapp/next-app/src/app/layout.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import "@/app/globals.css"; 3 | import "@mantine/core/styles.css"; 4 | 5 | export default function RootLayout({ 6 | children, 7 | }: { 8 | children: React.ReactNode; 9 | }) { 10 | return ( 11 | 12 | {children} 13 | 14 | ); 15 | } 16 | -------------------------------------------------------------------------------- /sample-dapps/aml-and-cft-compliant-dapp/next-app/src/app/page.tsx: -------------------------------------------------------------------------------- 1 | 'use client' 2 | 3 | import React from 'react'; 4 | import { HomePage } from "@/components/HomePage"; 5 | import { Providers } from "@/components/Providers"; 6 | 7 | export default function Page() { 8 | return ( 9 | 10 | 11 | 12 | ); 13 | } -------------------------------------------------------------------------------- /sample-dapps/aml-and-cft-compliant-dapp/public/app-overview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/sample-dapps/aml-and-cft-compliant-dapp/public/app-overview.png -------------------------------------------------------------------------------- /sample-dapps/bitcoin-transaction-report-generator/.env.example: -------------------------------------------------------------------------------- 1 | VITE_QUICKNODE_ENDPOINT = "YOUR_QUICKNODE_BITCOIN_ENDPOINT_URL" -------------------------------------------------------------------------------- /sample-dapps/bitcoin-transaction-report-generator/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Bitcoin Transaction Report Generator by QuickNode Blockbook 8 | 9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /sample-dapps/bitcoin-transaction-report-generator/postcss.config.js: -------------------------------------------------------------------------------- 1 | export default { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /sample-dapps/bitcoin-transaction-report-generator/public/demo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/sample-dapps/bitcoin-transaction-report-generator/public/demo.png -------------------------------------------------------------------------------- /sample-dapps/bitcoin-transaction-report-generator/src/index.css: -------------------------------------------------------------------------------- 1 | /* src/index.css */ 2 | @tailwind base; 3 | @tailwind components; 4 | @tailwind utilities; -------------------------------------------------------------------------------- /sample-dapps/bitcoin-transaction-report-generator/src/main.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import ReactDOM from 'react-dom/client' 3 | import App from './App.tsx' 4 | import './index.css' 5 | 6 | ReactDOM.createRoot(document.getElementById('root')!).render( 7 | 8 | 9 | , 10 | ) 11 | -------------------------------------------------------------------------------- /sample-dapps/bitcoin-transaction-report-generator/src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /sample-dapps/bitcoin-transaction-report-generator/tailwind.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('tailwindcss').Config} */ 2 | export default { 3 | content: ["./index.html", "./src/**/*.{js,jsx,ts,tsx}"], 4 | theme: { 5 | extend: {}, 6 | }, 7 | plugins: [], 8 | }; 9 | 10 | -------------------------------------------------------------------------------- /sample-dapps/bitcoin-transaction-report-generator/tsconfig.node.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "composite": true, 4 | "skipLibCheck": true, 5 | "module": "ESNext", 6 | "moduleResolution": "bundler", 7 | "allowSyntheticDefaultImports": true, 8 | "strict": true 9 | }, 10 | "include": ["vite.config.ts"] 11 | } 12 | -------------------------------------------------------------------------------- /sample-dapps/bitcoin-transaction-report-generator/vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite' 2 | import react from '@vitejs/plugin-react' 3 | 4 | // https://vitejs.dev/config/ 5 | export default defineConfig({ 6 | plugins: [react()], 7 | }) 8 | -------------------------------------------------------------------------------- /sample-dapps/coinbase-x402/.env.local: -------------------------------------------------------------------------------- 1 | # Wallet Address for receiving payments 2 | WALLET_ADDRESS=INPUT_WALLET_ADDRESS_HERE 3 | 4 | # Environment 5 | NODE_ENV=development 6 | 7 | # Server port (default: 4021) 8 | PORT=4021 -------------------------------------------------------------------------------- /sample-dapps/coinbase-x402/utils/log.js: -------------------------------------------------------------------------------- 1 | export function log(message, level = "info", error = null) { 2 | // Skip logging in production unless it's an error 3 | if (process.env.NODE_ENV === "production" && level !== "error") return; 4 | 5 | const timestamp = new Date().toISOString(); 6 | let logMessage = `[${timestamp}] [${level}] ${message}`; 7 | 8 | if (error) { 9 | logMessage += `\n${error.stack || error}`; 10 | } 11 | 12 | console.log(logMessage); 13 | } -------------------------------------------------------------------------------- /sample-dapps/crypto-portfolio-tracker-with-the-crypto-market-data-api/.env.sample: -------------------------------------------------------------------------------- 1 | VITE_QUICKNODE_ENDPOINT="YOUR_QUICKNODE_ENDPOINT" -------------------------------------------------------------------------------- /sample-dapps/crypto-portfolio-tracker-with-the-crypto-market-data-api/.eslintrc.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | env: { browser: true, es2020: true }, 4 | extends: [ 5 | 'eslint:recommended', 6 | 'plugin:@typescript-eslint/recommended', 7 | 'plugin:react-hooks/recommended', 8 | ], 9 | ignorePatterns: ['dist', '.eslintrc.cjs'], 10 | parser: '@typescript-eslint/parser', 11 | plugins: ['react-refresh'], 12 | rules: { 13 | 'react-refresh/only-export-components': [ 14 | 'warn', 15 | { allowConstantExport: true }, 16 | ], 17 | }, 18 | } 19 | -------------------------------------------------------------------------------- /sample-dapps/crypto-portfolio-tracker-with-the-crypto-market-data-api/.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | dist 12 | dist-ssr 13 | *.local 14 | 15 | # Editor directories and files 16 | .vscode/* 17 | !.vscode/extensions.json 18 | .idea 19 | .DS_Store 20 | *.suo 21 | *.ntvs* 22 | *.njsproj 23 | *.sln 24 | *.sw? 25 | 26 | # Local environment variables 27 | .env 28 | -------------------------------------------------------------------------------- /sample-dapps/crypto-portfolio-tracker-with-the-crypto-market-data-api/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Crypto Portfolio Tracker 8 | 9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /sample-dapps/crypto-portfolio-tracker-with-the-crypto-market-data-api/postcss.config.js: -------------------------------------------------------------------------------- 1 | export default { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /sample-dapps/crypto-portfolio-tracker-with-the-crypto-market-data-api/public/overview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/sample-dapps/crypto-portfolio-tracker-with-the-crypto-market-data-api/public/overview.png -------------------------------------------------------------------------------- /sample-dapps/crypto-portfolio-tracker-with-the-crypto-market-data-api/src/components/Header.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | const Header: React.FC = () => { 4 | return ( 5 |
6 |

Crypto Portfolio Tracker

7 |
8 | ); 9 | }; 10 | 11 | export default Header; 12 | -------------------------------------------------------------------------------- /sample-dapps/crypto-portfolio-tracker-with-the-crypto-market-data-api/src/index.css: -------------------------------------------------------------------------------- 1 | /* ./src/index.css */ 2 | @tailwind base; 3 | @tailwind components; 4 | @tailwind utilities; -------------------------------------------------------------------------------- /sample-dapps/crypto-portfolio-tracker-with-the-crypto-market-data-api/src/main.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import ReactDOM from 'react-dom/client' 3 | import App from './App.tsx' 4 | import './index.css' 5 | 6 | ReactDOM.createRoot(document.getElementById('root')!).render( 7 | 8 | 9 | , 10 | ) 11 | -------------------------------------------------------------------------------- /sample-dapps/crypto-portfolio-tracker-with-the-crypto-market-data-api/src/utils/colorPalette.ts: -------------------------------------------------------------------------------- 1 | export const colorPalette = [ 2 | "#FF6384", // Red 3 | "#36A2EB", // Blue 4 | "#FF9F40", // Orange 5 | "#9966FF", // Purple 6 | "#4BC0C0", // Teal 7 | "#FFCE56", // Yellow 8 | ]; 9 | -------------------------------------------------------------------------------- /sample-dapps/crypto-portfolio-tracker-with-the-crypto-market-data-api/src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /sample-dapps/crypto-portfolio-tracker-with-the-crypto-market-data-api/tailwind.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('tailwindcss').Config} */ 2 | export default { 3 | content: ["./index.html", "./src/**/*.{js,ts,jsx,tsx}"], 4 | theme: { 5 | extend: {}, 6 | }, 7 | plugins: [], 8 | }; 9 | 10 | -------------------------------------------------------------------------------- /sample-dapps/crypto-portfolio-tracker-with-the-crypto-market-data-api/tsconfig.node.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "composite": true, 4 | "skipLibCheck": true, 5 | "module": "ESNext", 6 | "moduleResolution": "bundler", 7 | "allowSyntheticDefaultImports": true, 8 | "strict": true 9 | }, 10 | "include": ["vite.config.ts"] 11 | } 12 | -------------------------------------------------------------------------------- /sample-dapps/crypto-portfolio-tracker-with-the-crypto-market-data-api/vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite' 2 | import react from '@vitejs/plugin-react' 3 | 4 | // https://vitejs.dev/config/ 5 | export default defineConfig({ 6 | plugins: [react()], 7 | }) 8 | -------------------------------------------------------------------------------- /sample-dapps/ethereum-aave-liquidation-tracker/.env.example: -------------------------------------------------------------------------------- 1 | VITE_SUPABASE_URL = YOUR_SUPABASE_URL 2 | VITE_SUPABASE_ANON_KEY = YOUR_SUPABASE_ANON_KEY -------------------------------------------------------------------------------- /sample-dapps/ethereum-aave-liquidation-tracker/.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | dist 12 | dist-ssr 13 | *.local 14 | 15 | # Environment variables 16 | .env 17 | .env.development 18 | .env.local 19 | .env.production 20 | 21 | # Editor directories and files 22 | .vscode/* 23 | !.vscode/extensions.json 24 | .idea 25 | .DS_Store 26 | *.suo 27 | *.ntvs* 28 | *.njsproj 29 | *.sln 30 | *.sw? 31 | -------------------------------------------------------------------------------- /sample-dapps/ethereum-aave-liquidation-tracker/components.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://ui.shadcn.com/schema.json", 3 | "style": "new-york", 4 | "rsc": false, 5 | "tsx": true, 6 | "tailwind": { 7 | "config": "tailwind.config.js", 8 | "css": "src/index.css", 9 | "baseColor": "neutral", 10 | "cssVariables": true, 11 | "prefix": "" 12 | }, 13 | "aliases": { 14 | "components": "@/components", 15 | "utils": "@/lib/utils", 16 | "ui": "@/components/ui", 17 | "lib": "@/lib", 18 | "hooks": "@/hooks" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /sample-dapps/ethereum-aave-liquidation-tracker/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Aave V3 Liquidation Tracker 8 | 9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /sample-dapps/ethereum-aave-liquidation-tracker/postcss.config.js: -------------------------------------------------------------------------------- 1 | export default { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | }; 7 | -------------------------------------------------------------------------------- /sample-dapps/ethereum-aave-liquidation-tracker/public/app-icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /sample-dapps/ethereum-aave-liquidation-tracker/public/screenshots/liquidations-table.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/sample-dapps/ethereum-aave-liquidation-tracker/public/screenshots/liquidations-table.png -------------------------------------------------------------------------------- /sample-dapps/ethereum-aave-liquidation-tracker/public/screenshots/overview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/sample-dapps/ethereum-aave-liquidation-tracker/public/screenshots/overview.png -------------------------------------------------------------------------------- /sample-dapps/ethereum-aave-liquidation-tracker/src/App.css: -------------------------------------------------------------------------------- 1 | #root { 2 | max-width: 1280px; 3 | margin: 0 auto; 4 | padding: 2rem; 5 | text-align: center; 6 | } 7 | -------------------------------------------------------------------------------- /sample-dapps/ethereum-aave-liquidation-tracker/src/components/ui/aspect-ratio.tsx: -------------------------------------------------------------------------------- 1 | import * as AspectRatioPrimitive from '@radix-ui/react-aspect-ratio'; 2 | 3 | const AspectRatio = AspectRatioPrimitive.Root; 4 | 5 | export { AspectRatio }; 6 | -------------------------------------------------------------------------------- /sample-dapps/ethereum-aave-liquidation-tracker/src/components/ui/collapsible.tsx: -------------------------------------------------------------------------------- 1 | import * as CollapsiblePrimitive from '@radix-ui/react-collapsible'; 2 | 3 | const Collapsible = CollapsiblePrimitive.Root; 4 | 5 | const CollapsibleTrigger = CollapsiblePrimitive.CollapsibleTrigger; 6 | 7 | const CollapsibleContent = CollapsiblePrimitive.CollapsibleContent; 8 | 9 | export { Collapsible, CollapsibleTrigger, CollapsibleContent }; 10 | -------------------------------------------------------------------------------- /sample-dapps/ethereum-aave-liquidation-tracker/src/components/ui/skeleton.tsx: -------------------------------------------------------------------------------- 1 | import { cn } from '@/lib/utils'; 2 | 3 | function Skeleton({ 4 | className, 5 | ...props 6 | }: React.HTMLAttributes) { 7 | return ( 8 |
12 | ); 13 | } 14 | 15 | export { Skeleton }; 16 | -------------------------------------------------------------------------------- /sample-dapps/ethereum-aave-liquidation-tracker/src/lib/supabase.ts: -------------------------------------------------------------------------------- 1 | import { createClient } from '@supabase/supabase-js'; 2 | 3 | const supabaseUrl = import.meta.env.VITE_SUPABASE_URL; 4 | const supabaseKey = import.meta.env.VITE_SUPABASE_ANON_KEY; 5 | 6 | if (!supabaseUrl || !supabaseKey) { 7 | throw new Error('Missing Supabase credentials'); 8 | } 9 | 10 | export const supabase = createClient(supabaseUrl, supabaseKey); -------------------------------------------------------------------------------- /sample-dapps/ethereum-aave-liquidation-tracker/src/main.tsx: -------------------------------------------------------------------------------- 1 | import { StrictMode } from 'react'; 2 | import { createRoot } from 'react-dom/client'; 3 | import App from './App.tsx'; 4 | import './index.css'; 5 | 6 | createRoot(document.getElementById('root')!).render( 7 | 8 | 9 | 10 | ); 11 | -------------------------------------------------------------------------------- /sample-dapps/ethereum-aave-liquidation-tracker/src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /sample-dapps/ethereum-aave-liquidation-tracker/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "files": [], 3 | "references": [ 4 | { "path": "./tsconfig.app.json" }, 5 | { "path": "./tsconfig.node.json" } 6 | ], 7 | "compilerOptions": { 8 | "baseUrl": ".", 9 | "paths": { 10 | "@/*": ["./src/*"] 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /sample-dapps/ethereum-aave-liquidation-tracker/vite.config.ts: -------------------------------------------------------------------------------- 1 | import path from 'path'; 2 | import react from '@vitejs/plugin-react'; 3 | import { defineConfig } from 'vite'; 4 | 5 | export default defineConfig({ 6 | plugins: [react()], 7 | resolve: { 8 | alias: { 9 | '@': path.resolve(__dirname, './src'), 10 | }, 11 | }, 12 | optimizeDeps: { 13 | exclude: ['lucide-react'], 14 | }, 15 | }); 16 | -------------------------------------------------------------------------------- /sample-dapps/ethereum-dex-trade-performance-analyzer/.env.example: -------------------------------------------------------------------------------- 1 | VITE_QUICKNODE_ENDPOINT = "YOUR_QUICKNODE_ETHEREUM_ENDPOINT_URL" -------------------------------------------------------------------------------- /sample-dapps/ethereum-dex-trade-performance-analyzer/.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | dist 12 | dist-ssr 13 | *.local 14 | .env 15 | 16 | # Editor directories and files 17 | .vscode/* 18 | !.vscode/extensions.json 19 | .idea 20 | .DS_Store 21 | *.suo 22 | *.ntvs* 23 | *.njsproj 24 | *.sln 25 | *.sw? 26 | -------------------------------------------------------------------------------- /sample-dapps/ethereum-dex-trade-performance-analyzer/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | DEX Trade Performance Analyzer 8 | 9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /sample-dapps/ethereum-dex-trade-performance-analyzer/postcss.config.js: -------------------------------------------------------------------------------- 1 | export default { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /sample-dapps/ethereum-dex-trade-performance-analyzer/public/app-overview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/sample-dapps/ethereum-dex-trade-performance-analyzer/public/app-overview.png -------------------------------------------------------------------------------- /sample-dapps/ethereum-dex-trade-performance-analyzer/public/app-token-details.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/sample-dapps/ethereum-dex-trade-performance-analyzer/public/app-token-details.png -------------------------------------------------------------------------------- /sample-dapps/ethereum-dex-trade-performance-analyzer/src/index.css: -------------------------------------------------------------------------------- 1 | @import 'tailwindcss/base'; 2 | @import 'tailwindcss/components'; 3 | @import 'tailwindcss/utilities'; 4 | -------------------------------------------------------------------------------- /sample-dapps/ethereum-dex-trade-performance-analyzer/src/main.tsx: -------------------------------------------------------------------------------- 1 | import { StrictMode } from 'react' 2 | import { createRoot } from 'react-dom/client' 3 | import App from './App.tsx' 4 | import './index.css' 5 | 6 | createRoot(document.getElementById('root')!).render( 7 | 8 | 9 | , 10 | ) 11 | -------------------------------------------------------------------------------- /sample-dapps/ethereum-dex-trade-performance-analyzer/src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /sample-dapps/ethereum-dex-trade-performance-analyzer/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "files": [], 3 | "references": [ 4 | { "path": "./tsconfig.app.json" }, 5 | { "path": "./tsconfig.node.json" } 6 | ] 7 | } 8 | -------------------------------------------------------------------------------- /sample-dapps/ethereum-dex-trade-performance-analyzer/vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite' 2 | import react from '@vitejs/plugin-react' 3 | 4 | // https://vitejs.dev/config/ 5 | export default defineConfig({ 6 | plugins: [react()], 7 | }) 8 | -------------------------------------------------------------------------------- /sample-dapps/ethereum-transaction-report-generator/.env.example: -------------------------------------------------------------------------------- 1 | VITE_QUICKNODE_ENDPOINT = "YOUR_QUICKNODE_ETHEREUM_ENDPOINT_URL" -------------------------------------------------------------------------------- /sample-dapps/ethereum-transaction-report-generator/.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | dist 12 | dist-ssr 13 | *.local 14 | .env 15 | 16 | # Editor directories and files 17 | .vscode/* 18 | !.vscode/extensions.json 19 | .idea 20 | .DS_Store 21 | *.suo 22 | *.ntvs* 23 | *.njsproj 24 | *.sln 25 | *.sw? 26 | -------------------------------------------------------------------------------- /sample-dapps/ethereum-transaction-report-generator/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Ethereum Transaction Report Generator by QuickNode Blockbook 8 | 9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /sample-dapps/ethereum-transaction-report-generator/postcss.config.js: -------------------------------------------------------------------------------- 1 | export default { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /sample-dapps/ethereum-transaction-report-generator/public/demo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/sample-dapps/ethereum-transaction-report-generator/public/demo.png -------------------------------------------------------------------------------- /sample-dapps/ethereum-transaction-report-generator/src/index.css: -------------------------------------------------------------------------------- 1 | /* src/index.css */ 2 | @tailwind base; 3 | @tailwind components; 4 | @tailwind utilities; -------------------------------------------------------------------------------- /sample-dapps/ethereum-transaction-report-generator/src/main.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import ReactDOM from 'react-dom/client' 3 | import App from './App.tsx' 4 | import './index.css' 5 | 6 | ReactDOM.createRoot(document.getElementById('root')!).render( 7 | 8 | 9 | , 10 | ) 11 | -------------------------------------------------------------------------------- /sample-dapps/ethereum-transaction-report-generator/src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /sample-dapps/ethereum-transaction-report-generator/tailwind.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('tailwindcss').Config} */ 2 | export default { 3 | content: ["./index.html", "./src/**/*.{js,jsx,ts,tsx}"], 4 | theme: { 5 | extend: {}, 6 | }, 7 | plugins: [], 8 | }; 9 | 10 | -------------------------------------------------------------------------------- /sample-dapps/ethereum-transaction-report-generator/tsconfig.node.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "composite": true, 4 | "skipLibCheck": true, 5 | "module": "ESNext", 6 | "moduleResolution": "bundler", 7 | "allowSyntheticDefaultImports": true, 8 | "strict": true 9 | }, 10 | "include": ["vite.config.ts"] 11 | } 12 | -------------------------------------------------------------------------------- /sample-dapps/ethereum-transaction-report-generator/vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite' 2 | import react from '@vitejs/plugin-react' 3 | 4 | // https://vitejs.dev/config/ 5 | export default defineConfig({ 6 | plugins: [react()], 7 | }) 8 | -------------------------------------------------------------------------------- /sample-dapps/ethereum-wallet-explorer/.env.example: -------------------------------------------------------------------------------- 1 | # Rename this file to .env.local before running the app 2 | ETHEREUM_RPC_URL=https://example.ethereum-mainnet.quiknode.pro/123456/ -------------------------------------------------------------------------------- /sample-dapps/ethereum-wallet-explorer/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "next/core-web-vitals" 3 | } 4 | -------------------------------------------------------------------------------- /sample-dapps/ethereum-wallet-explorer/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | .yarn/install-state.gz 8 | 9 | # testing 10 | /coverage 11 | 12 | # next.js 13 | /.next/ 14 | /out/ 15 | 16 | # production 17 | /build 18 | 19 | # misc 20 | .DS_Store 21 | *.pem 22 | 23 | # debug 24 | npm-debug.log* 25 | yarn-debug.log* 26 | yarn-error.log* 27 | 28 | # local env files 29 | .env*.local 30 | 31 | # vercel 32 | .vercel 33 | 34 | # typescript 35 | *.tsbuildinfo 36 | next-env.d.ts 37 | -------------------------------------------------------------------------------- /sample-dapps/ethereum-wallet-explorer/components.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://ui.shadcn.com/schema.json", 3 | "style": "default", 4 | "rsc": true, 5 | "tsx": true, 6 | "tailwind": { 7 | "config": "tailwind.config.ts", 8 | "css": "src/app/globals.css", 9 | "baseColor": "slate", 10 | "cssVariables": true, 11 | "prefix": "" 12 | }, 13 | "aliases": { 14 | "components": "@/components", 15 | "utils": "@/lib/utils" 16 | } 17 | } -------------------------------------------------------------------------------- /sample-dapps/ethereum-wallet-explorer/next.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | const nextConfig = { 3 | images: { 4 | remotePatterns: [ 5 | { 6 | protocol: "https", 7 | hostname: "**", 8 | }, 9 | ], 10 | }, 11 | eslint: { 12 | ignoreDuringBuilds: true, 13 | } 14 | }; 15 | 16 | export default nextConfig; 17 | -------------------------------------------------------------------------------- /sample-dapps/ethereum-wallet-explorer/postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | }; 7 | -------------------------------------------------------------------------------- /sample-dapps/ethereum-wallet-explorer/public/demo1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/sample-dapps/ethereum-wallet-explorer/public/demo1.png -------------------------------------------------------------------------------- /sample-dapps/ethereum-wallet-explorer/public/demo2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/sample-dapps/ethereum-wallet-explorer/public/demo2.png -------------------------------------------------------------------------------- /sample-dapps/ethereum-wallet-explorer/src/app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/sample-dapps/ethereum-wallet-explorer/src/app/favicon.ico -------------------------------------------------------------------------------- /sample-dapps/ethereum-wallet-explorer/src/components/explorer/tokens/types.ts: -------------------------------------------------------------------------------- 1 | 2 | export interface TransactionsResponse { 3 | txIds: []; 4 | } 5 | -------------------------------------------------------------------------------- /sample-dapps/ethereum-wallet-explorer/src/components/ui/skeleton.tsx: -------------------------------------------------------------------------------- 1 | import { cn } from "@/lib/utils" 2 | 3 | function Skeleton({ 4 | className, 5 | ...props 6 | }: React.HTMLAttributes) { 7 | return ( 8 |
12 | ) 13 | } 14 | 15 | export { Skeleton } 16 | -------------------------------------------------------------------------------- /sample-dapps/ethereum-wallet-explorer/src/lib/utils.ts: -------------------------------------------------------------------------------- 1 | import { type ClassValue, clsx } from "clsx" 2 | import { twMerge } from "tailwind-merge" 3 | 4 | export function cn(...inputs: ClassValue[]) { 5 | return twMerge(clsx(inputs)) 6 | } 7 | -------------------------------------------------------------------------------- /sample-dapps/evm-token-factory/.env.example: -------------------------------------------------------------------------------- 1 | NEXT_PUBLIC_PROJECT_ID=your_project_id_here 2 | NEXT_PUBLIC_MAINNET_RPC_URL=your_mainnet_rpc_url_here 3 | NEXT_PUBLIC_HOLESKY_RPC_URL=your_holesky_rpc_url_here 4 | NEXT_PUBLIC_SEPOLIA_RPC_URL=your_sepolia_rpc_url_here -------------------------------------------------------------------------------- /sample-dapps/evm-token-factory/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "next/core-web-vitals" 3 | } 4 | -------------------------------------------------------------------------------- /sample-dapps/evm-token-factory/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | .yarn/install-state.gz 8 | 9 | # testing 10 | /coverage 11 | 12 | # next.js 13 | /.next/ 14 | /out/ 15 | 16 | # production 17 | /build 18 | 19 | # misc 20 | .DS_Store 21 | *.pem 22 | 23 | # debug 24 | npm-debug.log* 25 | yarn-debug.log* 26 | yarn-error.log* 27 | 28 | # local env files 29 | .env*.local 30 | 31 | # vercel 32 | .vercel 33 | 34 | # typescript 35 | *.tsbuildinfo 36 | next-env.d.ts 37 | -------------------------------------------------------------------------------- /sample-dapps/evm-token-factory/app/components/Connect.tsx: -------------------------------------------------------------------------------- 1 | export default function ConnectButton() { 2 | return 3 | } -------------------------------------------------------------------------------- /sample-dapps/evm-token-factory/app/components/Footer.tsx: -------------------------------------------------------------------------------- 1 | export default function Footer() { 2 | return ( 3 | 6 | ); 7 | } 8 | -------------------------------------------------------------------------------- /sample-dapps/evm-token-factory/app/components/Navbar.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ConnectButton from './Connect' 3 | 4 | function Navbar() { 5 | 6 | return ( 7 | 12 | ); 13 | } 14 | 15 | export default Navbar; 16 | -------------------------------------------------------------------------------- /sample-dapps/evm-token-factory/app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/sample-dapps/evm-token-factory/app/favicon.ico -------------------------------------------------------------------------------- /sample-dapps/evm-token-factory/app/globals.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | 5 | :root { 6 | --foreground-rgb: 0, 0, 0; 7 | --background-start-rgb: 214, 219, 220; 8 | --background-end-rgb: 255, 255, 255; 9 | } 10 | 11 | body { 12 | color: rgb(var(--foreground-rgb)); 13 | background: linear-gradient( 14 | to bottom, 15 | transparent, 16 | rgb(var(--background-end-rgb)) 17 | ) 18 | rgb(var(--background-start-rgb)); 19 | } 20 | 21 | @layer utilities { 22 | .text-balance { 23 | text-wrap: balance; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /sample-dapps/evm-token-factory/contracts/.gitignore: -------------------------------------------------------------------------------- 1 | # Compiler files 2 | cache/ 3 | out/ 4 | 5 | # Ignores development broadcast logs 6 | !/broadcast 7 | /broadcast/*/31337/ 8 | /broadcast/**/dry-run/ 9 | 10 | # Docs 11 | docs/ 12 | 13 | # Dotenv file 14 | .env 15 | -------------------------------------------------------------------------------- /sample-dapps/evm-token-factory/contracts/foundry.toml: -------------------------------------------------------------------------------- 1 | [profile.default] 2 | src = "src" 3 | out = "out" 4 | libs = ["lib"] 5 | 6 | # See more config options https://github.com/foundry-rs/foundry/blob/master/crates/config/README.md#all-options 7 | -------------------------------------------------------------------------------- /sample-dapps/evm-token-factory/contracts/remappings.txt: -------------------------------------------------------------------------------- 1 | @openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/ 2 | -------------------------------------------------------------------------------- /sample-dapps/evm-token-factory/contracts/script/Counter.s.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: UNLICENSED 2 | pragma solidity ^0.8.13; 3 | 4 | import {Script, console} from "forge-std/Script.sol"; 5 | 6 | contract CounterScript is Script { 7 | function setUp() public {} 8 | 9 | function run() public { 10 | vm.broadcast(); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /sample-dapps/evm-token-factory/contracts/src/Counter.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: UNLICENSED 2 | pragma solidity ^0.8.13; 3 | 4 | contract Counter { 5 | uint256 public number; 6 | 7 | function setNumber(uint256 newNumber) public { 8 | number = newNumber; 9 | } 10 | 11 | function increment() public { 12 | number++; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /sample-dapps/evm-token-factory/contracts/src/Token.sol: -------------------------------------------------------------------------------- 1 | // SPDX-License-Identifier: MIT 2 | pragma solidity ^0.8.19; 3 | 4 | import "openzeppelin-contracts/contracts/token/ERC20/ERC20.sol"; 5 | import "openzeppelin-contracts/contracts/access/Ownable.sol"; 6 | 7 | contract Token is ERC20, Ownable { 8 | constructor(address initialOwner, uint256 initialSupply, string memory 9 | name, string memory symbol) 10 | ERC20(name, symbol) 11 | Ownable(initialOwner) 12 | { 13 | _transferOwnership(initialOwner); 14 | _mint(initialOwner, initialSupply * 10 ** 18); 15 | 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /sample-dapps/evm-token-factory/next.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | const nextConfig = { 3 | webpack: config => { 4 | config.externals.push('pino-pretty', 'lokijs', 'encoding') 5 | return config 6 | } 7 | } 8 | export default nextConfig; 9 | -------------------------------------------------------------------------------- /sample-dapps/evm-token-factory/postcss.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('postcss-load-config').Config} */ 2 | const config = { 3 | plugins: { 4 | tailwindcss: {}, 5 | }, 6 | }; 7 | 8 | export default config; 9 | -------------------------------------------------------------------------------- /sample-dapps/evm-token-factory/public/preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/sample-dapps/evm-token-factory/public/preview.png -------------------------------------------------------------------------------- /sample-dapps/evm-token-factory/public/preview2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/sample-dapps/evm-token-factory/public/preview2.png -------------------------------------------------------------------------------- /sample-dapps/solana-action-blinker/.env.example: -------------------------------------------------------------------------------- 1 | QN_ENDPOINT=https://example.solana-mainnet.quiknode.pro/123456 2 | NEXT_PUBLIC_CLUSTER=mainnet-beta # mainnet-beta | devnet | testnet | local 3 | -------------------------------------------------------------------------------- /sample-dapps/solana-action-blinker/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "next/core-web-vitals" 3 | } 4 | -------------------------------------------------------------------------------- /sample-dapps/solana-action-blinker/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | .yarn/install-state.gz 8 | 9 | # testing 10 | /coverage 11 | 12 | # next.js 13 | /.next/ 14 | /out/ 15 | 16 | # production 17 | /build 18 | 19 | # misc 20 | .DS_Store 21 | *.pem 22 | 23 | # debug 24 | npm-debug.log* 25 | yarn-debug.log* 26 | yarn-error.log* 27 | 28 | # local env files 29 | .env*.local 30 | 31 | # vercel 32 | .vercel 33 | 34 | # typescript 35 | *.tsbuildinfo 36 | next-env.d.ts 37 | -------------------------------------------------------------------------------- /sample-dapps/solana-action-blinker/app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/sample-dapps/solana-action-blinker/app/favicon.ico -------------------------------------------------------------------------------- /sample-dapps/solana-action-blinker/app/page.tsx: -------------------------------------------------------------------------------- 1 | 'use client' 2 | 3 | import Blink from "@/components/Blink"; 4 | import { Toaster } from "sonner"; 5 | 6 | export default function Home() { 7 | return ( 8 |
9 | 10 | 11 |
12 | ); 13 | } 14 | -------------------------------------------------------------------------------- /sample-dapps/solana-action-blinker/components/Container.tsx: -------------------------------------------------------------------------------- 1 | const Container: React.FC<{ children: React.ReactNode }> = ({ children }) => { 2 | return ( 3 |
4 | {children} 5 |
6 | ); 7 | }; 8 | 9 | export default Container; -------------------------------------------------------------------------------- /sample-dapps/solana-action-blinker/components/ErrorMessage.tsx: -------------------------------------------------------------------------------- 1 | const ErrorMessage: React.FC<{ message: string }> = ({ message }) => { 2 | return ( 3 |
{message}
4 | ); 5 | } 6 | 7 | export default ErrorMessage; -------------------------------------------------------------------------------- /sample-dapps/solana-action-blinker/components/Spinner.tsx: -------------------------------------------------------------------------------- 1 | const Spinner = () => ( 2 | 3 | 4 | 5 | 6 | ); 7 | 8 | export default Spinner; -------------------------------------------------------------------------------- /sample-dapps/solana-action-blinker/next.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | const nextConfig = { 3 | images: { 4 | remotePatterns: [ 5 | { 6 | protocol: "https", 7 | hostname: "**", 8 | }, 9 | { 10 | protocol: "http", 11 | hostname: "localhost", 12 | } 13 | ], 14 | }, 15 | }; 16 | 17 | export default nextConfig; 18 | -------------------------------------------------------------------------------- /sample-dapps/solana-action-blinker/postcss.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('postcss-load-config').Config} */ 2 | const config = { 3 | plugins: { 4 | tailwindcss: {}, 5 | }, 6 | }; 7 | 8 | export default config; 9 | -------------------------------------------------------------------------------- /sample-dapps/solana-action-blinker/public/parsed-jup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/sample-dapps/solana-action-blinker/public/parsed-jup.png -------------------------------------------------------------------------------- /sample-dapps/solana-action-blinker/public/preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/sample-dapps/solana-action-blinker/public/preview.png -------------------------------------------------------------------------------- /sample-dapps/solana-action-blinker/public/qn-pixel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/sample-dapps/solana-action-blinker/public/qn-pixel.png -------------------------------------------------------------------------------- /sample-dapps/solana-action-blinker/utils/constants.ts: -------------------------------------------------------------------------------- 1 | import { Cluster, LAMPORTS_PER_SOL } from "@solana/web3.js"; 2 | 3 | type ClusterWithLocal = Cluster | 'local'; 4 | 5 | export const ACTIVE_CLUSTER = (process.env.NEXT_PUBLIC_CLUSTER || 'local') as ClusterWithLocal; 6 | export const MINIMUM_BALANCE = 0.05 * LAMPORTS_PER_SOL; -------------------------------------------------------------------------------- /sample-dapps/solana-action-blinker/utils/utils.ts: -------------------------------------------------------------------------------- 1 | import { Cluster } from "@solana/web3.js"; 2 | 3 | export const getExplorerUrl = (signature: string, cluster: Cluster) => { 4 | return `https://explorer.solana.com/tx/${signature}?cluster=${cluster}`; 5 | } 6 | export const shortenHash = (str:string) => { 7 | return `${str.slice(0, 4)}...${str.slice(-4)}`; 8 | } -------------------------------------------------------------------------------- /sample-dapps/solana-staking-ui/.env.example: -------------------------------------------------------------------------------- 1 | DEVNET_RPC_ENDPOINT=https://example.solana-devnet.quiknode.pro/12345/ 2 | MAINNET_RPC_ENDPOINT=https://example.solana-mainnet.quiknode.pro/12345/ 3 | NEXT_PUBLIC_NETWORK_ENV=mainnet 4 | NEXT_PUBLIC_VALIDATOR_ADDRESS=5s3vajJvaAbabQvxFdiMfg14y23b2jvK6K2Mw4PYcYK -------------------------------------------------------------------------------- /sample-dapps/solana-staking-ui/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "trailingComma": "none" 3 | } -------------------------------------------------------------------------------- /sample-dapps/solana-staking-ui/app/page.tsx: -------------------------------------------------------------------------------- 1 | "use client"; 2 | import { Flex } from "@radix-ui/themes"; 3 | import { StakingForm } from "@/components/stake/StakingForm"; 4 | import { Title } from "@/components/Title"; 5 | 6 | export default function Home() { 7 | return ( 8 | 17 | 18 | <StakingForm /> 19 | </Flex> 20 | ); 21 | } 22 | -------------------------------------------------------------------------------- /sample-dapps/solana-staking-ui/eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import { dirname } from "path"; 2 | import { fileURLToPath } from "url"; 3 | import { FlatCompat } from "@eslint/eslintrc"; 4 | 5 | const __filename = fileURLToPath(import.meta.url); 6 | const __dirname = dirname(__filename); 7 | 8 | const compat = new FlatCompat({ 9 | baseDirectory: __dirname, 10 | }); 11 | 12 | const eslintConfig = [ 13 | ...compat.extends("next/core-web-vitals", "next/typescript"), 14 | ]; 15 | 16 | export default eslintConfig; 17 | -------------------------------------------------------------------------------- /sample-dapps/solana-staking-ui/next.config.ts: -------------------------------------------------------------------------------- 1 | import type { NextConfig } from "next"; 2 | 3 | const nextConfig: NextConfig = { 4 | /* config options here */ 5 | }; 6 | 7 | export default nextConfig; 8 | -------------------------------------------------------------------------------- /sample-dapps/solana-staking-ui/postcss.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('postcss-load-config').Config} */ 2 | const config = { 3 | plugins: { 4 | tailwindcss: {}, 5 | }, 6 | }; 7 | 8 | export default config; 9 | -------------------------------------------------------------------------------- /sample-dapps/solana-staking-ui/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/sample-dapps/solana-staking-ui/public/favicon.ico -------------------------------------------------------------------------------- /sample-dapps/solana-staking-ui/public/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/sample-dapps/solana-staking-ui/public/favicon.png -------------------------------------------------------------------------------- /sample-dapps/solana-staking-ui/public/file.svg: -------------------------------------------------------------------------------- 1 | <svg fill="none" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M14.5 13.5V5.41a1 1 0 0 0-.3-.7L9.8.29A1 1 0 0 0 9.08 0H1.5v13.5A2.5 2.5 0 0 0 4 16h8a2.5 2.5 0 0 0 2.5-2.5m-1.5 0v-7H8v-5H3v12a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1M9.5 5V2.12L12.38 5zM5.13 5h-.62v1.25h2.12V5zm-.62 3h7.12v1.25H4.5zm.62 3h-.62v1.25h7.12V11z" clip-rule="evenodd" fill="#666" fill-rule="evenodd"/></svg> -------------------------------------------------------------------------------- /sample-dapps/solana-staking-ui/public/preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/sample-dapps/solana-staking-ui/public/preview.png -------------------------------------------------------------------------------- /sample-dapps/solana-staking-ui/public/vercel.svg: -------------------------------------------------------------------------------- 1 | <svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1155 1000"><path d="m577.3 0 577.4 1000H0z" fill="#fff"/></svg> -------------------------------------------------------------------------------- /sample-dapps/solana-staking-ui/public/window.svg: -------------------------------------------------------------------------------- 1 | <svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path fill-rule="evenodd" clip-rule="evenodd" d="M1.5 2.5h13v10a1 1 0 0 1-1 1h-11a1 1 0 0 1-1-1zM0 1h16v11.5a2.5 2.5 0 0 1-2.5 2.5h-11A2.5 2.5 0 0 1 0 12.5zm3.75 4.5a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5M7 4.75a.75.75 0 1 1-1.5 0 .75.75 0 0 1 1.5 0m1.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5" fill="#666"/></svg> -------------------------------------------------------------------------------- /sample-dapps/solana-staking-ui/tailwind.config.ts: -------------------------------------------------------------------------------- 1 | import type { Config } from "tailwindcss"; 2 | 3 | export default { 4 | content: [ 5 | "./pages/**/*.{js,ts,jsx,tsx,mdx}", 6 | "./components/**/*.{js,ts,jsx,tsx,mdx}", 7 | "./app/**/*.{js,ts,jsx,tsx,mdx}" 8 | ], 9 | theme: { 10 | extend: { 11 | colors: { 12 | background: "var(--background)", 13 | foreground: "var(--foreground)" 14 | } 15 | } 16 | }, 17 | plugins: [] 18 | } satisfies Config; 19 | -------------------------------------------------------------------------------- /sample-dapps/solana-staking-ui/utils/solana/address.ts: -------------------------------------------------------------------------------- 1 | export function shortenAddress(address: string) { 2 | return address.slice(0, 4) + "..." + address.slice(-4); 3 | } 4 | -------------------------------------------------------------------------------- /sample-dapps/solana-staking-ui/utils/solana/balance.ts: -------------------------------------------------------------------------------- 1 | import { 2 | Lamports, 3 | Rpc, 4 | stringifiedBigInt, 5 | StringifiedBigInt 6 | } from "@solana/kit"; 7 | import { SolanaRpcApi } from "@solana/kit"; 8 | import { Address } from "@solana/kit"; 9 | 10 | interface GetBalanceProps { 11 | rpc: Rpc<SolanaRpcApi>; 12 | address: Address; 13 | } 14 | 15 | export async function getBalance({ 16 | rpc, 17 | address 18 | }: GetBalanceProps): Promise<Lamports> { 19 | const { value } = await rpc.getBalance(address).send(); 20 | return value; 21 | } 22 | -------------------------------------------------------------------------------- /sample-dapps/solana-token-maker/.env.example: -------------------------------------------------------------------------------- 1 | QN_IPFS_API=QN_abc123456789xyz_REPLACE_THIS 2 | QN_ENDPOINT=https://example.solana-mainnet.quiknode.pro/123456 3 | NEXT_PUBLIC_CLUSTER=mainnet-beta # mainnet-beta | devnet | testnet | local 4 | NEXT_PUBLIC_GATEWAY_URL=https://quicknode.quicknode-ipfs.com/ipfs/ -------------------------------------------------------------------------------- /sample-dapps/solana-token-maker/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "next/core-web-vitals" 3 | } 4 | -------------------------------------------------------------------------------- /sample-dapps/solana-token-maker/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | .yarn/install-state.gz 8 | 9 | # testing 10 | /coverage 11 | 12 | # next.js 13 | /.next/ 14 | /out/ 15 | 16 | # production 17 | /build 18 | 19 | # misc 20 | .DS_Store 21 | *.pem 22 | 23 | # debug 24 | npm-debug.log* 25 | yarn-debug.log* 26 | yarn-error.log* 27 | 28 | # local env files 29 | .env*.local 30 | 31 | # vercel 32 | .vercel 33 | 34 | # typescript 35 | *.tsbuildinfo 36 | next-env.d.ts 37 | -------------------------------------------------------------------------------- /sample-dapps/solana-token-maker/app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/sample-dapps/solana-token-maker/app/favicon.ico -------------------------------------------------------------------------------- /sample-dapps/solana-token-maker/app/page.tsx: -------------------------------------------------------------------------------- 1 | 'use client' 2 | 3 | import Minter from "@/components/Minter"; 4 | import { Toaster } from "sonner"; 5 | 6 | export default function Home() { 7 | return ( 8 | <main className=" "> 9 | <Minter /> 10 | <Toaster richColors /> 11 | </main> 12 | ); 13 | } 14 | -------------------------------------------------------------------------------- /sample-dapps/solana-token-maker/components/Spinner.tsx: -------------------------------------------------------------------------------- 1 | const Spinner = () => ( 2 | <svg className="animate-spin h-5 w-5 text-white" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24"> 3 | <circle className="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" strokeWidth="4"></circle> 4 | <path className="opacity-75" fill="currentColor" d="M4 12a8 8 0 0116 0H4z"></path> 5 | </svg> 6 | ); 7 | 8 | export default Spinner; -------------------------------------------------------------------------------- /sample-dapps/solana-token-maker/next.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | const nextConfig = {}; 3 | 4 | export default nextConfig; 5 | -------------------------------------------------------------------------------- /sample-dapps/solana-token-maker/postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | }; 7 | -------------------------------------------------------------------------------- /sample-dapps/solana-token-maker/public/preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/sample-dapps/solana-token-maker/public/preview.png -------------------------------------------------------------------------------- /sample-dapps/solana-token-maker/utils/constants.ts: -------------------------------------------------------------------------------- 1 | import { Cluster, LAMPORTS_PER_SOL } from "@solana/web3.js"; 2 | 3 | type ClusterWithLocal = Cluster | 'local'; 4 | 5 | export const GATEWAY_URL = process.env.NEXT_PUBLIC_GATEWAY_URL || 'https://quicknode.quicknode-ipfs.com/ipfs/'; 6 | export const ACTIVE_CLUSTER = (process.env.NEXT_PUBLIC_CLUSTER || 'mainnet-beta') as ClusterWithLocal; 7 | export const MINIMUM_BALANCE = 0.05 * LAMPORTS_PER_SOL; -------------------------------------------------------------------------------- /sample-dapps/solana-token-maker/utils/utils.ts: -------------------------------------------------------------------------------- 1 | import { Cluster } from "@solana/web3.js"; 2 | 3 | export const getExplorerUrl = (signature: string, cluster: Cluster) => { 4 | return `https://explorer.solana.com/tx/${signature}?cluster=${cluster}`; 5 | } 6 | export const shortenHash = (str:string) => { 7 | return `${str.slice(0, 4)}...${str.slice(-4)}`; 8 | } -------------------------------------------------------------------------------- /sample-dapps/solana-wallet-explorer/.env.example: -------------------------------------------------------------------------------- 1 | # Rename this file to .env.local before running the app 2 | # Update the SOLANA_RPC_URL with your QuikNode URL 3 | # Update the DAS_API_ENABLED to true if you have the DAS API enabled 4 | SOLANA_RPC_URL=https://example.solana-mainnet.quiknode.pro/123456/ 5 | DAS_API_ENABLED=false 6 | NEXT_PUBLIC_FETCH_JUPLIST=true -------------------------------------------------------------------------------- /sample-dapps/solana-wallet-explorer/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "next/core-web-vitals" 3 | } 4 | -------------------------------------------------------------------------------- /sample-dapps/solana-wallet-explorer/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | .yarn/install-state.gz 8 | 9 | # testing 10 | /coverage 11 | 12 | # next.js 13 | /.next/ 14 | /out/ 15 | 16 | # production 17 | /build 18 | 19 | # misc 20 | .DS_Store 21 | *.pem 22 | 23 | # debug 24 | npm-debug.log* 25 | yarn-debug.log* 26 | yarn-error.log* 27 | 28 | # local env files 29 | .env*.local 30 | 31 | # vercel 32 | .vercel 33 | 34 | # typescript 35 | *.tsbuildinfo 36 | next-env.d.ts 37 | -------------------------------------------------------------------------------- /sample-dapps/solana-wallet-explorer/components.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://ui.shadcn.com/schema.json", 3 | "style": "default", 4 | "rsc": true, 5 | "tsx": true, 6 | "tailwind": { 7 | "config": "tailwind.config.ts", 8 | "css": "src/app/globals.css", 9 | "baseColor": "slate", 10 | "cssVariables": true, 11 | "prefix": "" 12 | }, 13 | "aliases": { 14 | "components": "@/components", 15 | "utils": "@/lib/utils" 16 | } 17 | } -------------------------------------------------------------------------------- /sample-dapps/solana-wallet-explorer/next.config.mjs: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | const nextConfig = { 3 | images: { 4 | remotePatterns: [ 5 | { 6 | protocol: "https", 7 | hostname: "**", 8 | }, 9 | ], 10 | }, 11 | }; 12 | 13 | export default nextConfig; 14 | -------------------------------------------------------------------------------- /sample-dapps/solana-wallet-explorer/postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | }; 7 | -------------------------------------------------------------------------------- /sample-dapps/solana-wallet-explorer/public/demo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/sample-dapps/solana-wallet-explorer/public/demo.png -------------------------------------------------------------------------------- /sample-dapps/solana-wallet-explorer/src/app/api/utils/constants.ts: -------------------------------------------------------------------------------- 1 | import { PublicKey } from "@solana/web3.js"; 2 | 3 | export const TOKEN_PROGRAM_ID = new PublicKey('TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA'); 4 | -------------------------------------------------------------------------------- /sample-dapps/solana-wallet-explorer/src/app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/sample-dapps/solana-wallet-explorer/src/app/favicon.ico -------------------------------------------------------------------------------- /sample-dapps/solana-wallet-explorer/src/components/explorer/nfts/NftCard.tsx: -------------------------------------------------------------------------------- 1 | import { Card, CardHeader, CardContent, CardTitle } from "@/components/ui/card"; 2 | import NftRow, { NftProps } from "./NftRow"; 3 | 4 | 5 | const NftCard = ({ walletAddress }: NftProps) => ( 6 | <Card> 7 | <CardHeader className="flex flex-row items-center space-y-0"> 8 | <CardTitle className="text-sm font-medium">NFTs</CardTitle> 9 | </CardHeader> 10 | <CardContent> 11 | <NftRow walletAddress={walletAddress} /> 12 | </CardContent> 13 | </Card> 14 | ); 15 | 16 | export default NftCard; 17 | -------------------------------------------------------------------------------- /sample-dapps/solana-wallet-explorer/src/components/explorer/transactions/types.ts: -------------------------------------------------------------------------------- 1 | import { ConfirmedSignatureInfo } from '@solana/web3.js'; 2 | 3 | export interface TransactionsResponse { 4 | txIds: ConfirmedSignatureInfo[]; 5 | } 6 | -------------------------------------------------------------------------------- /sample-dapps/solana-wallet-explorer/src/components/ui/skeleton.tsx: -------------------------------------------------------------------------------- 1 | import { cn } from "@/lib/utils" 2 | 3 | function Skeleton({ 4 | className, 5 | ...props 6 | }: React.HTMLAttributes<HTMLDivElement>) { 7 | return ( 8 | <div 9 | className={cn("animate-pulse rounded-md bg-muted", className)} 10 | {...props} 11 | /> 12 | ) 13 | } 14 | 15 | export { Skeleton } 16 | -------------------------------------------------------------------------------- /sample-dapps/solana-wallet-explorer/src/lib/utils.ts: -------------------------------------------------------------------------------- 1 | import { type ClassValue, clsx } from "clsx" 2 | import { twMerge } from "tailwind-merge" 3 | 4 | export function cn(...inputs: ClassValue[]) { 5 | return twMerge(clsx(inputs)) 6 | } 7 | -------------------------------------------------------------------------------- /solana/account-deserialization/.env.example: -------------------------------------------------------------------------------- 1 | HTTP_ENDPOINT='https://example.solana-mainnet.quiknode.pro/REPLACEME/' 2 | -------------------------------------------------------------------------------- /solana/account-deserialization/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "account-deserialization", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "scripts": { 6 | "test": "ts-node app.ts" 7 | }, 8 | "keywords": [], 9 | "author": "", 10 | "license": "ISC", 11 | "description": "", 12 | "dependencies": { 13 | "@solana/buffer-layout-utils": "^0.2.0", 14 | "@solana/web3.js": "^1.98.0", 15 | "dotenv": "^16.4.7" 16 | }, 17 | "devDependencies": { 18 | "@types/node": "^22.10.6" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /solana/authentication/.env.local.example: -------------------------------------------------------------------------------- 1 | NEXTAUTH_URL=http://localhost:3000 2 | NEXTAUTH_SECRET=GENERATE_SECRET_KEY -------------------------------------------------------------------------------- /solana/authentication/components/access-denied.tsx: -------------------------------------------------------------------------------- 1 | import { signIn } from "next-auth/react" 2 | 3 | export default function AccessDenied() { 4 | return ( 5 | <> 6 | <h1>Access Denied</h1> 7 | <p> 8 | <a 9 | href="/api/auth/signin" 10 | onClick={(e) => { 11 | e.preventDefault() 12 | signIn() 13 | }} 14 | > 15 | You must be signed in to view this page 16 | </a> 17 | </p> 18 | </> 19 | ) 20 | } 21 | -------------------------------------------------------------------------------- /solana/authentication/components/footer.module.css: -------------------------------------------------------------------------------- 1 | .footer { 2 | margin-top: 2rem; 3 | } 4 | 5 | .navItems { 6 | margin-bottom: 1rem; 7 | padding: 0; 8 | list-style: none; 9 | } 10 | 11 | .navItem { 12 | display: inline-block; 13 | margin-right: 1rem; 14 | } 15 | -------------------------------------------------------------------------------- /solana/authentication/components/layout.tsx: -------------------------------------------------------------------------------- 1 | import Header from "./header" 2 | import Footer from "./footer" 3 | import type { ReactNode } from "react" 4 | 5 | export default function Layout({ children }: { children: ReactNode }) { 6 | return ( 7 | <> 8 | <Header /> 9 | <main>{children}</main> 10 | <Footer /> 11 | </> 12 | ) 13 | } 14 | -------------------------------------------------------------------------------- /solana/authentication/middleware.ts: -------------------------------------------------------------------------------- 1 | import { withAuth } from "next-auth/middleware" 2 | 3 | // More on how NextAuth.js middleware works: https://next-auth.js.org/configuration/nextjs#middleware 4 | export default withAuth({ 5 | callbacks: { 6 | authorized({ req, token }) { 7 | // `/admin` requires admin role 8 | if (req.nextUrl.pathname === "/admin") { 9 | return token?.userRole === "admin" 10 | } 11 | // `/me` only requires the user to be logged in 12 | return !!token 13 | }, 14 | }, 15 | }) 16 | 17 | export const config = { matcher: ["/admin", "/me"] } 18 | -------------------------------------------------------------------------------- /solana/authentication/next-auth.d.ts: -------------------------------------------------------------------------------- 1 | import "next-auth/jwt" 2 | 3 | // Read more at: https://next-auth.js.org/getting-started/typescript#module-augmentation 4 | 5 | declare module "next-auth/jwt" { 6 | interface JWT { 7 | /** The user's role. */ 8 | userRole?: "admin" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /solana/authentication/next-env.d.ts: -------------------------------------------------------------------------------- 1 | /// <reference types="next" /> 2 | /// <reference types="next/image-types/global" /> 3 | 4 | // NOTE: This file should not be edited 5 | // see https://nextjs.org/docs/basic-features/typescript for more information. 6 | -------------------------------------------------------------------------------- /solana/authentication/pages/admin.tsx: -------------------------------------------------------------------------------- 1 | import Layout from "../components/layout" 2 | 3 | export default function Page() { 4 | return ( 5 | <Layout> 6 | <h1>This page is protected by Middleware</h1> 7 | <p>Only admin users can see this page.</p> 8 | <p> 9 | To learn more about the NextAuth middleware see  10 | <a href="https://docs-git-misc-docs-nextauthjs.vercel.app/configuration/nextjs#middleware"> 11 | the docs 12 | </a> 13 | . 14 | </p> 15 | </Layout> 16 | ) 17 | } 18 | -------------------------------------------------------------------------------- /solana/authentication/pages/index.tsx: -------------------------------------------------------------------------------- 1 | import Layout from "../components/layout" 2 | 3 | export default function IndexPage() { 4 | return ( 5 | <Layout> 6 | <h1>NextAuth.js Example</h1> 7 | <p> 8 | This is an example site to demonstrate how to use{" "} 9 | <a href="https://next-auth.js.org">NextAuth.js</a> for authentication. 10 | </p> 11 | </Layout> 12 | ) 13 | } 14 | -------------------------------------------------------------------------------- /solana/authentication/pages/me.tsx: -------------------------------------------------------------------------------- 1 | import { useSession } from "next-auth/react" 2 | import Layout from "../components/layout" 3 | 4 | export default function MePage() { 5 | const { data } = useSession() 6 | 7 | return ( 8 | <Layout> 9 | <pre>{JSON.stringify(data, null, 2)}</pre> 10 | </Layout> 11 | ) 12 | } 13 | -------------------------------------------------------------------------------- /solana/authentication/process.d.ts: -------------------------------------------------------------------------------- 1 | declare namespace NodeJS { 2 | export interface ProcessEnv { 3 | NEXTAUTH_URL: string 4 | NEXTAUTH_SECRET: string 5 | GITHUB_ID: string 6 | GITHUB_SECRET: string 7 | FACEBOOK_ID: string 8 | FACEBOOK_SECRET: string 9 | TWITTER_ID: string 10 | TWITTER_SECRET: string 11 | GOOGLE_ID: string 12 | GOOGLE_SECRET: string 13 | AUTH0_ID: string 14 | AUTH0_SECRET: string 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /solana/authentication/steps.md: -------------------------------------------------------------------------------- 1 | 1. add deps 2 | 2. remove `.example` and replace w/ a secret 3 | 3. yarn install + yarn install deps 4 | 4. tweak/add some files 5 | 5. yarn dev 6 | -------------------------------------------------------------------------------- /solana/bulk-sol-drop/.env.example: -------------------------------------------------------------------------------- 1 | QUICKNODE_RPC_ENDPOINT= -------------------------------------------------------------------------------- /solana/bulk-sol-drop/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .env 3 | guideSecret.json 4 | .DS_Store -------------------------------------------------------------------------------- /solana/bulk-sol-drop/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "bulk-sol-drop", 3 | "version": "1.0.0", 4 | "description": "How to Send Bulk Transactions on Solana", 5 | "scripts": { 6 | "start": "ts-node app.ts", 7 | "kp": "ts-node wallet.ts" 8 | }, 9 | "keywords": [ "QuickNode", "Solana" ], 10 | "license": "MIT", 11 | "dependencies": { 12 | "@solana/web3.js": "^1.63.1" 13 | }, 14 | "devDependencies": { 15 | "@types/node": "^18.8.3", 16 | "dotenv": "^16.0.3", 17 | "ts-node": "^10.9.1", 18 | "typescript": "^4.8.4" 19 | } 20 | } -------------------------------------------------------------------------------- /solana/candy-machine/deprecated/assets/0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/solana/candy-machine/deprecated/assets/0.png -------------------------------------------------------------------------------- /solana/candy-machine/deprecated/assets/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/solana/candy-machine/deprecated/assets/1.png -------------------------------------------------------------------------------- /solana/candy-machine/deprecated/assets/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/solana/candy-machine/deprecated/assets/2.png -------------------------------------------------------------------------------- /solana/candy-machine/deprecated/assets/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/solana/candy-machine/deprecated/assets/3.png -------------------------------------------------------------------------------- /solana/candy-machine/deprecated/assets/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/solana/candy-machine/deprecated/assets/4.png -------------------------------------------------------------------------------- /solana/candy-machine/deprecated/assets/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/solana/candy-machine/deprecated/assets/5.png -------------------------------------------------------------------------------- /solana/candy-machine/deprecated/assets/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/solana/candy-machine/deprecated/assets/6.png -------------------------------------------------------------------------------- /solana/candy-machine/deprecated/assets/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/solana/candy-machine/deprecated/assets/7.png -------------------------------------------------------------------------------- /solana/candy-machine/deprecated/assets/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/solana/candy-machine/deprecated/assets/8.png -------------------------------------------------------------------------------- /solana/candy-machine/deprecated/assets/9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/solana/candy-machine/deprecated/assets/9.png -------------------------------------------------------------------------------- /solana/candy-machine/v3/burn-spl-video/assets/0.json: -------------------------------------------------------------------------------- 1 | { 2 | "image": "0.png", 3 | "name": "I burned BONK #1", 4 | "description": "Proof of Bonk Burn", 5 | "symbol": "BURN", 6 | "attributes": [ 7 | { 8 | "trait_type": "Background", 9 | "value": "Green" 10 | } 11 | ], 12 | "properties": { 13 | "category": "image", 14 | "files": [ 15 | { 16 | "uri": "0.png", 17 | "type": "image/png" 18 | } 19 | ] 20 | } 21 | } -------------------------------------------------------------------------------- /solana/candy-machine/v3/burn-spl-video/assets/0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/solana/candy-machine/v3/burn-spl-video/assets/0.png -------------------------------------------------------------------------------- /solana/candy-machine/v3/burn-spl-video/assets/1.json: -------------------------------------------------------------------------------- 1 | { 2 | "image": "1.png", 3 | "name": "I burned BONK #2", 4 | "description": "Proof of Bonk Burn", 5 | "symbol": "BURN", 6 | "attributes": [ 7 | { 8 | "trait_type": "Background", 9 | "value": "Green" 10 | } 11 | ], 12 | "properties": { 13 | "category": "image", 14 | "files": [ 15 | { 16 | "uri": "1.png", 17 | "type": "image/png" 18 | } 19 | ] 20 | } 21 | } -------------------------------------------------------------------------------- /solana/candy-machine/v3/burn-spl-video/assets/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/solana/candy-machine/v3/burn-spl-video/assets/1.png -------------------------------------------------------------------------------- /solana/candy-machine/v3/burn-spl-video/assets/2.json: -------------------------------------------------------------------------------- 1 | { 2 | "image": "2.png", 3 | "name": "I burned BONK #3", 4 | "description": "Proof of Bonk Burn", 5 | "symbol": "BURN", 6 | "attributes": [ 7 | { 8 | "trait_type": "Background", 9 | "value": "Green" 10 | } 11 | ], 12 | "properties": { 13 | "category": "image", 14 | "files": [ 15 | { 16 | "uri": "2.png", 17 | "type": "image/png" 18 | } 19 | ] 20 | } 21 | } -------------------------------------------------------------------------------- /solana/candy-machine/v3/burn-spl-video/assets/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/solana/candy-machine/v3/burn-spl-video/assets/2.png -------------------------------------------------------------------------------- /solana/candy-machine/v3/burn-spl-video/assets/collection.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/solana/candy-machine/v3/burn-spl-video/assets/collection.png -------------------------------------------------------------------------------- /solana/candy-machine/v3/burn-spl-video/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "number": 3, 3 | "symbol": "BURN", 4 | "sellerFeeBasisPoints": 0, 5 | "isMutable": false, 6 | "isSequential": false, 7 | "creators": [ 8 | { 9 | "address": "BNKP2f6zrnETxejQmRjbT2kki6TG8x7rj76tyhQ1tqsF", 10 | "share": 100 11 | } 12 | ], 13 | "uploadMethod": "bundlr", 14 | "awsConfig": null, 15 | "nftStorageAuthToken": null, 16 | "shdwStorageAccount": null, 17 | "pinataConfig": null, 18 | "hiddenSettings": null, 19 | "guards": null 20 | } -------------------------------------------------------------------------------- /solana/candy-machine/v3/burn-spl-video/next.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | const nextConfig = { 3 | reactStrictMode: true, 4 | } 5 | 6 | module.exports = { 7 | ...nextConfig, 8 | env: { 9 | NEXT_PUBLIC_RPC: process.env.NEXT_PUBLIC_RPC, 10 | } 11 | }; -------------------------------------------------------------------------------- /solana/explorer-clone-part-1/starter/.babelrc: -------------------------------------------------------------------------------- 1 | { "presets": ["next/babel"] } 2 | -------------------------------------------------------------------------------- /solana/explorer-clone-part-1/starter/.env.example: -------------------------------------------------------------------------------- 1 | ##CHANGE FILE NAME TO .env and delete this line. 2 | REACT_APP_SOLANA_RPC_HOST=https://REPLACE_WITH_YOUR_URL.quiknode.pro/000/ 3 | REACT_APP_NETWORK=devnet -------------------------------------------------------------------------------- /solana/explorer-clone-part-1/starter/.eslintignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | __generated__ -------------------------------------------------------------------------------- /solana/explorer-clone-part-1/starter/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["next/core-web-vitals", "next/babel"] 3 | } 4 | -------------------------------------------------------------------------------- /solana/explorer-clone-part-1/starter/.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: "npm" 4 | directory: "/" 5 | schedule: 6 | interval: "daily" 7 | 8 | - package-ecosystem: "github-actions" 9 | directory: "/" 10 | schedule: 11 | interval: "daily" 12 | 13 | - package-ecosystem: "cargo" 14 | directory: "/program" 15 | schedule: 16 | interval: "daily" 17 | -------------------------------------------------------------------------------- /solana/explorer-clone-part-1/starter/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:12-alpine 2 | 3 | WORKDIR /opt/app 4 | 5 | ENV NODE_ENV production 6 | 7 | COPY package*.json ./ 8 | 9 | RUN npm ci 10 | 11 | COPY . /opt/app 12 | 13 | RUN npm install --dev && npm run build 14 | 15 | CMD [ "npm", "start" ] -------------------------------------------------------------------------------- /solana/explorer-clone-part-1/starter/next-env.d.ts: -------------------------------------------------------------------------------- 1 | /// <reference types="next" /> 2 | /// <reference types="next/image-types/global" /> 3 | 4 | // NOTE: This file should not be edited 5 | // see https://nextjs.org/docs/basic-features/typescript for more information. 6 | -------------------------------------------------------------------------------- /solana/explorer-clone-part-1/starter/next.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | const nextConfig = { 3 | reactStrictMode: true, 4 | } 5 | 6 | module.exports = { 7 | nextConfig, 8 | env: { 9 | REACT_APP_SOLANA_RPC_HOST: process.env.REACT_APP_SOLANA_RPC_HOST, 10 | REACT_APP_NETWORK: process.env.REACT_APP_NETWORK 11 | } 12 | } -------------------------------------------------------------------------------- /solana/explorer-clone-part-1/starter/postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /solana/explorer-clone-part-1/starter/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/solana/explorer-clone-part-1/starter/public/favicon.ico -------------------------------------------------------------------------------- /solana/explorer-clone-part-1/starter/scaffold-desktop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/solana/explorer-clone-part-1/starter/scaffold-desktop.png -------------------------------------------------------------------------------- /solana/explorer-clone-part-1/starter/scaffold-mobile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/solana/explorer-clone-part-1/starter/scaffold-mobile.png -------------------------------------------------------------------------------- /solana/explorer-clone-part-1/starter/src/components/template.tsx: -------------------------------------------------------------------------------- 1 | import { useConnection, useWallet } from '@solana/wallet-adapter-react'; 2 | import { FC, useState } from 'react'; 3 | import { notify } from "../utils/notifications"; 4 | //Add import dependencies here 5 | 6 | export const Template: FC = () => { 7 | const { connection } = useConnection(); 8 | const { publicKey } = useWallet(); 9 | 10 | //State Variables here 11 | 12 | //dApp Scripts here 13 | 14 | return(<div> 15 | 16 | {/* Render Results Here */} 17 | 18 | </div>) 19 | } -------------------------------------------------------------------------------- /solana/explorer-clone-part-1/starter/src/models/types.ts: -------------------------------------------------------------------------------- 1 | export type EndpointTypes = 'mainnet' | 'devnet' | 'localnet' 2 | -------------------------------------------------------------------------------- /solana/explorer-clone-part-1/starter/src/pages/api/hello.ts: -------------------------------------------------------------------------------- 1 | // Next.js API route support: https://nextjs.org/docs/api-routes/introduction 2 | import type { NextApiRequest, NextApiResponse } from 'next' 3 | 4 | type Data = { 5 | name: string 6 | } 7 | 8 | export default function handler( 9 | req: NextApiRequest, 10 | res: NextApiResponse<Data> 11 | ) { 12 | res.status(200).json({ name: 'John Doe' }) 13 | } 14 | -------------------------------------------------------------------------------- /solana/explorer-clone-part-1/starter/src/pages/basics.tsx: -------------------------------------------------------------------------------- 1 | import type { NextPage } from "next"; 2 | import Head from "next/head"; 3 | import { BasicsView } from "../views"; 4 | 5 | const Basics: NextPage = (props) => { 6 | return ( 7 | <div> 8 | <Head> 9 | <title>Solana Scaffold 10 | 14 | 15 | 16 |
17 | ); 18 | }; 19 | 20 | export default Basics; 21 | -------------------------------------------------------------------------------- /solana/explorer-clone-part-1/starter/src/pages/index.tsx: -------------------------------------------------------------------------------- 1 | import type { NextPage } from "next"; 2 | import Head from "next/head"; 3 | import { HomeView } from "../views"; 4 | 5 | const Home: NextPage = (props) => { 6 | return ( 7 |
8 | 9 | Solana Scaffold 10 | 14 | 15 | 16 |
17 | ); 18 | }; 19 | 20 | export default Home; 21 | -------------------------------------------------------------------------------- /solana/explorer-clone-part-1/starter/src/stores/useNotificationStore.tsx: -------------------------------------------------------------------------------- 1 | import create, { State } from "zustand"; 2 | import produce from "immer"; 3 | 4 | interface NotificationStore extends State { 5 | notifications: Array<{ 6 | type: string 7 | message: string 8 | description?: string 9 | txid?: string 10 | }> 11 | set: (x: any) => void 12 | } 13 | 14 | const useNotificationStore = create((set, _get) => ({ 15 | notifications: [], 16 | set: (fn) => set(produce(fn)), 17 | })) 18 | 19 | export default useNotificationStore 20 | -------------------------------------------------------------------------------- /solana/explorer-clone-part-1/starter/src/utils/notifications.tsx: -------------------------------------------------------------------------------- 1 | import useNotificationStore from "../stores/useNotificationStore"; 2 | 3 | export function notify(newNotification: { 4 | type?: string 5 | message: string 6 | description?: string 7 | txid?: string 8 | }) { 9 | const { 10 | notifications, 11 | set: setNotificationStore, 12 | } = useNotificationStore.getState() 13 | 14 | setNotificationStore((state: { notifications: any[] }) => { 15 | state.notifications = [ 16 | ...notifications, 17 | { type: 'success', ...newNotification }, 18 | ] 19 | }) 20 | } 21 | -------------------------------------------------------------------------------- /solana/explorer-clone-part-1/starter/src/views/index.tsx: -------------------------------------------------------------------------------- 1 | export { HomeView } from "./home"; 2 | export { BasicsView } from "./basics"; 3 | -------------------------------------------------------------------------------- /solana/explorer-clone-part-1/template.tsx: -------------------------------------------------------------------------------- 1 | import { useConnection, useWallet } from '@solana/wallet-adapter-react'; 2 | import { FC, useState } from 'react'; 3 | import { notify } from "../utils/notifications"; 4 | //Add import dependencies here 5 | 6 | export const Template: FC = () => { 7 | const { connection } = useConnection(); 8 | const { publicKey } = useWallet(); 9 | 10 | //State Variables here 11 | 12 | //dApp Scripts here 13 | 14 | return(
15 | 16 | {/* Render Results Here */} 17 | 18 |
) 19 | } -------------------------------------------------------------------------------- /solana/explorer-clone-part-2/starter/.babelrc: -------------------------------------------------------------------------------- 1 | { "presets": ["next/babel"] } 2 | -------------------------------------------------------------------------------- /solana/explorer-clone-part-2/starter/.env.example: -------------------------------------------------------------------------------- 1 | ##CHANGE FILE NAME TO .env and delete this line. 2 | REACT_APP_SOLANA_RPC_HOST=https://REPLACE_WITH_YOUR_URL.quiknode.pro/000/ 3 | REACT_APP_NETWORK=devnet -------------------------------------------------------------------------------- /solana/explorer-clone-part-2/starter/.eslintignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | __generated__ -------------------------------------------------------------------------------- /solana/explorer-clone-part-2/starter/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["next/core-web-vitals", "next/babel"] 3 | } 4 | -------------------------------------------------------------------------------- /solana/explorer-clone-part-2/starter/.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: "npm" 4 | directory: "/" 5 | schedule: 6 | interval: "daily" 7 | 8 | - package-ecosystem: "github-actions" 9 | directory: "/" 10 | schedule: 11 | interval: "daily" 12 | 13 | - package-ecosystem: "cargo" 14 | directory: "/program" 15 | schedule: 16 | interval: "daily" 17 | -------------------------------------------------------------------------------- /solana/explorer-clone-part-2/starter/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:12-alpine 2 | 3 | WORKDIR /opt/app 4 | 5 | ENV NODE_ENV production 6 | 7 | COPY package*.json ./ 8 | 9 | RUN npm ci 10 | 11 | COPY . /opt/app 12 | 13 | RUN npm install --dev && npm run build 14 | 15 | CMD [ "npm", "start" ] -------------------------------------------------------------------------------- /solana/explorer-clone-part-2/starter/next-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | 4 | // NOTE: This file should not be edited 5 | // see https://nextjs.org/docs/basic-features/typescript for more information. 6 | -------------------------------------------------------------------------------- /solana/explorer-clone-part-2/starter/next.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | const nextConfig = { 3 | reactStrictMode: true, 4 | } 5 | 6 | module.exports = { 7 | nextConfig, 8 | env: { 9 | REACT_APP_SOLANA_RPC_HOST: process.env.REACT_APP_SOLANA_RPC_HOST, 10 | REACT_APP_NETWORK: process.env.REACT_APP_NETWORK 11 | } 12 | } -------------------------------------------------------------------------------- /solana/explorer-clone-part-2/starter/postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /solana/explorer-clone-part-2/starter/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/solana/explorer-clone-part-2/starter/public/favicon.ico -------------------------------------------------------------------------------- /solana/explorer-clone-part-2/starter/scaffold-desktop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/solana/explorer-clone-part-2/starter/scaffold-desktop.png -------------------------------------------------------------------------------- /solana/explorer-clone-part-2/starter/scaffold-mobile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/solana/explorer-clone-part-2/starter/scaffold-mobile.png -------------------------------------------------------------------------------- /solana/explorer-clone-part-2/starter/src/components/template.tsx: -------------------------------------------------------------------------------- 1 | import { useConnection, useWallet } from '@solana/wallet-adapter-react'; 2 | import { FC, useState } from 'react'; 3 | import { notify } from "../utils/notifications"; 4 | //Add import dependencies here 5 | 6 | export const Template: FC = () => { 7 | const { connection } = useConnection(); 8 | const { publicKey } = useWallet(); 9 | 10 | //State Variables here 11 | 12 | //dApp Scripts here 13 | 14 | return(
15 | 16 | {/* Render Results Here */} 17 | 18 |
) 19 | } -------------------------------------------------------------------------------- /solana/explorer-clone-part-2/starter/src/models/types.ts: -------------------------------------------------------------------------------- 1 | export type EndpointTypes = 'mainnet' | 'devnet' | 'localnet' 2 | -------------------------------------------------------------------------------- /solana/explorer-clone-part-2/starter/src/pages/api/hello.ts: -------------------------------------------------------------------------------- 1 | // Next.js API route support: https://nextjs.org/docs/api-routes/introduction 2 | import type { NextApiRequest, NextApiResponse } from 'next' 3 | 4 | type Data = { 5 | name: string 6 | } 7 | 8 | export default function handler( 9 | req: NextApiRequest, 10 | res: NextApiResponse 11 | ) { 12 | res.status(200).json({ name: 'John Doe' }) 13 | } 14 | -------------------------------------------------------------------------------- /solana/explorer-clone-part-2/starter/src/pages/basics.tsx: -------------------------------------------------------------------------------- 1 | import type { NextPage } from "next"; 2 | import Head from "next/head"; 3 | import { BasicsView } from "../views"; 4 | 5 | const Basics: NextPage = (props) => { 6 | return ( 7 |
8 | 9 | Solana Scaffold 10 | 14 | 15 | 16 |
17 | ); 18 | }; 19 | 20 | export default Basics; 21 | -------------------------------------------------------------------------------- /solana/explorer-clone-part-2/starter/src/pages/explorer.tsx: -------------------------------------------------------------------------------- 1 | import type { NextPage } from "next"; 2 | import Head from "next/head"; 3 | import { ExplorerView } from "../views"; 4 | 5 | const Explorer: NextPage = (props) => { 6 | return ( 7 |
8 | 9 | Solana Scaffold 10 | 14 | 15 | 16 |
17 | ); 18 | }; 19 | 20 | export default Explorer; 21 | -------------------------------------------------------------------------------- /solana/explorer-clone-part-2/starter/src/pages/index.tsx: -------------------------------------------------------------------------------- 1 | import type { NextPage } from "next"; 2 | import Head from "next/head"; 3 | import { HomeView } from "../views"; 4 | 5 | const Home: NextPage = (props) => { 6 | return ( 7 |
8 | 9 | Solana Scaffold 10 | 14 | 15 | 16 |
17 | ); 18 | }; 19 | 20 | export default Home; 21 | -------------------------------------------------------------------------------- /solana/explorer-clone-part-2/starter/src/stores/useNotificationStore.tsx: -------------------------------------------------------------------------------- 1 | import create, { State } from "zustand"; 2 | import produce from "immer"; 3 | 4 | interface NotificationStore extends State { 5 | notifications: Array<{ 6 | type: string 7 | message: string 8 | description?: string 9 | txid?: string 10 | }> 11 | set: (x: any) => void 12 | } 13 | 14 | const useNotificationStore = create((set, _get) => ({ 15 | notifications: [], 16 | set: (fn) => set(produce(fn)), 17 | })) 18 | 19 | export default useNotificationStore 20 | -------------------------------------------------------------------------------- /solana/explorer-clone-part-2/starter/src/utils/notifications.tsx: -------------------------------------------------------------------------------- 1 | import useNotificationStore from "../stores/useNotificationStore"; 2 | 3 | export function notify(newNotification: { 4 | type?: string 5 | message: string 6 | description?: string 7 | txid?: string 8 | }) { 9 | const { 10 | notifications, 11 | set: setNotificationStore, 12 | } = useNotificationStore.getState() 13 | 14 | setNotificationStore((state: { notifications: any[] }) => { 15 | state.notifications = [ 16 | ...notifications, 17 | { type: 'success', ...newNotification }, 18 | ] 19 | }) 20 | } 21 | -------------------------------------------------------------------------------- /solana/explorer-clone-part-2/starter/src/views/index.tsx: -------------------------------------------------------------------------------- 1 | export { HomeView } from "./home"; 2 | export { BasicsView } from "./basics"; 3 | export { ExplorerView } from "./explorer"; -------------------------------------------------------------------------------- /solana/explorer-clone-part-3/starter/.babelrc: -------------------------------------------------------------------------------- 1 | { "presets": ["next/babel"] } 2 | -------------------------------------------------------------------------------- /solana/explorer-clone-part-3/starter/.env.example: -------------------------------------------------------------------------------- 1 | ##CHANGE FILE NAME TO .env and delete this line. 2 | REACT_APP_SOLANA_RPC_HOST=https://REPLACE_WITH_YOUR_URL.quiknode.pro/000/ 3 | REACT_APP_NETWORK=devnet -------------------------------------------------------------------------------- /solana/explorer-clone-part-3/starter/.eslintignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | __generated__ -------------------------------------------------------------------------------- /solana/explorer-clone-part-3/starter/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["next/core-web-vitals", "next/babel"] 3 | } 4 | -------------------------------------------------------------------------------- /solana/explorer-clone-part-3/starter/.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: "npm" 4 | directory: "/" 5 | schedule: 6 | interval: "daily" 7 | 8 | - package-ecosystem: "github-actions" 9 | directory: "/" 10 | schedule: 11 | interval: "daily" 12 | 13 | - package-ecosystem: "cargo" 14 | directory: "/program" 15 | schedule: 16 | interval: "daily" 17 | -------------------------------------------------------------------------------- /solana/explorer-clone-part-3/starter/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:12-alpine 2 | 3 | WORKDIR /opt/app 4 | 5 | ENV NODE_ENV production 6 | 7 | COPY package*.json ./ 8 | 9 | RUN npm ci 10 | 11 | COPY . /opt/app 12 | 13 | RUN npm install --dev && npm run build 14 | 15 | CMD [ "npm", "start" ] -------------------------------------------------------------------------------- /solana/explorer-clone-part-3/starter/next-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | 4 | // NOTE: This file should not be edited 5 | // see https://nextjs.org/docs/basic-features/typescript for more information. 6 | -------------------------------------------------------------------------------- /solana/explorer-clone-part-3/starter/next.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | const nextConfig = { 3 | reactStrictMode: true, 4 | } 5 | 6 | module.exports = { 7 | nextConfig, 8 | env: { 9 | REACT_APP_SOLANA_RPC_HOST: process.env.REACT_APP_SOLANA_RPC_HOST, 10 | REACT_APP_NETWORK: process.env.REACT_APP_NETWORK 11 | } 12 | } -------------------------------------------------------------------------------- /solana/explorer-clone-part-3/starter/postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /solana/explorer-clone-part-3/starter/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/solana/explorer-clone-part-3/starter/public/favicon.ico -------------------------------------------------------------------------------- /solana/explorer-clone-part-3/starter/scaffold-desktop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/solana/explorer-clone-part-3/starter/scaffold-desktop.png -------------------------------------------------------------------------------- /solana/explorer-clone-part-3/starter/scaffold-mobile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/solana/explorer-clone-part-3/starter/scaffold-mobile.png -------------------------------------------------------------------------------- /solana/explorer-clone-part-3/starter/src/components/template.tsx: -------------------------------------------------------------------------------- 1 | import { useConnection, useWallet } from '@solana/wallet-adapter-react'; 2 | import { FC, useState } from 'react'; 3 | import { notify } from "../utils/notifications"; 4 | //Add import dependencies here 5 | 6 | export const Template: FC = () => { 7 | const { connection } = useConnection(); 8 | const { publicKey } = useWallet(); 9 | 10 | //State Variables here 11 | 12 | //dApp Scripts here 13 | 14 | return(
15 | 16 | {/* Render Results Here */} 17 | 18 |
) 19 | } -------------------------------------------------------------------------------- /solana/explorer-clone-part-3/starter/src/models/types.ts: -------------------------------------------------------------------------------- 1 | export type EndpointTypes = 'mainnet' | 'devnet' | 'localnet' 2 | -------------------------------------------------------------------------------- /solana/explorer-clone-part-3/starter/src/pages/api/hello.ts: -------------------------------------------------------------------------------- 1 | // Next.js API route support: https://nextjs.org/docs/api-routes/introduction 2 | import type { NextApiRequest, NextApiResponse } from 'next' 3 | 4 | type Data = { 5 | name: string 6 | } 7 | 8 | export default function handler( 9 | req: NextApiRequest, 10 | res: NextApiResponse 11 | ) { 12 | res.status(200).json({ name: 'John Doe' }) 13 | } 14 | -------------------------------------------------------------------------------- /solana/explorer-clone-part-3/starter/src/pages/basics.tsx: -------------------------------------------------------------------------------- 1 | import type { NextPage } from "next"; 2 | import Head from "next/head"; 3 | import { BasicsView } from "../views"; 4 | 5 | const Basics: NextPage = (props) => { 6 | return ( 7 |
8 | 9 | Solana Scaffold 10 | 14 | 15 | 16 |
17 | ); 18 | }; 19 | 20 | export default Basics; 21 | -------------------------------------------------------------------------------- /solana/explorer-clone-part-3/starter/src/pages/explorer.tsx: -------------------------------------------------------------------------------- 1 | import type { NextPage } from "next"; 2 | import Head from "next/head"; 3 | import { ExplorerView } from "../views"; 4 | 5 | const Explorer: NextPage = (props) => { 6 | return ( 7 |
8 | 9 | Solana Scaffold 10 | 14 | 15 | 16 |
17 | ); 18 | }; 19 | 20 | export default Explorer; 21 | -------------------------------------------------------------------------------- /solana/explorer-clone-part-3/starter/src/pages/index.tsx: -------------------------------------------------------------------------------- 1 | import type { NextPage } from "next"; 2 | import Head from "next/head"; 3 | import { HomeView } from "../views"; 4 | 5 | const Home: NextPage = (props) => { 6 | return ( 7 |
8 | 9 | Solana Scaffold 10 | 14 | 15 | 16 |
17 | ); 18 | }; 19 | 20 | export default Home; 21 | -------------------------------------------------------------------------------- /solana/explorer-clone-part-3/starter/src/pages/tx/[txid].tsx: -------------------------------------------------------------------------------- 1 | import Head from "next/head"; 2 | import { TransactionView } from 'views/explorer/tx'; 3 | 4 | const Tx = () => { 5 | 6 | return ( 7 |
8 | 9 | Solana Scaffold 10 | 14 | 15 | 16 |
17 | ) 18 | } 19 | 20 | export default Tx 21 | -------------------------------------------------------------------------------- /solana/explorer-clone-part-3/starter/src/stores/useNotificationStore.tsx: -------------------------------------------------------------------------------- 1 | import create, { State } from "zustand"; 2 | import produce from "immer"; 3 | 4 | interface NotificationStore extends State { 5 | notifications: Array<{ 6 | type: string 7 | message: string 8 | description?: string 9 | txid?: string 10 | }> 11 | set: (x: any) => void 12 | } 13 | 14 | const useNotificationStore = create((set, _get) => ({ 15 | notifications: [], 16 | set: (fn) => set(produce(fn)), 17 | })) 18 | 19 | export default useNotificationStore 20 | -------------------------------------------------------------------------------- /solana/explorer-clone-part-3/starter/src/utils/notifications.tsx: -------------------------------------------------------------------------------- 1 | import useNotificationStore from "../stores/useNotificationStore"; 2 | 3 | export function notify(newNotification: { 4 | type?: string 5 | message: string 6 | description?: string 7 | txid?: string 8 | }) { 9 | const { 10 | notifications, 11 | set: setNotificationStore, 12 | } = useNotificationStore.getState() 13 | 14 | setNotificationStore((state: { notifications: any[] }) => { 15 | state.notifications = [ 16 | ...notifications, 17 | { type: 'success', ...newNotification }, 18 | ] 19 | }) 20 | } 21 | -------------------------------------------------------------------------------- /solana/explorer-clone-part-3/starter/src/views/index.tsx: -------------------------------------------------------------------------------- 1 | export { HomeView } from "./home"; 2 | export { BasicsView } from "./basics"; 3 | export { ExplorerView } from "./explorer"; -------------------------------------------------------------------------------- /solana/jupiter-bot/.env.example: -------------------------------------------------------------------------------- 1 | SECRET_KEY=[00, 00, 00, ... 00, 00, 00] 2 | SOLANA_ENDPOINT=https://example.solana-mainnet.quiknode.pro/x123456/ 3 | METIS_ENDPOINT=https://jupiter-swap-api.quiknode.pro/ABC1234586 -------------------------------------------------------------------------------- /solana/jupiter-jito/.env.local: -------------------------------------------------------------------------------- 1 | METIS_ENDPOINT= 2 | JITO_ENDPOINT= 3 | WALLET_SECRET= 4 | -------------------------------------------------------------------------------- /solana/jupiter-jito/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jito-ex", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "scripts": { 6 | "test": "echo \"Error: no test specified\" && exit 1" 7 | }, 8 | "keywords": [], 9 | "author": "", 10 | "license": "ISC", 11 | "description": "", 12 | "dependencies": { 13 | "@jup-ag/api": "^6.0.29", 14 | "@solana/web3.js": "^1.95.4", 15 | "base58": "^2.0.1" 16 | }, 17 | "devDependencies": { 18 | "@types/node": "^22.8.0" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /solana/pump-fun-api/.env.example: -------------------------------------------------------------------------------- 1 | WALLET_SECRET_KEY=[1, 2, 3, 4, 5] 2 | METIS_URL='https://jupiter-swap-api.quiknode.pro/REPLACE_ME' 3 | HTTP_ENDPOINT='https://REPLACE_ME.solana-mainnet.quiknode.pro/012345/' 4 | WSS_ENDPOINT='wss://REPLACE_ME.solana-mainnet.quiknode.pro/012345/' 5 | SIMULATE=true -------------------------------------------------------------------------------- /solana/pump-fun-api/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "sw3js1", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "scripts": { 6 | "start": "ts-node index.ts" 7 | }, 8 | "keywords": [], 9 | "author": "", 10 | "license": "ISC", 11 | "description": "", 12 | "devDependencies": { 13 | "@types/node": "^22.10.5", 14 | "ts-node": "^10.9.2", 15 | "typescript": "^5.7.3" 16 | }, 17 | "dependencies": { 18 | "@solana/web3.js": "^1.98.0", 19 | "dotenv": "^16.4.7" 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /solana/pump-yellowstone-copy-trader/.env.example: -------------------------------------------------------------------------------- 1 | SOLANA_RPC= # https://example.quiknode.pro/replace-me-123/ 2 | SECRET_KEY= # [0, 0, ..., 0] 3 | METIS_ENDPOINT= # https://jupiter-swap-api.quiknode.pro/REPLACE_ME 4 | YELLOWSTONE_ENDPOINT= # https://example.solana-mainnet.quiknode.pro:10000 5 | YELLOWSTONE_TOKEN= # abc...xyz -------------------------------------------------------------------------------- /solana/pump-yellowstone-copy-trader/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "pump-yellowstone-copy-trader", 3 | "version": "1.0.0", 4 | "main": "bot.js", 5 | "scripts": { 6 | "test": "node bot.js", 7 | "pretty": "prettier --write ." 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC", 12 | "description": "", 13 | "dependencies": { 14 | "@solana/web3.js": "^1.98.0", 15 | "@triton-one/yellowstone-grpc": "^2.0.0", 16 | "bs58": "^6.0.0", 17 | "dotenv": "^16.4.7", 18 | "prettier": "^3.4.2" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /solana/raydium-swap-ts/src/example.env: -------------------------------------------------------------------------------- 1 | QUICKNODE_URL= 2 | WALLET_SECRET_KEY= -------------------------------------------------------------------------------- /solana/sns-domains/.env.example: -------------------------------------------------------------------------------- 1 | QUICKNODE_RPC_ENDPOINT= -------------------------------------------------------------------------------- /solana/sns-domains/.npmrc: -------------------------------------------------------------------------------- 1 | auto-install-peers=true 2 | strict-peer-dependencies=false -------------------------------------------------------------------------------- /solana/sns-domains/.yarnrc.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/solana/sns-domains/.yarnrc.yml -------------------------------------------------------------------------------- /solana/sol-get-tokens/.env.example: -------------------------------------------------------------------------------- 1 | QUICKNODE_RPC_ENDPOINT= 2 | WALLET_PUBLIC_KEY= -------------------------------------------------------------------------------- /solana/sol-get-tokens/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .DS_Store 3 | .env -------------------------------------------------------------------------------- /solana/sol-get-tokens/.npmrc: -------------------------------------------------------------------------------- 1 | auto-install-peers=true 2 | strict-peer-dependencies=false -------------------------------------------------------------------------------- /solana/sol-get-tokens/.yarnrc.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/quiknode-labs/qn-guide-examples/a15d1a910438692d367ebc83045bd70c6cb52c77/solana/sol-get-tokens/.yarnrc.yml -------------------------------------------------------------------------------- /solana/sol-get-tokens/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "sol-get-tokens", 3 | "version": "0.1.0", 4 | "description": "How to get all tokens held by a Solana wallet", 5 | "scripts": { 6 | "start": "ts-node index.ts" 7 | }, 8 | "keywords": [ "QuickNode", "Solana", "Crypto Wallet" ], 9 | "license": "MIT", 10 | "dependencies": { 11 | "@solana/spl-token": "^0.3.4", 12 | "@solana/web3.js": "^1.60.0" 13 | }, 14 | "devDependencies": { 15 | "dotenv": "^16.0.2", 16 | "ts-node": "^10.9.1", 17 | "typescript": "^4.8.3", 18 | "@types/node": "^18.8.3" 19 | } 20 | } -------------------------------------------------------------------------------- /solana/solang/scoreboard/Anchor.toml: -------------------------------------------------------------------------------- 1 | [features] 2 | seeds = false 3 | skip-lint = false 4 | 5 | [programs.localnet] 6 | scoreboard = "F1ipperKF9EfD821ZbbYjS319LXYiBmjhzkkf5a26rC" 7 | 8 | [registry] 9 | url = "https://api.apr.dev" 10 | 11 | [provider] 12 | cluster = "Localnet" # Update this to your QuickNode endpoint for mainnet 13 | wallet = "/Users/qn-guides/.config/solana/id.json" # Update this to your localnet wallet path 14 | 15 | [scripts] 16 | test = "yarn run ts-mocha -p ./tsconfig.json -t 1000000 tests/**/*.ts" 17 | -------------------------------------------------------------------------------- /solana/solang/scoreboard/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "scripts": { 3 | "lint:fix": "prettier */*.js \"*/**/*{.js,.ts}\" -w", 4 | "lint": "prettier */*.js \"*/**/*{.js,.ts}\" --check" 5 | }, 6 | "dependencies": { 7 | "@coral-xyz/anchor": "^0.28.0" 8 | }, 9 | "devDependencies": { 10 | "chai": "^4.3.4", 11 | "mocha": "^9.0.3", 12 | "ts-mocha": "^10.0.0", 13 | "@types/bn.js": "^5.1.0", 14 | "@types/chai": "^4.3.0", 15 | "@types/mocha": "^9.0.0", 16 | "typescript": "^4.3.5", 17 | "prettier": "^2.6.2" 18 | } 19 | } -------------------------------------------------------------------------------- /solana/solang/scoreboard/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "types": [ 4 | "mocha", 5 | "chai" 6 | ], 7 | "typeRoots": [ 8 | "./node_modules/@types" 9 | ], 10 | "lib": [ 11 | "es2015" 12 | ], 13 | "module": "commonjs", 14 | "target": "es6", 15 | "esModuleInterop": true 16 | } 17 | } -------------------------------------------------------------------------------- /solana/token-extensions/scaled-ui-amount/kit/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es2020", 4 | "module": "commonjs", 5 | "lib": ["es2020"], 6 | "declaration": true, 7 | "outDir": "./dist", 8 | "rootDir": "./", 9 | "strict": true, 10 | "esModuleInterop": true, 11 | "skipLibCheck": true, 12 | "forceConsistentCasingInFileNames": true, 13 | "resolveJsonModule": true 14 | }, 15 | "include": ["*.ts"], 16 | "exclude": ["node_modules", "dist"] 17 | } -------------------------------------------------------------------------------- /solana/token-extensions/scaled-ui-amount/web3/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es2020", 4 | "module": "commonjs", 5 | "lib": ["es2020"], 6 | "declaration": true, 7 | "outDir": "./dist", 8 | "rootDir": "./", 9 | "strict": true, 10 | "esModuleInterop": true, 11 | "skipLibCheck": true, 12 | "forceConsistentCasingInFileNames": true, 13 | "resolveJsonModule": true 14 | }, 15 | "include": ["*.ts"], 16 | "exclude": ["node_modules", "dist"] 17 | } -------------------------------------------------------------------------------- /solana/web3.js-2.0/deserialize/.env.example: -------------------------------------------------------------------------------- 1 | HTTP_ENDPOINT='https://example.solana-mainnet.quiknode.pro/REPLACE_ME/' 2 | -------------------------------------------------------------------------------- /solana/web3.js-2.0/deserialize/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "account-decoder", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "scripts": { 6 | "start": "ts-node app.ts" 7 | }, 8 | "keywords": [], 9 | "author": "", 10 | "license": "ISC", 11 | "description": "", 12 | "dependencies": { 13 | "@solana/web3.js": "^2.0.0", 14 | "dotenv": "^16.4.7" 15 | }, 16 | "devDependencies": { 17 | "@types/node": "^22.10.6" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /solana/web3.js-2.0/optimized-tx/src/constants/defaults.ts: -------------------------------------------------------------------------------- 1 | import { Blockhash } from "@solana/web3.js"; 2 | 3 | export const DEFAULTS = { 4 | PLACEHOLDER_BLOCKHASH: { 5 | blockhash: '11111111111111111111111111111111' as Blockhash, 6 | lastValidBlockHeight: 0n, 7 | } as const, 8 | PLACEHOLDER_COMPUTE_UNIT: 1_400_000, 9 | PLACEHOLDER_PRIORITY_FEE: 1, 10 | DEFAULT_COMPUTE_MARGIN: 1.05 11 | } as const; 12 | -------------------------------------------------------------------------------- /solana/web3.js-2.0/optimized-tx/src/constants/index.ts: -------------------------------------------------------------------------------- 1 | export * from './defaults'; -------------------------------------------------------------------------------- /solana/web3.js-2.0/optimized-tx/src/index.ts: -------------------------------------------------------------------------------- 1 | export { QuickNodeSolana } from './QuickNodeSolana'; 2 | export * from './types'; 3 | export * from './constants'; 4 | -------------------------------------------------------------------------------- /solana/web3.js-2.0/optimized-tx/src/types/config.ts: -------------------------------------------------------------------------------- 1 | export interface QuickNodeSolanaConfig { 2 | endpoint: string; 3 | wssEndpoint?: string; 4 | computeMargin?: number; 5 | } -------------------------------------------------------------------------------- /solana/web3.js-2.0/optimized-tx/src/types/index.ts: -------------------------------------------------------------------------------- 1 | export * from './config'; 2 | export * from './priority-fees'; 3 | export * from './transaction'; -------------------------------------------------------------------------------- /solana/web3.js-2.0/optimized-tx/src/utils/index.ts: -------------------------------------------------------------------------------- 1 | export * from './transport'; -------------------------------------------------------------------------------- /solana/web3.js-2.0/optimized-tx/src/utils/transport.ts: -------------------------------------------------------------------------------- 1 | import { RpcTransport, createDefaultRpcTransport } from "@solana/web3.js"; 2 | 3 | export function createQuickNodeTransport(endpoint: string): RpcTransport { 4 | const jsonRpcTransport = createDefaultRpcTransport({ url: endpoint }); 5 | return async (...args: Parameters): Promise => { 6 | return await jsonRpcTransport(...args); 7 | }; 8 | } 9 | -------------------------------------------------------------------------------- /solana/web3.js-2.0/pump-fun-api/.env.example: -------------------------------------------------------------------------------- 1 | WALLET_SECRET_KEY=[1, 2, 3, 4, 5] 2 | METIS_URL='https://jupiter-swap-api.quiknode.pro/REPLACE_ME' 3 | HTTP_ENDPOINT='https://REPLACE_ME.solana-mainnet.quiknode.pro/012345/' 4 | WSS_ENDPOINT='wss://REPLACE_ME.solana-mainnet.quiknode.pro/012345/' -------------------------------------------------------------------------------- /solana/web3.js-2.0/pump-fun-api/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "pump-fun-api", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "scripts": { 6 | "start": "ts-node app.ts" 7 | }, 8 | "keywords": [], 9 | "author": "", 10 | "license": "ISC", 11 | "description": "", 12 | "dependencies": { 13 | "@solana/web3.js": "^2.0.0", 14 | "dotenv": "^16.4.7" 15 | }, 16 | "devDependencies": { 17 | "@types/node": "^22.10.5", 18 | "ts-node": "^10.9.2", 19 | "typescript": "^5.7.2" 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /solana/web3.js-2.0/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es2020", 4 | "module": "commonjs", 5 | "resolveJsonModule": true, 6 | "esModuleInterop": true, 7 | "forceConsistentCasingInFileNames": true, 8 | "strict": true, 9 | "skipLibCheck": true 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /solana/yellowstone/python/pumpfun/generated/__init__.py: -------------------------------------------------------------------------------- 1 | import sys 2 | from pathlib import Path 3 | 4 | current_dir = str(Path(__file__).parent) 5 | if current_dir not in sys.path: 6 | sys.path.append(current_dir) 7 | 8 | from . import geyser_pb2 9 | from . import geyser_pb2_grpc 10 | from . import solana_storage_pb2 11 | from . import solana_storage_pb2_grpc -------------------------------------------------------------------------------- /solana/yellowstone/python/pumpfun/requirements.txt: -------------------------------------------------------------------------------- 1 | click==8.1.7 2 | grpcio==1.63.0 3 | grpcio-tools==1.63.0 4 | protobuf==5.26.1 5 | base58==2.1.1 -------------------------------------------------------------------------------- /solana/yellowstone/rust/pumpfun/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "yellowstone-pump-fun" 3 | version = "0.1.0" 4 | edition = "2021" 5 | 6 | [dependencies] 7 | tokio = { version = "1.28", features = ["rt-multi-thread", "macros"] } 8 | yellowstone-grpc-client = "6.0.0" 9 | yellowstone-grpc-proto = "6.0.0" 10 | futures = "0.3" 11 | log = "0.4" 12 | env_logger = "0.11.8" 13 | bs58 = "0.5.0" 14 | tonic = "0.12.3" -------------------------------------------------------------------------------- /stacks/stacks-nft/.gitignore: -------------------------------------------------------------------------------- 1 | **/settings/Mainnet.toml 2 | **/settings/Testnet.toml 3 | .requirements/ 4 | history.txt -------------------------------------------------------------------------------- /stacks/stacks-nft/.vscode/settings.json: -------------------------------------------------------------------------------- 1 | 2 | { 3 | "deno.enable": true, 4 | "files.eol": "\n" 5 | } 6 | -------------------------------------------------------------------------------- /stacks/stacks-nft/.vscode/tasks.json: -------------------------------------------------------------------------------- 1 | 2 | { 3 | "version": "2.0.0", 4 | "tasks": [ 5 | { 6 | "label": "check contracts", 7 | "group": "test", 8 | "type": "shell", 9 | "command": "clarinet check" 10 | }, 11 | { 12 | "label": "test contracts", 13 | "group": "test", 14 | "type": "shell", 15 | "command": "clarinet test" 16 | } 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /stacks/stacks-nft/Clarinet.toml: -------------------------------------------------------------------------------- 1 | 2 | [project] 3 | name = "nft-project" 4 | authors = [] 5 | telemetry = false 6 | cache_dir = "./.requirements" 7 | 8 | [contracts.nft-factory] 9 | path = "contracts/nft-factory.clar" 10 | depends_on = ["nft-trait"] 11 | 12 | [repl.analysis] 13 | passes = ["check_checker"] 14 | check_checker = { trusted_sender = false, trusted_caller = false, callee_filter = false } -------------------------------------------------------------------------------- /stacks/stacks-nft/contracts/nft-trait.clar: -------------------------------------------------------------------------------- 1 | (define-trait nft-trait 2 | ( 3 | ;; Last token ID, limited to uint range 4 | (get-last-token-id () (response uint uint)) 5 | 6 | ;; URI for metadata associated with the token 7 | (get-token-uri (uint) (response (optional (string-ascii 256)) uint)) 8 | 9 | ;; Owner of a given token identifier 10 | (get-owner (uint) (response (optional principal) uint)) 11 | 12 | ;; Transfer from the sender to a new principal 13 | (transfer (uint principal principal) (response bool uint)) 14 | ) 15 | ) -------------------------------------------------------------------------------- /stacks/stacks-smart-contract/.gitignore: -------------------------------------------------------------------------------- 1 | **/settings/Mainnet.toml 2 | **/settings/Testnet.toml 3 | .requirements/ 4 | history.txt -------------------------------------------------------------------------------- /stacks/stacks-smart-contract/.vscode/settings.json: -------------------------------------------------------------------------------- 1 | 2 | { 3 | "deno.enable": true, 4 | "files.eol": "\n" 5 | } 6 | -------------------------------------------------------------------------------- /stacks/stacks-smart-contract/.vscode/tasks.json: -------------------------------------------------------------------------------- 1 | 2 | { 3 | "version": "2.0.0", 4 | "tasks": [ 5 | { 6 | "label": "check contracts", 7 | "group": "test", 8 | "type": "shell", 9 | "command": "clarinet check" 10 | }, 11 | { 12 | "label": "test contracts", 13 | "group": "test", 14 | "type": "shell", 15 | "command": "clarinet test" 16 | } 17 | ] 18 | } 19 | -------------------------------------------------------------------------------- /stacks/stacks-smart-contract/contracts/storage-contract.clar: -------------------------------------------------------------------------------- 1 | ;; contracts/storage-contract.clar 2 | 3 | ;; define variables 4 | (define-data-var storage (string-utf8 500) u"initial value") 5 | 6 | ;; define public get function 7 | (define-read-only (get-storage) 8 | (var-get storage) 9 | ) 10 | 11 | ;; define public write function 12 | ;; #[allow(unchecked_data)] 13 | (define-public (set-storage (message (string-utf8 500))) 14 | (ok (var-set storage message)) 15 | ) --------------------------------------------------------------------------------