From 77d8cbb424aab474553e43832f2badbb429c9735 Mon Sep 17 00:00:00 2001 From: Linus Gasser Date: Wed, 6 Dec 2023 13:57:18 +0100 Subject: [PATCH] Running script with Dockerfile --- .env | 0 .gitignore | 3 + Dockerfile | 26 +++++-- README.md | 74 +++++++++++++++++- brownie-config.yaml | 4 +- brownie.sh | 3 + contracts/LegendNFT.sol | 110 --------------------------- contracts/SismondiNFT.sol | 81 ++++++++++++++++++++ devbox.json | 22 ------ devbox.lock | 144 ------------------------------------ docker-compose.yaml | 9 +++ env.example | 5 ++ images/background/file1.png | Bin 0 -> 5656 bytes images/background/file2.png | Bin 0 -> 5656 bytes images/shoe/file1.png | Bin 0 -> 37762 bytes images/shoe/file2.png | Bin 0 -> 9272 bytes images/sole/file1.png | Bin 0 -> 14649 bytes images/sole/file2.png | Bin 0 -> 5862 bytes requirements.txt | 3 +- runLegendLocal.py | 12 --- scripts/images.py | 28 +++++++ scripts/index.html | 5 ++ scripts/sepolia.network | 10 +++ scripts/sismondi.py | 40 ++++++++++ test_compile.py | 16 ---- 25 files changed, 278 insertions(+), 317 deletions(-) delete mode 100644 .env create mode 100755 brownie.sh delete mode 100644 contracts/LegendNFT.sol create mode 100644 contracts/SismondiNFT.sol delete mode 100644 devbox.json delete mode 100644 devbox.lock create mode 100644 docker-compose.yaml create mode 100644 env.example create mode 100644 images/background/file1.png create mode 100644 images/background/file2.png create mode 100644 images/shoe/file1.png create mode 100644 images/shoe/file2.png create mode 100644 images/sole/file1.png create mode 100644 images/sole/file2.png delete mode 100644 runLegendLocal.py create mode 100644 scripts/images.py create mode 100644 scripts/index.html create mode 100644 scripts/sepolia.network create mode 100644 scripts/sismondi.py delete mode 100644 test_compile.py diff --git a/.env b/.env deleted file mode 100644 index e69de29..0000000 diff --git a/.gitignore b/.gitignore index a418c16..cefb6c9 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,6 @@ __pycache__ .hypothesis/ build/ reports/ +.env +operations.log +.idea \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index e9829a4..f0ec62a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,15 +1,25 @@ FROM python:3.9 +WORKDIR /root RUN curl https://raw.githubusercontent.com/creationix/nvm/master/install.sh | bash RUN . /root/.bashrc ENV NVM_DIR /root/.nvm +ENV NODE_VERSION v18.19.0 +ENV PATH $NVM_DIR/versions/node/$NODE_VERSION/bin:$PATH RUN . $NVM_DIR/nvm.sh && \ - nvm install 18 && npm install i -g ganache -RUN pip install eth-brownie -WORKDIR /root + nvm install $NODE_VERSION && npm install i -g ganache + +COPY requirements.txt . +RUN pip install -r requirements.txt + RUN touch .env -COPY . ./ -#COPY brownie-config.yaml ./ -#COPY contracts contracts/ -RUN . $NVM_DIR/nvm.sh && \ - brownie compile +COPY brownie-config.yaml . +COPY contracts contracts/ +COPY scripts/sepolia.network . + +RUN brownie compile +RUN brownie networks import sepolia.network +RUN rm -rf * + +WORKDIR /sismondi +ENTRYPOINT ["/usr/local/bin/brownie"] \ No newline at end of file diff --git a/README.md b/README.md index 0da7cdd..d6cecd3 100644 --- a/README.md +++ b/README.md @@ -41,7 +41,77 @@ On utilisera ici le porte-feuille le plus connu: Metamask. ### Installation Metamask +[Metamask](https://metamask.io/) + ### Faucets: -https://sepolia-faucet.pk910.de +[Faucet](https://sepolia-faucet.pk910.de) + +### Etherscan + +[Etherscan](https://sepolia.etherscan.io) + +## NFTs + +### Intro + +### Préparation des images + +- Utiliser le script [scripts/images.py] +- Entrer les images dans [scripts/sismondi.py] + +### Création d'un contrat NFT + +Localement sur la chaîne de développement: + +```bash +./brownie.sh run sismondi.py deploy +``` + +Avec un `--network sepolia` à la fin, c'est plus sérieux: on va se mettre sur la chaîne de test. + +### Minter un NFT + +Localement sur la chaîne de développement: + +```bash +./brownie.sh run sismondi.py deploy_mint +``` + +Ou sur la chaîne de test: + +```bash +./brownie.sh run sismondi.py mint 0xcontract_id_in_hex --network sepolia +``` + +## Utilisation des NFTs + +### Ajout au portefeuille Metamask + +### Suivi dans OpenSea + +https://opensea.io/ + +### Envoi vers d'autres utilisateurs + +??? + +## Installation locale + +Pour l'installation locale, il faut commencer à installer docker: + +[Commencer avec Docker](https://www.docker.com/get-started/) + +Puis on peut préparer l'image avec: + +``` +docker compose build +``` + +Après on peut utiliser `./brownie.sh` + +## Documentation -### Etherscan \ No newline at end of file +- Howto on which the hands-on is based: [Deploy Your First NFT With Python](https://www.codeforests.com/2022/01/14/deploy-your-first-nft-with-python/) - + [Github with contract](https://github.com/codeforests/brownie_legendnft) +- Contract used in the hands-on: [openzeppelin-contracts](https://github.com/OpenZeppelin/openzeppelin-contracts/tree/master) +[Definition of ERC 721](https://docs.openzeppelin.com/contracts/4.x/api/token/erc721) \ No newline at end of file diff --git a/brownie-config.yaml b/brownie-config.yaml index e3edba8..dd45f0f 100644 --- a/brownie-config.yaml +++ b/brownie-config.yaml @@ -8,10 +8,10 @@ compiler: dotenv: .env networks: - rinkeby: + sepolia: verify : false development: verify : false wallets: - from_key: ${PRIVATE_KEY} \ No newline at end of file + from_key: ${PRIVATE_KEY} diff --git a/brownie.sh b/brownie.sh new file mode 100755 index 0000000..8b16068 --- /dev/null +++ b/brownie.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +docker run --rm --platform linux/amd64 -v $PWD:/sismondi c4dt/brownie:latest "$@" diff --git a/contracts/LegendNFT.sol b/contracts/LegendNFT.sol deleted file mode 100644 index a81a993..0000000 --- a/contracts/LegendNFT.sol +++ /dev/null @@ -1,110 +0,0 @@ -// SPDX-License-Identifier: UNLICENSED - -pragma solidity ^0.8.0; - -import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol"; -import "@openzeppelin/contracts/utils/Counters.sol"; - - -import {Base64} from "./libraries/Base64.sol"; - -contract LegendNFT is ERC721URIStorage { - - using Counters for Counters.Counter; - Counters.Counter private _tokenIds; - - uint256 public totalSupply; - - string baseSvg1 = ""; - - string[] firstWords = ["Elegant", "Exquisite", "Glorious", "Junoesque", "Magnificent", "Resplendent", "Splendid", "Statuesque", "Sublime", "Superb"]; - string[] secondWords = ["Python", "Javascript", "Java", "C#", "C", "C++", "Go", "Rust", "R", "Swift", "PHP"]; - string[] thirdWords = ["Code", "Gem", "Arts", "Work", "Masterstroke", "Program", "UI", "Masterpiece", "Showpiece", "Standard"]; - string[] colors = ["#BD1E51", "#00ABE1", "#161F6D", "#7DA2A9", "#00458B", "#1D2228", "#051622", "#438945", "#5C6E58", "#181818", "#2CCCC3","#FACD3D","#5626C4","#E60576"]; - - - event NewLegendNFTMinted(address sender, uint256 tokenId); - - - constructor() ERC721 ("Codeforests Legend", "CFL") { - totalSupply = 1000000; - } - - function pickRandomFirstWord(uint256 tokenId) internal view returns (string memory) { - uint256 rand = random(string(abi.encodePacked("FIRST_WORD", Strings.toString(tokenId)))); - rand = rand % firstWords.length; - return firstWords[rand]; - } - - function pickRandomSecondWord(uint256 tokenId) internal view returns (string memory) { - uint256 rand = random(string(abi.encodePacked("SECOND_WORD", Strings.toString(tokenId)))); - rand = rand % secondWords.length; - return secondWords[rand]; - } - - function pickRandomThirdWord(uint256 tokenId) internal view returns (string memory) { - uint256 rand = random(string(abi.encodePacked("THIRD_WORD", Strings.toString(tokenId)))); - rand = rand % thirdWords.length; - return thirdWords[rand]; - } - - function pickRandomColor(uint256 tokenId) internal view returns (string memory) { - uint256 rand = random(string(abi.encodePacked("COLOR", Strings.toString(tokenId)))); - rand = rand % colors.length; - return colors[rand]; - } - - - function random(string memory input) internal pure returns (uint256) { - return uint256(keccak256(abi.encodePacked(input))); - } - - function makeLegendNFT() public { - uint256 newItemId = _tokenIds.current(); - require(newItemId < totalSupply, "Total supply has been reached!"); - - string memory first = pickRandomFirstWord(newItemId); - string memory second = pickRandomSecondWord(newItemId); - string memory third = pickRandomThirdWord(newItemId); - string memory randomColor = pickRandomColor(newItemId); - - string memory combinedWord = string(abi.encodePacked(first, " ", second, " ", third)); - - string memory svgString = string(abi.encodePacked(baseSvg1, randomColor, baseSvg2, combinedWord, "")); - - string memory TOKEN_JSON_URI = getTokenURI(combinedWord, svgString); - - _safeMint(_msgSender(), newItemId); - _setTokenURI(newItemId, TOKEN_JSON_URI); - _tokenIds.increment(); - emit NewLegendNFTMinted(_msgSender(), newItemId); - } - - function getTokenURI(string memory words, string memory svgString) internal pure returns (string memory) { - - string memory json = Base64.encode( - bytes( - string( - abi.encodePacked( - '{"name": "', - words, - '", "description": "A legend NFT collection for all codeforests readers.", "image": "data:image/svg+xml;base64,', - Base64.encode(bytes(svgString)), - '"}' - ) - ) - ) - ); - - string memory finalTokenUri = string( - abi.encodePacked("data:application/json;base64,", json) - ); - - return finalTokenUri; - } - - function getTotalNFTsMintedSoFar() public view returns (uint256) { - return _tokenIds.current(); - } -} \ No newline at end of file diff --git a/contracts/SismondiNFT.sol b/contracts/SismondiNFT.sol new file mode 100644 index 0000000..b527fe2 --- /dev/null +++ b/contracts/SismondiNFT.sol @@ -0,0 +1,81 @@ +// SPDX-License-Identifier: UNLICENSED + +pragma solidity ^0.8.0; + +import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol"; +import "@openzeppelin/contracts/utils/Counters.sol"; + + +import {Base64} from "./libraries/Base64.sol"; + +contract SismondiNFT is ERC721URIStorage { + + using Counters for Counters.Counter; + Counters.Counter private _tokenIds; + + uint256 public totalSupply; + + string[] images = [ + "iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAABhGlDQ1BJQ0MgUHJvZmlsZQAAeJx9kT1Iw0AcxV9ba0UqHewg4pChumgXFXGsVShChVArtOpgcukXNGlIUlwcBdeCgx+LVQcXZ10dXAVB8APE1cVJ0UVK/F9SaBHjwXE/3t173L0D/M0qU82eBKBqlpFJJYVcflUIvSKMICLoxbjETH1OFNPwHF/38PH1Ls6zvM/9OQaUgskAn0CcYLphEW8Qz2xaOud94igrSwrxOfGEQRckfuS67PIb55LDfp4ZNbKZeeIosVDqYrmLWdlQiaeJY4qqUb4/57LCeYuzWq2z9j35C8MFbWWZ6zRHkMIiliBCgIw6KqjCQpxWjRQTGdpPeviHHb9ILplcFTByLKAGFZLjB/+D392axalJNymcBIIvtv0xCoR2gVbDtr+Pbbt1AgSegSut4681gdlP0hsdLXYERLaBi+uOJu8BlzvA0JMuGZIjBWj6i0Xg/Yy+KQ8M3gL9a25v7X2cPgBZ6ip9AxwcAmMlyl73eHdfd2//nmn39wNld3KhWalQEAAAAgtJREFUeJytk8FLVFEUh79773uvGWec5pmmplhpVtJCV+miEIJaR9uWbaRVFLSsRRBt+gtaRbSSINy1K4iCFlaLEDQqRkxHyXHUaea9d989LWYQIxcK/eBw4MD54PzOOSociIT/KO+gDVY0idP/1H3t8JQ7GNCKZrTwi8tHF9myPlmTYp1GlPB6rY8vWx0HA6aiuDv8kSvdJUq1AoloAp1yKr/B09JZpj5N7h9oRdMRNJgIy9yfG2dm+Tg9md/Mbxd5e/ElS/U8AvxlRuwM9dTbiUZqiJzZ8ex6/wI5zzK70cmTsTdMhKs4FAUvZqFWQNFaigAiigtHlhnJVxjMbRL6EZ52FP2YjE4p+jHD+QqPv45x7dg3xjvKoIRAp61FGUCawNh63Oqf48HIB1YabawkWdaTACuaSi1H1li62mOmS6d5t9bL1d4fKKvBesyvd5LrVxjXnNLDaQ6FW1Rvz3BDw6v356kvdpPU84gSYmcY9avc61qh7/ASD4e+ExthqnyGF6uDeCerPJ9cpL5+Dv1To8LeVBgpEU0/Qoo1Ah2hAIXZ8dY5gyQGHflkcKSeo2Yg0Cn4CTGWzJ2byLNLqHAgEgTo2oRwG3oqcKIMuQaIahKzEdIWQXsd8S0qClCbbU33qzn4PAizQ9AIWkCAVINT4Fp5L+0u735YLRBYULLrDo2jOWW639PcU38A4A3X9hp5mjkAAAAASUVORK5CYII=" + ]; + string[] wordList = ["One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight"]; + + event NewSismondiNFTMinted(address sender, uint256 tokenId); + + + constructor() ERC721 ("Codeforests Sismondi", "CFL") { + totalSupply = 1000000; + } + + function pickRandomWord(uint256 tokenId) internal view returns (string memory) { + uint256 rand = random(string(abi.encodePacked("WORD", Strings.toString(tokenId)))); + rand = rand % wordList.length; + return wordList[rand]; + } + + function random(string memory input) internal pure returns (uint256) { + return uint256(keccak256(abi.encodePacked(input))); + } + + function makeSismondiNFT() public { + uint256 newItemId = _tokenIds.current(); + require(newItemId < totalSupply, "Total supply has been reached!"); + + string memory randomWord = pickRandomWord(newItemId); + + string memory TOKEN_JSON_URI = getTokenURI(randomWord, images[0]); + + _safeMint(_msgSender(), newItemId); + _setTokenURI(newItemId, TOKEN_JSON_URI); + _tokenIds.increment(); + emit NewSismondiNFTMinted(_msgSender(), newItemId); + } + + function getTokenURI(string memory words, string memory pngString) internal pure returns (string memory) { + + string memory json = Base64.encode( + bytes( + string( + abi.encodePacked( + '{"name": "', + words, + '", "description": "A Sismondi NFT collection.",' + '"image": "data:image/png;base64,', + pngString, + '"}' + ) + ) + ) + ); + + string memory finalTokenUri = string( + abi.encodePacked("data:application/json;base64,", json) + ); + + return finalTokenUri; + } + + function getTotalNFTsMintedSoFar() public view returns (uint256) { + return _tokenIds.current(); + } +} \ No newline at end of file diff --git a/devbox.json b/devbox.json deleted file mode 100644 index b1e197a..0000000 --- a/devbox.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "packages": [ - "git@latest", - "python39Packages.pip@latest", - "python39@latest", - "which@latest", - "nodePackages.ganache-cli@latest", - "cmake@latest", - "nodejs@latest", - "solc@latest" - ], - "shell": { - "init_hook": [ - ". $VENV_DIR/bin/activate", - "pip install -r requirements.txt" - ], - "scripts": { - "run_test": "python main.py", - "cls": "printf '\\33c\\e[3J'" - } - } -} diff --git a/devbox.lock b/devbox.lock deleted file mode 100644 index 508b81a..0000000 --- a/devbox.lock +++ /dev/null @@ -1,144 +0,0 @@ -{ - "lockfile_version": "1", - "packages": { - "cmake@latest": { - "last_modified": "2023-11-17T14:14:56Z", - "resolved": "github:NixOS/nixpkgs/a71323f68d4377d12c04a5410e214495ec598d4c#cmake", - "source": "devbox-search", - "version": "3.27.7", - "systems": { - "aarch64-darwin": { - "store_path": "/nix/store/xckcwsyrgm5jwlwqgng19j8r0gy4w8ar-cmake-3.27.7" - }, - "aarch64-linux": { - "store_path": "/nix/store/m7c4ygkg2lkfnysj8042z34f615nj3z6-cmake-3.27.7" - }, - "x86_64-darwin": { - "store_path": "/nix/store/nsk9a663g0khs9li1hwwqlsxsvqd0x9d-cmake-3.27.7" - }, - "x86_64-linux": { - "store_path": "/nix/store/vnhl4zdy7igx9gd3q1d548vwzz15a9ma-cmake-3.27.7" - } - } - }, - "git@latest": { - "last_modified": "2023-11-17T14:14:56Z", - "resolved": "github:NixOS/nixpkgs/a71323f68d4377d12c04a5410e214495ec598d4c#git", - "source": "devbox-search", - "version": "2.42.0", - "systems": { - "aarch64-darwin": { - "store_path": "/nix/store/rxpifxzrsjb0xfjrkrg16vm1876scqvj-git-2.42.0" - }, - "aarch64-linux": { - "store_path": "/nix/store/iw3w7vwh9m2ypy8xpj45hq2p1i5phqbp-git-2.42.0" - }, - "x86_64-darwin": { - "store_path": "/nix/store/g1c8k2i2pcad5z10f1x9f1s2nv0nlxx9-git-2.42.0" - }, - "x86_64-linux": { - "store_path": "/nix/store/zcpq1fivdd131gshg58m4cyq7fwqr3j8-git-2.42.0" - } - } - }, - "nodePackages.ganache-cli@latest": { - "last_modified": "2022-03-21T18:25:50Z", - "resolved": "github:NixOS/nixpkgs/4c3c80df545ec5cb26b5480979c3e3f93518cbe5#nodePackages.ganache-cli", - "source": "devbox-search", - "version": "6.12.2" - }, - "nodejs@latest": { - "last_modified": "2023-11-17T14:14:56Z", - "resolved": "github:NixOS/nixpkgs/a71323f68d4377d12c04a5410e214495ec598d4c#nodejs_21", - "source": "devbox-search", - "version": "21.2.0", - "systems": { - "aarch64-darwin": { - "store_path": "/nix/store/waq8bb12nbqwxxn1lgvdzsgs0gqk0d04-nodejs-21.2.0" - }, - "aarch64-linux": { - "store_path": "/nix/store/v03cn5xw03nxykgix04r1l31jjrgf9d3-nodejs-21.2.0" - }, - "x86_64-darwin": { - "store_path": "/nix/store/sv6nivfsqcl8s1dhqjpjy8dqvbx9mxwl-nodejs-21.2.0" - }, - "x86_64-linux": { - "store_path": "/nix/store/iklfdn5l792z46dl5qq9zqzqsmp2m4m9-nodejs-21.2.0" - } - } - }, - "python39@latest": { - "last_modified": "2023-11-17T14:14:56Z", - "plugin_version": "0.0.1", - "resolved": "github:NixOS/nixpkgs/a71323f68d4377d12c04a5410e214495ec598d4c#python39", - "source": "devbox-search", - "version": "3.9.18", - "systems": { - "aarch64-darwin": { - "store_path": "/nix/store/5n333qdp9bfn61h7d56qccqlb808z7a2-python3-3.9.18" - }, - "aarch64-linux": { - "store_path": "/nix/store/05q52zjci15a1vcq49i6qdk0h72130d3-python3-3.9.18" - }, - "x86_64-darwin": { - "store_path": "/nix/store/s4xhiagzb036m4zk2gd95rq1m12rrqc3-python3-3.9.18" - }, - "x86_64-linux": { - "store_path": "/nix/store/7n6nv7rn2q73i4qzszhv50givbygndr0-python3-3.9.18" - } - } - }, - "python39Packages.pip@latest": { - "last_modified": "2022-12-17T09:19:40Z", - "plugin_version": "0.0.1", - "resolved": "github:NixOS/nixpkgs/80c24eeb9ff46aa99617844d0c4168659e35175f#python39Packages.pip", - "source": "devbox-search", - "version": "22.2.2", - "systems": { - "aarch64-darwin": { - "store_path": "/nix/store/7swsdhxhzl0kfvyk3dd6jil4j2viawbf-python3.9-pip-22.2.2" - }, - "aarch64-linux": { - "store_path": "/nix/store/9l3hb8qshh360n8x8r4ghwv42fhwl719-python3.9-pip-22.2.2" - }, - "x86_64-darwin": { - "store_path": "/nix/store/xip9gxp4sazq4wmp73acrybsiripxq8k-python3.9-pip-22.2.2" - }, - "x86_64-linux": { - "store_path": "/nix/store/8v8qk7icwcybpxmwjblyxlb4gy7ignpm-python3.9-pip-22.2.2" - } - } - }, - "solc@latest": { - "last_modified": "2023-11-17T14:14:56Z", - "resolved": "github:NixOS/nixpkgs/a71323f68d4377d12c04a5410e214495ec598d4c#solc", - "source": "devbox-search", - "version": "0.8.21", - "systems": { - "x86_64-linux": { - "store_path": "/nix/store/vgxc7yzpvkr5vwhrgf0abcx2jx6zhp8w-solc-0.8.21" - } - } - }, - "which@latest": { - "last_modified": "2023-11-17T14:14:56Z", - "resolved": "github:NixOS/nixpkgs/a71323f68d4377d12c04a5410e214495ec598d4c#which", - "source": "devbox-search", - "version": "2.21", - "systems": { - "aarch64-darwin": { - "store_path": "/nix/store/79yyc6yisbxkcpgavm2c756ysy5r3jbm-which-2.21" - }, - "aarch64-linux": { - "store_path": "/nix/store/xbjynbbjhkmm60jss2mf5vkmbj0zlkik-which-2.21" - }, - "x86_64-darwin": { - "store_path": "/nix/store/ffv43vqf8h7ggbi929vqqvkn3vfvckd3-which-2.21" - }, - "x86_64-linux": { - "store_path": "/nix/store/d8hffavh8b4fs4bw135gkflx5aimcff3-which-2.21" - } - } - } - } -} diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 0000000..423d192 --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,9 @@ +version: "3.8" + +services: + brownie: + image: c4dt/brownie:latest + build: . + volumes: + - .:/root + platform: linux/amd64 diff --git a/env.example b/env.example new file mode 100644 index 0000000..2e8ca41 --- /dev/null +++ b/env.example @@ -0,0 +1,5 @@ +# Copy this file to .env and then replace the values with your actual values. +# Be sure not to check in your private key into github! +PRIVATE_KEY = 0xPRIVATE_KEY_HEX +WEB3_INFURA_PROJECT_ID = INFURA_ID + diff --git a/images/background/file1.png b/images/background/file1.png new file mode 100644 index 0000000000000000000000000000000000000000..61504a84a11b146bf127123d197a1344d100ef91 GIT binary patch literal 5656 zcmeAS@N?(olHy`uVBq!ia0y~yV2WU1V4T3g1{5hWm74*iSkfJR9T^xl_H+M9WCcpL zWI8(scse^P6cpvBW#*(ZFlbDyooMTE*g@uKd~~*}mh2maM-vwA$`BVVTobC{)Ec0@ zUq)C>rZ@8hT!9ah4%OER^Qpn z{O7Dz@Y#7R3$mt7^i*w)sSD-UtJI^Q^y27_BR;i$B9}kN#DD+r@vGjs&3n%OwPc&p zbdq7d!<>X&iGuk8=X0X0p4UFo(Dvr~X!)_lQCy|&$*wn_q@PbZTsKeBbkoerM;aRg zUM219j=UMrxx6#EYgOPr`{$buRd#QVTD$q1?N9E*thuQ(Uz@m3IHWX9!KtCgN^8X- zr#WH0BEpil{HuPn%kKBkn;9c&P^7bfO?1*@_W#ZI@6I~9($idX4oj2%w!em4EoF^i zhqvwT&)r?h#4@i@d+p=(rj0lKFGUMqb zw`ZRwKhHg;zu9^DZ)@k+F+{%7s%4guVM)^mS!_&cn*j!!f5*W))CK zvcxr_#5q4VH#M(>!MP|ku_QG`p**uBL&4qCHz2%`Pn>~4_<^U3V@O5Z+iQk`42l9Q z2cNShGMfJ=X9&%hvBCcUTdeq*8P#*o3o1A?FfcN)aHKHRZ%gR_GX)eJ9&mE#^h0F? zI#^l4c(VGSata&%z*H%S2}BsKumtJ`YH4UV@QE41VrYzTNI1IS8CV#onCUb>NC8M& z5@Vxi^DJek(HuJVqn0#`2G?ln0%wEKd;%^%MvIlv0&=uI8Lb(CW#VWb4j`kVBed*DfakOR}trUq)C>rZ@8hT!9ah4%OER^Qpn z{O7Dz@Y#7R3$mt7^i*w)sSD-UtJI^Q^y27_BR;i$B9}kN#DD+r@vGjs&3n%OwPc&p zbdq7d!<>X&iGuk8=X0X0p4UFo(Dvr~X!)_lQCy|&$*wn_q@PbZTsKeBbkoerM;aRg zUM219j=UMrxx6#EYgOPr`{$buRd#QVTD$q1?N9E*thuQ(Uz@m3IHWX9!KtCgN^8X- zr#WH0BEpil{HuPn%kKBkn;9c&P^7bfO?1*@_W#ZI@6I~9($idX4oj2%w!em4EoF^i zhqvwT&)r?h#4@i@d+p=(rj0lKFGUMqb zw`ZRwKhHg;zu9^DZ)@k+F+{%7s%4guVM)^mS!_&cn(t!Fg2ScP3Cs zvcxr_#5q4VH#M(>!MP|ku_QG`p**uBL&4qCHz2%`Pn>~4_<^U3V@O5Z+iQk`42l9Q z2cOF(F#H$mT)@RE{EhR*g4a!w#cw}bGO=(7C^$4QH2OR^KaEEa#AF1D*)TRf6@O9;WID6O%TZsXIiAfIvhYl%*iR&9O$}iVVmkpy>_?KcTD!2OWhC zNdd)BOM#ZKk6I!y8eF5PYc!vX7Av5Fc(i~VtxrI8@Mz5lZaa)NBu3j^qbnVs&44WAzf?fFOgXtDnm{r-UW|P3`&` literal 0 HcmV?d00001 diff --git a/images/shoe/file1.png b/images/shoe/file1.png new file mode 100644 index 0000000000000000000000000000000000000000..682f19d5c79f4256745e3ecada4f30219476fb20 GIT binary patch literal 37762 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 Rk?VIrb944Q%|wKz{sTh1U48%n literal 0 HcmV?d00001 diff --git a/images/shoe/file2.png b/images/shoe/file2.png new file mode 100644 index 0000000000000000000000000000000000000000..a1e99d290cc0e7df7c1ebe94cb79922f8b085350 GIT binary patch literal 9272 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 Dn70zE literal 0 HcmV?d00001 diff --git a/images/sole/file2.png b/images/sole/file2.png new file mode 100644 index 0000000000000000000000000000000000000000..083922dc041aaf46cb363a0f301460caf3baf3d4 GIT binary patch literal 5862 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 + + + + \ No newline at end of file diff --git a/scripts/sepolia.network b/scripts/sepolia.network new file mode 100644 index 0000000..09be5e3 --- /dev/null +++ b/scripts/sepolia.network @@ -0,0 +1,10 @@ +live: + - name: Ethereum + networks: + - name: Sepolia (Infura) + chainid: 31 + id: sepolia + host: https://sepolia.infura.io/v3/$WEB3_INFURA_PROJECT_ID + explorer: https://api-sepolia.etherscan.io/api + multicall2: "0x5BA1e12693Dc8F9c48aAD8770482f4739bEeD696" + provider: infura diff --git a/scripts/sismondi.py b/scripts/sismondi.py new file mode 100644 index 0000000..cfca398 --- /dev/null +++ b/scripts/sismondi.py @@ -0,0 +1,40 @@ +from brownie import SismondiNFT, network, config, accounts +import logging, sys +logging.basicConfig(filename='operations.log', encoding='utf-8', level=logging.INFO) + +if network.show_active() == "development": + account = accounts[0] +else: + account = accounts.add(config["wallets"]["from_key"]) + +def log(txt): + print(txt) + logging.info(txt) + +def deploy(): + sismondi_contract = SismondiNFT.deploy( + {"from": account}, + publish_source=config["networks"][network.show_active()].get("verify") + ) + log(f"contract has been deployed successfully to : {sismondi_contract.address}") + return sismondi_contract + +def mint(addr): + sismondi_contract = SismondiNFT.at(addr) + nft = sismondi_contract.makeSismondiNFT({'from': account}) + nft_id = nft.events['NewSismondiNFTMinted']['tokenId'] + log(f"A new NFT wit id {nft_id} has been successfully created in block {nft.block_number} with transaction {nft.txid}") + return nft + +def deploy_mint(): + contract = deploy() + nft = mint(contract.address) + log(f"{nft.events}") + nft = mint(contract.address) + log(f"{nft.events}") + +def main(): + print("Please choose one of the following actions:") + print("deploy - a new contract. Add --network sepoia to deploy on test network") + print("mint #contractid - mints a new NFT. It prints the id of the NFT") + sys.exit(1) diff --git a/test_compile.py b/test_compile.py deleted file mode 100644 index 9857ce8..0000000 --- a/test_compile.py +++ /dev/null @@ -1,16 +0,0 @@ -from ape import accounts, compilers - -CODE = """ - ... source code here -""" - -container = compilers.compile_source( - "vyper", - CODE, - settings={"vyper": {"version": "0.3.7"}}, - contractName="MyContract", -) - -owner = accounts.test_accounts[0] - -instance = container.deploy(sender=owner)