├── .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 |
6 |
--------------------------------------------------------------------------------
/ethereum/blink-starter-monad/public/icon-x.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/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 |
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 |
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 |
19 |
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 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/sample-dapps/solana-staking-ui/public/window.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/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;
12 | address: Address;
13 | }
14 |
15 | export async function getBalance({
16 | rpc,
17 | address
18 | }: GetBalanceProps): Promise {
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 |
9 |
10 |
11 |
12 | );
13 | }
14 |
--------------------------------------------------------------------------------
/sample-dapps/solana-token-maker/components/Spinner.tsx:
--------------------------------------------------------------------------------
1 | const Spinner = () => (
2 |
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 |
7 |
8 | NFTs
9 |
10 |
11 |
12 |
13 |
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) {
7 | return (
8 |
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 | Access Denied
7 |
8 | {
11 | e.preventDefault()
12 | signIn()
13 | }}
14 | >
15 | You must be signed in to view this page
16 |
17 |
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 |
9 | {children}
10 |
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 | ///
2 | ///
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 |
6 | This page is protected by Middleware
7 | Only admin users can see this page.
8 |
9 | To learn more about the NextAuth middleware see
10 |
11 | the docs
12 |
13 | .
14 |
15 |
16 | )
17 | }
18 |
--------------------------------------------------------------------------------
/solana/authentication/pages/index.tsx:
--------------------------------------------------------------------------------
1 | import Layout from "../components/layout"
2 |
3 | export default function IndexPage() {
4 | return (
5 |
6 | NextAuth.js Example
7 |
8 | This is an example site to demonstrate how to use{" "}
9 | NextAuth.js for authentication.
10 |
11 |
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 |
9 | {JSON.stringify(data, null, 2)}
10 |
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 | ///
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-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(
15 |
16 | {/* Render Results Here */}
17 |
18 |
)
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
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 |
8 |
9 |
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 | )
--------------------------------------------------------------------------------