{"id":18541759,"url":"https://github.com/umarluqman/geospatial-nft-marketplace","last_synced_at":"2025-05-15T04:09:47.980Z","repository":{"id":113542367,"uuid":"378947767","full_name":"umarluqman/geospatial-nft-marketplace","owner":"umarluqman","description":null,"archived":false,"fork":false,"pushed_at":"2021-06-21T13:54:15.000Z","size":432,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-02-17T08:34:27.814Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/umarluqman.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-06-21T13:54:14.000Z","updated_at":"2023-03-07T12:56:23.000Z","dependencies_parsed_at":null,"dependency_job_id":"8345c842-c3ba-4c3b-b093-fe2b6f664ac9","html_url":"https://github.com/umarluqman/geospatial-nft-marketplace","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":"scaffold-eth/scaffold-eth","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/umarluqman%2Fgeospatial-nft-marketplace","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/umarluqman%2Fgeospatial-nft-marketplace/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/umarluqman%2Fgeospatial-nft-marketplace/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/umarluqman%2Fgeospatial-nft-marketplace/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/umarluqman","download_url":"https://codeload.github.com/umarluqman/geospatial-nft-marketplace/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254270656,"owners_count":22042860,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-06T20:06:09.123Z","updated_at":"2025-05-15T04:09:42.970Z","avatar_url":"https://github.com/umarluqman.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🏗 scaffold-eth\n\n\u003e is everything you need to get started building decentralized applications on Ethereum! 🚀 \n\n---\n\n\n#### [ 🏃‍♀️ Quick Start ](https://github.com/austintgriffith/scaffold-eth#%EF%B8%8F-quick-start)\n\n#### [ 🔭 Learning Solidity ](https://github.com/austintgriffith/scaffold-eth#-learning-solidity)\n\n#### [ 📡 Deploy ](https://github.com/austintgriffith/scaffold-eth#-deploy)\n\n#### [ 📺 Frontend](https://github.com/austintgriffith/scaffold-eth#-frontend)\n- [ 🛰 Providers ](https://github.com/austintgriffith/scaffold-eth#-providers)\n- [ 🖇 Hooks ](https://github.com/austintgriffith/scaffold-eth#-hooks)\n- [ 📦 Components ](https://github.com/austintgriffith/scaffold-eth#-components)\n- [ 🖲 UI Library ](https://github.com/austintgriffith/scaffold-eth#-ui-library)\n- [ ⛑ Helpers ](https://github.com/austintgriffith/scaffold-eth#-helpers)\n- [ 🎚 Extras ](https://github.com/austintgriffith/scaffold-eth#-extras)\n-  \u003cB\u003e [ 🛳 Ship it! ](https://github.com/austintgriffith/scaffold-eth#-ship-it) \u003c/B\u003e\n\n#### [ 🚩 Challenges ](https://github.com/austintgriffith/scaffold-eth#-challenges)\n- [ 🥩 Staking App](https://github.com/austintgriffith/scaffold-eth/tree/challenge-1-decentralized-staking)\n- [ 🏵 Token Vendor ](https://github.com/austintgriffith/scaffold-eth/tree/challenge-2-token-vendor)\n\n#### [ 👩‍💻 Examples \u0026 Tutorials ](https://github.com/austintgriffith/scaffold-eth#-examples-and-tutorials)\n- [ 🎟 Simple NFT ](https://github.com/austintgriffith/scaffold-eth/tree/simple-nft-example)\n\n#### [ Built with 🏗 scaffold-eth ](https://github.com/austintgriffith/scaffold-eth#-built-with--scaffold-eth)\n- [ 🎨 Nifty.ink ](https://nifty.ink) ([code](https://github.com/austintgriffith/scaffold-eth/tree/nifty-ink-dev))\n- [ 🧑‍🎤PunkWallet.io ](https://punkwallet.io/) ([code](https://github.com/austintgriffith/scaffold-eth/tree/punk-wallet))\n\n#### [🌉 Infrastructure ](https://github.com/austintgriffith/scaffold-eth#-infrastructure)\n\n- [ 🛰 The Graph ](https://github.com/austintgriffith/scaffold-eth#-using-the-graph)\n- [ 🔬 Tenderly ](https://github.com/austintgriffith/scaffold-eth#-using-tenderly)\n- [ 🌐 Etherscan ](https://github.com/austintgriffith/scaffold-eth#-etherscan)\n- [ 🔶 Infura ](https://github.com/austintgriffith/scaffold-eth#-using-infura)\n-  🟪 [ Blocknative ](https://github.com/austintgriffith/scaffold-eth#-blocknative)\n\n|-   \u003cB\u003e [ 📠 Legacy Content ](https://github.com/austintgriffith/scaffold-eth#-legacy-content) \u003c/B\u003e - | - \u003cB\u003e [ 💬 Support Chat ](https://github.com/austintgriffith/scaffold-eth#-support-chat) \u003c/B\u003e -|\n\n[![Gitpod ready-to-code](https://img.shields.io/badge/Gitpod-ready--to--code-blue?logo=gitpod)](https://gitpod.io/#https://github.com/austintgriffith/scaffold-eth)\n\n\n---\n\n[![ethdenvervideo](https://user-images.githubusercontent.com/2653167/109873369-e2c58c00-7c2a-11eb-8adf-0ec4b8dcae1e.png)](https://youtu.be/33gnKe7ttCc?t=477)\n\n\n---\n---\n---\n\n# 🏃‍♀️ Quick Start\n\nrequired: [Node](https://nodejs.org/dist/latest-v12.x/) plus [Yarn](https://classic.yarnpkg.com/en/docs/install/) and [Git](https://git-scm.com/downloads)\n\n\n```bash\ngit clone https://github.com/austintgriffith/scaffold-eth.git\ncd scaffold-eth\nyarn install\nyarn chain\n```\n\n\u003e in a second terminal window:\n\n```bash\ncd scaffold-eth\nyarn start\n```\n\n\u003e in a third terminal window:\n\n```bash\ncd scaffold-eth\nyarn deploy\n```\n\n🔏 Edit your smart contract `YourContract.sol` in `packages/hardhat/contracts`\n\n📝 Edit your frontend `App.jsx` in `packages/react-app/src`\n\n💼 Edit your deployment script `deploy.js` in `packages/hardhat/scripts`\n\n📱 Open http://localhost:3000 to see the app\n\n🏗 scaffold-eth is a hackthon stack for quick product prototyping on Ethereum.\n\n👩‍🔬 This scaffolding leverages state of the art tooling from the ecosystem.\n\n🧪 It is a free standing dapp so you can learn by making small changes.\n\n\n\u003e *After installing*, your dev environment should look like this:\n\n![image](https://user-images.githubusercontent.com/2653167/109870279-24ecce80-7c27-11eb-91f3-b2c4febac118.png)\n\n\n\u003e React dev server, HardHat blockchain, deploy terminal, code IDE, and frontend browser.\n\n✏️ Make small changes to `YourContract.sol` and watch your app auto update!\n\n\n🔁 You can `yarn deploy` any time and get a fresh new contract in the frontend:\n\n\n![deploy](https://user-images.githubusercontent.com/2653167/93149199-f8fa8280-f6b2-11ea-9da7-3b26413ec8ab.gif)\n\n\n💵 Each browser has an account in the top right and you can use the faucet (bottom left) to get ⛽️  testnet eth for gas:\n\n\n![faucet](https://user-images.githubusercontent.com/2653167/93150077-6c04f880-f6b5-11ea-9ee8-5c646b5b7afc.gif)\n\n\n\n\n🔨Once you have funds, you can call `setPurpose` on your contract and \"write\" to the `purpose` storage:\n\n\n![setp](https://user-images.githubusercontent.com/2653167/93229761-2d625300-f734-11ea-9036-44a75429ef0c.gif)\n\n\nLook for the [HardHat](https://hardhat.org) console.log() output in the `yarn chain` terminal:\n\n![image](https://user-images.githubusercontent.com/2653167/93687934-2f534b80-fa7f-11ea-84b2-c0ba99533dc2.png)\n\n\u003e ⚗️ Spend some time tinkering with `YourContract.sol`\n\n---\n\n===================================================== [⏫ back to the top ⏫](https://github.com/austintgriffith/scaffold-eth#-scaffold-eth)\n\n---\n---\n\n# 🔭 Learning Solidity\n\n📕 Read the docs: https://docs.soliditylang.org\n\n📚 Go through each topic from [solidity by example](https://solidity-by-example.org) editing `YourContract.sol` in **🏗 scaffold-eth**\n\n- [Primitive Data Types](https://solidity-by-example.org/primitives/)\n- [Mappings](https://solidity-by-example.org/mapping/)\n- [Structs](https://solidity-by-example.org/structs/)\n- [Modifiers](https://solidity-by-example.org/function-modifier/)\n- [Events](https://solidity-by-example.org/events/)\n- [Inheritance](https://solidity-by-example.org/inheritance/)\n- [Payable](https://solidity-by-example.org/payable/)\n- [Fallback](https://solidity-by-example.org/fallback/)\n\n📧 Learn all the [Solidity globals and units](https://solidity.readthedocs.io/en/v0.6.6/units-and-global-variables.html)\n\n👨‍🏫 Start super simple with a counter: `uint8 public count = 1;`\n\n⬇️ Then a `function dec() public {}` that does a `count = count - 1;`\n\n![image](https://user-images.githubusercontent.com/2653167/93150263-dae25180-f6b5-11ea-94e1-b24ab2a63fa5.png)\n\n\n🔬  What happens when you subtract 1 from 0? Try it out in the app to see what happens!\n\n![underflow](https://user-images.githubusercontent.com/2653167/93688066-46466d80-fa80-11ea-85df-81fbafa46575.gif)\n\n🚽 UNDERFLOW!?! (🚑 [Solidity \u003e0.8.0](https://docs.soliditylang.org/en/v0.8.0/) will catch this!)\n\n🧫 You can iterate and learn as you go. Test your assumptions!\n\n🔐 Global variables like `msg.sender` and `msg.value` are cryptographically backed and can be used to make rules\n\n📝 Keep this [cheat sheet](https://solidity.readthedocs.io/en/v0.7.0/cheatsheet.html?highlight=global#global-variables) handy\n\n⏳ Maybe we could use `block.timestamp` or `block.number` to track time in our contract\n\n🔏 Or maybe keep track of an `address public owner;` then make a rule like `require( msg.sender == owner );` for an important function\n\n🧾 Maybe create a smart contract that keeps track of a `mapping ( address =\u003e uint256 ) public balance;`\n\n🏦 It could be like a decentralized bank that you `function deposit() public payable {}` and `withdraw()`\n\n📟 Events are really handy for signaling to the frontend. [Read more about events here.](https://solidity-by-example.org/0.6/events/)\n\n📲 Spend some time in `App.jsx` in `packages/react-app/src` and learn about the 🛰 [Providers](https://github.com/austintgriffith/scaffold-eth#-web3-providers)\n\n⚠️ Big numbers are stored as objects: `formatEther` and `parseEther` (ethers.js) will help with WEI-\u003eETH and ETH-\u003eWEI.\n\n🧳 The single page (searchable) [ethers.js docs](https://docs.ethers.io/v5/single-page/) are pretty great too.\n\n🐜 The UI framework `Ant Design` has a [bunch of great components](https://ant.design/components/overview/).\n\n📃 Check the console log for your app to see some extra output from hooks like `useContractReader` and `useEventListener`.\n\n🏗 You'll notice the `\u003cContract /\u003e` component that displays the dynamic form as scaffolding for interacting with your contract.\n\n🔲 Try making a `\u003cButton/\u003e` that calls `writeContracts.YourContract.setPurpose(\"👋 Hello World\")` to explore how your UI might work...\n\n💬 Wrap the call to `writeContracts` with a `tx()` helper that uses BlockNative's [Notify.js](https://www.blocknative.com/notify).\n\n🧬 Next learn about [structs](https://solidity-by-example.org/0.6/structs/) in Solidity.\n\n🗳 Maybe an make an array `YourStructName[] public proposals;` that could call be voted on with `function vote() public {}`\n\n🔭 Your dev environment is perfect for *testing assumptions* and learning by prototyping.\n\n📝 Next learn about the [fallback function](https://solidity-by-example.org/0.6/fallback/)\n\n💸 Maybe add a `receive() external payable {}` so your contract will accept ETH?\n\n🚁 OH! Programming decentralized money! 😎 So rad!\n\n---\n\n===================================================== [⏫ back to the top ⏫](https://github.com/austintgriffith/scaffold-eth#-scaffold-eth)\n\n---\n---\n\n\n# 📡 Deploy\n\n\n🛰 Ready to deploy to a testnet? Change the `defaultNetwork` in `packages/hardhat/hardhat.config.js`\n\n🔐 Generate a deploy account with `yarn generate` and view it with `yarn account`\n\n💵 Fund your deployer account (pro tip: use an [instant wallet](https://instantwallet.io) to send funds to the QR code from `yarn account`)\n\n\u003e Deploy your contract:\n\n```bash\nyarn deploy\n```\n\n---\n\n===================================================== [⏫ back to the top ⏫](https://github.com/austintgriffith/scaffold-eth#-scaffold-eth)\n\n\n---\n---\n# 📺 Frontend\n\n\u003e Edit your frontend `App.jsx` in `packages/react-app/src`\n\n📡 Make sure your `targetNetwork` is the same as 👷‍♀️ HardHat's `defaultNetwork` (where you deployed your contracts).\n\n![image](https://user-images.githubusercontent.com/2653167/110500412-68778a80-80b6-11eb-91bd-194d47d62771.png)\n\n\n🤡 Adjust your debugging settings as needed:\n\n![image](https://user-images.githubusercontent.com/2653167/110499550-95776d80-80b5-11eb-8024-287878b180d5.png)\n\n\n---\n\n## 🔏 Providers:\n\nProviders are your connections to different blockchains.\n\nThe frontend has three different providers that provide different levels of access to different chains:\n\n`mainnetProvider`: (read only) [Alchemy](https://alchemyapi.io/) or [Infura](https://infura.io/) connection to main [Ethereum](https://ethereum.org/developers/) network (and contracts already deployed like [DAI](https://etherscan.io/address/0x6b175474e89094c44da98b954eedeac495271d0f#code) or [Uniswap](https://etherscan.io/address/0x2a1530c4c41db0b0b2bb646cb5eb1a67b7158667)).\n\n`localProvider`: local [HardHat](https://hardhat.org) accounts, used to read from _your_ contracts (`.env` file points you at testnet or mainnet)\n\n`injectedProvider`: your personal [MetaMask](https://metamask.io/download.html), [WalletConnect](https://walletconnect.org/apps) via [Argent](https://www.argent.xyz/), or other injected wallet (generates [burner-provider](https://www.npmjs.com/package/burner-provider) on page load)\n\n![image](https://user-images.githubusercontent.com/2653167/110499705-bc35a400-80b5-11eb-826d-44815b89296c.png)\n\n\n---\n\n## 🖇 Hooks:\n\n![image](https://user-images.githubusercontent.com/2653167/110499834-dcfdf980-80b5-11eb-9d2d-de7046bf5c2b.png)\n\n\nCommonly used Ethereum hooks located in `packages/react-app/src/`:\n\n\n`usePoller(fn, delay)`: runs a function on app load and then on a custom interval\n\n```jsx\nusePoller(() =\u003e {\n  //do something cool at start and then every three seconds\n}, 3000);\n```\n\n\u003cbr/\u003e\n\n`useBalance(address, provider, [pollTime])`: poll for the balance of an address from a provider\n\n```js\nconst localBalance = useBalance(address, localProvider);\n```\n\n\u003cbr/\u003e\n\n`useBlockNumber(provider,[pollTime])`: get current block number from a provider\n\n```js\nconst blockNumber = useBlockNumber(props.provider);\n```\n\n\u003cbr/\u003e\n\n`useGasPrice([speed])`: gets current \"fast\" price from [ethgasstation](https://ethgasstation.info)\n\n```js\nconst gasPrice = useGasPrice();\n```\n\n\u003cbr/\u003e\n\n`useExchangePrice(mainnetProvider, [pollTime])`: gets current price of Ethereum on the Uniswap exchange\n\n```js\nconst price = useExchangePrice(mainnetProvider);\n```\n\n\u003cbr/\u003e\n\n`useContractLoader(provider)`: loads your smart contract interface\n\n```js\nconst readContracts = useContractLoader(localProvider);\nconst writeContracts = useContractLoader(injectedProvider);\n```\n\n\u003cbr/\u003e\n\n`useContractReader(contracts, contractName, variableName, [pollTime])`: reads a variable from your contract and keeps it in the state\n\n```js\nconst title = useContractReader(props.readContracts, contractName, \"title\");\nconst owner = useContractReader(props.readContracts, contractName, \"owner\");\n```\n\n\u003cbr/\u003e\n\n`useEventListener(contracts, contractName, eventName, [provider], [startBlock])`: listens for events from a smart contract and keeps them in the state\n\n```js\nconst ownerUpdates = useEventListener(\n  readContracts,\n  contractName,\n  \"UpdateOwner\",\n  props.localProvider,\n  1\n);\n```\n\n---\n\n## 📦 Components:\n\n![image](https://user-images.githubusercontent.com/2653167/110500019-04ed5d00-80b6-11eb-97a4-74068fa90846.png)\n\n\nYour commonly used React Ethereum components located in `packages/react-app/src/`:\n\n\u003cbr/\u003e\n\n📬 `\u003cAddress /\u003e`: A simple display for an Ethereum address that uses a [Blockie](https://www.npmjs.com/package/ethereum-blockies), lets you copy, and links to [Etherescan](https://etherscan.io/).\n\n```jsx\n  \u003cAddress value={address} /\u003e\n  \u003cAddress value={address} size=\"short\" /\u003e\n  \u003cAddress value={address} size=\"long\" blockexplorer=\"https://blockscout.com/poa/xdai/address/\"/\u003e\n  \u003cAddress value={address} ensProvider={mainnetProvider}/\u003e\n```\n\n![ensaddress](https://user-images.githubusercontent.com/2653167/80522487-e375fd80-8949-11ea-84fd-0de3eab5cd03.gif)\n\n\u003cbr/\u003e\n\n🖋 `\u003cAddressInput /\u003e`: An input box you control with useState for an Ethereum address that uses a [Blockie](https://www.npmjs.com/package/ethereum-blockies) and ENS lookup/display.\n\n```jsx\n  const [ address, setAddress ] = useState(\"\")\n  \u003cAddressInput\n    value={address}\n    ensProvider={props.ensProvider}\n    onChange={(address)=\u003e{\n      setAddress(address)\n    }}\n  /\u003e\n```\n\n\u003cbr/\u003e\n\n💵 `\u003cBalance /\u003e`: Displays the balance of an address in either dollars or decimal.\n\n```jsx\n\u003cBalance\n  address={address}\n  provider={injectedProvider}\n  dollarMultiplier={price}\n/\u003e\n```\n\n![balance](https://user-images.githubusercontent.com/2653167/80522919-86c71280-894a-11ea-8f61-70bac7a72106.gif)\n\n\u003cbr/\u003e\n\n\u003cbr/\u003e\n\n👤 `\u003cAccount /\u003e`: Allows your users to start with an Ethereum address on page load but upgrade to a more secure, injected provider, using [Web3Modal](https://web3modal.com/). It will track your `address` and `localProvider` in your app's state:\n\n```jsx\nconst [address, setAddress] = useState();\nconst [injectedProvider, setInjectedProvider] = useState();\nconst price = useExchangePrice(mainnetProvider);\n```\n\n```jsx\n\u003cAccount\n  address={address}\n  setAddress={setAddress}\n  localProvider={localProvider}\n  injectedProvider={injectedProvider}\n  setInjectedProvider={setInjectedProvider}\n  dollarMultiplier={price}\n/\u003e\n```\n\n![account](https://user-images.githubusercontent.com/2653167/80527048-fdffa500-8950-11ea-9a0f-576be87e4368.gif)\n\n\u003e 💡 **Notice**: the `\u003cAccount /\u003e` component will call `setAddress` and `setInjectedProvider` for you.\n\n---\n\n===================================================== [⏫ back to the top ⏫](https://github.com/austintgriffith/scaffold-eth#-scaffold-eth)\n\n---\n\n## 🖲 UI Library\n\n🐜 [Ant.design](https://ant.design/components/button/) is a fantastic UI library with components like the [grids](https://ant.design/components/grid/), [menus](https://ant.design/components/menu/), [dates](https://ant.design/components/date-picker/), [times](https://ant.design/components/time-picker/), [buttons](https://ant.design/components/button/), etc.\n\n---\n\n## ⛑ Helpers:\n\n`Transactor`: The transactor returns a `tx()` function to make running and tracking transactions as simple and standardized as possible. We will bring in [BlockNative's Notify](https://www.blocknative.com/notify) library to track our testnet and mainnet transactions.\n\n```js\nconst tx = Transactor(props.injectedProvider, props.gasPrice);\n```\n\nThen you can use the `tx()` function to send funds and write to your smart contracts:\n\n```js\ntx({\n  to: readContracts[contractName].address,\n  value: parseEther(\"0.001\"),\n});\n```\n\n```js\ntx(writeContracts[\"SmartContractWallet\"].updateOwner(newOwner));\n```\n\n\u003e ☢️ **Warning**: You will need to update the configuration for `react-app/src/helpers/Transactor.js` to use _your_ [BlockNative dappId](https://www.blocknative.com/notify)\n\n---\n\n## 🎚 Extras:\n\n🔑 Create wallet links to your app with `yarn wallet` and `yarn fundedwallet`\n\n⬇️ Installing a new package to your frontend? You need to `cd packages/react-app` and then `yarn add PACKAGE`\n\n⬇️ Installing a new package to your backend? You need to `cd packages/harthat` and then `yarn add PACKAGE`\n\n---\n\n## 🛳 Ship it!\n\nYou can deploy your app with:\n\n```bash\n\n# packge up the static site:\n\nyarn build\n\n# ship it!\n\nyarn surge\n\nOR\n\nyarn s3\n\nOR\n\nyarn ipfs\n```\n\n🚀 Good luck!\n\n---\n\n===================================================== [⏫ back to the top ⏫](https://github.com/austintgriffith/scaffold-eth#-scaffold-eth)\n\n---\n---\n\n## 🚩 Challenges\n\n1. [ 🥩 Decentralized Staking App ](https://github.com/austintgriffith/scaffold-eth/tree/challenge-1-decentralized-staking)\n\n2. [  🏵 Token Vendor ](https://github.com/austintgriffith/scaffold-eth/tree/challenge-2-token-vendor)\n\n---\n\n===================================================== [⏫ back to the top ⏫](https://github.com/austintgriffith/scaffold-eth#-scaffold-eth)\n\n---\n---\n\n## 📡 Examples and Tutorials\n\n(todo: insert all the cool active branches)\n\n\n| \u003cM\u003e [ tenderly ](https://github.com/austintgriffith/scaffold-eth/tree/tenderly) |\n| --- |\n| [ simple-nft-example ](https://github.com/austintgriffith/scaffold-eth/tree/simple-nft-example) |\n\n\n^^^ ⛏ \u003cb\u003ePR\u003c/b\u003e your 🏗 scaffold-eth branch!!! 🙏🙏🙏 ^^^\n\n---\n\n===================================================== [⏫ back to the top ⏫](https://github.com/austintgriffith/scaffold-eth#-scaffold-eth)\n\n---\n---\n\n# 🔨 Built with 🏗 scaffold-eth:\n\n[\u003cH3\u003e👩‍🎨 Nifty Ink\u003c/H3\u003e](https://nifty.ink)\n\nPaintings come to life as you \"ink\" new creations and trade them on Ethereum. A deep dive into 🖼 NFTs, 🐳 OpenSea, 🖍 react-canvas-draw, 🎨 react-color, and 🛬 onboarding user experience.\n\n🏃‍♂️ SpeedRun 📹 (TODO)\n\n[💾 Source Code ](https://github.com/austintgriffith/scaffold-eth/tree/nifty-ink-dev)\n\n\n[\u003cH3\u003e🧙‍♂️ Instant Wallet\u003c/H3\u003e](https://instantwallet.io)\n\nAn instant wallet running on xDAI insired by [xdai.io](https://xdai.io).\n\n\n[💾 Source Code ](https://github.com/austintgriffith/scaffold-eth/tree/instantwallet-dev-session)\n\n\n[\u003cH3\u003e🗳 Personal Token Voting\u003c/H3\u003e](https://medium.com/@austin_48503/personal-token-voting-73b44a598d8e)\n\nPoll your holders! Build an example emoji voting system with 🏗 \u003cb\u003escaffold-eth\u003c/b\u003e. 🔏 Cryptographically signed votes but tracked off-chain with 📡 Zapier and 📑 Google Sheets.\n\n[🏃‍♂️ SpeedRun 📹 ](https://youtu.be/Q5zgxcQtwWI)\n\n[💾 Source Code ](https://github.com/austintgriffith/scaffold-eth/tree/emoji-vote-dev)\n\n\n^^^ ⛏ PLEASE \u003cb\u003ePR\u003c/b\u003e your 🏗 scaffold-eth project in above!!! 🙏🙏🙏 ^^^\n\n---\n===================================================== [⏫ back to the top ⏫](https://github.com/austintgriffith/scaffold-eth#-scaffold-eth)\n\n---\n---\n\n# 📟 Infrastructure\n\n---\n\n## 🛰 Using The Graph\n\n[![thegraphplayvideo](https://user-images.githubusercontent.com/2653167/101052782-4664ee00-3544-11eb-8805-887ad4d1406e.png)\n](https://youtu.be/T5ylzOTkn-Q)\n\n[ 🎥 here is another Graph speed run tutorial video ](https://youtu.be/T5ylzOTkn-Q)\n\n\n---\n\n## 🔬 Using Tenderly\n[Tenderly](https://tenderly.co) is a platform for monitoring, alerting and trouble-shooting smart contracts. They also have a hardhat plugin and CLI tool that can be helpful for local development!\n\nHardhat Tenderly [announcement blog](https://blog.tenderly.co/level-up-your-smart-contract-productivity-using-hardhat-and-tenderly/) for reference.\n\n\n### Verifying contracts on Tenderly\nscaffold-eth includes the hardhat-tenderly plugin. When deploying to any of the following networks:\n```\n[\"kovan\",\"goerli\",\"mainnet\",\"rinkeby\",\"ropsten\",\"matic\",\"mumbai\",\"xDai\",\"POA\"]\n```\nYou can verify contracts as part of the `deploy.js` script. We have created a `tenderlyVerify()` helper function, which takes your contract name and its deployed address:\n```\nawait tenderlyVerify(\n  {contractName: \"YourContract\",\n   contractAddress: yourContract.address\n})\n```\nMake sure your target network is present in the hardhat networks config, then either update the default network in `hardhat.config.js` to your network of choice or run:\n```\nyarn deploy --network NETWORK_OF_CHOICE\n```\nOnce verified, they will then be available to view on Tenderly!\n\n\n\n[![TenderlyRun](https://user-images.githubusercontent.com/2653167/110502199-38c98200-80b8-11eb-8d79-a98bb1f39617.png)](https://www.youtube.com/watch?v=c04rrld1IiE\u0026t=47s)\n\n\n#### Exporting local Transactions\nOne of Tenderly's best features for builders is the ability to [upload local transactions](https://dashboard.tenderly.co/tx/main/0xb8f28a9cace2bdf6d10809b477c9c83e81ce1a1b2f75f35ddd19690bbc6612aa/local-transactions) so that you can use all of Tenderly's tools for analysis and debugging. You will need to create a [tenderly account](https://tenderly.co/) if you haven't already.\n\nExporting local transactions can be done using the [Tenderly CLI](https://github.com/tenderly/tenderly-cli). Installing the Tenderly CLI:\n```\nbrew tap tenderly/tenderly\nbrew install tenderly\n```\n_See alternative installation steps [here](https://github.com/tenderly/tenderly-cli#installation)_\n\nYou need to log in and configure for your local chain (including any forking information) - this can be done from any directory, but it probably makes sense to do under `/packages/hardhat` to ensure that local contracts are also uploaded with the local transaction (see more below!)\n```\ncd packages/hardhat\ntenderly login\ntenderly export init\n```\nYou can then take transaction hashes from your local chain and run the following from the `packages/hardhat` directory:\n```\ntenderly export \u003ctransactionHash\u003e\n```\nWhich will upload them to tenderly.co/dashboard!\n\nTenderly also allows users to debug smart contracts deployed to a local fork of some network (see `yarn fork`). To let Tenderly know that we are dealing with a fork, run the following command:\n\n```\ntenderly export init\n```\n\nCLI will ask you for your network's name and whether you are forking a public network. After choosing the right fork, your exporting will look something like this:\n\n```\ntenderly export \u003ctransactionHash\u003e --export-network \u003cnetworkName\u003e\n```\n\nNote that `tenderly.yaml` file stores information about all networks that you initialized for exporting transactions. There can be multiple of them in a single file. You only need the `--export-network` if you have more than one network in your tenderly.yaml config!\n\n**A quick note on local contracts:** if your local contracts are persisted in a place that Tenderly can find them, then they will also be uploaded as part of the local transaction `export`, which is one of the freshest features! We have added a call to `tenderly.persistArtifacts()` as part of the scaffold-eth deploy() script, which stores the contracts \u0026 meta-information in a `deployments` folder, so this should work out of the box.\n\nAnother pitfall when dealing with a local network (fork or not) is that you will not see the transaction hash if it fails. This happens because the hardhat detects an error while `eth_estimateGas` is executed. To prevent such behaviour, you can skip this estimation by passing a `gasLimit` override when making a call - an example of this is demonstrated in the `FunctionForm.jsx` file of the Contract component:\n```\nlet overrides = {}\n// Uncomment the next line if you want to skip the gas estimation for each transaction\n// overrides.gasLimit = hexlify(1200000);\nconst returned = await tx(contractFunction(...args, overrides));\n```\n\n**One gotcha** - Tenderly does not (currently) support yarn workspaces, so any imported solidity contracts need to be local to `packages/hardhat` for your contracts to be exported. You can achieve this by using [`nohoist`](https://classic.yarnpkg.com/blog/2018/02/15/nohoist/) - this has been done for `hardhat` so that we can export `console.sol` - see the top-level `package.json` to see how!\n```\n\"workspaces\": {\n  \"packages\": [\n    \"packages/*\"\n  ],\n  \"nohoist\": [\n    \"**/hardhat\",\n    \"**/hardhat/**\"\n  ]\n}\n```\n\n\n---\n\n## 🌐 Etherscan\nHardhat has a truly wonderful [`hardhat-etherscan` plugin](https://www.npmjs.com/package/@nomiclabs/hardhat-etherscan) that takes care of contract verification after deployment. You need to add the following to your `hardhat.config.js` imports:\n```\nrequire(\"@nomiclabs/hardhat-etherscan\");\n```\nThen add your etherscan API key to the module.exports:\n```\netherscan: {\n  // Your API key for Etherscan\n  // Obtain one at https://etherscan.io/\n  apiKey: \"YOUR-API-KEY-HERE\"\n}\n```\nVerifying is simple, assuming you are verifying a contract that you have just deployed from your hardhat setup - you just need to run the verify script, passing constructor arguments as an array if necessary (there is an example commented out in the `deploy.js`):\n```\nawait run(\"verify:verify\", {\n  address: yourContract.address,\n  // constructorArguments: args // If your contract has constructor arguments, you can pass them as an array\n})\n```\nYou only have to pass the contract because the plugin figures out which of the locally compiled contracts is the right one to verify. Pretty cool stuff!\n\n---\n\n## 🔶 Using Infura\n\nYou will need to update the `constants.js` in `packages/react-app/src` with [your own Infura ID](https://infura.io).\n\n---\n\n## 🟪 Blocknative\n\n\u003e update the `BLOCKNATIVE_DAPPID` in `packages/react-app/src/constants.js` with [your own Blocknative DappID](https://docs.blocknative.com/notify)\n\n---\n===================================================== [⏫ back to the top ⏫](https://github.com/austintgriffith/scaffold-eth#-scaffold-eth)\n\n---\n---\n\n\n## 📠 Legacy Content\n\n\n[\u003ch5\u003e🧫 Building on Ethereum in 2020 (research for this repo)\u003c/h5\u003e  ](https://medium.com/@austin_48503/building-on-ethereum-in-2020-dca52eda5f00)\n\n\n[![splash](https://user-images.githubusercontent.com/2653167/88085723-7ab2b180-cb43-11ea-832d-8db6efcbdc02.png)](https://www.youtube.com/watch?v=ShJZf5lsXiM\u0026feature=youtu.be\u0026t=19)\n\n---\n\n[\u003cH6\u003eTutorial 1: 🛠 Programming Decentralized Money\u003c/H6\u003e](https://medium.com/@austin_48503/programming-decentralized-money-300bacec3a4f)\n\nLearn the basics of 🏗 \u003cb\u003escaffold-eth\u003c/b\u003e and building on \u003cb\u003eEthereum\u003c/b\u003e. 👷‍♂️ HardHat, 📦 create-eth-app, 🔥 hot reloading smart contracts, 🛰 providers, 🔗 hooks, 🎛 components, and building a decentralized application.\n[🎥 Guided Tutorial](https://youtu.be/7rq3TPL-tgI)\n\n---\n\n\u003cH6\u003eTutorial 2: 🏵 The Token\u003c/H6\u003e\n\nLearn about tokens. [coming soon] What is a token? Why is it cool? How can I deploy one? Exotic mechanisms? (todo)\n\n---\n\n[\u003cH6\u003eTutorial 3: ⚖️ Minimum Viable Decentralized Exchange\u003c/H6\u003e](https://medium.com/@austin_48503/%EF%B8%8F-minimum-viable-exchange-d84f30bd0c90)\n\nLearn the basics of Automated Market Makers like 🦄 Uniswap. Learn how 💰Reserves affect the 📉 price, ⚖️ trading, and 💦 slippage from low liquidity.\n\n[🏃‍♀️ SpeedRun  📹](https://youtu.be/eP5w6Ger1EQ)\n\n---\n\n[\u003cH6\u003eTutorial 4: 🚀 Connecting ETH to IPFS\u003c/H6\u003e](https://medium.com/@austin_48503/tl-dr-scaffold-eth-ipfs-20fa35b11c35)\n\nBuild a simple IPFS application in 🏗 \u003cb\u003escaffold-eth\u003c/b\u003e to learn more about distributed file storage and content addressing.\n  [🎥 Live Tutorial](https://youtu.be/vqrLr5eOjLo?t=342)\n\n---\n\n\u003cH6\u003eTutorial 5: ⛽️GSN and Meta Transactions\u003c/H6\u003e\n\nLearn about to provide your users with better UX by abstracting away gas fees and blockchain mechanics.  (todo)\n\n\n---\n\n\n[\u003cH6\u003eTutorial 6: 🛰 Decentralized Deployment\u003c/H6\u003e](https://medium.com/@austin_48503/decentralized-deployment-7d975c9d5016)\n\nLearn how to deploy your smart contract to a production blockchain. Then deploy your applicaton to Surge, S3, and IPFS. Finally, register an ENS and point it at the decentralized content!  [🎥 Live Tutorial](https://youtu.be/vqrLr5eOjLo?t=1350)\n\n---\n\n\n## 💬 Support Chat\n\nJoin the telegram [support chat 💬](https://t.me/joinchat/KByvmRe5wkR-8F_zz6AjpA)  to ask questions and find others building with 🏗 scaffold-eth!\n\n---\n\n===================================================== [⏫ back to the top ⏫](https://github.com/austintgriffith/scaffold-eth#-scaffold-eth)\n\n---\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fumarluqman%2Fgeospatial-nft-marketplace","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fumarluqman%2Fgeospatial-nft-marketplace","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fumarluqman%2Fgeospatial-nft-marketplace/lists"}