Skip to content

Instantly share code, notes, and snippets.

@shobhitic
shobhitic / AllowedMarketplacesNFT.sol
Last active January 13, 2023 04:39
Block/Censor NFT marketplaces that don't honour royalties - https://www.youtube.com/watch?v=pdvnUMz1U8o
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
import "@openzeppelin/contracts@4.7.3/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts@4.7.3/access/Ownable.sol";
import "@openzeppelin/contracts@4.7.3/utils/Counters.sol";
contract MyToken is ERC721, Ownable {
using Counters for Counters.Counter;
@shobhitic
shobhitic / Attack.sol
Last active September 10, 2022 09:24
ReEntrancy Attack in Solidity - https://www.youtube.com/watch?v=6bQvKCKrATM
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
import "./Bank.sol";
contract Attack {
Bank public bank;
constructor (address _bank) {
bank = Bank(_bank);
@shobhitic
shobhitic / MyToken.sol
Last active March 20, 2024 19:24
ERC20 Permit OpenZeppelin Tutorial - https://www.youtube.com/watch?v=lFKcga4Y6Ys
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
import "@openzeppelin/contracts@4.7.3/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts@4.7.3/token/ERC20/extensions/draft-ERC20Permit.sol";
contract MyToken is ERC20, ERC20Permit {
constructor() ERC20("MyToken", "MTK") ERC20Permit("MyToken") {}
function mint(address to, uint256 value) external {
@shobhitic
shobhitic / ContractA.sol
Last active August 30, 2022 10:35
Call methods of a smart contract from another - https://www.youtube.com/watch?v=1GeejH5RqeQ
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.16;
import "./ContractC.sol";
import "./InterfaceA.sol";
contract ContractA {
// call with interface
// call with contract
// with data
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
import "@openzeppelin/contracts@4.7.3/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts@4.7.3/token/ERC721/extensions/ERC721URIStorage.sol";
import "@openzeppelin/contracts@4.7.3/access/Ownable.sol";
import "@openzeppelin/contracts@4.7.3/utils/cryptography/draft-EIP712.sol";
contract LazyNFT is ERC721, ERC721URIStorage, Ownable, EIP712 {
string private constant SIGNING_DOMAIN = "Voucher-Domain";
@shobhitic
shobhitic / FreeMintToken.sol
Last active January 20, 2023 18:57
Free Mint NFT Smart Contract + UI - https://www.youtube.com/watch?v=5tSKO9WjF7E
// SPDX-License-Identifier: MIT
// Made by @Web3Club
pragma solidity ^0.8.4;
import "erc721a/contracts/ERC721A.sol";
contract FreeMintToken is ERC721A {
uint256 public constant USER_LIMIT = 10;
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
import "@openzeppelin/contracts@4.7.1/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts@4.7.1/access/Ownable.sol";
import "@openzeppelin/contracts@4.7.1/utils/Counters.sol";
contract MyToken is ERC721, Ownable {
using Counters for Counters.Counter;
@shobhitic
shobhitic / ERC721r.sol
Last active January 1, 2023 23:12
Mint random NFTs from a smart contract - https://www.youtube.com/watch?v=WV2cTebHQi8
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/token/ERC721/IERC721.sol";
import "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol";
import "@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol";
import "@openzeppelin/contracts/utils/Address.sol";
import "@openzeppelin/contracts/utils/Context.sol";
import "@openzeppelin/contracts/utils/Strings.sol";
@shobhitic
shobhitic / Soulbound.sol
Last active March 9, 2024 07:45
Soulbound or Account bound non transferable NFT - https://youtu.be/90vWC4Z8aPo
// Try using this as URI ipfs://bafkreic6ov4qo4ucd4g4uuyve4h72nc4y2lg7ugtq3n3vxnfp3lojvtmdu
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
import "@openzeppelin/contracts@4.7.0/token/ERC721/ERC721.sol";
import "@openzeppelin/contracts@4.7.0/token/ERC721/extensions/ERC721URIStorage.sol";
import "@openzeppelin/contracts@4.7.0/access/Ownable.sol";
import "@openzeppelin/contracts@4.7.0/utils/Counters.sol";
@shobhitic
shobhitic / BASENFT.sol
Last active March 17, 2024 20:46
Generate BaseURI and bulk upload NFTs - https://www.youtube.com/watch?v=GU2ZHXbrt90
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.15;
import "erc721a/contracts/ERC721A.sol";
contract BASENFT is ERC721A {
constructor() ERC721A("BASE URI NFT", "BUN") {}
function mint(uint256 quantity) external payable {
// `_mint`'s second argument now takes in a `quantity`, not a `tokenId`.