paint-brush
🌈đŸĻ„ āĻŦāĻžāĻ•āĻžāĻ˛āĻšāĻžāĻ‰ āĻĻāĻŋāĻ¯āĻŧā§‡ āĻ†āĻĒāĻ¨āĻžāĻ° āĻ¨āĻŋāĻœāĻ¸ā§āĻŦ AI-āĻœā§‡āĻ¨āĻžāĻ°ā§‡āĻŸā§‡āĻĄ āĻ†āĻ°ā§āĻŸ NFT DApp āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°ā§āĻ¨â€‚āĻĻā§āĻŦāĻžāĻ°āĻž@developerally
2,423 āĻĒāĻĄāĻŧāĻž
2,423 āĻĒāĻĄāĻŧāĻž

🌈đŸĻ„ āĻŦāĻžāĻ•āĻžāĻ˛āĻšāĻžāĻ‰ āĻĻāĻŋāĻ¯āĻŧā§‡ āĻ†āĻĒāĻ¨āĻžāĻ° āĻ¨āĻŋāĻœāĻ¸ā§āĻŦ AI-āĻœā§‡āĻ¨āĻžāĻ°ā§‡āĻŸā§‡āĻĄ āĻ†āĻ°ā§āĻŸ NFT DApp āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°ā§āĻ¨

āĻĻā§āĻŦāĻžāĻ°āĻž DeveloperAlly29m2023/02/08
Read on Terminal Reader
Read this story w/o Javascript

āĻ…āĻ¤āĻŋāĻĻā§€āĻ°ā§āĻ˜; āĻĒāĻĄāĻŧāĻ¤ā§‡

FVM āĻšāĻžāĻ‡āĻĒāĻžāĻ°āĻ¸ā§āĻĒā§‡āĻ¸ āĻŸā§‡āĻ¸ā§āĻŸāĻ¨ā§‡āĻŸā§‡ āĻāĻ†āĻ‡-āĻœā§‡āĻ¨āĻžāĻ°ā§‡āĻŸā§‡āĻĄ āĻ†āĻ°ā§āĻŸ āĻāĻ¨āĻāĻĢāĻŸāĻŋ āĻŽāĻŋāĻ¨ā§āĻŸ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻĒāĻ¨āĻžāĻ° āĻ¨āĻŋāĻœāĻ¸ā§āĻŦ āĻŸā§‡āĻ•ā§āĻ¸āĻŸ-āĻŸā§ āĻ‡āĻŽā§‡āĻœ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ āĻ¸āĻš āĻāĻ•āĻŸāĻŋ DApp āĻ¤ā§ˆāĻ°āĻŋ, āĻšāĻžāĻ˛āĻžāĻ¨ā§‹ āĻāĻŦāĻ‚ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻ¨āĻŋāĻ°ā§āĻĻā§‡āĻļāĻŋāĻ•āĻžāĨ¤ Tensorflow-āĻāĻ° āĻ‰āĻĒāĻ° āĻ­āĻŋāĻ¤ā§āĻ¤āĻŋ āĻ•āĻ°ā§‡ āĻ•āĻŋāĻ­āĻžāĻŦā§‡ āĻāĻ•āĻŸāĻŋ āĻ“āĻĒā§‡āĻ¨āĻ¸ā§‹āĻ°ā§āĻ¸ āĻĒāĻžāĻ‡āĻĨāĻ¨-āĻ­āĻŋāĻ¤ā§āĻ¤āĻŋāĻ• āĻŸā§‡āĻ•ā§āĻ¸āĻŸ-āĻŸā§-āĻ‡āĻŽā§‡āĻœ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻž āĻ¯āĻžāĻ¯āĻŧ āĻ¤āĻž āĻāĻ‡ āĻŦā§āĻ˛āĻ—āĻŸāĻŋ āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻ¨āĻŋāĻ¯āĻŧā§‡ āĻ¯āĻžāĻŦā§‡āĨ¤ āĻ†āĻŽāĻŋ āĻ‡āĻšā§āĻ›āĻžāĻ•ā§ƒāĻ¤āĻ­āĻžāĻŦā§‡ āĻāĻ‡ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ•ā§‡ āĻ‰āĻĒāĻ˛āĻŦā§āĻ§ āĻ¯āĻ¤āĻŸāĻž āĻ“āĻĒā§‡āĻ¨ āĻ¸ā§‹āĻ°ā§āĻ¸ āĻāĻŦāĻ‚ āĻŦāĻŋāĻ•ā§‡āĻ¨ā§āĻĻā§āĻ°ā§€āĻ­ā§‚āĻ¤ āĻĒā§āĻ°āĻ¯ā§āĻ•ā§āĻ¤āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ āĻŦā§‡āĻ›ā§‡ āĻ¨āĻŋāĻ¯āĻŧā§‡āĻ›āĻŋāĨ¤

People Mentioned

Mention Thumbnail
featured image - 🌈đŸĻ„ āĻŦāĻžāĻ•āĻžāĻ˛āĻšāĻžāĻ‰ āĻĻāĻŋāĻ¯āĻŧā§‡ āĻ†āĻĒāĻ¨āĻžāĻ° āĻ¨āĻŋāĻœāĻ¸ā§āĻŦ AI-āĻœā§‡āĻ¨āĻžāĻ°ā§‡āĻŸā§‡āĻĄ āĻ†āĻ°ā§āĻŸ NFT DApp āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°ā§āĻ¨
DeveloperAlly HackerNoon profile picture
0-item

āĻāĻĢāĻ­āĻŋāĻāĻŽ āĻšāĻžāĻ‡āĻĒāĻžāĻ°āĻ¸ā§āĻĒā§‡āĻ¸ āĻŸā§‡āĻ¸ā§āĻŸāĻ¨ā§‡āĻŸā§‡ āĻāĻ†āĻ‡-āĻœā§‡āĻ¨āĻžāĻ°ā§‡āĻŸā§‡āĻĄ āĻ†āĻ°ā§āĻŸ āĻāĻ¨āĻāĻĢāĻŸāĻŋ āĻŽāĻŋāĻ¨ā§āĻŸ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻĒāĻ¨āĻžāĻ° āĻ¨āĻŋāĻœāĻ¸ā§āĻŦ āĻŸā§‡āĻ•ā§āĻ¸āĻŸ-āĻŸā§ āĻ‡āĻŽā§‡āĻœ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ āĻ¸āĻš āĻāĻ•āĻŸāĻŋ DApp āĻ¤ā§ˆāĻ°āĻŋ, āĻšāĻžāĻ˛āĻžāĻ¨ā§‹ āĻāĻŦāĻ‚ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻ¨āĻŋāĻ°ā§āĻĻā§‡āĻļāĻŋāĻ•āĻž!


āĻ¸ā§āĻšāĻŋāĻĒāĻ¤ā§āĻ°

  • 👩‍đŸ’ģ āĻ†āĻŽāĻ°āĻž āĻ•āĻŋ āĻ•āĻ°āĻŦā§‹...
  • 🏛 āĻ†āĻ°ā§āĻ•āĻŋāĻŸā§‡āĻ•āĻšāĻžāĻ° āĻĄāĻžāĻ¯āĻŧāĻžāĻ—ā§āĻ°āĻžāĻŽ (āĻāĻ•āĻ°āĻ•āĻŽ)
  • đŸĨž DApp āĻĒā§āĻ°āĻ¯ā§āĻ•ā§āĻ¤āĻŋ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ•
  • 🏗ī¸ āĻĒāĻžāĻ‡āĻĨāĻ¨ āĻŸā§‡āĻ•ā§āĻ¸āĻŸ-āĻŸā§-āĻ‡āĻŽā§‡āĻœ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻž
  • ⚒ī¸ āĻ¸āĻ˛āĻŋāĻĄāĻŋāĻŸāĻŋ āĻāĻ¨āĻāĻĢāĻŸāĻŋ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ āĻ¤ā§ˆāĻ°āĻŋ āĻāĻŦāĻ‚ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°āĻž
  • đŸŽŦ āĻĢā§āĻ°āĻ¨ā§āĻŸ-āĻāĻ¨ā§āĻĄ āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻ…ā§āĻ¯āĻžāĻ•āĻļāĻ¨ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻž
    • āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻĒā§āĻ°āĻŦāĻžāĻš
    • Bacalhau āĻŽāĻŋāĻĨāĻ¸ā§āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž
    • NFT. āĻ¸ā§āĻŸā§‹āĻ°ā§‡āĻœ
    • āĻšā§āĻ•ā§āĻ¤āĻŋ āĻŽāĻŋāĻĨāĻ¸ā§āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž
  • 🌟 āĻšā§‚āĻĄāĻŧāĻžāĻ¨ā§āĻ¤ āĻšāĻŋāĻ¨ā§āĻ¤āĻžāĻ­āĻžāĻŦāĻ¨āĻž: āĻāĻ†āĻ‡ āĻāĻŦāĻ‚ āĻŦā§āĻ˛āĻ•āĻšā§‡āĻ‡āĻ¨ā§‡āĻ° āĻ¸āĻŽā§āĻ­āĻžāĻŦāĻ¨āĻž
  • 🐠 āĻŦāĻžāĻ•āĻžāĻ˛āĻšāĻžāĻ‰ āĻ°ā§‹āĻĄāĻŽā§āĻ¯āĻžāĻĒ
  • ✍ī¸ āĻ¯ā§‹āĻ—āĻžāĻ¯ā§‹āĻ— āĻ°āĻžāĻ–ā§āĻ¨!


đŸĻ„ āĻĻā§āĻ°ā§āĻ¤ āĻ˛āĻŋāĻ™ā§āĻ•:


👩‍đŸ’ģ āĻ†āĻŽāĻ°āĻž āĻ•āĻŋ āĻ•āĻ°āĻŦā§‹...

āĻāĻ‡ āĻŦā§āĻ˛āĻ—āĻŸāĻŋ āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻ•ā§€āĻ­āĻžāĻŦā§‡ āĻ¤āĻž āĻ¨āĻŋāĻ¯āĻŧā§‡ āĻ¯ā§‡āĻ¤ā§‡ āĻšāĻŦā§‡


  1. Tensorflow āĻāĻ° āĻ‰āĻĒāĻ° āĻ­āĻŋāĻ¤ā§āĻ¤āĻŋ āĻ•āĻ°ā§‡ āĻāĻ•āĻŸāĻŋ āĻ“āĻĒā§‡āĻ¨āĻ¸ā§‹āĻ°ā§āĻ¸ āĻĒāĻžāĻ‡āĻĨāĻ¨-āĻ­āĻŋāĻ¤ā§āĻ¤āĻŋāĻ• āĻŸā§‡āĻ•ā§āĻ¸āĻŸ-āĻŸā§-āĻ‡āĻŽā§‡āĻœ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°ā§āĻ¨ (āĻāĻŸāĻŋ āĻ†āĻĒāĻ¨āĻžāĻ° āĻ†āĻ—ā§āĻ°āĻšā§‡āĻ° āĻ¨āĻž āĻšāĻ˛ā§‡ āĻ†āĻĒāĻ¨āĻŋ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° Bacalhau HTTP āĻāĻ¨ā§āĻĄāĻĒāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨)
  2. Bacalhau-āĻ āĻāĻ‡ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸāĻŸāĻŋ āĻšāĻžāĻ˛āĻžāĻ¨ (āĻāĻ•āĻŸāĻŋ āĻ–ā§‹āĻ˛āĻž p2p āĻ…āĻĢ-āĻšā§‡āĻ‡āĻ¨ āĻ•āĻŽā§āĻĒāĻŋāĻ‰āĻŸ āĻĒā§āĻ˛ā§āĻ¯āĻžāĻŸāĻĢāĻ°ā§āĻŽ)
  3. āĻ¸āĻ˛āĻŋāĻĄāĻŋāĻŸāĻŋāĻ¤ā§‡ āĻāĻ•āĻŸāĻŋ NFT āĻšā§āĻ•ā§āĻ¤āĻŋ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°ā§āĻ¨ (āĻāĻ•āĻŸāĻŋ āĻ“āĻĒā§‡āĻ¨ āĻœā§‡āĻĒā§‡āĻ˛āĻŋāĻ¨ ERC721 āĻšā§āĻ•ā§āĻ¤āĻŋāĻ° āĻ‰āĻĒāĻ° āĻ­āĻŋāĻ¤ā§āĻ¤āĻŋ āĻ•āĻ°ā§‡)
  4. Filecoin āĻ­āĻžāĻ°ā§āĻšā§āĻ¯āĻŧāĻžāĻ˛ āĻŽā§‡āĻļāĻŋāĻ¨ (FVM) āĻšāĻžāĻ‡āĻĒāĻžāĻ°āĻ¸ā§āĻĒā§‡āĻ¸ āĻŸā§‡āĻ¸ā§āĻŸāĻ¨ā§‡āĻŸā§‡ āĻšāĻžāĻ°ā§āĻĄāĻšāĻžāĻŸā§‡āĻ° āĻ¸āĻžāĻĨā§‡ NFT āĻšā§āĻ•ā§āĻ¤āĻŋ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°ā§āĻ¨
  5. āĻĢā§āĻ°āĻ¨ā§āĻŸ-āĻāĻ¨ā§āĻĄ āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻ…ā§āĻ¯āĻžāĻ•āĻļāĻ¨ - āĻŦāĻžāĻ•āĻžāĻ˛āĻšāĻžāĻ‰ āĻŸā§‡āĻ•ā§āĻ¸āĻŸ-āĻŸā§-āĻ‡āĻŽā§‡āĻœ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ āĻāĻŦāĻ‚ āĻĒā§āĻ°āĻ¤āĻŋāĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ¤ā§‡ āĻ†āĻĒāĻ¨āĻžāĻ° NFT āĻšā§āĻ•ā§āĻ¤āĻŋāĻ° āĻ¸āĻžāĻĨā§‡ āĻ•ā§€āĻ­āĻžāĻŦā§‡ āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻ…ā§āĻ¯āĻžāĻ•ā§āĻŸ āĻ•āĻ°āĻŦā§‡āĻ¨
  6. āĻ•āĻŋāĻ­āĻžāĻŦā§‡ āĻ†āĻĒāĻ¨āĻžāĻ° NFT āĻŽā§‡āĻŸāĻžāĻĄā§‡āĻŸāĻž NFT.Storage āĻ āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŖ āĻ•āĻ°āĻŦā§‡āĻ¨
  7. āĻ•ā§€āĻ­āĻžāĻŦā§‡ āĻ†āĻĒāĻ¨āĻžāĻ° āĻĢā§āĻ°āĻ¨ā§āĻŸ-āĻāĻ¨ā§āĻĄ āĻĄāĻŋāĻāĻĒāĻ•ā§‡ āĻĢā§āĻ˛āĻŋāĻ•ā§‡ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°āĻŦā§‡āĻ¨


āĻ†āĻŽāĻŋ āĻ‡āĻšā§āĻ›āĻžāĻ•ā§ƒāĻ¤āĻ­āĻžāĻŦā§‡ āĻāĻ‡ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ•ā§‡ āĻ‰āĻĒāĻ˛āĻŦā§āĻ§ āĻ¯āĻ¤āĻŸāĻž āĻ“āĻĒā§‡āĻ¨ āĻ¸ā§‹āĻ°ā§āĻ¸ āĻāĻŦāĻ‚ āĻŦāĻŋāĻ•ā§‡āĻ¨ā§āĻĻā§āĻ°ā§€āĻ­ā§‚āĻ¤ āĻĒā§āĻ°āĻ¯ā§āĻ•ā§āĻ¤āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻŦā§‡āĻ›ā§‡ āĻ¨āĻŋāĻ¯āĻŧā§‡āĻ›āĻŋāĨ¤


āĻāĻ‡ āĻŦā§āĻ˛āĻ—āĻŸāĻŋ āĻŦā§‡āĻļ āĻĻā§€āĻ°ā§āĻ˜ āĻšāĻ¤ā§‡ āĻšāĻ˛ā§‡āĻ›ā§‡ (āĻ†āĻ°ā§‡ - āĻ†āĻŽāĻŋ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ¤āĻĨā§āĻ¯ āĻĻāĻŋāĻ¤ā§‡ āĻšāĻžāĻ‡ āĻāĻŦāĻ‚ āĻ¨āĻŋāĻļā§āĻšāĻŋāĻ¤ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻžāĻ‡ āĻ¯ā§‡ āĻ†āĻŽāĻ°āĻž āĻļāĻŋāĻ•ā§āĻˇāĻžāĻ¨āĻŦāĻŋāĻ¸-āĻŦāĻžāĻ¨ā§āĻ§āĻŦ āĻāĻŦāĻ‚ āĻ…āĻ¨ā§āĻ¤āĻ°ā§āĻ­ā§āĻ•ā§āĻ¤ āĻ•āĻ°āĻ›āĻŋ!) - āĻ¤āĻžāĻ‡ āĻŸā§‡āĻŦāĻŋāĻ˛ā§‡ āĻ†āĻĒāĻ¨āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ‰āĻĒāĻ¯ā§‹āĻ—ā§€ āĻ…āĻ‚āĻļāĻ—ā§āĻ˛āĻŋ āĻāĻĄāĻŧāĻŋāĻ¯āĻŧā§‡ āĻ¯ā§‡āĻ¤ā§‡ āĻĻā§āĻŦāĻŋāĻ§āĻž āĻŦā§‹āĻ§ āĻ•āĻ°ā§āĻ¨ āĻŦāĻŋāĻˇāĻ¯āĻŧāĻŦāĻ¸ā§āĻ¤ā§ <3

🏛 āĻ†āĻ°ā§āĻ•āĻŋāĻŸā§‡āĻ•āĻšāĻžāĻ° āĻĄāĻžāĻ¯āĻŧāĻžāĻ—ā§āĻ°āĻžāĻŽ (āĻāĻ•āĻ°āĻ•āĻŽ)

đŸĨž DApp āĻĒā§āĻ°āĻ¯ā§āĻ•ā§āĻ¤āĻŋ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ•

(āĻāĻŸāĻŋ āĻĒāĻžāĻ¨ - āĻāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ¯āĻžāĻ¨āĻ•ā§‡āĻ• āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ• #sorrynotsorry)


āĻ“āĻĒā§‡āĻ¨ āĻ¸ā§‹āĻ°ā§āĻ¸ āĻāĻŦāĻ‚ āĻ“āĻ¯āĻŧā§‡āĻŦ3-āĻŽā§‚āĻ˛ā§āĻ¯ āĻĨā§‡āĻ•ā§‡ :)



  • āĻ¸ā§āĻŽāĻžāĻ°ā§āĻŸ āĻšā§āĻ•ā§āĻ¤āĻŋ [āĻ¸āĻ˛āĻŋāĻĄāĻŋāĻŸāĻŋ, āĻ“āĻĒā§‡āĻ¨ āĻœā§‡āĻĒā§‡āĻ˛āĻŋāĻ¨]
    • āĻšāĻ˛ āĻ‡āĻĨā§‡āĻ°āĻŋāĻ¯āĻŧāĻžāĻŽ (āĻ‡āĻ­āĻŋāĻāĻŽ)-āĻ¸āĻžāĻŽāĻžā§āĻœāĻ¸ā§āĻ¯āĻĒā§‚āĻ°ā§āĻŖ āĻŦā§āĻ˛āĻ•āĻšā§‡āĻ‡āĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ OO āĻ¸ā§āĻŽāĻžāĻ°ā§āĻŸ āĻ•āĻ¨ā§āĻŸā§āĻ°āĻžāĻ•ā§āĻŸ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽāĻŋāĻ‚ āĻ­āĻžāĻˇāĻž
    • āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻ¸ā§āĻŽāĻžāĻ°ā§āĻŸ āĻšā§āĻ•ā§āĻ¤āĻŋ āĻ‰āĻĒāĻžāĻĻāĻžāĻ¨ āĻāĻŦāĻ‚ āĻšā§āĻ•ā§āĻ¤āĻŋāĻ—ā§āĻ˛āĻŋāĻ° āĻāĻ•āĻŸāĻŋ āĻ¨āĻŋāĻ°āĻžāĻĒāĻ¤ā§āĻ¤āĻž-āĻ¨āĻŋāĻ°ā§€āĻ•ā§āĻˇāĻŋāĻ¤ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻ˛āĻžāĻ‡āĻŦā§āĻ°ā§‡āĻ°āĻŋ āĻ…āĻĢāĻžāĻ° āĻ•āĻ°ā§‡
  • āĻ¸ā§āĻŽāĻžāĻ°ā§āĻŸ āĻ•āĻ¨ā§āĻŸā§āĻ°āĻžāĻ•ā§āĻŸ āĻ†āĻ‡āĻĄāĻŋāĻ‡ [āĻšāĻžāĻ°ā§āĻ§āĻžāĻ¤]
    • āĻšāĻ˛ Ethereum āĻ¸āĻĢā§āĻŸāĻ“āĻ¯āĻŧā§āĻ¯āĻžāĻ° āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻ¨āĻž, āĻ•āĻŽā§āĻĒāĻžāĻ‡āĻ˛, āĻĄāĻŋāĻŦāĻžāĻ—āĻŋāĻ‚ āĻāĻŦāĻ‚ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻ‰āĻ¨ā§āĻ¨āĻ¯āĻŧāĻ¨ āĻĒāĻ°āĻŋāĻŦā§‡āĻļ
  • āĻŦā§āĻ˛āĻ•āĻšā§‡āĻ‡āĻ¨ āĻŸā§‡āĻ¸ā§āĻŸāĻ¨ā§‡āĻŸ [āĻĢāĻžāĻ‡āĻ˛āĻ•āĻ¯āĻŧā§‡āĻ¨ āĻ­āĻžāĻ°ā§āĻšā§āĻ¯āĻŧāĻžāĻ˛ āĻŽā§‡āĻļāĻŋāĻ¨ āĻšāĻžāĻ‡āĻĒāĻžāĻ°āĻ¸ā§āĻĒā§‡āĻ¸]
    • āĻšāĻ˛ āĻĢāĻžāĻ‡āĻ˛āĻ•āĻ¯āĻŧā§‡āĻ¨ āĻŦā§āĻ˛āĻ•āĻšā§‡āĻ‡āĻ¨ā§‡ āĻ¨āĻŋāĻ°ā§āĻŽāĻŋāĻ¤ āĻāĻ•āĻŸāĻŋ āĻ‡āĻ­āĻŋāĻāĻŽ-āĻ¸āĻžāĻŽāĻžā§āĻœāĻ¸ā§āĻ¯āĻĒā§‚āĻ°ā§āĻŖ āĻŸā§‡āĻ¸ā§āĻŸāĻ¨ā§‡āĻŸ
  • NFT āĻŽā§‡āĻŸāĻžāĻĄā§‡āĻŸāĻž āĻ¸ā§āĻŸā§‹āĻ°ā§‡āĻœ [NFT.Storage]
    • āĻšāĻ˛ IPFS āĻāĻŦāĻ‚ Filecoin-āĻāĻ° āĻ‰āĻĒāĻ°ā§‡ āĻ¨āĻŋāĻ°ā§āĻŽāĻŋāĻ¤ āĻāĻ•āĻŸāĻŋ āĻ¸āĻ°ā§āĻŦāĻœāĻ¨ā§€āĻ¨ āĻœāĻŋāĻ¨āĻŋāĻ¸ āĻ¯āĻž NFT āĻŽā§‡āĻŸāĻžāĻĄā§‡āĻŸāĻž āĻ…āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ā§€āĻ¯āĻŧāĻ­āĻžāĻŦā§‡ āĻāĻŦāĻ‚ āĻ…āĻŦāĻŋāĻ°āĻžāĻŽāĻ­āĻžāĻŦā§‡ āĻ¸āĻžā§āĻšāĻ¯āĻŧ āĻ•āĻ°ā§‡ āĻāĻŦāĻ‚ NFTs āĻāĻŦāĻ‚ āĻāĻ•āĻŸāĻŋ āĻœāĻžāĻ­āĻžāĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ sdk-āĻāĻ° āĻœāĻ¨ā§āĻ¯ āĻŦāĻŋāĻ¨āĻžāĻŽā§‚āĻ˛ā§āĻ¯ā§‡ āĻŦāĻŋāĻ•ā§‡āĻ¨ā§āĻĻā§āĻ°ā§€āĻ­ā§‚āĻ¤ āĻ¸ā§āĻŸā§‹āĻ°ā§‡āĻœ āĻ…āĻĢāĻžāĻ° āĻ•āĻ°ā§‡āĨ¤
  • āĻĢā§āĻ°āĻ¨ā§āĻŸ-āĻāĻ¨ā§āĻĄ [NextJS/React + NPM]
    • āĻ†āĻŽāĻ°āĻž āĻ¸āĻŽā§āĻ­āĻŦāĻ¤ āĻāĻ‡ āĻ¸āĻŦ āĻœāĻžāĻ¨āĻŋ... āĻ¤āĻžāĻ‡ āĻ¨āĻž? :āĻĒāĻŋ
  • āĻ•ā§āĻ˛āĻžāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ āĻĨā§‡āĻ•ā§‡ āĻ¸ā§āĻŽāĻžāĻ°ā§āĻŸ āĻšā§āĻ•ā§āĻ¤āĻŋ āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻ…ā§āĻ¯āĻžāĻ•āĻļāĻ¨ [āĻŽā§‡āĻŸāĻžāĻŽāĻžāĻ¸ā§āĻ•, āĻ‡āĻĨāĻžāĻ°āĻ¸, āĻšā§‡āĻ‡āĻ¨āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ• RPC āĻ¨ā§‹āĻĄ]
    • āĻāĻ•āĻŸāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ - āĻ†āĻŽāĻŋ āĻ†āĻŽāĻžāĻ° āĻŦā§āĻ˛āĻ•āĻšā§‡āĻ¨ āĻšā§āĻ•ā§āĻ¤āĻŋāĻ° āĻ¸āĻžāĻĨā§‡ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻĒāĻ āĻ¨āĻ¯ā§‹āĻ—ā§āĻ¯ āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻ…ā§āĻ¯āĻžāĻ•āĻļāĻ¨ āĻĒā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°āĻŋāĨ¤
    • āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ°āĻĻāĻžāĻ¨āĻ•āĻžāĻ°ā§€āĻ° (āĻŦāĻž āĻ…āĻ¨ā§āĻ°ā§‚āĻĒ āĻ“āĻ¯āĻŧāĻžāĻ˛ā§‡āĻŸ āĻ¯āĻž āĻĻā§āĻŦāĻžāĻ°āĻž āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ ), āĻ†āĻŽāĻ°āĻž āĻŦā§āĻ˛āĻ•āĻšā§‡āĻ‡āĻ¨ āĻšā§āĻ•ā§āĻ¤āĻŋāĻ¤ā§‡ āĻ•āĻ˛ āĻ˛āĻŋāĻ–āĻ¤ā§‡ āĻ¸āĻ•ā§āĻˇāĻŽ āĻ•āĻ°āĻŋāĨ¤
    • āĻœā§‡āĻāĻ¸ āĻ‡āĻ­āĻŋāĻāĻŽ-āĻ¸āĻžāĻŽāĻžā§āĻœāĻ¸ā§āĻ¯āĻĒā§‚āĻ°ā§āĻŖ āĻ¸ā§āĻŽāĻžāĻ°ā§āĻŸ āĻšā§āĻ•ā§āĻ¤āĻŋāĻ° āĻ¸āĻžāĻĨā§‡ āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻ…ā§āĻ¯āĻžāĻ•ā§āĻŸ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻ˛āĻžāĻ‡āĻŦā§āĻ°ā§‡āĻ°āĻŋ
  • āĻāĻ†āĻ‡ āĻŸā§‡āĻ•ā§āĻ¸āĻŸ-āĻŸā§-āĻ‡āĻŽā§‡āĻœ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻŦāĻ˛ āĻĄāĻŋāĻĢāĻŋāĻ‰āĻļāĻ¨ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ [āĻĒāĻžāĻ‡āĻĨāĻ¨, āĻŸā§‡āĻ¨āĻ¸āĻ°āĻĢā§āĻ˛ā§‹]
    • āĻšāĻ˛ āĻāĻ•āĻŸāĻŋ āĻ“āĻĒā§‡āĻ¨-āĻ¸ā§‹āĻ°ā§āĻ¸ āĻŽā§‡āĻļāĻŋāĻ¨ āĻ˛āĻžāĻ°ā§āĻ¨āĻŋāĻ‚ āĻĒā§āĻ˛ā§āĻ¯āĻžāĻŸāĻĢāĻ°ā§āĻŽ āĻāĻŦāĻ‚ āĻ˛āĻžāĻ‡āĻŦā§āĻ°ā§‡āĻ°āĻŋ āĻ¯āĻž āĻĒā§āĻ°āĻžāĻ•-āĻĒā§āĻ°āĻļāĻŋāĻ•ā§āĻˇāĻŋāĻ¤ āĻŽāĻĄā§‡āĻ˛ āĻāĻŦāĻ‚ āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻĄā§‡āĻŸāĻž āĻāĻŦāĻ‚ ML āĻŸā§āĻ˛ āĻ¸āĻ°āĻŦāĻ°āĻžāĻš āĻ•āĻ°ā§‡āĨ¤
  • āĻāĻ†āĻ‡ āĻŸā§‡āĻ•ā§āĻ¸āĻŸ-āĻŸā§-āĻ‡āĻŽā§‡āĻœ āĻœā§‡āĻ¨āĻžāĻ°ā§‡āĻļāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻŦāĻŋāĻ•ā§‡āĻ¨ā§āĻĻā§āĻ°ā§€āĻ•ā§ƒāĻ¤ āĻ…āĻĢ-āĻšā§‡āĻ‡āĻ¨ āĻ•āĻŽā§āĻĒāĻŋāĻ‰āĻŸ [āĻŦāĻžāĻ•āĻžāĻ˛āĻšāĻžāĻ‰]
    • āĻšāĻ˛ āĻāĻ•āĻŸāĻŋ āĻĒāĻŋāĻ¯āĻŧāĻžāĻ°-āĻŸā§-āĻĒāĻŋāĻ¯āĻŧāĻžāĻ° āĻ“āĻĒā§‡āĻ¨ āĻ•āĻŽā§āĻĒāĻŋāĻ‰āĻŸā§‡āĻļāĻ¨ āĻ¨ā§‡āĻŸāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ• āĻ¯āĻž āĻ¸āĻ°ā§āĻŦāĻœāĻ¨ā§€āĻ¨, āĻ¸ā§āĻŦāĻšā§āĻ› āĻāĻŦāĻ‚ āĻāĻšā§āĻ›āĻŋāĻ•āĻ­āĻžāĻŦā§‡ āĻ¯āĻžāĻšāĻžāĻ‡āĻ¯ā§‹āĻ—ā§āĻ¯ āĻ—āĻŖāĻ¨āĻž āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ—ā§āĻ˛āĻŋāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ˛ā§āĻ¯āĻžāĻŸāĻĢāĻ°ā§āĻŽ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻ•āĻ°ā§‡āĨ¤ āĻāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻŦāĻŋāĻ•ā§‡āĻ¨ā§āĻĻā§āĻ°ā§€āĻ•ā§ƒāĻ¤ āĻ…āĻĢ-āĻšā§‡āĻ‡āĻ¨ āĻĄā§‡āĻŸāĻž āĻ—āĻŖāĻ¨āĻž āĻ¸ā§āĻ¤āĻ°āĨ¤
  • āĻŦāĻŋāĻ•ā§‡āĻ¨ā§āĻĻā§āĻ°ā§€āĻ­ā§‚āĻ¤ DApp āĻ¸ā§āĻĨāĻžāĻĒāĻ¨āĻž [āĻĢā§āĻ˛āĻŋāĻ•]
    • IPFS āĻāĻŦāĻ‚ Filecoin-āĻ āĻ“āĻ¯āĻŧā§‡āĻŦāĻ¸āĻžāĻ‡āĻŸ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ā§‡āĻ° āĻĒā§āĻ°āĻ¸ā§āĻ¤āĻžāĻŦ āĻĻā§‡āĻ¯āĻŧāĨ¤ āĻāĻŸāĻŋ Vercel āĻŦāĻž Netlify-āĻāĻ° āĻ“āĻ¯āĻŧā§‡āĻŦ3 āĻ¸āĻ‚āĻ¸ā§āĻ•āĻ°āĻŖ - āĻŦāĻ˛āĻ¤ā§‡ āĻĒāĻžāĻ°āĻŋ āĻ¨āĻž āĻ¯ā§‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ•āĻžāĻ›ā§‡ āĻ¸āĻ¤ā§āĻ¯āĻŋāĻ‡ āĻāĻ•āĻŸāĻŋ āĻŦāĻŋāĻ•ā§‡āĻ¨ā§āĻĻā§āĻ°ā§€āĻ­ā§‚āĻ¤ āĻ…ā§āĻ¯āĻžāĻĒ āĻ†āĻ›ā§‡ āĻāĻŦāĻ‚ āĻ¤āĻžāĻ°āĻĒāĻ° āĻāĻŸāĻŋāĻ•ā§‡ āĻ“āĻ¯āĻŧā§‡āĻŦ2-āĻ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°āĻž āĻšāĻŦā§‡! :D

🏗ī¸ āĻĒāĻžāĻ‡āĻĨāĻ¨ āĻŸā§‡āĻ•ā§āĻ¸āĻŸ-āĻŸā§-āĻ‡āĻŽā§‡āĻœ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻž


💡 TLDR āĻŸāĻŋāĻĒ 💡

āĻāĻ‡ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸāĻŸāĻŋ āĻ‡āĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§‡āĻ‡ CLI āĻāĻŦāĻ‚ āĻāĻ•āĻŸāĻŋ HTTP āĻāĻ¨ā§āĻĄāĻĒāĻ¯āĻŧā§‡āĻ¨ā§āĻŸā§‡āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ Bacalhau-āĻāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ‰āĻĒāĻ˛āĻŦā§āĻ§, āĻ¤āĻžāĻ‡ āĻ¨āĻŋāĻ°ā§āĻĻā§āĻŦāĻŋāĻ§āĻžāĻ¯āĻŧ āĻāĻ‡ āĻ…āĻ‚āĻļāĻŸāĻŋ āĻāĻĄāĻŧāĻŋāĻ¯āĻŧā§‡ āĻ¯āĻžāĻ¨āĨ¤


āĻ¸ā§āĻĨāĻŋāĻ¤āĻŋāĻļā§€āĻ˛ āĻŦāĻŋāĻ¸ā§āĻ¤āĻžāĻ°ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻĻā§āĻ°ā§āĻ¤ āĻ­ā§‚āĻŽāĻŋāĻ•āĻž


āĻ¸ā§āĻŸā§āĻ¯āĻžāĻŦāĻ˛ āĻĄāĻŋāĻĢāĻŋāĻ‰āĻļāĻ¨ āĻŦāĻ°ā§āĻ¤āĻŽāĻžāĻ¨ā§‡ āĻŸā§‡āĻ•ā§āĻ¸āĻŸ-āĻŸā§-āĻ‡āĻŽā§‡āĻœ āĻĒā§āĻ°āĻ¸ā§‡āĻ¸āĻŋāĻ‚ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻ§āĻžāĻ¨ āĻŽā§‡āĻļāĻŋāĻ¨ āĻ˛āĻžāĻ°ā§āĻ¨āĻŋāĻ‚ āĻŽāĻĄā§‡āĻ˛ (āĻāĻŦāĻ‚ āĻāĻ•āĻ‡ āĻŽāĻĄā§‡āĻ˛ āĻĄāĻžāĻ˛-āĻ‡ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡)āĨ¤ āĻāĻŸāĻŋ āĻāĻ• āĻ§āĻ°āĻ¨ā§‡āĻ° āĻĄāĻŋāĻĒ āĻ˛āĻžāĻ°ā§āĻ¨āĻŋāĻ‚ - āĻŽā§‡āĻļāĻŋāĻ¨ āĻ˛āĻžāĻ°ā§āĻ¨āĻŋāĻ‚āĻ¯āĻŧā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻ‰āĻĒāĻ¸ā§‡āĻŸ āĻ¯āĻž āĻ¨āĻŋāĻœā§‡āĻ•ā§‡ āĻāĻ•āĻŸāĻŋ āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻ•āĻžāĻœ āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻļā§‡āĻ–āĻžāĻ¯āĻŧ - āĻāĻ‡ āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡ āĻāĻ•āĻŸāĻŋ āĻĒāĻžāĻ ā§āĻ¯ āĻ‡āĻ¨āĻĒā§āĻŸāĻ•ā§‡ āĻāĻ•āĻŸāĻŋ āĻšāĻŋāĻ¤ā§āĻ° āĻ†āĻ‰āĻŸāĻĒā§āĻŸā§‡ āĻ°ā§‚āĻĒāĻžāĻ¨ā§āĻ¤āĻ° āĻ•āĻ°āĻž āĻšāĻ¯āĻŧāĨ¤


āĻāĻ‡ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖā§‡, āĻ†āĻŽāĻ°āĻž āĻāĻ•āĻŸāĻŋ āĻĄāĻŋāĻĢāĻŋāĻ‰āĻļāĻ¨ āĻĒā§āĻ°ā§‹āĻŦā§‡āĻŦāĻŋāĻ˛āĻŋāĻ¸ā§āĻŸāĻŋāĻ• āĻŽāĻĄā§‡āĻ˛ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻ›āĻŋ āĻ¯āĻž āĻŸā§‡āĻ•ā§āĻ¸āĻŸ āĻĨā§‡āĻ•ā§‡ āĻ‡āĻŽā§‡āĻœ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻ¤ā§‡ āĻāĻ•āĻŸāĻŋ āĻŸā§āĻ°āĻžāĻ¨ā§āĻ¸āĻĢāĻ°āĻŽāĻžāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡āĨ¤


āĻ¯āĻžāĻ‡āĻšā§‹āĻ• āĻšāĻŋāĻ¨ā§āĻ¤āĻž āĻ•āĻ°āĻŦā§‡āĻ¨ āĻ¨āĻž - āĻāĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻŽāĻžāĻĻā§‡āĻ°āĻ•ā§‡ āĻŽā§‡āĻļāĻŋāĻ¨ āĻ˛āĻžāĻ°ā§āĻ¨āĻŋāĻ‚ āĻŽāĻĄā§‡āĻ˛ā§‡ āĻ—āĻŋāĻ¯āĻŧā§‡ āĻĒā§āĻ°āĻļāĻŋāĻ•ā§āĻˇāĻŖ āĻĻā§‡āĻ“āĻ¯āĻŧāĻžāĻ° āĻĻāĻ°āĻ•āĻžāĻ° āĻ¨ā§‡āĻ‡ (āĻ¯āĻĻāĻŋāĻ“ āĻ†āĻ°ā§‡ - āĻ¯āĻĻāĻŋ āĻāĻŸāĻŋ āĻ†āĻĒāĻ¨āĻžāĻ° āĻœāĻŋāĻ¨āĻŋāĻ¸ āĻšāĻ¯āĻŧ - āĻ†āĻĒāĻ¨āĻŋ āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨!)


āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤ā§‡, āĻ†āĻŽāĻ°āĻž āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻĒāĻžāĻ‡āĻĨāĻ¨ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸā§‡ Google-āĻāĻ° TensorFlow āĻ“āĻĒā§‡āĻ¨-āĻ¸ā§‹āĻ°ā§āĻ¸ āĻŽā§‡āĻļāĻŋāĻ¨ āĻ˛āĻžāĻ°ā§āĻ¨āĻŋāĻ‚ āĻ˛āĻžāĻ‡āĻŦā§āĻ°ā§‡āĻ°āĻŋ āĻĨā§‡āĻ•ā§‡ āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ°āĻžāĻ•-āĻĒā§āĻ°āĻļāĻŋāĻ•ā§āĻˇāĻŋāĻ¤ āĻŽāĻĄā§‡āĻ˛ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ āĻ¯āĻžāĻšā§āĻ›āĻŋ āĻ•āĻžāĻ°āĻŖ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻœāĻ¨ā§āĻ¯ ML āĻ“āĻœāĻ¨āĻ—ā§āĻ˛āĻŋ āĻĒā§āĻ°āĻžāĻ•-āĻ—āĻŖāĻ¨āĻž āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤


āĻ†āĻ°āĻ“ āĻ¸āĻ āĻŋāĻ•āĻ­āĻžāĻŦā§‡, āĻ†āĻŽāĻ°āĻž āĻ†āĻ¸āĻ˛ āĻāĻŽāĻāĻ˛ āĻŽāĻĄā§‡āĻ˛ā§‡āĻ° āĻāĻ•āĻŸāĻŋ āĻ…āĻĒā§āĻŸāĻŋāĻŽāĻžāĻ‡āĻœ āĻ•āĻ°āĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻ›āĻŋāĨ¤


āĻĒāĻžāĻ‡āĻĨāĻ¨ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ


đŸĻ„ āĻ†āĻĒāĻ¨āĻŋ āĻ•ā§€āĻ­āĻžāĻŦā§‡ āĻāĻ‡ āĻŸā§‡āĻ•ā§āĻ¸āĻŸ-āĻŸā§-āĻ‡āĻŽā§‡āĻœ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸāĻŸāĻŋ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻŦā§‡āĻ¨ āĻāĻŦāĻ‚ āĻĄāĻ•āĻžāĻ°āĻžāĻ‡āĻœ āĻ•āĻ°āĻŦā§‡āĻ¨ āĻ¤āĻžāĻ° āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻ“āĻ¯āĻŧāĻžāĻ•āĻĨā§āĻ°ā§ āĻ–ā§āĻāĻœā§‡ āĻĒāĻžāĻŦā§‡āĻ¨ āĻāĻŦāĻ‚ āĻāĻŸāĻŋ āĻāĻŦāĻ‚ āĻāĻ‡ āĻšāĻžāĻ˛āĻžāĻ¨āĨ¤ đŸĻ„ āĻ†āĻĒāĻ¨āĻŋ āĻāĻ‡ āĻāĻŸāĻŋ āĻšāĻžāĻ˛āĻžāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨


āĻāĻ–āĻžāĻ¨ā§‡ āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻĒāĻžāĻ‡āĻĨāĻ¨ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ!


 import argparse from stable_diffusion_tf.stable_diffusion import Text2Image from PIL import Image import os parser = argparse.ArgumentParser(description="Stable Diffusion") parser.add_argument("--h",dest="height", type=int,help="height of the image",default=512) parser.add_argument("--w",dest="width", type=int,help="width of the image",default=512) parser.add_argument("--p",dest="prompt", type=str,help="Description of the image you want to generate",default="cat") parser.add_argument("--n",dest="numSteps", type=int,help="Number of Steps",default=50) parser.add_argument("--u",dest="unconditionalGuidanceScale", type=float,help="Number of Steps",default=7.5) parser.add_argument("--t",dest="temperature", type=int,help="Number of Steps",default=1) parser.add_argument("--b",dest="batchSize", type=int,help="Number of Images",default=1) parser.add_argument("--o",dest="output", type=str,help="Output Folder where to store the Image",default="./") args=parser.parse_args() height=args.height width=args.width prompt=args.prompt numSteps=args.numSteps unconditionalGuidanceScale=args.unconditionalGuidanceScale temperature=args.temperature batchSize=args.batchSize output=args.output generator = Text2Image( img_height=height, img_width=width, jit_compile=False, # You can try True as well (different performance profile) ) img = generator.generate( prompt, num_steps=numSteps, unconditional_guidance_scale=unconditionalGuidanceScale, temperature=temperature, batch_size=batchSize, ) for i in range(0,batchSize): pil_img = Image.fromarray(img[i]) image = pil_img.save(f"{output}/image{i}.png")


āĻ‰āĻĒāĻ°ā§‡āĻ° āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸāĻŸāĻŋ āĻ•ā§‡āĻŦāĻ˛ āĻāĻ•āĻŸāĻŋ āĻŸā§‡āĻ•ā§āĻ¸āĻŸ āĻĒā§āĻ°āĻŽā§āĻĒāĻŸ āĻ‡āĻ¨āĻĒā§āĻŸ āĻ†āĻ°ā§āĻ—ā§āĻŽā§‡āĻ¨ā§āĻŸ āĻāĻŦāĻ‚ āĻ•āĻŋāĻ›ā§ āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻāĻšā§āĻ›āĻŋāĻ• āĻĒāĻ°āĻžāĻŽāĻŋāĻ¤āĻŋ āĻ—ā§āĻ°āĻšāĻŖ āĻ•āĻ°ā§‡ āĻāĻŦāĻ‚ āĻ¤āĻžāĻ°āĻĒāĻ°ā§‡ āĻ•āĻžāĻāĻŸāĻžāĻ¯ā§āĻ•ā§āĻ¤ āĻŸā§‡āĻ¨āĻ¸āĻ°āĻĢā§āĻ˛ā§‹ āĻ˛āĻžāĻ‡āĻŦā§āĻ°ā§‡āĻ°āĻŋāĻ¤ā§‡ āĻ•āĻ˛ āĻ•āĻ°ā§‡ āĻ›āĻŦāĻŋ (āĻ—ā§āĻ˛āĻŋ) āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻ¤ā§‡ āĻāĻŦāĻ‚ āĻ¸ā§‡āĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻāĻ•āĻŸāĻŋ āĻ†āĻ‰āĻŸāĻĒā§āĻŸ āĻĢāĻžāĻ‡āĻ˛ā§‡ āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŖ āĻ•āĻ°ā§‡ā§ˇ


āĻāĻ–āĻžāĻ¨ā§‡ āĻ•āĻ°āĻž āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ­āĻžāĻ°ā§€ āĻ‰āĻ¤ā§āĻ¤ā§‹āĻ˛āĻ¨ āĻ¨ā§€āĻšā§‡āĻ° āĻŦāĻŋāĻ­āĻžāĻ—ā§‡ āĻ˜āĻŸā§‡ - āĻāĻ–āĻžāĻ¨ā§‡āĻ‡ āĻŽā§‡āĻļāĻŋāĻ¨ āĻ˛āĻžāĻ°ā§āĻ¨āĻŋāĻ‚ āĻŽāĻĄā§‡āĻ˛ āĻ¤āĻžāĻ° āĻœāĻžāĻĻā§ āĻ•āĻ°ā§‡āĨ¤ đŸĒ„


 generator = Text2Image( img_height=height, img_width=width, jit_compile=False, ) img = generator.generate( prompt, num_steps=numSteps, unconditional_guidance_scale=unconditionalGuidanceScale, temperature=temperature, batch_size=batchSize, )


āĻĻāĻžāĻ°ā§āĻŖ, āĻ†āĻŽāĻ°āĻž āĻāĻ•āĻŸāĻŋ āĻŸā§‡āĻ•ā§āĻ¸āĻŸ āĻĒā§āĻ°āĻŽā§āĻĒāĻŸ āĻĨā§‡āĻ•ā§‡ āĻ›āĻŦāĻŋ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°āĻŋ, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ‰āĻŽ... āĻāĻ‡ GPU-āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ā§€āĻ¯āĻŧ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸāĻŸāĻŋ āĻ•ā§‹āĻĨāĻžāĻ¯āĻŧ āĻšāĻžāĻ˛āĻžāĻ¤ā§‡ āĻšāĻŦā§‡..... 🤔🤔


āĻ¯āĻĻāĻŋ āĻāĻ•āĻŸāĻŋ āĻœāĻŋāĻ¨āĻŋāĻ¸ āĻĨāĻžāĻ•ā§‡ āĻ¯ā§‡ āĻŦā§āĻ˛āĻ•āĻšā§‡āĻ‡āĻ¨ āĻĒā§āĻ°āĻ¯ā§āĻ•ā§āĻ¤āĻŋ āĻ¸āĻšāĻœāĻžāĻ¤āĻ­āĻžāĻŦā§‡ āĻ­āĻžāĻ˛ āĻ•āĻžāĻœ āĻ•āĻ°ā§‡ āĻ¨āĻž, āĻ¤āĻž āĻšāĻ˛ āĻŦāĻĄāĻŧ āĻĄā§‡āĻŸāĻž āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ•āĻ°āĻŖāĨ¤ āĻāĻŸāĻŋ āĻ¨āĻŋāĻ°ā§āĻ­āĻ°āĻ¯ā§‹āĻ—ā§āĻ¯āĻ¤āĻž āĻāĻŦāĻ‚ āĻ¸ā§‡āĻ¨ā§āĻ¸āĻ°āĻļāĻŋāĻĒ āĻĒā§āĻ°āĻ¤āĻŋāĻ°ā§‹āĻ§ā§‡āĻ° āĻŽāĻ¤ āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻļāĻ•ā§āĻ¤āĻŋāĻļāĻžāĻ˛ā§€ āĻŦā§ˆāĻļāĻŋāĻˇā§āĻŸā§āĻ¯ āĻĒā§āĻ°āĻĻāĻžāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻŦāĻŋāĻ¤āĻ°āĻŖ āĻ•āĻ°āĻž āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡āĻ° āĻ‰āĻĒāĻ° āĻ•āĻŽā§āĻĒāĻŋāĻ‰āĻŸāĻŋāĻ‚ āĻ–āĻ°āĻšā§‡āĻ° āĻ•āĻžāĻ°āĻŖā§‡āĨ¤


āĻ›ā§‹āĻŸ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻĒāĻ¨āĻžāĻ° āĻ¸ā§āĻĨāĻžāĻ¨ā§€āĻ¯āĻŧ āĻŽā§‡āĻļāĻŋāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻ¸āĻŽā§āĻ­āĻŦ - āĻ†āĻ¸āĻ˛ā§‡ āĻ†āĻŽāĻŋ āĻāĻ‡ āĻŦāĻŋāĻļā§‡āĻˇ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻŸāĻŋ āĻ†āĻŽāĻžāĻ° (āĻāĻŸāĻŋ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻ–ā§āĻŦ āĻ…āĻ¸āĻ¨ā§āĻ¤ā§āĻˇā§āĻŸ) āĻŽā§āĻ¯āĻžāĻ• āĻāĻŽ 1 āĻ āĻ•āĻžāĻœ āĻ•āĻ°āĻ¤ā§‡ āĻĒā§‡āĻ°ā§‡āĻ›āĻŋ, āĻ¤āĻŦā§‡, āĻāĻŸāĻŋ āĻĢāĻ˛āĻžāĻĢāĻ˛ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ–ā§āĻŦ āĻĻā§€āĻ°ā§āĻ˜ āĻ…āĻĒā§‡āĻ•ā§āĻˇāĻž āĻ›āĻŋāĻ˛ (āĻŸā§‡āĻŦāĻŋāĻ˛ āĻŸā§‡āĻ¨āĻŋāĻ¸ā§‡āĻ° āĻ–ā§‡āĻ˛āĻž āĻ•ā§‡āĻ‰?) āĻ¸ā§āĻ¤āĻ°āĻžāĻ‚, āĻāĻ•āĻŦāĻžāĻ° āĻ†āĻĒāĻ¨āĻŋ āĻŦāĻĄāĻŧ āĻĄā§‡āĻŸāĻž āĻĒā§āĻ°āĻ¸ā§‡āĻ¸āĻŋāĻ‚ āĻ•āĻ°āĻž āĻļā§āĻ°ā§ āĻ•āĻ°āĻ˛ā§‡, āĻ†āĻĒāĻ¨āĻžāĻ° āĻ†āĻ°āĻ“ āĻ—ā§āĻ¯āĻžāĻ¸ā§‡āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻšāĻŦā§‡ (āĻļā§āĻ˛ā§‡āĻˇā§‡āĻ° āĻ‰āĻĻā§āĻĻā§‡āĻļā§āĻ¯ā§‡) āĻāĻŦāĻ‚ āĻ¯āĻĻāĻŋ āĻ†āĻĒāĻ¨āĻžāĻ° āĻŦāĻžāĻĄāĻŧāĻŋāĻ° āĻ†āĻļā§‡āĻĒāĻžāĻļā§‡ āĻāĻ•āĻŸāĻŋ āĻĄā§‡āĻĄāĻŋāĻ•ā§‡āĻŸā§‡āĻĄ āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ° āĻ¨āĻž āĻĨāĻžāĻ•ā§‡, āĻ¤āĻžāĻšāĻ˛ā§‡ āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻāĻ•āĻŸāĻŋ āĻ­āĻžāĻ°ā§āĻšā§āĻ¯āĻŧāĻžāĻ˛ āĻŽā§‡āĻļāĻŋāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡ āĻ•ā§āĻ˛āĻžāĻ‰āĻĄ āĻ•āĻŽā§āĻĒāĻŋāĻ‰āĻŸāĻŋāĻ‚ āĻĒā§āĻ˛ā§āĻ¯āĻžāĻŸāĻĢāĻ°ā§āĻŽāĨ¤


āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻŸāĻŋ āĻ•ā§‡āĻ¨ā§āĻĻā§āĻ°ā§€āĻ­ā§‚āĻ¤ āĻ¨āĻ¯āĻŧ, āĻāĻŸāĻŋ āĻ…āĻĻāĻ•ā§āĻˇāĻ“ - āĻ—āĻŖāĻ¨āĻž āĻŽā§‡āĻļāĻŋāĻ¨ āĻĨā§‡āĻ•ā§‡ āĻĄā§‡āĻŸāĻž āĻ…āĻœāĻžāĻ¨āĻž āĻĻā§‚āĻ°āĻ¤ā§āĻŦā§‡āĻ° āĻ•āĻžāĻ°āĻŖā§‡ āĻāĻŦāĻ‚ āĻāĻŸāĻŋ āĻĻā§āĻ°ā§āĻ¤ āĻŦā§āĻ¯āĻ¯āĻŧāĻŦāĻšā§āĻ˛ āĻšāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤ āĻ†āĻŽāĻŋ āĻāĻŽāĻ¨ āĻ•ā§‹āĻ¨ā§‹ āĻĢā§āĻ°āĻŋ-āĻŸāĻžāĻ¯āĻŧāĻžāĻ° āĻ•ā§āĻ˛āĻžāĻ‰āĻĄ āĻ•āĻŽā§āĻĒāĻŋāĻ‰āĻŸāĻŋāĻ‚ āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻž āĻ–ā§āĻāĻœā§‡ āĻĒāĻžāĻ‡āĻ¨āĻŋ āĻ¯āĻž āĻāĻ° āĻœāĻ¨ā§āĻ¯ GPU āĻĒā§āĻ°āĻ¸ā§‡āĻ¸āĻŋāĻ‚ āĻ…āĻĢāĻžāĻ° āĻ•āĻ°ā§‡ (āĻ•ā§‡āĻ‰ āĻ•āĻŋ āĻŦāĻ˛ā§‡āĻ›ā§‡ āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸā§‹ āĻŽāĻžāĻ‡āĻ¨āĻŋāĻ‚ āĻ¨āĻŋāĻˇāĻŋāĻĻā§āĻ§..?) āĻāĻŦāĻ‚ āĻĒāĻ°āĻŋāĻ•āĻ˛ā§āĻĒāĻ¨āĻžāĻ—ā§āĻ˛āĻŋ āĻĒā§āĻ°āĻ¤āĻŋ āĻŽāĻžāĻ¸ā§‡ 400 āĻŽāĻžāĻ°ā§āĻ•āĻŋāĻ¨ āĻĄāĻ˛āĻžāĻ°ā§‡ āĻāĻ¸ā§‡āĻ›ā§‡ (āĻ¨āĻž āĻ§āĻ¨ā§āĻ¯āĻŦāĻžāĻĻ)āĨ¤



āĻŦāĻžāĻ•āĻžāĻ˛āĻšāĻžāĻ‰ !


āĻ­āĻžāĻ—ā§āĻ¯āĻ•ā§āĻ°āĻŽā§‡ āĻ¯āĻĻāĻŋāĻ“, āĻāĻ‡ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻ—ā§āĻ˛āĻŋ āĻ•āĻŋāĻ›ā§ āĻ¸āĻŽāĻ¸ā§āĻ¯āĻž āĻ¯āĻž Bacalhau āĻ¸āĻŽāĻžāĻ§āĻžāĻ¨ āĻ•āĻ°āĻžāĻ° āĻšā§‡āĻˇā§āĻŸāĻž āĻ•āĻ°āĻ›ā§‡āĨ¤ āĻĄā§‡āĻŸāĻž āĻĒā§āĻ°āĻ¸ā§‡āĻ¸āĻŋāĻ‚ āĻāĻŦāĻ‚ āĻ—āĻŖāĻ¨āĻžāĻ•ā§‡ āĻ¸āĻ•āĻ˛ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ‰āĻ¨ā§āĻŽā§āĻ•ā§āĻ¤ āĻāĻŦāĻ‚ āĻ‰āĻĒāĻ˛āĻŦā§āĻ§ āĻ•āĻ°āĻž āĻāĻŦāĻ‚ āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ•āĻ°āĻŖā§‡āĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻĻā§āĻ°ā§āĻ¤ āĻ•āĻ°āĻž Bacalhau-āĻ¤ā§‡ āĻ¸āĻŽā§āĻ­āĻŦ, āĻĒā§āĻ°āĻĨāĻŽāĻ¤ - āĻāĻ•āĻžāĻ§āĻŋāĻ• āĻ¨ā§‹āĻĄ āĻœā§āĻĄāĻŧā§‡ āĻŦā§āĻ¯āĻžāĻš āĻĒā§āĻ°āĻ¸ā§‡āĻ¸āĻŋāĻ‚ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻāĻŦāĻ‚ āĻĻā§āĻŦāĻŋāĻ¤ā§€āĻ¯āĻŧāĻ¤ āĻ¯ā§‡āĻ–āĻžāĻ¨ā§‡ āĻĄā§‡āĻŸāĻž āĻŦāĻžāĻ¸ āĻ•āĻ°ā§‡ āĻ¸ā§‡āĻ–āĻžāĻ¨ā§‡ āĻĒā§āĻ°āĻ¸ā§‡āĻ¸āĻŋāĻ‚ āĻ¨ā§‹āĻĄ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°ā§‡!


Bacalhau āĻ†āĻ‡āĻĒāĻŋāĻāĻĢāĻāĻ¸, āĻĢāĻžāĻ‡āĻ˛āĻ•āĻ¯āĻŧā§‡āĻ¨ āĻāĻŦāĻ‚ āĻ“āĻ¯āĻŧā§‡āĻŦ3 āĻāĻ° āĻ…āĻ¨ā§āĻ¤āĻ°ā§āĻ¨āĻŋāĻšāĻŋāĻ¤ āĻŦāĻŋāĻ•ā§‡āĻ¨ā§āĻĻā§āĻ°ā§€āĻ•āĻ°āĻŖ āĻŽāĻžāĻ¨āĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻ†āĻ°āĻ“ āĻŦāĻŋāĻ¸ā§āĻ¤ā§ƒāĻ¤āĻ­āĻžāĻŦā§‡ āĻĒāĻ°āĻŋāĻ¤ā§āĻ¯āĻžāĻ— āĻ¨āĻž āĻ•āĻ°ā§‡ āĻĄā§‡āĻŸāĻžāĻ° āĻ‰āĻĒāĻ° āĻ…āĻĢ-āĻšā§‡āĻ‡āĻ¨ āĻ—āĻŖāĻ¨āĻž āĻ¸āĻ•ā§āĻˇāĻŽ āĻ•āĻ°ā§‡ āĻĄā§‡āĻŸāĻž āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ•āĻ°āĻŖā§‡āĻ° āĻ­āĻŦāĻŋāĻˇā§āĻ¯āĻ¤āĻ•ā§‡ āĻ—āĻŖāĻ¤āĻžāĻ¨ā§āĻ¤ā§āĻ°āĻŋāĻ• āĻ•āĻ°āĻ¤ā§‡ āĻ¸āĻšāĻžāĻ¯āĻŧāĻ¤āĻž āĻ•āĻ°āĻžāĻ° āĻ˛āĻ•ā§āĻˇā§āĻ¯ā§‡ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ā§ˇ


āĻšāĻ˛ āĻāĻ•āĻŸāĻŋ āĻĒāĻŋāĻ¯āĻŧāĻžāĻ°-āĻŸā§-āĻĒāĻŋāĻ¯āĻŧāĻžāĻ° āĻ“āĻĒā§‡āĻ¨ āĻ•āĻŽā§āĻĒāĻŋāĻ‰āĻŸā§‡āĻļāĻ¨ āĻ¨ā§‡āĻŸāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ• āĻ¯āĻž āĻ¸āĻ°ā§āĻŦāĻœāĻ¨ā§€āĻ¨, āĻ¸ā§āĻŦāĻšā§āĻ› āĻāĻŦāĻ‚ āĻāĻšā§āĻ›āĻŋāĻ•āĻ­āĻžāĻŦā§‡ āĻ¯āĻžāĻšāĻžāĻ‡āĻ¯ā§‹āĻ—ā§āĻ¯ āĻ—āĻŖāĻ¨āĻž āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ—ā§āĻ˛āĻŋāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻĒā§āĻ˛ā§āĻ¯āĻžāĻŸāĻĢāĻ°ā§āĻŽ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻ•āĻ°ā§‡ āĻ¯ā§‡āĻ–āĻžāĻ¨ā§‡ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻ°āĻž āĻ†āĻ‡āĻĒāĻŋāĻāĻĢāĻāĻ¸ (āĻāĻŦāĻ‚ āĻļā§€āĻ˜ā§āĻ°āĻ‡ āĻĢāĻžāĻ‡āĻ˛āĻ•āĻ¯āĻŧā§‡āĻ¨) āĻ āĻ¸āĻžā§āĻšāĻŋāĻ¤ āĻĄā§‡āĻŸāĻž āĻ¸āĻš āĻ¯ā§‡āĻ•ā§‹āĻ¨ā§‹ āĻĄā§‡āĻŸāĻžāĻ° āĻŦāĻŋāĻ°ā§āĻĻā§āĻ§ā§‡ āĻ•āĻžāĻœ āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻĄāĻ•āĻžāĻ° āĻ•āĻ¨ā§āĻŸā§‡āĻ‡āĻ¨āĻžāĻ° āĻŦāĻž āĻ“āĻ¯āĻŧā§‡āĻŦ āĻ…ā§āĻ¯āĻžāĻ¸ā§‡āĻŽā§āĻŦāĻ˛āĻŋ āĻ›āĻŦāĻŋ āĻšāĻžāĻ˛āĻžāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤ āĻāĻŽāĻ¨āĻ•āĻŋ āĻāĻŸāĻŋāĻ° GPU āĻ•āĻžāĻœā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ āĻāĻŦāĻ‚ US$400 āĻŦāĻž āĻ¤āĻžāĻ° āĻŦā§‡āĻļāĻŋ āĻ¨āĻ¯āĻŧ!

āĻ­ā§‚āĻŽāĻŋāĻ•āĻž | Bacalhau āĻĄāĻ•ā§āĻ¸

Bacalhau āĻ¤ā§‡ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ āĻšāĻžāĻ˛āĻžāĻ¨ā§‹


āĻāĻ‡ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸāĻŸāĻŋ āĻšāĻžāĻ˛āĻžāĻ¨ā§‹āĻ° āĻœāĻ¨ā§āĻ¯, āĻ†āĻŽāĻ°āĻž āĻāĻŸāĻŋāĻ•ā§‡ Bacalhau-āĻ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ Dockerise āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°āĻŋāĨ¤ āĻ†āĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻāĻŸāĻŋ āĻ•āĻ°āĻ¤ā§‡ āĻļāĻŋāĻ–āĻ¤ā§‡ āĻšāĻžāĻ¨ āĻ¤āĻŦā§‡ āĻ†āĻĒāĻ¨āĻŋ āĻ…āĻ¨ā§āĻ¸āĻ°āĻŖ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨ā§ˇ āĻ¤āĻžāĻ°āĻĒāĻ°ā§‡ āĻ†āĻŽāĻ°āĻž āĻāĻŸāĻŋāĻ•ā§‡ Bacalhau CLI-āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻŽāĻžāĻ¤ā§āĻ° āĻāĻ• āĻ˛āĻžāĻ‡āĻ¨ā§‡āĻ° āĻ•ā§‹āĻĄ āĻĻāĻŋāĻ¯āĻŧā§‡ āĻšāĻžāĻ˛āĻžāĻ¤ā§‡ āĻĒāĻžāĻ°āĻŋ (āĻ…āĻ¨ā§āĻ¯ āĻāĻ•-āĻ˛āĻžāĻ‡āĻ¨āĻžāĻ° āĻĻāĻŋāĻ¯āĻŧā§‡ āĻĒāĻ°ā§‡):
 bacalhau docker run --gpu 1 ghcr.io/bacalhau-project/examples/stable-diffusion-gpu:0.0.1 -- python main.py --o ./outputs --p "Rainbow Unicorn" 



āĻ¯āĻĻāĻŋāĻ“ āĻāĻ‡ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖā§‡, āĻ†āĻŽāĻŋ āĻāĻ•āĻŸāĻŋ āĻāĻ‡āĻšāĻŸāĻŋāĻŸāĻŋāĻĒāĻŋ āĻāĻ¨ā§āĻĄāĻĒāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ āĻ¯āĻžāĻšā§āĻ›āĻŋ āĻ¯āĻž āĻ†āĻŽāĻžāĻ•ā§‡ āĻāĻ‡ āĻĄāĻ•āĻžāĻ°āĻžāĻ‡āĻœāĻĄ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻŦāĻ˛ āĻĄāĻŋāĻĢāĻŋāĻ‰āĻļāĻ¨ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ¸āĻ‚āĻ¯ā§āĻ•ā§āĻ¤ āĻ•āĻ°ā§‡, āĻ¯āĻž āĻ†āĻŽāĻŋ āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻ‡āĻ¨ā§āĻŸāĻŋāĻ—ā§āĻ°ā§‡āĻļāĻ¨ āĻŦāĻŋāĻ­āĻžāĻ—ā§‡ āĻĻā§‡āĻ–āĻžāĻŦ! āĻ¯āĻĻāĻŋāĻ“ āĻ†āĻŽāĻŋ āĻāĻ–āĻžāĻ¨ā§‡ āĻ¨ā§‹āĻŸ āĻ•āĻ°āĻŦ, āĻāĻŸāĻŋ āĻĄā§‡āĻŸāĻž āĻ—āĻŖāĻ¨āĻž āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻšāĻžāĻ˛āĻžāĻ¨ā§‹āĻ° āĻāĻ•āĻŸāĻŋ āĻļāĻ•ā§āĻ¤āĻŋāĻļāĻžāĻ˛ā§€ āĻāĻŦāĻ‚ āĻ¨āĻŽāĻ¨ā§€āĻ¯āĻŧ āĻ‰āĻĒāĻžāĻ¯āĻŧ āĻ¯āĻž āĻ“āĻ¯āĻŧā§‡āĻŦ3 āĻŦāĻ¨ā§āĻ§ā§āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ - āĻ†āĻŽāĻ°āĻž āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻ‡ āĻāĻ•āĻŸāĻŋ āĻ›ā§‹āĻŸ āĻŽāĻĄā§‡āĻ˛ā§‡āĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻ¸ā§€āĻŽāĻžāĻŦāĻĻā§āĻ§ āĻ¨āĻ‡āĨ¤ āĻšāĻ˛ā§āĻ¨ NFT āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸā§‡ āĻ¯āĻžāĻ‡āĻšā§‹āĻ•! :)

⚒ī¸ āĻ¸āĻ˛āĻŋāĻĄāĻŋāĻŸāĻŋ āĻāĻ¨āĻāĻĢāĻŸāĻŋ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ āĻ¤ā§ˆāĻ°āĻŋ āĻāĻŦāĻ‚ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°āĻž

āĻ¸ā§āĻŽāĻžāĻ°ā§āĻŸ āĻšā§āĻ•ā§āĻ¤āĻŋ

NFT āĻ¸ā§āĻŽāĻžāĻ°ā§āĻŸ āĻšā§āĻ•ā§āĻ¤āĻŋāĻŸāĻŋ āĻ‰āĻĒāĻ° āĻ­āĻŋāĻ¤ā§āĻ¤āĻŋ āĻ•āĻ°ā§‡ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻŋāĻ¨ā§āĻ¤ā§ ERC721URIStorage āĻ¸āĻ‚āĻ¸ā§āĻ•āĻ°āĻŖ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡, āĻ¯āĻžāĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻŽā§‡āĻŸāĻžāĻĄā§‡āĻŸāĻž āĻ¸ā§āĻŸā§āĻ¯āĻžāĻ¨ā§āĻĄāĻžāĻ°ā§āĻĄ āĻāĻ•ā§āĻ¸āĻŸā§‡āĻ¨āĻļāĻ¨ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ (āĻ¤āĻžāĻ‡ āĻ†āĻŽāĻ°āĻž āĻ†āĻŽāĻžāĻĻā§‡āĻ° IPFS-āĻ…ā§āĻ¯āĻžāĻĄā§āĻ°ā§‡āĻ¸āĻĄ āĻŽā§‡āĻŸāĻžāĻĄā§‡āĻŸāĻž āĻĒāĻžāĻ¸ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°āĻŋ - āĻ¯āĻž āĻ†āĻŽāĻ°āĻž āĻšā§āĻ•ā§āĻ¤āĻŋāĻ¤ā§‡ NFT.Storage-āĻ āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŖ āĻ•āĻ°āĻŦ) .


āĻāĻ‡ āĻŦā§‡āĻ¸ āĻ•āĻ¨ā§āĻŸā§āĻ°āĻžāĻ•ā§āĻŸ āĻ…āĻ¤āĻŋāĻ°āĻŋāĻ•ā§āĻ¤āĻ­āĻžāĻŦā§‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ‡āĻ¤āĻŋāĻŽāĻ§ā§āĻ¯ā§‡āĻ‡ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻŋāĻ¤ āĻŽāĻŋāĻ¨ā§āĻŸ() āĻāĻŦāĻ‚ āĻŸā§āĻ°āĻžāĻ¨ā§āĻ¸āĻĢāĻžāĻ°() āĻāĻ° āĻŽāĻ¤ā§‹ āĻĢāĻžāĻ‚āĻļāĻ¨ āĻ¸āĻš āĻāĻ•āĻŸāĻŋ NFT āĻšā§āĻ•ā§āĻ¤āĻŋāĻ° āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻžāĻ°āĻŋāĻ¤āĻž āĻĻā§‡āĻ¯āĻŧāĨ¤


āĻ†āĻĒāĻ¨āĻŋ āĻ˛āĻ•ā§āĻˇā§āĻ¯ āĻ•āĻ°āĻŦā§‡āĻ¨ āĻ¯ā§‡ āĻ†āĻŽāĻŋ āĻ†āĻŽāĻžāĻ° āĻ¸āĻžāĻŽāĻ¨ā§‡āĻ° āĻĒā§āĻ°āĻžāĻ¨ā§āĻ¤ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻĄā§‡āĻŸāĻž āĻ†āĻ¨āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ•āĻ¯āĻŧā§‡āĻ•āĻŸāĻŋ āĻ—ā§‡āĻŸāĻžāĻ° āĻĢāĻžāĻ‚āĻļāĻ¨ āĻ¯ā§‹āĻ— āĻ•āĻ°ā§‡āĻ›āĻŋ āĻ¸ā§‡āĻ‡āĻ¸āĻžāĻĨā§‡ āĻāĻ•āĻŸāĻŋ āĻ‡āĻ­ā§‡āĻ¨ā§āĻŸ āĻ¯āĻž āĻĒā§āĻ°āĻ¤āĻŋāĻŦāĻžāĻ° āĻāĻ•āĻŸāĻŋ āĻ¨āĻ¤ā§āĻ¨ NFT āĻŽāĻŋāĻ¨ā§āĻŸ āĻ•āĻ°āĻž āĻšāĻ˛ā§‡ āĻ…āĻ¨-āĻšā§‡āĻ‡āĻ¨ āĻ¨āĻŋāĻ°ā§āĻ—āĻ¤ āĻšāĻŦā§‡āĨ¤ āĻāĻŸāĻŋ DApp āĻĨā§‡āĻ•ā§‡ āĻ…āĻ¨-āĻšā§‡āĻ‡āĻ¨ āĻ‡āĻ­ā§‡āĻ¨ā§āĻŸāĻ—ā§āĻ˛āĻŋ āĻļā§‹āĻ¨āĻžāĻ° āĻ•ā§āĻˇāĻŽāĻ¤āĻž āĻĻā§‡āĻ¯āĻŧā§ˇ


💡 💡


BacalhauFRC721.sol


 // SPDX-License-Identifier: MIT pragma solidity ^0.8.4; import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol"; import "@openzeppelin/contracts/utils/Counters.sol"; import "@hardhat/console.sol"; contract BacalhauFRC721 is ERC721URIStorage { /** @notice Counter keeps track of the token ID number for each unique NFT minted in the NFT collection */ using Counters for Counters.Counter; Counters.Counter private _tokenIds; /** @notice This struct stores information about each NFT minted */ struct bacalhauFRC721NFT { address owner; string tokenURI; uint256 tokenId; } /** @notice Keeping an array for each of the NFT's minted on this contract allows me to get information on them all with a read-only front end call */ bacalhauFRC721NFT[] public nftCollection; /** @notice The mapping allows me to find NFT's owned by a particular wallet address. I'm only handling the case where an NFT is minted to an owner in this contract - but you'd need to handle others in a mainnet contract like sending to other wallets */ mapping(address => bacalhauFRC721NFT[]) public nftCollectionByOwner; /** @notice This event will be triggered (emitted) each time a new NFT is minted - which I will watch for on my front end in order to load new information that comes in about the collection as it happens */ event NewBacalhauFRC721NFTMinted( address indexed sender, uint256 indexed tokenId, string tokenURI ); /** @notice Creates the NFT Collection Contract with a Name and Symbol */ constructor() ERC721("Bacalhau NFTs", "BAC") { console.log("Hello Fil-ders! Now creating Bacalhau FRC721 NFT contract!"); } /** @notice The main function which will mint each NFT. The ipfsURI is a link to the ipfs content identifier hash of the NFT metadata stored on NFT.Storage. This data minimally includes name, description and the image in a JSON. */ function mintBacalhauNFT(address owner, string memory ipfsURI) public returns (uint256) { // get the tokenID for this new NFT uint256 newItemId = _tokenIds.current(); // Format info for saving to our array bacalhauFRC721NFT memory newNFT = bacalhauFRC721NFT({ owner: msg.sender, tokenURI: ipfsURI, tokenId: newItemId }); //mint the NFT to the chain _mint(owner, newItemId); //Set the NFT Metadata for this NFT _setTokenURI(newItemId, ipfsURI); _tokenIds.increment(); //Add it to our collection array & owner mapping nftCollection.push(newNFT); nftCollectionByOwner[owner].push(newNFT); // Emit an event on-chain to say we've minted an NFT emit NewBacalhauFRC721NFTMinted( msg.sender, newItemId, ipfsURI ); return newItemId; } /** * @notice helper function to display NFTs for frontends */ function getNFTCollection() public view returns (bacalhauFRC721NFT[] memory) { return nftCollection; } /** * @notice helper function to fetch NFT's by owner */ function getNFTCollectionByOwner(address owner) public view returns (bacalhauFRC721NFT[] memory){ return nftCollectionByOwner[owner]; }


āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ā§€āĻ¯āĻŧāĻ¤āĻž

āĻ†āĻŽāĻŋ āĻāĻ‡ āĻšā§āĻ•ā§āĻ¤āĻŋāĻŸāĻŋ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°āĻŦ, āĻ¤āĻŦā§‡ āĻ†āĻĒāĻ¨āĻŋ āĻāĻ‡ āĻšā§āĻ•ā§āĻ¤āĻŋāĻŸāĻŋ āĻĒāĻ˛āĻŋāĻ—āĻ¨, BSC, āĻ…āĻĒāĻŸāĻŋāĻŽāĻŋāĻœāĻŽ, āĻ†āĻ°ā§āĻŦāĻŋāĻŸā§āĻ°āĻžāĻŽ, āĻ…ā§āĻ¯āĻžāĻ­āĻžāĻ˛āĻžāĻžā§āĻš āĻāĻŦāĻ‚ āĻ†āĻ°āĻ“ āĻ…āĻ¨ā§‡āĻ• āĻ•āĻŋāĻ›ā§ āĻ¸āĻš āĻ¯ā§‡āĻ•ā§‹āĻ¨ EVM-āĻ¸āĻžāĻŽāĻžā§āĻœāĻ¸ā§āĻ¯āĻĒā§‚āĻ°ā§āĻŖ āĻšā§‡āĻ‡āĻ¨ā§‡ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨āĨ¤ āĻāĻŽāĻ¨āĻ•āĻŋ āĻ†āĻĒāĻ¨āĻŋ āĻāĻ•āĻŸāĻŋ āĻŽāĻžāĻ˛ā§āĻŸāĻŋ-āĻšā§‡āĻ‡āĻ¨ āĻāĻ¨āĻāĻĢāĻŸāĻŋ (āĻ‡āĻ™ā§āĻ—āĻŋāĻ¤: ) āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻ¤ā§‡ āĻ†āĻĒāĻ¨āĻžāĻ° āĻ¸āĻžāĻŽāĻ¨ā§‡āĻ° āĻĒā§āĻ°āĻžāĻ¨ā§āĻ¤ā§‡ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨!


āĻšāĻžāĻ‡āĻĒāĻžāĻ°āĻ¸ā§āĻĒā§‡āĻ¸ āĻŸā§‡āĻ¸ā§āĻŸāĻ¨ā§‡āĻŸā§‡ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻšāĻŦā§‡
  1. āĻšāĻžāĻ‡āĻĒāĻžāĻ°āĻ¸ā§āĻĒā§‡āĻ¸ āĻŸā§‡āĻ¸ā§āĻŸāĻ¨ā§‡āĻŸā§‡ āĻŽā§‡āĻŸāĻžāĻŽāĻžāĻ¸ā§āĻ• āĻ“āĻ¯āĻŧāĻžāĻ˛ā§‡āĻŸ
  2. āĻāĻ•āĻŸāĻŋ āĻ•āĻ˛ āĻĨā§‡āĻ•ā§‡ āĻ•āĻŋāĻ›ā§ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻŸāĻŋāĻāĻĢāĻ†āĻ‡āĻāĻ˛ āĻ¤āĻšāĻŦāĻŋāĻ˛ āĻĒāĻžāĻ¨ ( āĻŦāĻž )


Hardhat āĻ¸āĻ™ā§āĻ—ā§‡ āĻ¸ā§āĻŽāĻžāĻ°ā§āĻŸ āĻšā§āĻ•ā§āĻ¤āĻŋ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨

āĻšāĻžāĻ‡āĻĒāĻžāĻ°āĻ¸ā§āĻĒā§‡āĻ¸ āĻŸā§‡āĻ¸ā§āĻŸāĻ¨ā§‡āĻŸā§‡ āĻāĻ‡ āĻšā§āĻ•ā§āĻ¤āĻŋāĻŸāĻŋ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻ†āĻŽāĻŋ āĻšāĻžāĻ°ā§āĻĄāĻšā§āĻ¯āĻžāĻŸ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻ›āĻŋāĨ¤


🛸 āĻšāĻžāĻ‡āĻĒāĻžāĻ°āĻ¸ā§āĻĒā§‡āĻ¸ RPC āĻāĻŦāĻ‚ āĻŦā§āĻ˛āĻ•āĻāĻ•ā§āĻ¸āĻĒā§āĻ˛ā§‹āĻ°āĻžāĻ° āĻŦāĻŋāĻ•āĻ˛ā§āĻĒ:

āĻĒāĻžāĻŦāĻ˛āĻŋāĻ• RPC āĻāĻ¨ā§āĻĄāĻĒāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ āĻŦā§āĻ˛āĻ•āĻāĻ•ā§āĻ¸āĻĒā§āĻ˛ā§‹āĻ°āĻžāĻ°

API āĻ–ā§āĻ˛ā§āĻ¨ :


āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ° āĻ¸ā§‡āĻŸ-āĻ†āĻĒā§‡āĻ° āĻœāĻ¨ā§āĻ¯, āĻ†āĻŽāĻ°āĻž āĻ‰āĻĒāĻ˛āĻŦā§āĻ§ āĻ¯ā§‡ āĻ•ā§‹āĻ¨ā§‹ āĻĒāĻžāĻŦāĻ˛āĻŋāĻ• RPC āĻāĻ¨ā§āĻĄāĻĒāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ āĻĨā§‡āĻ•ā§‡ āĻŦā§‡āĻ›ā§‡ āĻ¨āĻŋāĻ¤ā§‡ āĻĒāĻžāĻ°āĻŋāĨ¤


hardhat.config.ts


 import '@nomicfoundation/hardhat-toolbox'; import { config as dotenvConfig } from 'dotenv'; import { HardhatUserConfig } from 'hardhat/config'; import { resolve } from 'path'; //Import our customised tasks // import './pages/api/hardhat/tasks'; const dotenvConfigPath: string = process.env.DOTENV_CONFIG_PATH || './.env'; dotenvConfig({ path: resolve(__dirname, dotenvConfigPath) }); // Ensure that we have all the environment variables we need. const walletPrivateKey: string | undefined = process.env.WALLET_PRIVATE_KEY; if (!walletPrivateKey) { throw new Error('Please set your Wallet private key in a .env file'); } const config: HardhatUserConfig = { solidity: '0.8.17', defaultNetwork: 'filecoinHyperspace', networks: { hardhat: {}, filecoinHyperspace: { url: '//api.hyperspace.node.glif.io/rpc/v1', chainId: 3141, accounts: [process.env.WALLET_PRIVATE_KEY ?? 'undefined'], }, // bleeding edge often-reset FVM testnet filecoinWallaby: { url: '//wallaby.node.glif.io/rpc/v0', chainId: 31415, accounts: [process.env.WALLET_PRIVATE_KEY ?? 'undefined'], //explorer: //wallaby.filscan.io/ and starboard }, }, // I am using the path mapping so I can keep my hardhat deployment within the /pages folder of my DApp and therefore access the contract ABI for use on my frontend paths: { root: './pages/api/hardhat', tests: './pages/api/hardhat/tests', //who names a directory in the singular?!!! Grammarly would not be happy cache: './pages/api/hardhat/cache', }, }; export default config;
āĻāĻŦāĻ‚ āĻ¸ā§āĻŽāĻžāĻ°ā§āĻŸ āĻ•āĻ¨ā§āĻŸā§āĻ°āĻžāĻ•ā§āĻŸ āĻĄāĻŋāĻĒā§āĻ˛āĻ¯āĻŧ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻŽāĻ°āĻž āĻāĻ•āĻŸāĻŋ āĻĄāĻŋāĻĒā§āĻ˛ā§‹āĻ¯āĻŧ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻŋ - āĻŽāĻ¨ā§‡ āĻ°āĻžāĻ–āĻŦā§‡āĻ¨ āĻ¯ā§‡ āĻ†āĻŽāĻŋ āĻāĻ–āĻžāĻ¨ā§‡ āĻ“āĻ¯āĻŧāĻžāĻ˛ā§‡āĻŸ āĻ…ā§āĻ¯āĻžāĻĄā§āĻ°ā§‡āĻ¸āĻŸāĻŋ āĻ¸ā§āĻŦāĻžāĻ•ā§āĻˇāĻ°āĻ•āĻžāĻ°ā§€ (āĻŽāĻžāĻ˛āĻŋāĻ•) āĻšāĻŋāĻ¸āĻžāĻŦā§‡ āĻ¸ā§‡āĻŸ āĻ•āĻ°āĻ›āĻŋ - āĻ˛ā§‡āĻ–āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ FEVM-āĻ āĻ•āĻŋāĻ›ā§ āĻŽā§āĻ¯āĻžāĻĒāĻŋāĻ‚ āĻ¤ā§āĻ°ā§āĻŸāĻŋ āĻāĻ–āĻ¨āĻ“ āĻ•āĻžāĻœ āĻ•āĻ°āĻž āĻšāĻšā§āĻ›ā§‡ āĻ¯āĻž āĻšāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ āĻ•āĻŋāĻ›ā§ āĻ…āĻĻā§āĻ­ā§āĻ¤ āĻ†āĻšāĻ°āĻŖāĨ¤


deploy/deployBacalhauFRC721.ts


 import hre from 'hardhat'; import type { BacalhauFRC721 } from '../typechain-types/contracts/BacalhauFRC721'; import type { BacalhauFRC721__factory } from '../typechain-types/factories/contracts/BacalhauFRC721__factory'; async function main() { console.log('Bacalhau721 deploying....'); // !!!needed as hardhat's default does not map correctly to the FEVM const owner = new hre.ethers.Wallet( process.env.WALLET_PRIVATE_KEY || 'undefined', hre.ethers.provider ); const bacalhauFRC721Factory: BacalhauFRC721__factory = < BacalhauFRC721__factory > await hre.ethers.getContractFactory('BacalhauFRC721', owner); const bacalhauFRC721: BacalhauFRC721 = <BacalhauFRC721>( await bacalhauFRC721Factory.deploy() ); await bacalhauFRC721.deployed(); console.log('bacalhauFRC721 deployed to ', bacalhauFRC721.address); // optionally log to a file here } main().catch((error) => { console.error(error); process.exitCode = 1; });
āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°āĻ¤ā§‡, āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻ–āĻŋāĻ¤ āĻ•ā§‹āĻĄāĻŸāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻŸāĻžāĻ°ā§āĻŽāĻŋāĻ¨āĻžāĻ˛ā§‡ āĻ‰āĻĒāĻ°ā§‡āĻ° āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸāĻŸāĻŋ āĻšāĻžāĻ˛āĻžāĻ¨ (NB: āĻ¯ā§‡āĻšā§‡āĻ¤ā§ āĻ†āĻŽāĻ°āĻž āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ°ā§‡ filecoinHyperspace-āĻ āĻĄāĻŋāĻĢāĻ˛ā§āĻŸ āĻ¨ā§‡āĻŸāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ• āĻ¸ā§‡āĻŸ āĻ•āĻ°ā§‡āĻ›āĻŋ, āĻ¨ā§‡āĻŸāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ•ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻĒāĻ¤āĻžāĻ•āĻž āĻĒāĻžāĻ¸ āĻ•āĻ°āĻžāĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻ¨ā§‡āĻ‡ āĻ¯āĻĻāĻŋāĻ“ āĻāĻŸāĻŋ āĻ¨ā§€āĻšā§‡ āĻĻā§‡āĻ–āĻžāĻ¨ā§‹ āĻšāĻ¯āĻŧā§‡āĻ›ā§‡)

> cd ./pages/hardhat/deploy/


 npx hardhat run ./deployBacalhauFRC721.ts --network filecoinHyperspace


āĻ‰āĻĻāĻ¯āĻžāĻĒāĻ¨! āĻ†āĻŽāĻ°āĻž āĻāĻ‡āĻŽāĻžāĻ¤ā§āĻ° āĻĢāĻžāĻ‡āĻ˛āĻ•āĻ¯āĻŧā§‡āĻ¨ āĻšāĻžāĻ‡āĻĒāĻžāĻ°āĻ¸ā§āĻĒā§‡āĻ¸ āĻŸā§‡āĻ¸ā§āĻŸāĻ¨ā§‡āĻŸā§‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° NFT āĻšā§āĻ•ā§āĻ¤āĻŋ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°ā§‡āĻ›āĻŋ!

đŸŽŦ āĻĢā§āĻ°āĻ¨ā§āĻŸ-āĻāĻ¨ā§āĻĄ āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻ…ā§āĻ¯āĻžāĻ•āĻļāĻ¨ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻž

āĻ¸ā§āĻ¨ā§āĻĻāĻ° āĻ…āĻ‚āĻļā§‡āĻ° āĻ‰āĻĒāĻ° āĻ‰āĻšā§... āĻāĻŦāĻ‚ āĻ¸ā§‡āĻ‡ āĻ†āĻ āĻžāĻ“ āĻ¯āĻž āĻāĻ–āĻžāĻ¨ā§‡ āĻ¸āĻŦ āĻāĻ•āĻ¸āĻžāĻĨā§‡ āĻ§āĻ°ā§‡ āĻ°āĻžāĻ–ā§‡ :)


āĻ¸āĻžāĻŽāĻ¨ā§‡āĻ° āĻĒā§āĻ°āĻžāĻ¨ā§āĻ¤āĻŸāĻŋ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻ¤ā§‡, āĻ†āĻŽāĻŋ NextJS āĻāĻŦāĻ‚ Typescript āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻ›āĻŋāĨ¤ āĻ¯āĻĻāĻŋāĻ“, āĻ¸āĻ¤ā§āĻ¯āĻŋ āĻ•āĻĨāĻž āĻŦāĻ˛āĻ¤ā§‡ - āĻ†āĻŽāĻŋ āĻ¨ā§‡āĻ•ā§āĻ¸āĻŸāĻœā§‡āĻāĻ¸-āĻāĻ° SSR (āĻ¸āĻžāĻ°ā§āĻ­āĻžāĻ°-āĻ¸āĻžāĻ‡āĻĄ āĻ°ā§‡āĻ¨ā§āĻĄāĻžāĻ°āĻŋāĻ‚) āĻŦā§ˆāĻļāĻŋāĻˇā§āĻŸā§āĻ¯āĻ—ā§āĻ˛āĻŋāĻ° āĻ•ā§‹āĻ¨āĻ“ āĻ¸ā§āĻŦāĻŋāĻ§āĻž āĻ¨āĻŋāĻšā§āĻ›āĻŋ āĻ¨āĻž āĻāĻŦāĻ‚ āĻ†āĻŽāĻŋ āĻ¤āĻžāĻĻā§‡āĻ° āĻĒā§ƒāĻˇā§āĻ āĻž āĻ°āĻžāĻ‰āĻŸāĻŋāĻ‚āĻ“ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻŋ āĻ¨āĻž (āĻ¯ā§‡āĻšā§‡āĻ¤ā§ āĻāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻāĻ•āĻ•-āĻĒā§ƒāĻˇā§āĻ āĻžāĻ° Dapp), āĻ¤āĻžāĻ‡ āĻ†āĻĒāĻ¨āĻŋ āĻ¸āĻ¤ā§āĻ¯āĻŋāĻ‡ āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨ āĻ­ā§āĻ¯āĻžāĻ¨āĻŋāĻ˛āĻž āĻ°āĻŋāĻ…ā§āĻ¯āĻžāĻ•ā§āĻŸ āĻ¸ā§‡āĻŸ āĻ†āĻĒ āĻ¸āĻš (āĻŦāĻž āĻ…āĻŦāĻļā§āĻ¯āĻ‡ āĻ†āĻĒāĻ¨āĻžāĻ° āĻĒāĻ›āĻ¨ā§āĻĻā§‡āĻ° āĻ¯ā§‡āĻ•ā§‹āĻ¨ āĻĢā§āĻ°ā§‡āĻŽāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ•!)


āĻŸāĻžāĻ‡āĻĒāĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸā§‡āĻ° āĻœāĻ¨ā§āĻ¯ ... āĻ­āĻžāĻ˛, āĻ†āĻŽāĻŋ āĻāĻŸāĻŋāĻ•ā§‡ āĻ•āĻŋāĻ›ā§āĻŸāĻž āĻ¤āĻžāĻĄāĻŧāĻžāĻšā§āĻĄāĻŧā§‹ āĻ•āĻ°ā§‡ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°ā§‡āĻ›āĻŋ āĻāĻŦāĻ‚ āĻ¸ā§āĻŦā§€āĻ•āĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡ āĻāĻŸāĻŋ āĻŸāĻžāĻ‡āĻĒāĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸā§‡āĻ° āĻ–ā§āĻŦ āĻ­āĻžāĻ˛ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ āĻ¨āĻ¯āĻŧ - āĻ¯āĻĻāĻŋāĻ“ āĻ­āĻžāĻ°āĻ—ā§āĻ˛āĻŋ āĻ–ā§āĻļāĻŋ āĻŦāĻ˛ā§‡ āĻŽāĻ¨ā§‡ āĻšāĻšā§āĻ›ā§‡... ;)



Anyhoo - āĻāĻ‡ āĻŦāĻŋāĻ­āĻžāĻ—ā§‡āĻ° āĻŽā§‚āĻ˛ āĻĒāĻ¯āĻŧā§‡āĻ¨ā§āĻŸāĻŸāĻŋ āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻĻā§‡āĻ–āĻžāĻ¨ā§‹āĻ° āĻœāĻ¨ā§āĻ¯ āĻ¨āĻ¯āĻŧ āĻ¯ā§‡ āĻ•ā§€āĻ­āĻžāĻŦā§‡ āĻāĻ•āĻŸāĻŋ āĻĢā§āĻ°āĻ¨ā§āĻŸ āĻāĻ¨ā§āĻĄ āĻ•ā§‹āĻĄ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻ¯āĻŧ, āĻ¤āĻŦā§‡ āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻĻā§‡āĻ–āĻžāĻ¨ā§‹āĻ° āĻœāĻ¨ā§āĻ¯ āĻ•āĻŋāĻ­āĻžāĻŦā§‡ āĻ¸ā§āĻŽāĻžāĻ°ā§āĻŸ āĻšā§āĻ•ā§āĻ¤āĻŋāĻ° āĻ¸āĻžāĻĨā§‡ āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻ…ā§āĻ¯āĻžāĻ•ā§āĻŸ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻ¯āĻŧ, Bacalhau (āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ¸ā§āĻĨāĻŋāĻ¤āĻŋāĻļā§€āĻ˛ āĻĄāĻŋāĻĢāĻŋāĻ‰āĻļāĻ¨ āĻāĻŽāĻāĻ˛ āĻŽāĻĄā§‡āĻ˛ āĻ¸āĻš) āĻāĻŦāĻ‚ āĻ…āĻŦāĻļā§āĻ¯āĻ‡, NFT.Storage - # NotOnIPFSNotYourNFT.

āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻĒā§āĻ°āĻŦāĻžāĻš

[āĻ•āĻ°ā§āĻ¨: āĻāĻ•āĻŸāĻŋ āĻĢā§āĻ˛ā§‹ āĻšāĻžāĻ°ā§āĻŸ āĻĄāĻžāĻ¯āĻŧāĻžāĻ—ā§āĻ°āĻžāĻŽ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°ā§āĻ¨]
  • āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€ āĻ‡āĻ¨āĻĒā§āĻŸ āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡ āĻāĻ•āĻŸāĻŋ āĻŸā§‡āĻ•ā§āĻ¸āĻŸ āĻĒā§āĻ°āĻŽā§āĻĒāĻŸ āĻĒā§āĻ°āĻŦā§‡āĻļ āĻ•āĻ°āĻžāĻ¨ ->
  • āĻ›āĻŦāĻŋ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻžāĻ° āĻŦā§‹āĻ¤āĻžāĻŽā§‡ āĻ•ā§āĻ˛āĻŋāĻ• āĻ•āĻ°ā§āĻ¨ -> āĻ›āĻŦāĻŋ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻ¤ā§‡ Bacalhau āĻœāĻŦāĻ•ā§‡ āĻ•āĻ˛ āĻ•āĻ°ā§āĻ¨
  • Bacalhau āĻ•āĻžāĻœ āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻšāĻ¯āĻŧ -> āĻĢāĻ°āĻŽā§āĻ¯āĻžāĻŸ NFT āĻŽā§‡āĻŸāĻžāĻĄā§‡āĻŸāĻž JSON āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸā§‡ āĻĢāĻŋāĻ°ā§‡ āĻ†āĻ¸ā§‡
  • āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻ° āĻ•ā§āĻ˛āĻŋāĻ• āĻŽāĻŋāĻ¨ā§āĻŸ NFT āĻŦā§‹āĻ¤āĻžāĻŽ -> NFT. āĻ¸ā§āĻŸā§‹āĻ°ā§‡āĻœāĻ•ā§‡ NFT āĻŽā§‡āĻŸāĻžāĻĄā§‡āĻŸāĻž āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŖ āĻ•āĻ°āĻ¤ā§‡ āĻŦāĻ˛āĻž āĻšāĻ¯āĻŧ āĻāĻŦāĻ‚ āĻĢā§‹āĻ˛ā§āĻĄāĻžāĻ°ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ IPFS CID āĻ¸āĻš āĻĢā§‡āĻ°āĻ¤ āĻ†āĻ¸ā§‡ -> āĻ¸ā§āĻŽāĻžāĻ°ā§āĻŸ āĻšā§āĻ•ā§āĻ¤āĻŋāĻ° āĻŽāĻŋāĻ¨ā§āĻŸ NFT āĻĢāĻžāĻ‚āĻļāĻ¨āĻŸāĻŋ āĻāĻ‡ IPFS_URI-āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻāĻ‡ āĻŽā§‡āĻŸāĻžāĻĄā§‡āĻŸāĻž āĻĻāĻŋāĻ¯āĻŧā§‡ āĻāĻ•āĻŸāĻŋ NFT āĻŽāĻŋāĻ¨ā§āĻŸ āĻ•āĻ°āĻ¤ā§‡ āĻ•āĻ˛ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ ->
  • !! [āĻāĻĢāĻ‡āĻ­āĻŋāĻāĻŽ āĻ—ā§‹āĻŸāĻšāĻž] -> āĻāĻ–āĻžāĻ¨ā§‡ āĻ†āĻŽāĻ°āĻž āĻ¸āĻžāĻ§āĻžāĻ°āĻŖāĻ¤ āĻāĻ‡ āĻĢāĻ˛āĻžāĻĢāĻ˛ā§‡āĻ° TX (āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨ āĻšā§āĻ¯āĻžāĻļ) āĻĢāĻŋāĻ°ā§‡ āĻ†āĻ¸āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ…āĻĒā§‡āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻŦ, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻāĻŸāĻŋ āĻŦāĻ°ā§āĻ¤āĻŽāĻžāĻ¨ā§‡ āĻ•āĻžāĻœ āĻ•āĻ°āĻ›ā§‡ āĻ¨āĻž, āĻ¤āĻžāĻ‡ āĻāĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤ā§‡ āĻ†āĻŽāĻ°āĻž āĻ•āĻ–āĻ¨ āĻāĻŸāĻŋ āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻšāĻŦā§‡ āĻ¤āĻž āĻ–ā§āĻāĻœā§‡ āĻŦā§‡āĻ° āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻšā§āĻ•ā§āĻ¤āĻŋ āĻ‡āĻ­ā§‡āĻ¨ā§āĻŸ āĻ˛āĻŋāĻ¸ā§‡āĻ¨āĻžāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻ›āĻŋāĨ¤
  • āĻ¸āĻŽā§āĻĒāĻ¨ā§āĻ¨! -> āĻāĻ–āĻ¨ āĻ¯ā§‡āĻ•ā§‹āĻ¨ āĻĄāĻŋāĻ¸āĻĒā§āĻ˛ā§‡ āĻĄā§‡āĻŸāĻž āĻĒā§āĻ¨āĻ°āĻžāĻ¯āĻŧ āĻ†āĻ¨āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ āĻāĻŦāĻ‚ āĻŽāĻŋāĻ¨ā§āĻŸāĻŋāĻ‚āĻ¯āĻŧā§‡āĻ° āĻ‰āĻĒāĻ° āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻ° āĻ¸ā§āĻĨāĻŋāĻ¤āĻŋ āĻ¸āĻžāĻĢāĻ˛ā§āĻ¯ā§‡āĻ° āĻĒā§āĻ°āĻ¤āĻŋāĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž āĻĻāĻŋāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤


āĻšāĻŽā§ŽāĻ•āĻžāĻ° - āĻ†āĻ¸ā§āĻ¨ āĻĻā§‡āĻ–āĻŋ āĻ•āĻŋāĻ­āĻžāĻŦā§‡ āĻ†āĻŽāĻ°āĻž āĻ•ā§‹āĻĄā§‡ āĻāĻŸāĻŋ āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨ āĻ•āĻ°āĻŋ!

Bacalhau āĻŽāĻŋāĻĨāĻ¸ā§āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž

Bacalhau-āĻāĻ° āĻœāĻ¨ā§āĻ¯ āĻĢā§āĻ°āĻ¨ā§āĻŸ-āĻāĻ¨ā§āĻĄ API āĻāĻ¨ā§āĻĄāĻĒāĻ¯āĻŧā§‡āĻ¨ā§āĻŸ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻž āĻĒā§āĻ°āĻ•ā§ŒāĻļāĻ˛ā§€ āĻ¨āĻĨāĻŋāĻ­ā§āĻ•ā§āĻ¤ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤


API āĻŦāĻ°ā§āĻ¤āĻŽāĻžāĻ¨ā§‡ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻ‡ āĻŦā§āĻ˛āĻ—ā§‡ āĻ¨āĻĨāĻŋāĻ­ā§āĻ•ā§āĻ¤ āĻ¸ā§āĻĨāĻŋāĻ¤āĻŋāĻļā§€āĻ˛ āĻŦāĻŋāĻšā§āĻ›ā§āĻ°āĻŖ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸāĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ āĻ¸āĻ°āĻžāĻ¸āĻ°āĻŋ āĻ†āĻ˜āĻžāĻ¤ āĻ•āĻ°ā§‡, āĻ¤āĻŦā§‡, āĻĻāĻ˛āĻŸāĻŋ āĻāĻŸāĻŋāĻ•ā§‡ āĻ†āĻ°āĻ“ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ API-āĻ āĻĒā§āĻ°āĻ¸āĻžāĻ°āĻŋāĻ¤ āĻ•āĻ°āĻžāĻ° āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ§ā§€āĻ¨ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ āĻ¯āĻžāĻ¤ā§‡ āĻ†āĻĒāĻ¨āĻŋ āĻ¯ā§‡āĻ•ā§‹āĻ¨āĻ“ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ āĻ•āĻ˛ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨, āĻāĻŦāĻ‚ āĻāĻ•āĻŸāĻŋ HTTP āĻĨā§‡āĻ•ā§‡ āĻ†āĻĒāĻ¨āĻžāĻ° āĻ¨āĻŋāĻœā§‡āĻ° āĻ¨āĻŋāĻ¯āĻŧā§‹āĻœāĻŋāĻ¤ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸāĻ—ā§āĻ˛āĻŋāĻ“ REST APIāĨ¤ āĻŦāĻž


>run/test in terminal


 curl -XPOST -d '{"prompt": "rainbow unicorn"}' '//dashboard.bacalhau.org:1000/api/v1/stablediffusion';


>react / typescript code


 import { CID } from 'multiformats/cid'; export const callBacalhauJob = async (promptInput: string) => { //Bacalahau HTTP Stable Diffusion Endpoint const url = '//dashboard.bacalhau.org:1000/api/v1/stablediffusion'; const headers = { 'Content-Type': 'application/x-www-form-urlencoded', }; const data = { prompt: promptInput, //The user text prompt! }; /* FETCH FROM BACALHAU ENDPOINT */ const cid = await fetch(url, { method: 'POST', body: JSON.stringify(data), headers: headers, }) .then(async (res) => { let body = await res.json(); if (body.cid) { /* Bacalhau returns a V0 CID which we want to convert to a V1 CID for easier usage with http gateways (ie. displaying the image on web), so I'm using the IPFS multiformats package to convert it here */ return CID.parse(body.cid).toV1().toString(); } }) .catch((err) => { console.log('error in bac job', err); }); return cid; };


āĻāĻ‡ āĻĢāĻžāĻ‚āĻļāĻ¨āĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻ†āĻ‡āĻĒāĻŋāĻāĻĢāĻāĻ¸ āĻ¸āĻŋāĻ†āĻ‡āĻĄāĻŋ (āĻŦāĻŋāĻˇāĻ¯āĻŧāĻŦāĻ¸ā§āĻ¤ā§ āĻļāĻ¨āĻžāĻ•ā§āĻ¤āĻ•āĻžāĻ°ā§€) āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻ•āĻ°āĻŦā§‡ āĻ¯āĻž āĻ¨ā§€āĻšā§‡āĻ° āĻŽāĻ¤ āĻāĻ•āĻŸāĻŋ āĻĢā§‹āĻ˛ā§āĻĄāĻžāĻ° āĻ•āĻžāĻ āĻžāĻŽā§‹ āĻ¸āĻšāĨ¤ āĻ¤āĻžāĻ°āĻĒāĻ°ā§‡ āĻ›āĻŦāĻŋāĻŸāĻŋ /outputs/image0.png āĻāĻ° āĻ…āĻ§ā§€āĻ¨ā§‡ āĻĒāĻžāĻ“āĻ¯āĻŧāĻž āĻ¯āĻžāĻŦā§‡āĨ¤


💡 ! 💡




āĻ†āĻšāĻš āĻ°ā§‡āĻ‡āĻ¨āĻŦā§‹ āĻ‡āĻ‰āĻ¨āĻŋāĻ•āĻ°ā§āĻ¨... āĻ•āĻŋ āĻ­āĻžāĻ˛ā§‹ āĻ˛āĻžāĻ—ā§‡ āĻ¨āĻž!

NFT. āĻ¸ā§āĻŸā§‹āĻ°ā§‡āĻœ

NFT.Storage āĻšāĻ˛ āĻāĻ•āĻŸāĻŋ āĻĒāĻžāĻŦāĻ˛āĻŋāĻ• āĻ—ā§āĻĄ (āĻ“āĻ°āĻĢā§‡ āĻĢā§āĻ°āĻŋ) āĻ¯āĻž āĻœāĻžāĻ­āĻžāĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ āĻŦāĻž HTTP SDK āĻ¸āĻš IPFS āĻāĻŦāĻ‚ Filecoin-āĻ āĻ¸ā§āĻĨāĻžāĻ¯āĻŧā§€āĻ­āĻžāĻŦā§‡ NFT āĻŽā§‡āĻŸāĻžāĻĄā§‡āĻŸāĻž āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŖ āĻ•āĻ°āĻž āĻ¸āĻšāĻœ āĻ•āĻ°ā§‡āĨ¤


NFT āĻŽā§‡āĻŸāĻžāĻĄā§‡āĻŸāĻž āĻšāĻ˛ āĻāĻ•āĻŸāĻŋ JSON āĻ¨āĻĨāĻŋ āĻ¯āĻž āĻ¨ā§€āĻšā§‡āĻ° āĻ‰āĻĻāĻžāĻšāĻ°āĻŖā§‡āĻ° āĻŽāĻ¤ā§‹ āĻĻā§‡āĻ–āĻ¤ā§‡ - āĻ¯āĻž āĻ¸āĻ°āĻžāĻ¸āĻ°āĻŋ āĻ“āĻĒā§‡āĻ¨ āĻœā§‡āĻĒā§‡āĻ˛āĻŋāĻ¨ āĻĄāĻ•ā§āĻ¸ āĻĨā§‡āĻ•ā§‡ āĻ¨ā§‡āĻ“āĻ¯āĻŧāĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡:



āĻāĻ¨āĻāĻĢāĻŸāĻŋ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ, āĻāĻŸāĻž āĻŽāĻ¨ā§‡ āĻ°āĻžāĻ–āĻž āĻ—ā§āĻ°ā§āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ āĻ¯ā§‡ āĻ†āĻĒāĻ¨āĻŋ āĻŽā§‡āĻŸāĻžāĻĄā§‡āĻŸāĻž āĻ…āĻ¨-āĻšā§‡āĻ‡āĻ¨ā§‡ (āĻ¯āĻž āĻŦāĻĄāĻŧ āĻĢāĻžāĻ‡āĻ˛ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ¨āĻŋāĻˇā§‡āĻ§āĻŽā§‚āĻ˛āĻ•āĻ­āĻžāĻŦā§‡ āĻŦā§āĻ¯āĻ¯āĻŧāĻŦāĻšā§āĻ˛ āĻšāĻ¯āĻŧā§‡ āĻ‰āĻ āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡) āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŖ āĻ•āĻ°āĻ›ā§‡āĻ¨ āĻ¨āĻž, āĻ¤āĻžāĻšāĻ˛ā§‡ āĻāĻ•āĻŸāĻŋ āĻŸā§‹āĻ•ā§‡āĻ¨ā§‡āĻ° 'āĻ¨āĻ¨-āĻĢāĻžāĻžā§āĻœāĻŋāĻŦāĻŋāĻ˛āĻŋāĻŸāĻŋ'-āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻ¸āĻžāĻŽāĻžā§āĻœāĻ¸ā§āĻ¯ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯, āĻ†āĻĒāĻ¨āĻžāĻ° āĻ¸ā§āĻŸā§‹āĻ°ā§‡āĻœ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻ¯āĻž āĻ…āĻŦāĻŋāĻšāĻ˛, āĻ¨āĻŋāĻ°ā§āĻ­āĻ°āĻ¯ā§‹āĻ—ā§āĻ¯ āĻāĻŦāĻ‚ āĻ…āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ā§€āĻ¯āĻŧāĨ¤


āĻ¯āĻĻāĻŋ āĻ†āĻĒāĻ¨āĻžāĻ° NFT-āĻ āĻ‰āĻĒāĻ°ā§‡āĻ° āĻ‰āĻĻāĻžāĻšāĻ°āĻŖā§‡āĻ° āĻŽāĻ¤ā§‹ āĻāĻ•āĻŸāĻŋ āĻ…āĻŦāĻ¸ā§āĻĨāĻžāĻ¨-āĻ­āĻŋāĻ¤ā§āĻ¤āĻŋāĻ• āĻ āĻŋāĻ•āĻžāĻ¨āĻž āĻĨāĻžāĻ•ā§‡, āĻ¤āĻžāĻšāĻ˛ā§‡ āĻŦāĻŋāĻ•ā§āĻ°āĻ¯āĻŧā§‡āĻ° āĻĒāĻ°ā§‡ āĻāĻ‡ āĻ…āĻŦāĻ¸ā§āĻĨāĻžāĻ¨ā§‡āĻ° āĻĒāĻĨāĻŸāĻŋ āĻ¸ā§āĻ¯ā§āĻ‡āĻš āĻ†āĻ‰āĻŸ āĻ•āĻ°āĻž āĻŽā§‹āĻŸāĻžāĻŽā§āĻŸāĻŋ āĻ¸āĻšāĻœ, āĻŽāĻžāĻ¨ā§‡ āĻ†āĻĒāĻ¨āĻŋ āĻ¯ā§‡ āĻāĻ¨āĻāĻĢāĻŸāĻŋ āĻ•āĻŋāĻ¨ā§‡āĻ›ā§‡āĻ¨ āĻ¤āĻž āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻ­āĻŋāĻ¨ā§āĻ¨ āĻ•āĻŋāĻ›ā§ āĻšāĻ¯āĻŧā§‡ āĻ—ā§‡āĻ›ā§‡ - āĻŦāĻž āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡ āĻāĻ•āĻŸāĻŋ āĻ†āĻ•ā§āĻˇāĻ°āĻŋāĻ• āĻ°āĻžāĻ— āĻŸāĻžāĻ¨ āĻ¨ā§€āĻšā§‡ āĻ¯ā§‡āĻ–āĻžāĻ¨ā§‡ āĻāĻ¨āĻāĻĢāĻŸāĻŋ āĻ¸ā§āĻ°āĻˇā§āĻŸāĻž āĻ°āĻžāĻ—āĻ—ā§āĻ˛āĻŋāĻ° āĻ›āĻŦāĻŋāĻ° āĻœāĻ¨ā§āĻ¯ āĻļāĻŋāĻ˛ā§āĻĒ āĻšāĻŋāĻ¤ā§āĻ°āĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻ¸ā§āĻ‡āĻš āĻ†āĻ‰āĻŸ āĻ•āĻ°ā§‡āĻ›ā§‡āĻ¨ā§ˇ



āĻ•āĻŋāĻ›ā§ āĻāĻŽāĻ¨āĻ•āĻŋ āĻ–ā§‹āĻ˛āĻž Zeppelin āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻ¸āĻ¤āĻ°ā§āĻ•!



NFT.Storage āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻžāĻ° āĻ…āĻ°ā§āĻĨ āĻšāĻ˛ āĻ†āĻŽāĻ°āĻž āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻŽā§‡āĻŸāĻžāĻĄā§‡āĻŸāĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻ…āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ā§€āĻ¯āĻŧ IPFS āĻĢāĻžāĻ‡āĻ˛ CID ( āĻŦāĻŋāĻˇāĻ¯āĻŧāĻŦāĻ¸ā§āĻ¤ā§ - āĻ…āĻŦāĻ¸ā§āĻĨāĻžāĻ¨ āĻ¨āĻ¯āĻŧ - āĻ†āĻ‡āĻĄāĻŋ āĻāĻ¨āĻŸāĻŋāĻĢāĻžāĻ¯āĻŧāĻžāĻ°) āĻĒāĻžāĻ‡ āĻ¯āĻž āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° IPFS-āĻ āĻĒāĻŋāĻ¨ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ āĻ¨āĻž āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ¤āĻžāĻ°āĻĒāĻ°ā§‡ āĻ…āĻ§ā§āĻ¯āĻŦāĻ¸āĻžāĻ¯āĻŧā§‡āĻ° āĻœāĻ¨ā§āĻ¯ Filecoin-āĻ āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŖ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§ˇ āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻ•ā§‡āĻŦāĻ˛ āĻ¸āĻžāĻ‡āĻ¨ āĻ†āĻĒ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡ NFT.Storage āĻāĻŦāĻ‚ āĻāĻŸāĻŋāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ (āĻ†āĻĒāĻ¨āĻžāĻ° .env āĻĢāĻžāĻ‡āĻ˛ā§‡ āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŖ āĻ•āĻ°āĻ¤ā§‡) āĻĒāĻžāĻ¨āĨ¤


.env example


 NEXT_PUBLIC_NFT_STORAGE_API_KEY=xxx


āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻāĻŸāĻžāĻ“ āĻ¨āĻŋāĻļā§āĻšāĻŋāĻ¤ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡ āĻ¯ā§‡ āĻ†āĻŽāĻ°āĻž āĻāĻ•āĻŸāĻŋ āĻ¸āĻ āĻŋāĻ•āĻ­āĻžāĻŦā§‡ āĻ—āĻ āĻŋāĻ¤ āĻŽā§‡āĻŸāĻžāĻĄā§‡āĻŸāĻž JSON āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°ā§‡āĻ›āĻŋ - āĻ•āĻžāĻ°āĻŖ FVM-āĻāĻ° (āĻāĻ–āĻ¨āĻ“!) NFT āĻŽāĻžāĻ°ā§āĻ•ā§‡āĻŸāĻĒā§āĻ˛ā§‡āĻ¸ āĻ¨ā§‡āĻ‡... āĻ†āĻŽāĻ°āĻž āĻ¨āĻŋāĻļā§āĻšāĻŋāĻ¤ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻžāĻ‡ āĻ¯ā§‡ āĻ¯āĻ–āĻ¨ āĻāĻŸāĻŋ āĻ—ā§ƒāĻšā§€āĻ¤ āĻšāĻ¯āĻŧ āĻ¤āĻ–āĻ¨āĻ“ āĻ†āĻŽāĻžāĻĻā§‡āĻ° NFT āĻ†āĻļāĻž āĻ•āĻ°āĻŋ āĻŽāĻžāĻ¨ āĻŽā§‡āĻ¨ā§‡ āĻšāĻ˛ā§‡ .


 import { NFTStorage } from 'nft.storage'; //connect to NFT.Storage Client const NFTStorageClient = new NFTStorage({ token: process.env.NEXT_PUBLIC_NFT_STORAGE_API_KEY, }); const createNFTMetadata = async ( promptInput: string, imageIPFSOrigin: string, //the ipfs path eg. ipfs://[CID] imageHTTPURL: string //an ipfs address fetchable through http for the front end to use (ie. including an ipfs http gateway on it like //[CID].ipfs.nftstorage.link) ) => { console.log('Creating NFT Metadata...'); let nftJSON; // let's get the image data Blob from the IPFS CID that was returned from Bacalhau earlier... await getImageBlob(status, setStatus, imageHTTPURL).then( async (imageData) => { // Now let's create a unique CID for that image data - since we don't really want the rest of the data returned from the Bacalhau job.. await NFTStorageClient.storeBlob(imageData) .then((imageIPFS) => { console.log(imageIPFS); //Here's the JSON construction - only name, description and image are required fields- but I also want to save some other properties like the ipfs link and perhaps you have other properties that give your NFT's rarity to add as well nftJSON = { name: 'Bacalhau Hyperspace NFTs 2023', description: promptInput, image: imageIPFSOrigin, properties: { prompt: promptInput, type: 'stable-diffusion-image', origins: { ipfs: `ipfs://${imageIPFS}`, bacalhauipfs: imageIPFSOrigin, }, innovation: 100, content: { 'text/markdown': promptInput, }, }, }; }) .catch((err) => console.log('error creating blob cid', err)); } ); return nftJSON; };


āĻāĻ–āĻ¨ āĻāĻ‡ āĻŽā§‡āĻŸāĻžāĻĄā§‡āĻŸāĻž NFT.Storage āĻ āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŖ āĻ•āĻ°āĻž āĻ¯āĻžāĻ•!


 await NFTStorageClient.store(nftJson) .then((metadata) => { // DONE! - do something with this returned metadata! console.log('NFT Data pinned to IPFS & stored on Filecoin!'); console.log('Metadata URI: ', metadata.url); // once saved we can use it to mint the NFT // mintNFT(metadata); }) .catch((err) => { console.log('error uploading to nft.storage'); });


Woot - āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ•āĻžāĻ›ā§‡ Bacalhau āĻĨā§‡āĻ•ā§‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ‡āĻŽā§‡āĻœ āĻ†āĻ›ā§‡, āĻ†āĻŽāĻ°āĻž NFT.Strorage-āĻāĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻŽā§‡āĻŸāĻžāĻĄā§‡āĻŸāĻž āĻ…āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ā§€āĻ¯āĻŧ āĻāĻŦāĻ‚ āĻ…āĻŦāĻŋāĻ°āĻžāĻŽāĻ­āĻžāĻŦā§‡ āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŖ āĻ•āĻ°ā§‡āĻ›āĻŋ, āĻāĻ–āĻ¨ āĻ†āĻ¸ā§āĻ¨ āĻ†āĻŽāĻžāĻĻā§‡āĻ° NFT āĻŽāĻŋāĻ¨ā§āĻŸ āĻ•āĻ°āĻŋ!


💡 āĻĻā§āĻ°ā§āĻ¤ āĻŸāĻŋāĻĒ 💡NFT.Storage āĻāĻ›āĻžāĻĄāĻŧāĻžāĻ“ āĻ¸ā§āĻŸā§‹āĻ° āĻ•āĻžāĻ° āĻāĻŦāĻ‚ āĻ¸ā§āĻŸā§‹āĻ° āĻĄāĻžāĻ‡āĻ°ā§‡āĻ•ā§āĻŸāĻ°āĻŋ āĻāĻŦāĻ‚ āĻāĻ•āĻŸāĻŋ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻŸāĻžāĻ¸() āĻĢāĻžāĻ‚āĻļāĻ¨ā§‡āĻ° āĻŽāĻ¤ā§‹ āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻĒāĻ°āĻŋāĻ¸āĻ°āĻ“ āĻ…āĻĢāĻžāĻ° āĻ•āĻ°ā§‡ - āĻ¯āĻž āĻāĻ•āĻŸāĻŋ CID-āĻāĻ° IPFS āĻĒāĻŋāĻ¨āĻŋāĻ‚ āĻāĻŦāĻ‚ āĻĢāĻžāĻ‡āĻ˛āĻ•āĻ¯āĻŧā§‡āĻ¨ āĻ¸ā§āĻŸā§‹āĻ°ā§‡āĻœ āĻĄāĻŋāĻ˛ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻ•āĻ°ā§‡ -> āĻāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻĻā§āĻ°ā§āĻĻāĻžāĻ¨ā§āĻ¤ āĻ¸āĻ‚āĻ¯ā§‹āĻœāĻ¨ āĻšāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ NFT-āĻāĻ° āĻ¸ā§āĻĨāĻŋāĻ¤āĻŋ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ FEVM DApp (āĻŦāĻž FEVM āĻŽā§‡āĻ‡āĻ¨āĻ¨ā§‡āĻŸ āĻ°āĻŋāĻ˛āĻŋāĻœ āĻšāĻŋāĻŸ āĻšāĻ˛ā§‡ FEVM-āĻ NFT āĻŦāĻžāĻ¸ā§āĻ¤āĻŦāĻžāĻ¯āĻŧāĻ¨)āĨ¤

āĻšā§āĻ•ā§āĻ¤āĻŋ āĻŽāĻŋāĻĨāĻ¸ā§āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻž

āĻāĻ–āĻžāĻ¨ā§‡ 3 āĻ§āĻ°āĻ¨ā§‡āĻ° āĻ‡āĻ¨ā§āĻŸāĻžāĻ°āĻ…ā§āĻ¯āĻžāĻ•āĻļāĻ¨ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ (āĻāĻŦāĻ‚ āĻ•āĻ¯āĻŧā§‡āĻ•āĻŸāĻŋ FEVM āĻ—ā§‹āĻŸāĻšāĻž - āĻŦāĻŋāĻŸāĻž āĻĒā§āĻ°āĻ¯ā§āĻ•ā§āĻ¤āĻŋāĻ¤ā§‡ āĻ¸āĻŦāĻ¸āĻŽāĻ¯āĻŧ āĻ•āĻŋāĻ›ā§ āĻ…āĻĻā§āĻ­ā§āĻ¤ āĻŦāĻžāĻ— āĻŦā§ˆāĻļāĻŋāĻˇā§āĻŸā§āĻ¯ āĻĨāĻžāĻ•āĻŦā§‡!)


  • āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻ›āĻžāĻĄāĻŧāĻžāĻ‡ āĻšā§‡āĻ‡āĻ¨ āĻĨā§‡āĻ•ā§‡ āĻĄā§‡āĻŸāĻž āĻĒā§āĻ¨āĻ°ā§āĻĻā§āĻ§āĻžāĻ° āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻĒāĻ āĻ¨āĻ¯ā§‹āĻ—ā§āĻ¯ āĻ•āĻ˛
  • āĻāĻŽāĻ¨ āĻ•āĻ˛ āĻ˛āĻŋāĻ–ā§āĻ¨ āĻ¯āĻžāĻ¤ā§‡ āĻ¸āĻžāĻ‡āĻ¨ āĻ‡āĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻāĻŦāĻ‚ āĻ—ā§āĻ¯āĻžāĻ¸ āĻĒāĻ°āĻŋāĻļā§‹āĻ§ āĻ•āĻ°āĻ¤ā§‡ āĻāĻ•āĻŸāĻŋ āĻ“āĻ¯āĻŧāĻžāĻ˛ā§‡āĻŸ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻšāĻ¯āĻŧāĨ¤ āĻ¯ā§‡ āĻĢāĻžāĻ‚āĻļāĻ¨āĻ—ā§āĻ˛āĻŋ āĻšā§‡āĻ‡āĻ¨ā§‡āĻ° āĻ…āĻŦāĻ¸ā§āĻĨāĻž āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻ•āĻ°ā§‡, āĻ¯ā§‡āĻŽāĻ¨ NFT āĻŽāĻŋāĻ¨ā§āĻŸ āĻ•āĻ°āĻž!
  • āĻ‡āĻ­ā§‡āĻ¨ā§āĻŸ āĻļā§āĻ°ā§‹āĻ¤āĻž - āĻ¯āĻžāĻ°āĻž āĻšā§āĻ•ā§āĻ¤āĻŋ āĻĨā§‡āĻ•ā§‡ āĻ¨āĻŋāĻ°ā§āĻ—āĻ¤ āĻ‡āĻ­ā§‡āĻ¨ā§āĻŸā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻļā§‹āĻ¨ā§‡


āĻāĻ‡ āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĢāĻžāĻ‚āĻļāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯, āĻ†āĻŽāĻ°āĻž āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻŦ - Ethereum API-āĻāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻšāĻžāĻ˛āĻ•āĻž āĻŽā§‹āĻĄāĻŧāĻ•, āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻšā§āĻ•ā§āĻ¤āĻŋāĻ° āĻ¸āĻžāĻĨā§‡ āĻ¸āĻ‚āĻ¯ā§‹āĻ— āĻ•āĻ°āĻ¤ā§‡ āĻāĻŦāĻ‚ āĻāĻ¤ā§‡ āĻ•āĻ˛ āĻ•āĻ°āĻ¤ā§‡āĨ¤


āĻāĻ•āĻŸāĻŋ āĻĒāĻžāĻŦāĻ˛āĻŋāĻ• RPC āĻāĻ° āĻ¸āĻžāĻĨā§‡ āĻ°āĻŋāĻĄ āĻŽā§‹āĻĄā§‡ āĻšā§āĻ•ā§āĻ¤āĻŋāĻ° āĻ¸āĻžāĻĨā§‡ āĻ¸āĻ‚āĻ¯ā§āĻ•ā§āĻ¤ āĻšāĻšā§āĻ›ā§‡:


 //The compiled contract found in pages/api/hardhat/artifacts/contracts import BacalhauCompiledContract from '@Contracts/BacalhauFRC721.sol/BacalhauFRC721.json'; //On-chain address of the contract const contractAddressHyperspace = '0x773d8856dd7F78857490e5Eea65111D8d466A646'; //A public RPC Endpoint (see table from contract section) const rpc = '//api.hyperspace.node.glif.io/rpc/v1'; const provider = new ethers.providers.JsonRpcProvider(rpc); const connectedReadBacalhauContract = new ethers.Contract( contractAddressHyperspace, BacalhauCompiledContract.abi, provider );


āĻšā§āĻ•ā§āĻ¤āĻŋāĻ¤ā§‡ āĻ‡āĻ­ā§‡āĻ¨ā§āĻŸā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻļā§‹āĻ¨āĻž. āĻ¯ā§‡āĻšā§‡āĻ¤ā§ āĻāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻĒāĻ āĻ¨āĻ¯ā§‹āĻ—ā§āĻ¯ (āĻĒāĻžāĻ“āĻ¯āĻŧāĻž) āĻ‡āĻ­ā§‡āĻ¨ā§āĻŸ, āĻ¤āĻžāĻ‡ āĻ†āĻŽāĻ°āĻž āĻ…āĻ¨-āĻšā§‡āĻ‡āĻ¨ āĻ‡āĻ­ā§‡āĻ¨ā§āĻŸ āĻ¨āĻŋāĻ°ā§āĻ—āĻŽāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻļā§āĻ¨āĻ¤ā§‡ āĻĒāĻžāĻŦāĻ˛āĻŋāĻ• RPC āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°āĻŋāĨ¤


 //use the read-only connected Bacalhau Contract connectedReadBacalhauContract.on( // Listen for the specific event we made in our contract 'NewBacalhauFRC721NFTMinted', (sender: string, tokenId: number, tokenURI: string) => { //DO STUFF WHEN AN EVENT COMES IN // eg. re-fetch NFT's, store in state and change page status } );


āĻ˛ā§‡āĻ–āĻžāĻ° āĻŽā§‹āĻĄā§‡ āĻšā§āĻ•ā§āĻ¤āĻŋāĻ° āĻ¸āĻžāĻĨā§‡ āĻ¸āĻ‚āĻ¯ā§‹āĻ— āĻ•āĻ°āĻž - āĻāĻ° āĻœāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻ¯ā§‡ Ethereum āĻŦāĻ¸ā§āĻ¤ā§āĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻ“āĻ¯āĻŧāĻžāĻ˛ā§‡āĻŸ āĻĻā§āĻŦāĻžāĻ°āĻž āĻ“āĻ¯āĻŧā§‡āĻŦ āĻŦā§āĻ°āĻžāĻ‰āĻœāĻžāĻ°ā§‡ āĻ‡āĻ¨āĻœā§‡āĻ•āĻļāĻ¨ āĻ•āĻ°āĻž āĻšāĻšā§āĻ›ā§‡ āĻ¯āĻžāĻ¤ā§‡ āĻāĻ•āĻœāĻ¨ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€ āĻāĻ•āĻŸāĻŋ āĻ˛ā§‡āĻ¨āĻĻā§‡āĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ¸āĻžāĻ‡āĻ¨ āĻ‡āĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ āĻāĻŦāĻ‚ āĻ—ā§āĻ¯āĻžāĻ¸ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ…āĻ°ā§āĻĨ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ - āĻāĻ‡ āĻ•āĻžāĻ°āĻŖā§‡āĻ‡ āĻ†āĻŽāĻ°āĻž āĻāĻ•āĻŸāĻŋ window.ethereum āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻ›āĻŋ āĻŦāĻ¸ā§āĻ¤ā§


 //Typescript needs to know window is an object with potentially and ethereum value. There might be a better way to do this? Open to tips! declare let window: any; //The compiled contract found in pages/api/hardhat/artifacts/contracts import BacalhauCompiledContract from '@Contracts/BacalhauFRC721.sol/BacalhauFRC721.json'; //On-chain address of the contract const contractAddressHyperspace = '0x773d8856dd7F78857490e5Eea65111D8d466A646'; //check for the ethereum object if (!window.ethereum) { //ask user to install a wallet or connect //abort this } // else there's a wallet provider else { // same function - different provider - this one has a signer - the user's connected wallet address const provider = new ethers.providers.Web3Provider(window.ethereum); const contract = new ethers.Contract( contractAddressHyperspace, BacalhauCompiledContract.abi, provider ); const signer = provider.getSigner(); const connectedWriteBacalhauContract = contract.connect(signer); }
āĻ˛āĻŋāĻ–ā§āĻ¨ āĻ¸āĻ‚āĻ¯ā§āĻ•ā§āĻ¤ āĻšā§āĻ•ā§āĻ¤āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻŽāĻŋāĻ¨ā§āĻŸ āĻĢāĻžāĻ‚āĻļāĻ¨ āĻ•āĻ˛ āĻ•āĻ°āĻž.


āĻĒā§āĻ°āĻĨāĻŽāĻ¤, āĻ¨āĻŋāĻļā§āĻšāĻŋāĻ¤ āĻ•āĻ°ā§āĻ¨ āĻ¯ā§‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ•āĻžāĻ›ā§‡ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ°āĻ•āĻžāĻ°ā§€āĻ° āĻ•āĻžāĻ› āĻĨā§‡āĻ•ā§‡ āĻāĻ•āĻŸāĻŋ āĻ“āĻ¯āĻŧāĻžāĻ˛ā§‡āĻŸ āĻ āĻŋāĻ•āĻžāĻ¨āĻž āĻ†āĻ›ā§‡ āĻāĻŦāĻ‚ āĻ†āĻŽāĻ°āĻž FVM āĻšāĻžāĻ‡āĻĒāĻžāĻ°āĻ¸ā§āĻĒā§‡āĻ¸ āĻšā§‡āĻ‡āĻ¨ā§‡ āĻ†āĻ›āĻŋāĨ¤ āĻāĻ–āĻžāĻ¨ā§‡ āĻ•āĻ¯āĻŧā§‡āĻ•āĻŸāĻŋ āĻ¸āĻšāĻžāĻ¯āĻŧāĻ• āĻ“āĻ¯āĻŧāĻžāĻ˛ā§‡āĻŸ āĻĢāĻžāĻ‚āĻļāĻ¨ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ āĻ¯āĻž āĻ†āĻĒāĻ¨āĻŋ āĻšāĻžāĻ‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨, āĻ¯āĻžāĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡ āĻ•ā§€āĻ­āĻžāĻŦā§‡ āĻšā§‡āĻ‡āĻ¨āĻ†āĻ‡āĻĄāĻŋ āĻšā§‡āĻ• āĻ•āĻ°āĻŦā§‡āĻ¨ āĻāĻŦāĻ‚ āĻ•ā§€āĻ­āĻžāĻŦā§‡ āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽā§āĻ¯āĻžāĻŸāĻŋāĻ•āĻ­āĻžāĻŦā§‡ āĻŽā§‡āĻŸāĻžāĻŽāĻžāĻ¸ā§āĻ•/āĻ“āĻ¯āĻŧāĻžāĻ˛ā§‡āĻŸā§‡ āĻšāĻžāĻ‡āĻĒāĻžāĻ°āĻ¸ā§āĻĒā§‡āĻ¸ āĻ¨ā§‡āĻŸāĻ“āĻ¯āĻŧāĻžāĻ°ā§āĻ• āĻ¯ā§āĻ•ā§āĻ¤ āĻ•āĻ°āĻŦā§‡āĻ¨āĨ¤ āĻ†āĻĒāĻ¨āĻŋ āĻ¸āĻ°āĻžāĻ¸āĻ°āĻŋ āĻ‡āĻĨā§‡āĻ°āĻŋāĻ¯āĻŧāĻžāĻŽ āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻŦāĻž ethers.js āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ“āĻ¯āĻŧāĻžāĻ˛ā§‡āĻŸā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ¯ā§‹āĻ—āĻžāĻ¯ā§‹āĻ— āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨āĨ¤


 declare let window: any; const fetchWalletAccounts = async () => { console.log('Fetching wallet accounts...'); await window.ethereum //use ethers? .request({ method: 'eth_requestAccounts' }) .then((accounts: string[]) => { return accounts; }) .catch((error: any) => { if (error.code === 4001) { // EIP-1193 userRejectedRequest error console.log('Please connect to MetaMask.'); } else { console.error(error); } }); }; const fetchChainId = async () => { console.log('Fetching chainId...'); await window.ethereum .request({ method: 'eth_chainId' }) .then((chainId: string[]) => { return chainId; }) .catch((error: any) => { if (error.code === 4001) { // EIP-1193 userRejectedRequest error console.log('Please connect to MetaMask.'); } else { console.error(error); } }); }; //!! This function checks for a wallet connection WITHOUT being intrusive to to the user or opening their wallet export const checkForWalletConnection = async () => { if (window.ethereum) { console.log('Checking for Wallet Connection...'); await window.ethereum .request({ method: 'eth_accounts' }) .then(async (accounts: String[]) => { console.log('Connected to wallet...'); // Found a user wallet return true; }) .catch((err: Error) => { console.log('Error fetching wallet', err); return false; }); } else { //Handle no wallet connection return false; } }; //Subscribe to changes on a user's wallet export const setWalletListeners = () => { console.log('Setting up wallet event listeners...'); if (window.ethereum) { // subscribe to provider events compatible with EIP-1193 standard. window.ethereum.on('accountsChanged', (accounts: any) => { //logic to check if disconnected accounts[] is empty if (accounts.length < 1) { //handle the locked wallet case } if (userWallet.accounts[0] !== accounts[0]) { //user has changed address } }); // Subscribe to chainId change window.ethereum.on('chainChanged', () => { // handle changed chain case }); } else { //handle the no wallet case } }; export const changeWalletChain = async (newChainId: string) => { console.log('Changing wallet chain...'); const provider = window.ethereum; try { await provider.request({ method: 'wallet_switchEthereumChain', params: [{ chainId: newChainId }], //newChainId }); } catch (error: any) { alert(error.message); } }; //AddHyperspaceChain export const addHyperspaceNetwork = async () => { console.log('Adding the Hyperspace Network to Wallet...'); if (window.ethereum) { window.ethereum .request({ method: 'wallet_addEthereumChain', params: [ { chainId: '0xc45', rpcUrls: [ '//hyperspace.filfox.info/rpc/v0', '//filecoin-hyperspace.chainstacklabs.com/rpc/v0', ], chainName: 'Filecoin Hyperspace', nativeCurrency: { name: 'tFIL', symbol: 'tFIL', decimals: 18, }, blockExplorerUrls: [ '//fvm.starboard.ventures/contracts/', '//hyperspace.filscan.io/', '//beryx.zondax.chfor', ], }, ], }) .then((res: XMLHttpRequestResponseType) => { console.log('added hyperspace successfully', res); }) .catch((err: ErrorEvent) => { console.log('Error adding hyperspace network', err); }); } };


āĻ˛āĻŋāĻ–āĻŋāĻ¤ āĻŽā§‹āĻĄā§‡ āĻšā§āĻ•ā§āĻ¤āĻŋ āĻŽāĻŋāĻ¨ā§āĻŸ āĻĢāĻžāĻ‚āĻļāĻ¨ āĻ•āĻ˛ āĻ•āĻ°ā§āĻ¨....


 // Pass in the metadata return from saving to NFT.Storage const mintNFT = async (metadata: any) => { await connectedWriteBacalhauContract // The name of our function in our smart contract .mintBacalhauNFT( userWallet.accounts[0], //users account to use metadata.url //test ipfs address ) .then(async (data: any) => { console.log('CALLED CONTRACT MINT FUNCTION', data); await data .wait() .then(async (tx: any) => { console.log('tx', tx); //CURRENTLY NOT RETURNING TX - (I use event triggering to know when this function is complete) let tokenId = tx.events[1].args.tokenId.toString(); console.log('tokenId args', tokenId); setStatus({ ...INITIAL_TRANSACTION_STATE, success: successMintingNFTmsg(data), }); }) .catch((err: any) => { console.log('ERROR', err); setStatus({ ...status, loading: '', error: errorMsg(err.message, 'Error minting NFT'), }); }); }) .catch((err: any) => { console.log('ERROR1', err); setStatus({ ...status, loading: '', error: errorMsg( err && err.message ? err.message : null, 'Error minting NFT' ), }); }); }


āĻ‰āĻ“ - āĻāĻ¨āĻāĻĢāĻŸāĻŋ āĻŽāĻŋāĻ¨ā§āĻŸā§‡āĻĄ!! āĻ‡āĻ‰āĻ¨āĻŋāĻ•āĻ°ā§āĻ¨ āĻĄāĻžāĻ¨ā§āĻ¸ āĻŽā§‹āĻĄ āĻ¸āĻŽāĻ¯āĻŧ!

🌟 āĻšā§‚āĻĄāĻŧāĻžāĻ¨ā§āĻ¤ āĻšāĻŋāĻ¨ā§āĻ¤āĻžāĻ­āĻžāĻŦāĻ¨āĻž: āĻāĻ†āĻ‡ āĻāĻŦāĻ‚ āĻŦā§āĻ˛āĻ•āĻšā§‡āĻ‡āĻ¨ā§‡āĻ° āĻ¸āĻŽā§āĻ­āĻžāĻŦāĻ¨āĻž

Bacalhau āĻĄā§‡āĻŸāĻžāĻ° āĻ‰āĻĒāĻ° āĻĒā§āĻ¨āĻ°āĻžāĻŦā§ƒāĻ¤ā§āĻ¤āĻŋāĻŽā§‚āĻ˛āĻ•, āĻ¨āĻŋāĻ°ā§āĻ§āĻžāĻ°āĻ• āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ•āĻ°āĻŖā§‡āĻ° āĻ•āĻžāĻœāĻ—ā§āĻ˛āĻŋ āĻ¸āĻŽā§āĻĒāĻžāĻĻāĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻ¨āĻŋāĻœā§‡āĻ•ā§‡ āĻ­āĻžāĻ˛āĻ­āĻžāĻŦā§‡ āĻ§āĻžāĻ° āĻĻā§‡āĻ¯āĻŧāĨ¤
  • ETL āĻĒā§āĻ°āĻ¸ā§‡āĻ¸
  • āĻŽā§‡āĻļāĻŋāĻ¨ āĻ˛āĻžāĻ°ā§āĻ¨āĻŋāĻ‚ āĻāĻŦāĻ‚ āĻāĻ†āĻ‡
  • āĻ†āĻ‡āĻ“āĻŸāĻŋ āĻĄā§‡āĻŸāĻž āĻ‡āĻ¨ā§āĻŸāĻŋāĻ—ā§āĻ°ā§‡āĻļāĻ¨
  • āĻœāĻ¨ā§āĻ¯ āĻ¸āĻš āĻŦā§āĻ¯āĻžāĻš āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ•āĻ°āĻŖ
    • āĻ†āĻ°ā§āĻĨāĻŋāĻ• āĻāĻŦāĻ‚ āĻŦāĻžāĻœāĻžāĻ° āĻ¤āĻĨā§āĻ¯
  • āĻ­āĻŋāĻĄāĻŋāĻ“ āĻāĻŦāĻ‚ āĻšāĻŋāĻ¤ā§āĻ° āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ•āĻ°āĻŖ - āĻ¸ā§ƒāĻœāĻ¨āĻļā§€āĻ˛āĻĻā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻĻā§āĻ°ā§āĻĻāĻžāĻ¨ā§āĻ¤


āĻāĻ•āĻžāĻ§āĻŋāĻ• āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ āĻ†āĻ›ā§‡ āĻ•āĻŋāĻ­āĻžāĻŦā§‡ āĻ‰āĻĒāĻ°ā§‡āĻ° āĻ•āĻŋāĻ›ā§ āĻ…āĻ°ā§āĻœāĻ¨ āĻ•āĻ°āĻž āĻ¯āĻžāĻ¯āĻŧāĨ¤ āĻ¯āĻ–āĻ¨ Bacalhau FEVM āĻ¸ā§āĻŽāĻžāĻ°ā§āĻŸ āĻšā§āĻ•ā§āĻ¤āĻŋāĻ—ā§āĻ˛āĻŋ āĻĨā§‡āĻ•ā§‡ Bacalhau āĻ•ā§‡ āĻ¸āĻ°āĻžāĻ¸āĻ°āĻŋ āĻ•āĻ˛ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻ‡āĻ¨ā§āĻŸāĻŋāĻ—ā§āĻ°ā§‡āĻļāĻ¨ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻ¤ā§‡ āĻŦā§āĻ¯āĻ¸ā§āĻ¤, āĻāĻ–āĻžāĻ¨ā§‡ Bacalhau x FVM āĻ¸āĻšāĻ¯ā§‹āĻ—āĻŋāĻ¤āĻžāĻ° āĻŦāĻŋāĻˇāĻ¯āĻŧā§‡ āĻ•āĻŋāĻ›ā§ āĻšāĻŋāĻ¨ā§āĻ¤āĻžāĻ­āĻžāĻŦāĻ¨āĻž āĻ°āĻ¯āĻŧā§‡āĻ›ā§‡:


  • āĻ­āĻŦāĻŋāĻˇā§āĻ¯āĻ¤ā§‡ āĻĢāĻžāĻ‡āĻ˛āĻ•āĻ¯āĻŧā§‡āĻ¨ āĻĄā§‡āĻŸāĻž āĻ…āĻ¨āĻŦā§‹āĻ°ā§āĻĄāĻŋāĻ‚ āĻāĻŦāĻ‚ āĻ…āĻĢāĻŦā§‹āĻ°ā§āĻĄāĻŋāĻ‚āĻ¯āĻŧā§‡ āĻ¸āĻšāĻžāĻ¯āĻŧāĻ¤āĻž āĻ•āĻ°ā§āĻ¨
  • āĻĄāĻŋāĻ˛ āĻāĻŦāĻ‚ āĻ¸ā§āĻŸā§‹āĻ°ā§‡āĻœ āĻĒā§āĻ°āĻĻāĻžāĻ¨āĻ•āĻžāĻ°ā§€āĻĻā§‡āĻ° āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻšā§‡āĻ‡āĻ¨ā§‡ āĻĒā§āĻ¨āĻ°ā§āĻĻā§āĻ§āĻžāĻ° āĻ•āĻ°āĻž āĻĄā§‡āĻŸāĻž āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ•āĻ°āĻŖā§‡āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ Filecoin-āĻāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻ–ā§āĻ¯āĻžāĻ¤āĻŋ āĻāĻŦāĻ‚ āĻĒāĻ°āĻŋāĻˇā§‡āĻŦāĻžāĻ° āĻ—ā§āĻŖāĻŽāĻžāĻ¨ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻ¤ā§‡ āĻ¸āĻšāĻžāĻ¯āĻŧāĻ¤āĻž āĻ•āĻ°ā§āĻ¨āĨ¤
  • Bacalhau āĻŦāĻžāĻœāĻžāĻ° āĻāĻŦāĻ‚ āĻĒā§‡āĻŽā§‡āĻ¨ā§āĻŸ āĻĄā§‡āĻŸāĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ—āĻŖāĻ¨āĻž āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡
  • Bacalhau DAO's & DataDAOs āĻĨā§‡āĻ•ā§‡ āĻĄā§‡āĻŸāĻž āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ•āĻ°āĻŖā§‡ āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡ā§ˇ
  • Bacalhau āĻ­āĻŋāĻĄāĻŋāĻ“ āĻāĻŦāĻ‚ āĻšāĻŋāĻ¤ā§āĻ° āĻĒā§āĻ°āĻ•ā§āĻ°āĻŋāĻ¯āĻŧāĻžāĻ•āĻ°āĻŖā§‡āĻ° āĻŽāĻ¤ā§‹ āĻ¸ā§ƒāĻœāĻ¨āĻļā§€āĻ˛ āĻĒā§āĻ°āĻšā§‡āĻˇā§āĻŸāĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻ°āĻ“ āĻ…āĻŸā§‹āĻŽā§‡āĻļāĻ¨āĻ•ā§‡ āĻļāĻ•ā§āĻ¤āĻŋāĻļāĻžāĻ˛ā§€ āĻ•āĻ°āĻ¤ā§‡ āĻ¸āĻšāĻžāĻ¯āĻŧāĻ¤āĻž āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡
  • Bacalhau VR āĻāĻŦāĻ‚ AR āĻ¸āĻš āĻ—ā§‡āĻŽ āĻāĻŦāĻ‚ āĻŽā§‡āĻŸāĻžāĻ­āĻžāĻ°ā§āĻ¸ āĻĄā§‡āĻŸāĻž āĻĒā§āĻ°āĻ¸ā§‡āĻ¸āĻŋāĻ‚ āĻ¸āĻ•ā§āĻˇāĻŽ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤
  • Bacalhau, IOT āĻāĻŦāĻ‚ āĻ¸āĻŋāĻŽā§āĻ˛ā§‡āĻļāĻ¨ āĻ¸āĻŽā§āĻ­āĻŦ
  • āĻāĻ†āĻ‡ āĻāĻŦāĻ‚ āĻāĻŽāĻāĻ˛ āĻ…ā§āĻ¯āĻžāĻĒā§āĻ˛āĻŋāĻ•ā§‡āĻļāĻ¨

🐠 āĻŦāĻžāĻ•āĻžāĻ˛āĻšāĻžāĻ‰ āĻ°ā§‹āĻĄāĻŽā§āĻ¯āĻžāĻĒ


āĻ†āĻŽāĻ°āĻž āĻŦāĻ°ā§āĻ¤āĻŽāĻžāĻ¨ā§‡ āĻ†āĻĒāĻ¨āĻžāĻ° āĻ¸ā§āĻŽāĻžāĻ°ā§āĻŸ āĻšā§āĻ•ā§āĻ¤āĻŋ āĻĨā§‡āĻ•ā§‡ āĻ¸āĻ°āĻžāĻ¸āĻ°āĻŋ Bacalhau āĻšāĻžāĻ˛āĻžāĻ¨ā§‹āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻ‰āĻĒāĻžāĻ¯āĻŧ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻ›āĻŋ!!!! āĻāĻ‡ āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒāĻŸāĻŋāĻ•ā§‡ āĻŦāĻ˛āĻž āĻšāĻ¯āĻŧ āĻĒā§āĻ°āĻœā§‡āĻ•ā§āĻŸ āĻĢā§āĻ°āĻ—/āĻĒā§āĻ°āĻœā§‡āĻ•ā§āĻŸ āĻ˛āĻŋāĻ˛āĻŋāĻĒā§āĻ¯āĻžāĻĄ - āĻāĻŦāĻ‚ āĻāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻ‡āĻ¨ā§āĻŸāĻŋāĻ—ā§āĻ°ā§‡āĻļāĻ¨ āĻ˛ā§‡āĻ¯āĻŧāĻžāĻ° āĻšāĻŦā§‡ āĻ¯āĻž FEVM āĻ¸ā§āĻŽāĻžāĻ°ā§āĻŸ āĻ•āĻ¨ā§āĻŸā§āĻ°āĻžāĻ•ā§āĻŸ āĻĨā§‡āĻ•ā§‡ Bacalhau āĻœāĻŦ āĻ•āĻ˛ āĻ•āĻ°āĻ¤ā§‡ āĻ¸āĻ•ā§āĻˇāĻŽ āĻ•āĻ°āĻŦā§‡āĨ¤


āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ¨āĻŋāĻ‰āĻœāĻ˛ā§‡āĻŸāĻžāĻ°ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ¸āĻžāĻ‡āĻ¨ āĻ†āĻĒ āĻ•āĻ°ā§‡ āĻŦāĻž āĻ¨ā§€āĻšā§‡āĻ° āĻ¸āĻžāĻŽāĻžāĻœāĻŋāĻ•āĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ āĻ¯ā§‹āĻ—āĻĻāĻžāĻ¨ āĻ•āĻ°ā§‡ āĻāĻ° āĻ…āĻ—ā§āĻ°āĻ—āĻ¤āĻŋāĻ° āĻ‰āĻĒāĻ° āĻ¨āĻœāĻ° āĻ°āĻžāĻ–ā§āĻ¨āĨ¤

✍ī¸ āĻ¯ā§‹āĻ—āĻžāĻ¯ā§‹āĻ— āĻ°āĻžāĻ–ā§āĻ¨!

āĻ…āĻ­āĻŋāĻ¨āĻ¨ā§āĻĻāĻ¨ āĻ¯āĻĻāĻŋ āĻ†āĻĒāĻ¨āĻŋ āĻĒā§āĻ°ā§‹ āĻĒāĻĨ āĻĒāĻĄāĻŧā§‡āĻ¨!!!


āĻ†āĻŽāĻŋ āĻāĻ•āĻŸāĻŋ āĻ˛āĻžāĻ‡āĻ•, āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯, āĻ…āĻ¨ā§āĻ¸āĻ°āĻŖ āĻŦāĻž āĻļā§‡āĻ¯āĻŧāĻžāĻ° āĻ•ā§ƒāĻ¤āĻœā§āĻž āĻ¯āĻĻāĻŋ āĻāĻŸāĻŋ āĻ†āĻĒāĻ¨āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻĻāĻ°āĻ•āĻžāĻ°ā§€ āĻ›āĻŋāĻ˛! <3


Bacalhau āĻ¸āĻžāĻĨā§‡ āĻ¯ā§‹āĻ—āĻžāĻ¯ā§‹āĻ— āĻ°āĻžāĻ–ā§āĻ¨!


  • āĻŸā§āĻ‡āĻŸāĻžāĻ°
  • YouTube
  • āĻĢāĻžāĻ‡āĻ˛āĻ•āĻ¯āĻŧā§‡āĻ¨ āĻĒā§āĻ°āĻœā§‡āĻ•ā§āĻŸ āĻ¸ā§āĻ˛ā§āĻ¯āĻžāĻ• #bacalhau
  • āĻĢā§‹āĻ°āĻžāĻŽ


â™Ĩī¸ āĻ¸āĻžāĻĨā§‡

āĻ†āĻĒāĻ¨āĻŋ āĻāĻ‡ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻŸāĻŋ āĻŽā§‚āĻ˛ā§āĻ¯āĻŦāĻžāĻ¨ āĻ–ā§āĻāĻœā§‡ āĻĒā§‡āĻ¯āĻŧā§‡āĻ›ā§‡āĻ¨?

āĻāĻ•āĻœāĻ¨ āĻ¸ā§āĻĒāĻ¨āĻ¸āĻ° āĻšāĻ¯āĻŧā§‡ āĻ…ā§āĻ¯āĻžāĻ˛āĻŋāĻ¸āĻ¨ āĻšā§‡āĻ¯āĻŧāĻžāĻ°āĻ•ā§‡ āĻ¸āĻŽāĻ°ā§āĻĨāĻ¨ āĻ•āĻ°ā§āĻ¨āĨ¤ āĻ•ā§‹āĻ¨ āĻĒāĻ°āĻŋāĻŽāĻžāĻŖ āĻĒā§āĻ°āĻļāĻ‚āĻ¸āĻž āĻ•āĻ°āĻž āĻšāĻ¯āĻŧ!



āĻāĻ›āĻžāĻĄāĻŧāĻžāĻ“ āĻĒā§āĻ°āĻ•āĻžāĻļāĻŋāĻ¤.


L O A D I N G
. . . comments & more!

About Author

DeveloperAlly HackerNoon profile picture
DeveloperAlly@developerally
I code. I think sometimes

āĻ†āĻ¸ā§‡ āĻŸā§āĻ¯āĻžāĻ—

āĻāĻ‡ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻŸāĻŋ āĻ‰āĻĒāĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡...

바ėš´ëŧė‚Ŧė´íŠ¸ 바ėš´ëŧė‚Ŧė´íŠ¸ ė˜¨ëŧė¸ë°”ėš´ëŧ