Skip to content

Instantly share code, notes, and snippets.

@dabit3
Last active January 9, 2024 08:54
Show Gist options
  • Select an option

  • Save dabit3/52e818faa83449bb5303cb868aee78f5 to your computer and use it in GitHub Desktop.

Select an option

Save dabit3/52e818faa83449bb5303cb868aee78f5 to your computer and use it in GitHub Desktop.

Revisions

  1. dabit3 revised this gist Jul 20, 2021. 1 changed file with 2 additions and 2 deletions.
    4 changes: 2 additions & 2 deletions basicmarket.sol
    Original file line number Diff line number Diff line change
    @@ -117,7 +117,7 @@ contract NFTMarket is ReentrancyGuard {
    MarketItem[] memory items = new MarketItem[](unsoldItemCount);
    for (uint i = 0; i < itemCount; i++) {
    if (idToMarketItem[i + 1].owner == address(0)) {
    uint currentId = idToMarketItem[i + 1].itemId;
    uint currentId = i + 1;
    MarketItem storage currentItem = idToMarketItem[currentId];
    items[currentIndex] = currentItem;
    currentIndex += 1;
    @@ -141,7 +141,7 @@ contract NFTMarket is ReentrancyGuard {
    MarketItem[] memory items = new MarketItem[](itemCount);
    for (uint i = 0; i < totalItemCount; i++) {
    if (idToMarketItem[i + 1].owner == msg.sender) {
    uint currentId = idToMarketItem[i + 1].itemId;
    uint currentId = i + 1;
    MarketItem storage currentItem = idToMarketItem[currentId];
    items[currentIndex] = currentItem;
    currentIndex += 1;
  2. dabit3 revised this gist Jun 23, 2021. 1 changed file with 0 additions and 5 deletions.
    5 changes: 0 additions & 5 deletions basicmarket.sol
    Original file line number Diff line number Diff line change
    @@ -109,11 +109,6 @@ contract NFTMarket is ReentrancyGuard {
    payable(owner).transfer(listingPrice);
    }

    function fetchMarketItem(uint itemId) public view returns (MarketItem memory) {
    MarketItem memory item = idToMarketItem[itemId];
    return item;
    }

    function fetchMarketItems() public view returns (MarketItem[] memory) {
    uint itemCount = _itemIds.current();
    uint unsoldItemCount = _itemIds.current() - _itemsSold.current();
  3. dabit3 revised this gist Jun 23, 2021. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion basicmarket.sol
    Original file line number Diff line number Diff line change
    @@ -11,7 +11,7 @@ contract NFT is ERC721URIStorage {
    Counters.Counter private _tokenIds;
    address contractAddress;

    constructor(address marketplaceAddress) ERC721("Eat The Blocks NFTs", "ETBNFT") {
    constructor(address marketplaceAddress) ERC721("Nader's Digital Marketplace", "NDM") {
    contractAddress = marketplaceAddress;
    }

  4. dabit3 revised this gist Jun 23, 2021. 1 changed file with 10 additions and 3 deletions.
    13 changes: 10 additions & 3 deletions basicmarket.sol
    Original file line number Diff line number Diff line change
    @@ -30,7 +30,13 @@ contract NFTMarket is ReentrancyGuard {
    using Counters for Counters.Counter;
    Counters.Counter private _itemIds;
    Counters.Counter private _itemsSold;
    uint[] marketItems;

    address payable owner;
    uint256 listingPrice = 0.1 ether;

    constructor() {
    owner = payable(msg.sender);
    }

    struct MarketItem {
    uint itemId;
    @@ -62,10 +68,10 @@ contract NFTMarket is ReentrancyGuard {
    uint256 price
    ) public payable nonReentrant {
    require(price > 0, "Price must be at least 1 wei");
    require(msg.value == listingPrice, "Price must be equal to listing price");

    _itemIds.increment();
    uint256 itemId = _itemIds.current();
    marketItems.push(itemId);

    idToMarketItem[itemId] = MarketItem(
    itemId,
    @@ -91,7 +97,7 @@ contract NFTMarket is ReentrancyGuard {
    function createMarketSale(
    address nftContract,
    uint256 itemId
    ) payable public {
    ) public payable nonReentrant {
    uint price = idToMarketItem[itemId].price;
    uint tokenId = idToMarketItem[itemId].tokenId;
    require(msg.value == price, "Please submit the asking price in order to complete the purchase");
    @@ -100,6 +106,7 @@ contract NFTMarket is ReentrancyGuard {
    IERC721(nftContract).transferFrom(address(this), msg.sender, tokenId);
    idToMarketItem[itemId].owner = payable(msg.sender);
    _itemsSold.increment();
    payable(owner).transfer(listingPrice);
    }

    function fetchMarketItem(uint itemId) public view returns (MarketItem memory) {
  5. dabit3 revised this gist Jun 22, 2021. 1 changed file with 44 additions and 0 deletions.
    44 changes: 44 additions & 0 deletions basicmarket.sol
    Original file line number Diff line number Diff line change
    @@ -6,6 +6,26 @@ import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";
    import "@openzeppelin/contracts/security/ReentrancyGuard.sol";
    import "@openzeppelin/contracts/token/ERC721/ERC721.sol";

    contract NFT is ERC721URIStorage {
    using Counters for Counters.Counter;
    Counters.Counter private _tokenIds;
    address contractAddress;

    constructor(address marketplaceAddress) ERC721("Eat The Blocks NFTs", "ETBNFT") {
    contractAddress = marketplaceAddress;
    }

    function createToken(string memory tokenURI) public returns (uint) {
    _tokenIds.increment();
    uint256 newItemId = _tokenIds.current();

    _mint(msg.sender, newItemId);
    _setTokenURI(newItemId, tokenURI);
    setApprovalForAll(contractAddress, true);
    return newItemId;
    }
    }

    contract NFTMarket is ReentrancyGuard {
    using Counters for Counters.Counter;
    Counters.Counter private _itemIds;
    @@ -104,4 +124,28 @@ contract NFTMarket is ReentrancyGuard {

    return items;
    }

    function fetchMyNFTs() public view returns (MarketItem[] memory) {
    uint totalItemCount = _itemIds.current();
    uint itemCount = 0;
    uint currentIndex = 0;

    for (uint i = 0; i < totalItemCount; i++) {
    if (idToMarketItem[i + 1].owner == msg.sender) {
    itemCount += 1;
    }
    }

    MarketItem[] memory items = new MarketItem[](itemCount);
    for (uint i = 0; i < totalItemCount; i++) {
    if (idToMarketItem[i + 1].owner == msg.sender) {
    uint currentId = idToMarketItem[i + 1].itemId;
    MarketItem storage currentItem = idToMarketItem[currentId];
    items[currentIndex] = currentItem;
    currentIndex += 1;
    }
    }

    return items;
    }
    }
  6. dabit3 revised this gist Jun 22, 2021. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion basicmarket.sol
    Original file line number Diff line number Diff line change
    @@ -87,7 +87,7 @@ contract NFTMarket is ReentrancyGuard {
    return item;
    }

    function fetchMarketItems() public view returns (MarketItem[] memory) {
    function fetchMarketItems() public view returns (MarketItem[] memory) {
    uint itemCount = _itemIds.current();
    uint unsoldItemCount = _itemIds.current() - _itemsSold.current();
    uint currentIndex = 0;
  7. dabit3 revised this gist Jun 22, 2021. 1 changed file with 6 additions and 10 deletions.
    16 changes: 6 additions & 10 deletions basicmarket.sol
    Original file line number Diff line number Diff line change
    @@ -87,25 +87,21 @@ contract NFTMarket is ReentrancyGuard {
    return item;
    }

    function fetchMarketItems() public view returns (MarketItem[] memory) {
    function fetchMarketItems() public view returns (MarketItem[] memory) {
    uint itemCount = _itemIds.current();
    uint unsoldItemCount = _itemIds.current() - _itemsSold.current();
    uint currentIndex = 0;
    uint[] memory unsoldItemIds = new uint[](unsoldItemCount);

    MarketItem[] memory items = new MarketItem[](unsoldItemCount);
    for (uint i = 0; i < itemCount; i++) {
    if (idToMarketItem[i + 1].owner == address(0)) {
    uint itemId = idToMarketItem[i + 1].itemId;
    unsoldItemIds[currentIndex] = itemId;
    uint currentId = idToMarketItem[i + 1].itemId;
    MarketItem storage currentItem = idToMarketItem[currentId];
    items[currentIndex] = currentItem;
    currentIndex += 1;
    }
    }

    MarketItem[] memory items = new MarketItem[](unsoldItemCount);
    for (uint i = 0; i < unsoldItemCount; i++) {
    uint currentId = unsoldItemIds[i];
    MarketItem storage currentItem = idToMarketItem[currentId];
    items[i] = currentItem;
    }
    return items;
    }
    }
  8. dabit3 revised this gist Jun 22, 2021. 1 changed file with 14 additions and 22 deletions.
    36 changes: 14 additions & 22 deletions basicmarket.sol
    Original file line number Diff line number Diff line change
    @@ -6,25 +6,10 @@ import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";
    import "@openzeppelin/contracts/security/ReentrancyGuard.sol";
    import "@openzeppelin/contracts/token/ERC721/ERC721.sol";

    contract NFT is ERC721URIStorage {
    using Counters for Counters.Counter;
    Counters.Counter private _tokenIds;

    constructor() ERC721("Eat The Blocks NFTs", "ETBNFT") {}

    function createToken(string memory tokenURI) public returns (uint) {
    _tokenIds.increment();
    uint256 newItemId = _tokenIds.current();

    _mint(msg.sender, newItemId);
    _setTokenURI(newItemId, tokenURI);
    return newItemId;
    }
    }

    contract NFTMarket is ReentrancyGuard {
    using Counters for Counters.Counter;
    Counters.Counter private _itemIds;
    Counters.Counter private _itemsSold;
    uint[] marketItems;

    struct MarketItem {
    @@ -61,8 +46,8 @@ contract NFTMarket is ReentrancyGuard {
    _itemIds.increment();
    uint256 itemId = _itemIds.current();
    marketItems.push(itemId);

    idToMarketItem[itemId] = MarketItem(
    idToMarketItem[itemId] = MarketItem(
    itemId,
    nftContract,
    tokenId,
    @@ -94,6 +79,7 @@ contract NFTMarket is ReentrancyGuard {
    idToMarketItem[itemId].seller.transfer(msg.value);
    IERC721(nftContract).transferFrom(address(this), msg.sender, tokenId);
    idToMarketItem[itemId].owner = payable(msg.sender);
    _itemsSold.increment();
    }

    function fetchMarketItem(uint itemId) public view returns (MarketItem memory) {
    @@ -102,16 +88,22 @@ contract NFTMarket is ReentrancyGuard {
    }

    function fetchMarketItems() public view returns (MarketItem[] memory) {
    uint itemCount = marketItems.length;
    uint unsoldItemCount = 0;
    uint itemCount = _itemIds.current();
    uint unsoldItemCount = _itemIds.current() - _itemsSold.current();
    uint currentIndex = 0;
    uint[] memory unsoldItemIds = new uint[](unsoldItemCount);
    for (uint i = 0; i < itemCount; i++) {
    if (idToMarketItem[i + 1].owner == address(0)) {
    unsoldItemCount += 1;
    uint itemId = idToMarketItem[i + 1].itemId;
    unsoldItemIds[currentIndex] = itemId;
    currentIndex += 1;
    }
    }

    MarketItem[] memory items = new MarketItem[](unsoldItemCount);
    for (uint i = 0; i < unsoldItemCount; i++) {
    MarketItem storage currentItem = idToMarketItem[i + 1];
    uint currentId = unsoldItemIds[i];
    MarketItem storage currentItem = idToMarketItem[currentId];
    items[i] = currentItem;
    }
    return items;
  9. dabit3 revised this gist Jun 20, 2021. 1 changed file with 10 additions and 4 deletions.
    14 changes: 10 additions & 4 deletions basicmarket.sol
    Original file line number Diff line number Diff line change
    @@ -26,7 +26,7 @@ contract NFTMarket is ReentrancyGuard {
    using Counters for Counters.Counter;
    Counters.Counter private _itemIds;
    uint[] marketItems;

    struct MarketItem {
    uint itemId;
    address nftContract;
    @@ -101,10 +101,16 @@ contract NFTMarket is ReentrancyGuard {
    return item;
    }

    function fetchMarketItems() public view returns (MarketItem[] memory){
    uint itemCount = _itemIds.current();
    MarketItem[] memory items = new MarketItem[](itemCount);
    function fetchMarketItems() public view returns (MarketItem[] memory) {
    uint itemCount = marketItems.length;
    uint unsoldItemCount = 0;
    for (uint i = 0; i < itemCount; i++) {
    if (idToMarketItem[i + 1].owner == address(0)) {
    unsoldItemCount += 1;
    }
    }
    MarketItem[] memory items = new MarketItem[](unsoldItemCount);
    for (uint i = 0; i < unsoldItemCount; i++) {
    MarketItem storage currentItem = idToMarketItem[i + 1];
    items[i] = currentItem;
    }
  10. dabit3 revised this gist Jun 19, 2021. 1 changed file with 33 additions and 23 deletions.
    56 changes: 33 additions & 23 deletions basicmarket.sol
    Original file line number Diff line number Diff line change
    @@ -1,22 +1,21 @@
    // SPDX-License-Identifier: MIT OR Apache-2.0
    pragma solidity ^0.8.4;

    import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
    import "@openzeppelin/contracts/utils/Counters.sol";
    import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";
    import "@openzeppelin/contracts/security/ReentrancyGuard.sol";
    import "@openzeppelin/contracts/token/ERC721/ERC721.sol";

    contract NFT is ERC721URIStorage {
    using Counters for Counters.Counter;
    Counters.Counter private _tokenIds;

    constructor() ERC721("Token", "PETNFTS") {}
    constructor() ERC721("Eat The Blocks NFTs", "ETBNFT") {}

    function createToken(string memory tokenURI) public
    returns (uint256) {
    function createToken(string memory tokenURI) public returns (uint) {
    _tokenIds.increment();

    uint256 newItemId = _tokenIds.current();

    _mint(msg.sender, newItemId);
    _setTokenURI(newItemId, tokenURI);
    return newItemId;
    @@ -25,10 +24,11 @@ contract NFT is ERC721URIStorage {

    contract NFTMarket is ReentrancyGuard {
    using Counters for Counters.Counter;
    Counters.Counter private _auctionIds;
    Counters.Counter private _itemIds;
    uint[] marketItems;

    struct MarketItem {
    uint itemId;
    address nftContract;
    uint256 tokenId;
    address payable seller;
    @@ -39,11 +39,12 @@ contract NFTMarket is ReentrancyGuard {
    mapping(uint256 => MarketItem) private idToMarketItem;

    event MarketItemCreated (
    address indexed seller,
    uint indexed itemId,
    address indexed nftContract,
    uint256 indexed tokenId,
    uint256 price,
    uint256 auctionId
    address seller,
    address owner,
    uint256 price
    );

    function getMarketItem(uint256 marketItemId) public view returns (MarketItem memory) {
    @@ -57,45 +58,54 @@ contract NFTMarket is ReentrancyGuard {
    ) public payable nonReentrant {
    require(price > 0, "Price must be at least 1 wei");

    _auctionIds.increment();
    uint256 auctionId = _auctionIds.current();
    marketItems.push(auctionId);
    _itemIds.increment();
    uint256 itemId = _itemIds.current();
    marketItems.push(itemId);

    idToMarketItem[auctionId] = MarketItem(
    idToMarketItem[itemId] = MarketItem(
    itemId,
    nftContract,
    tokenId,
    payable(msg.sender),
    payable(address(0)), // bidder is only known once a bid has been placed
    payable(address(0)),
    price
    );

    IERC721(nftContract).transferFrom(msg.sender, address(this), tokenId);

    emit MarketItemCreated(
    msg.sender,
    itemId,
    nftContract,
    tokenId,
    price,
    auctionId
    msg.sender,
    address(0),
    price
    );
    }

    function createMarketSale(
    address nftContract,
    uint256 tokenId
    uint256 itemId
    ) payable public {
    uint price = idToMarketItem[tokenId].price;
    uint price = idToMarketItem[itemId].price;
    uint tokenId = idToMarketItem[itemId].tokenId;
    require(msg.value == price, "Please submit the asking price in order to complete the purchase");

    idToMarketItem[tokenId].seller.transfer(msg.value);
    idToMarketItem[itemId].seller.transfer(msg.value);
    IERC721(nftContract).transferFrom(address(this), msg.sender, tokenId);
    idToMarketItem[itemId].owner = payable(msg.sender);
    }

    function fetchMarketItem(uint itemId) public view returns (MarketItem memory) {
    MarketItem memory item = idToMarketItem[itemId];
    return item;
    }

    function fetchMarketItems() public view returns (MarketItem[] memory){
    uint itemCount = _auctionIds.current();
    uint itemCount = _itemIds.current();
    MarketItem[] memory items = new MarketItem[](itemCount);
    for (uint i = 1; i < itemCount; i++) {
    MarketItem storage currentItem = idToMarketItem[i];
    for (uint i = 0; i < itemCount; i++) {
    MarketItem storage currentItem = idToMarketItem[i + 1];
    items[i] = currentItem;
    }
    return items;
  11. dabit3 revised this gist Jun 17, 2021. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion basicmarket.sol
    Original file line number Diff line number Diff line change
    @@ -91,7 +91,7 @@ contract NFTMarket is ReentrancyGuard {
    IERC721(nftContract).transferFrom(address(this), msg.sender, tokenId);
    }

    function fetchTokens() public view returns (MarketItem[] memory){
    function fetchMarketItems() public view returns (MarketItem[] memory){
    uint itemCount = _auctionIds.current();
    MarketItem[] memory items = new MarketItem[](itemCount);
    for (uint i = 1; i < itemCount; i++) {
  12. dabit3 revised this gist Jun 17, 2021. 1 changed file with 2 additions and 4 deletions.
    6 changes: 2 additions & 4 deletions basicmarket.sol
    Original file line number Diff line number Diff line change
    @@ -6,8 +6,6 @@ import "@openzeppelin/contracts/utils/Counters.sol";
    import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";
    import "@openzeppelin/contracts/security/ReentrancyGuard.sol";

    // 0x0d2b873fdca2a1561f0e6c5e40af4e90e817f5c07be445297312c6d3e65c01e5
    // 0xe5f0332CA42459333149b67aF2d0E486D03F8a83
    contract NFT is ERC721URIStorage {
    using Counters for Counters.Counter;
    Counters.Counter private _tokenIds;
    @@ -87,12 +85,12 @@ contract NFTMarket is ReentrancyGuard {
    uint256 tokenId
    ) payable public {
    uint price = idToMarketItem[tokenId].price;
    require(msg.value == price);
    require(msg.value == price, "Please submit the asking price in order to complete the purchase");

    idToMarketItem[tokenId].seller.transfer(msg.value);
    IERC721(nftContract).transferFrom(address(this), msg.sender, tokenId);
    }

    function fetchTokens() public view returns (MarketItem[] memory){
    uint itemCount = _auctionIds.current();
    MarketItem[] memory items = new MarketItem[](itemCount);
  13. dabit3 revised this gist Jun 17, 2021. 1 changed file with 5 additions and 6 deletions.
    11 changes: 5 additions & 6 deletions basicmarket.sol
    Original file line number Diff line number Diff line change
    @@ -14,13 +14,12 @@ contract NFT is ERC721URIStorage {

    constructor() ERC721("Token", "PETNFTS") {}

    function createToken(address recipient, string memory tokenURI) public
    function createToken(string memory tokenURI) public
    returns (uint256) {
    require(recipient == msg.sender, "Can only mint tokens to your own address");
    _tokenIds.increment();

    uint256 newItemId = _tokenIds.current();
    _mint(recipient, newItemId);
    _mint(msg.sender, newItemId);
    _setTokenURI(newItemId, tokenURI);
    return newItemId;
    }
    @@ -89,15 +88,15 @@ contract NFTMarket is ReentrancyGuard {
    ) payable public {
    uint price = idToMarketItem[tokenId].price;
    require(msg.value == price);

    idToMarketItem[tokenId].seller.transfer(msg.value);
    IERC721(nftContract).transferFrom(address(this), msg.sender, tokenId);
    }

    function fetchTokens() public view returns (MarketItem[] memory){
    uint itemCount = _auctionIds.current();
    MarketItem[] memory items = new MarketItem[](itemCount);
    for (uint i = 0; i < itemCount; i++) {
    for (uint i = 1; i < itemCount; i++) {
    MarketItem storage currentItem = idToMarketItem[i];
    items[i] = currentItem;
    }
  14. dabit3 created this gist Jun 17, 2021.
    106 changes: 106 additions & 0 deletions basicmarket.sol
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,106 @@
    // SPDX-License-Identifier: MIT OR Apache-2.0
    pragma solidity ^0.8.4;

    import "@openzeppelin/contracts/token/ERC721/ERC721.sol";
    import "@openzeppelin/contracts/utils/Counters.sol";
    import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";
    import "@openzeppelin/contracts/security/ReentrancyGuard.sol";

    // 0x0d2b873fdca2a1561f0e6c5e40af4e90e817f5c07be445297312c6d3e65c01e5
    // 0xe5f0332CA42459333149b67aF2d0E486D03F8a83
    contract NFT is ERC721URIStorage {
    using Counters for Counters.Counter;
    Counters.Counter private _tokenIds;

    constructor() ERC721("Token", "PETNFTS") {}

    function createToken(address recipient, string memory tokenURI) public
    returns (uint256) {
    require(recipient == msg.sender, "Can only mint tokens to your own address");
    _tokenIds.increment();

    uint256 newItemId = _tokenIds.current();
    _mint(recipient, newItemId);
    _setTokenURI(newItemId, tokenURI);
    return newItemId;
    }
    }

    contract NFTMarket is ReentrancyGuard {
    using Counters for Counters.Counter;
    Counters.Counter private _auctionIds;
    uint[] marketItems;

    struct MarketItem {
    address nftContract;
    uint256 tokenId;
    address payable seller;
    address payable owner;
    uint256 price;
    }

    mapping(uint256 => MarketItem) private idToMarketItem;

    event MarketItemCreated (
    address indexed seller,
    address indexed nftContract,
    uint256 indexed tokenId,
    uint256 price,
    uint256 auctionId
    );

    function getMarketItem(uint256 marketItemId) public view returns (MarketItem memory) {
    return idToMarketItem[marketItemId];
    }

    function createMarketItem(
    address nftContract,
    uint256 tokenId,
    uint256 price
    ) public payable nonReentrant {
    require(price > 0, "Price must be at least 1 wei");

    _auctionIds.increment();
    uint256 auctionId = _auctionIds.current();
    marketItems.push(auctionId);

    idToMarketItem[auctionId] = MarketItem(
    nftContract,
    tokenId,
    payable(msg.sender),
    payable(address(0)), // bidder is only known once a bid has been placed
    price
    );

    IERC721(nftContract).transferFrom(msg.sender, address(this), tokenId);

    emit MarketItemCreated(
    msg.sender,
    nftContract,
    tokenId,
    price,
    auctionId
    );
    }

    function createMarketSale(
    address nftContract,
    uint256 tokenId
    ) payable public {
    uint price = idToMarketItem[tokenId].price;
    require(msg.value == price);

    idToMarketItem[tokenId].seller.transfer(msg.value);
    IERC721(nftContract).transferFrom(address(this), msg.sender, tokenId);
    }

    function fetchTokens() public view returns (MarketItem[] memory){
    uint itemCount = _auctionIds.current();
    MarketItem[] memory items = new MarketItem[](itemCount);
    for (uint i = 0; i < itemCount; i++) {
    MarketItem storage currentItem = idToMarketItem[i];
    items[i] = currentItem;
    }
    return items;
    }
    }