{"id":26697664,"url":"https://github.com/nwthomas/yoink","last_synced_at":"2026-04-18T19:33:26.831Z","repository":{"id":328247364,"uuid":"467382996","full_name":"nwthomas/yoink","owner":"nwthomas","description":"Easily mint your own NFTs with custom attributes ⛏","archived":false,"fork":false,"pushed_at":"2022-08-23T04:27:46.000Z","size":281,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-12-13T03:48:25.738Z","etag":null,"topics":["nft","pfp","smart-contracts","social-media","solidity","twitter","typescript"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","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/nwthomas.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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-03-08T05:57:39.000Z","updated_at":"2025-09-09T06:38:34.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/nwthomas/yoink","commit_stats":null,"previous_names":["nwthomas/yoink"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/nwthomas/yoink","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nwthomas%2Fyoink","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nwthomas%2Fyoink/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nwthomas%2Fyoink/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nwthomas%2Fyoink/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nwthomas","download_url":"https://codeload.github.com/nwthomas/yoink/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nwthomas%2Fyoink/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31982742,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-18T17:30:12.329Z","status":"ssl_error","status_checked_at":"2026-04-18T17:29:59.069Z","response_time":103,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["nft","pfp","smart-contracts","social-media","solidity","twitter","typescript"],"created_at":"2025-03-26T21:29:36.134Z","updated_at":"2026-04-18T19:33:26.812Z","avatar_url":"https://github.com/nwthomas.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv\u003e\n    \u003ch1 style=\"width:100%;text-align:center;\"\u003eYOINK ⛏\u003c/h1\u003e\n\u003c/div\u003e\n\n## TABLE OF CONTENTS\n\n- [Description](#description)\n- [Getting Started](#getting-started)\n- [Deployment](#deployment)\n- [Technology Stack](#technology-stack)\n- [Testing](#testing)\n- [Acknowledgements](#acknowledgements)\n\n## DESCRIPTION\n\n\u003e NOTE: This contract is unaudited. If you use this, you assume all responsibility.\n\nSmart contracts for minting your own custom NFT tokens. This is incredibly useful for social media (e.g. Twitter's NFT profile pictures) as well as a variety of other use cases.\n\n## GETTING STARTED\n\nIf you want to use these contracts locally, you'll need to be prepared to find private keys for a service like [Alchemy](https://www.alchemy.com/) or [Infura](https://infura.io/) (either on Rinkeby or Mainnet) as well as private keys for your Ethereum wallets (again, on either Rinkeby or Mainnet).\n\nOnce you run `yarn install` and put the values from the paragraph above into a `.env` file (following the example of the `.env.example` file), you should be set to run any of the commands in the `package.json` file.\n\nThe big exception is if you want to run [Slither](https://github.com/crytic/slither). In order to use this, you'll need a stable build of Python installed on your machine, run a [Pipenv shell](https://pipenv.pypa.io/en/latest/), install with `pipenv install`, and use the command `pipenv slither .`.'\n\nFor your NFT token metadata, you should follow the [Metadata Standards](https://docs.opensea.io/docs/metadata-standards) which defines the schema as:\n\n```json\n{\n  \"attributes\": [\n    {\n      \"trait_type\": \"\u003cstring\u003e\",\n      \"value\": \"\u003cstring\u003e\"\n    }\n  ],\n  \"description\": \"\u003cstring\u003e\",\n  \"image\": \"\u003cstring url\u003e\",\n  \"name\": \"\u003cstring\u003e\"\n}\n```\n\nHere's an [example](https://www.nathanthomas.dev/nathan-token-metadata.json) for my own token.\n\nNote that you can either feed the `mintNFT` function a URL reference to the JSON file or actually send an object as defined above due to the use of function overloading in the contract.\n\n## DEPLOYMENT\n\nI made the decision to setup this contract to revolve around [Frame](https://frame.sh/), a service that will allow you to deploy using your hardware wallets if you so choose.\n\nPlease go to their website and follow their setup steps. Once complete, copy the `.env.example` and fill in the following fields:\n\n```\n# Etherscan Secret Key\nETHERSCAN_API_KEY=\u003csecret key here\u003e\n\n# Mainnet Secret Keys\nMAINNET_APP_SECRET_KEY=\u003csecret key here\u003e\nMAINNET_WALLET_PRIVATE_KEY=\u003csecret key here\u003e\n\n# Rinkeby Secret Keys\nRINKEBY_APP_SECRET_KEY=\u003csecret key here\u003e\nRINKEBY_WALLET_PRIVATE_KEY=\u003csecret key here\u003e\n\n# Testing Keys\nREPORT_GAS=\u003cboolean\u003e\nCOIN_MARKET_CAP_API_KEY=\u003csecret key here\u003e\n```\n\nThe `MAINNET_APP_SECRET_KEY` and `RINKEBY_APP_SECRET_KEY` are what you would get from a service like Infura or Alchemy.\n\nThe `MAINNET_WALLET_PRIVATE_KEY` and `RINKEBY_WALLET_PRIVATE_KEY` are what you would get from MetaMask, although mainnet is actually set up for Frame in this repo at the moment. You can revert those changes in a few short steps and mimic the Rinkeby setup in `hardhat.config.ts` for Mainnet if you'd rather just use MetaMask to deploy instead of Frame.\n\n## TECHNOLOGY STACK\n\nThese are the main dependencies used in this repo (_Note: This list is not complete as I've left out minor dependencies_):\n\n- [TypeScript](https://www.typescriptlang.org/)\n- [Hardhat](https://hardhat.org/)\n- [Mocha](https://mochajs.org/)\n- [Chai](https://www.chaijs.com/)\n- [DotEnv](https://github.com/motdotla/dotenv)\n- [ESLint](https://eslint.org/)\n- [Nodemon](https://github.com/remy/nodemon)\n- [Prettier](https://prettier.io/)\n- [Solhint](https://github.com/protofire/solhint)\n- [Typechain](https://github.com/dethcrypto/TypeChain)\n- [Slither](https://github.com/crytic/slither)\n\n## TESTING\n\nA complete testing suite has been written in TypeScript utilizing [Hardhat](https://hardhat.org/), [Mocha](https://mochajs.org/), and [Chai](https://www.chaijs.com/). In addition, this repo makes use of the dependency [Hardhat Gas Reporter](https://github.com/cgewecke/hardhat-gas-reporter#readme) which will break down exactly how much gas each of the operations in the contract would cost on mainnet.\n\nIf you want to try running it, use the command `yarn test` in your terminal in the root of this repo after you have installed all dependencies with the command `yarn install`.\n\n## ACKNOWLEDGEMENTS\n\n- Thanks to my capstone project team in my code bootcamp for starting me down the Web3 and Solidity path\n- Thank you to Twitter for building a version of profile pictures that I got FOMO over\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnwthomas%2Fyoink","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnwthomas%2Fyoink","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnwthomas%2Fyoink/lists"}