2,458 āĻĒāĻĄāĻŧāĻž
2,458 āĻĒāĻĄāĻŧāĻž

🌈đŸĻ„ āĻŦāĻžāĻ•āĻžāϞāĻšāĻžāω āĻĻāĻŋāϝāĻŧ⧇ āφāĻĒāύāĻžāϰ āύāĻŋāϜāĻ¸ā§āĻŦ 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 āĻ¸ā§āĻŽāĻžāĻ°ā§āϟ āĻ•āĻ¨ā§āĻŸā§āϰāĻžāĻ•ā§āϟ āĻĒā§āϰ⧋āĻ—ā§āϰāĻžāĻŽāĻŋāĻ‚ āĻ­āĻžāώāĻž
    • āĻ“āĻĒ⧇āύ āĻœā§‡āĻĒ⧇āϞāĻŋāύ āϏāĻžāϧāĻžāϰāĻŖ āĻ¸ā§āĻŽāĻžāĻ°ā§āϟ āϚ⧁āĻ•ā§āϤāĻŋ āωāĻĒāĻžāĻĻāĻžāύ āĻāĻŦāĻ‚ āϚ⧁āĻ•ā§āϤāĻŋāϗ⧁āϞāĻŋāϰ āĻāĻ•āϟāĻŋ āύāĻŋāϰāĻžāĻĒāĻ¤ā§āϤāĻž-āύāĻŋāϰ⧀āĻ•ā§āώāĻŋāϤ āĻŦāĻžāĻ¸ā§āϤāĻŦāĻžāϝāĻŧāύ āϞāĻžāχāĻŦā§āϰ⧇āϰāĻŋ āĻ…āĻĢāĻžāϰ āĻ•āϰ⧇
  • āĻ¸ā§āĻŽāĻžāĻ°ā§āϟ āĻ•āĻ¨ā§āĻŸā§āϰāĻžāĻ•ā§āϟ āφāχāĻĄāĻŋāχ [āĻšāĻžāĻ°ā§āϧāĻžāϤ]
    • Hardhat āĻšāϞ Ethereum āϏāĻĢā§āϟāĻ“āϝāĻŧā§āϝāĻžāϰ āϏāĻŽā§āĻĒāĻžāĻĻāύāĻž, āĻ•āĻŽā§āĻĒāĻžāχāϞ, āĻĄāĻŋāĻŦāĻžāĻ—āĻŋāĻ‚ āĻāĻŦāĻ‚ āĻ¸ā§āĻĨāĻžāĻĒāύ⧇āϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āωāĻ¨ā§āύāϝāĻŧāύ āĻĒāϰāĻŋāĻŦ⧇āĻļ
  • āĻŦā§āϞāĻ•āĻšā§‡āχāύ āĻŸā§‡āĻ¸ā§āϟāύ⧇āϟ [āĻĢāĻžāχāϞāĻ•āϝāĻŧ⧇āύ āĻ­āĻžāĻ°ā§āϚ⧁āϝāĻŧāĻžāϞ āĻŽā§‡āĻļāĻŋāύ āĻšāĻžāχāĻĒāĻžāϰāĻ¸ā§āĻĒ⧇āϏ]
    • FVM āĻšāĻžāχāĻĒāĻžāϰāĻ¸ā§āĻĒ⧇āϏ āĻšāϞ āĻĢāĻžāχāϞāĻ•āϝāĻŧ⧇āύ āĻŦā§āϞāĻ•āĻšā§‡āχāύ⧇ āύāĻŋāĻ°ā§āĻŽāĻŋāϤ āĻāĻ•āϟāĻŋ āχāĻ­āĻŋāĻāĻŽ-āϏāĻžāĻŽāĻžā§āϜāĻ¸ā§āϝāĻĒā§‚āĻ°ā§āĻŖ āĻŸā§‡āĻ¸ā§āϟāύ⧇āϟ
  • NFT āĻŽā§‡āϟāĻžāĻĄā§‡āϟāĻž āĻ¸ā§āĻŸā§‹āϰ⧇āϜ [NFT.Storage]
    • NFT.Storage āĻšāϞ IPFS āĻāĻŦāĻ‚ Filecoin-āĻāϰ āωāĻĒāϰ⧇ āύāĻŋāĻ°ā§āĻŽāĻŋāϤ āĻāĻ•āϟāĻŋ āϏāĻ°ā§āĻŦāϜāύ⧀āύ āϜāĻŋāύāĻŋāϏ āϝāĻž NFT āĻŽā§‡āϟāĻžāĻĄā§‡āϟāĻž āĻ…āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ⧀āϝāĻŧāĻ­āĻžāĻŦ⧇ āĻāĻŦāĻ‚ āĻ…āĻŦāĻŋāϰāĻžāĻŽāĻ­āĻžāĻŦ⧇ āϏāĻžā§āϚāϝāĻŧ āĻ•āϰ⧇ āĻāĻŦāĻ‚ NFTs āĻāĻŦāĻ‚ āĻāĻ•āϟāĻŋ āϜāĻžāĻ­āĻžāĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟ sdk-āĻāϰ āϜāĻ¨ā§āϝ āĻŦāĻŋāύāĻžāĻŽā§‚āĻ˛ā§āϝ⧇ āĻŦāĻŋāϕ⧇āĻ¨ā§āĻĻā§āϰ⧀āĻ­ā§‚āϤ āĻ¸ā§āĻŸā§‹āϰ⧇āϜ āĻ…āĻĢāĻžāϰ āĻ•āϰ⧇āĨ¤
  • āĻĢā§āϰāĻ¨ā§āϟ-āĻāĻ¨ā§āĻĄ [NextJS/React + NPM]
    • āφāĻŽāϰāĻž āϏāĻŽā§āĻ­āĻŦāϤ āĻāχ āϏāĻŦ āϜāĻžāύāĻŋ... āϤāĻžāχ āύāĻž? :āĻĒāĻŋ
  • āĻ•ā§āϞāĻžāϝāĻŧ⧇āĻ¨ā§āϟ āĻĨ⧇āϕ⧇ āĻ¸ā§āĻŽāĻžāĻ°ā§āϟ āϚ⧁āĻ•ā§āϤāĻŋ āχāĻ¨ā§āϟāĻžāϰāĻ…ā§āϝāĻžāĻ•āĻļāύ [āĻŽā§‡āϟāĻžāĻŽāĻžāĻ¸ā§āĻ•, āχāĻĨāĻžāϰāϏ, āĻšā§‡āχāύāĻ¸ā§āĻŸā§āϝāĻžāĻ• RPC āύ⧋āĻĄ]
    • āĻāĻ•āϟāĻŋ āĻĒāĻžāĻŦāϞāĻŋāĻ• RPC āύ⧋āĻĄ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ - āφāĻŽāĻŋ āφāĻŽāĻžāϰ āĻŦā§āϞāĻ•āĻšā§‡āύ āϚ⧁āĻ•ā§āϤāĻŋāϰ āϏāĻžāĻĨ⧇ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻĒāĻ āύāϝ⧋āĻ—ā§āϝ āχāĻ¨ā§āϟāĻžāϰāĻ…ā§āϝāĻžāĻ•āĻļāύ āĻĒ⧇āϤ⧇ āĻĒāĻžāϰāĻŋāĨ¤
    • āĻāĻ•āϟāĻŋ Metamask āĻĒā§āϰāĻĻāĻžāύāĻ•āĻžāϰ⧀āϰ (āĻŦāĻž āĻ…āύ⧁āϰ⧂āĻĒ āĻ“āϝāĻŧāĻžāϞ⧇āϟ āϝāĻž EIP-1193 āĻĻā§āĻŦāĻžāϰāĻž āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ Ethereum API āĻŦā§āϰāĻžāωāϜāĻžāϰ⧇ āχāύāĻœā§‡āĻ•ā§āϟ āĻ•āϰ⧇ ), āφāĻŽāϰāĻž āĻŦā§āϞāĻ•āĻšā§‡āχāύ āϚ⧁āĻ•ā§āϤāĻŋāϤ⧇ āĻ•āϞ āϞāĻŋāĻ–āϤ⧇ āϏāĻ•ā§āώāĻŽ āĻ•āϰāĻŋāĨ¤
    • āχāĻĨāĻžāϰāϏ āĻœā§‡āĻāϏ āχāĻ­āĻŋāĻāĻŽ-āϏāĻžāĻŽāĻžā§āϜāĻ¸ā§āϝāĻĒā§‚āĻ°ā§āĻŖ āĻ¸ā§āĻŽāĻžāĻ°ā§āϟ āϚ⧁āĻ•ā§āϤāĻŋāϰ āϏāĻžāĻĨ⧇ āχāĻ¨ā§āϟāĻžāϰāĻ…ā§āϝāĻžāĻ•ā§āϟ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āϞāĻžāχāĻŦā§āϰ⧇āϰāĻŋ
  • āĻāφāχ āĻŸā§‡āĻ•ā§āϏāϟ-āϟ⧁-āχāĻŽā§‡āϜ āĻ¸ā§āĻŸā§āϝāĻžāĻŦāϞ āĻĄāĻŋāĻĢāĻŋāωāĻļāύ āĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟ [āĻĒāĻžāχāĻĨāύ, āĻŸā§‡āύāϏāϰāĻĢā§āϞ⧋]
    • TensorFlow āĻšāϞ āĻāĻ•āϟāĻŋ āĻ“āĻĒ⧇āύ-āϏ⧋āĻ°ā§āϏ āĻŽā§‡āĻļāĻŋāύ āϞāĻžāĻ°ā§āύāĻŋāĻ‚ āĻĒā§āĻ˛ā§āϝāĻžāϟāĻĢāĻ°ā§āĻŽ āĻāĻŦāĻ‚ āϞāĻžāχāĻŦā§āϰ⧇āϰāĻŋ āϝāĻž āĻĒā§āϰāĻžāĻ•-āĻĒā§āϰāĻļāĻŋāĻ•ā§āώāĻŋāϤ āĻŽāĻĄā§‡āϞ āĻāĻŦāĻ‚ āĻ…āĻ¨ā§āϝāĻžāĻ¨ā§āϝ āĻĄā§‡āϟāĻž āĻāĻŦāĻ‚ ML āϟ⧁āϞ āϏāϰāĻŦāϰāĻžāĻš āĻ•āϰ⧇āĨ¤
  • āĻāφāχ āĻŸā§‡āĻ•ā§āϏāϟ-āϟ⧁-āχāĻŽā§‡āϜ āĻœā§‡āύāĻžāϰ⧇āĻļāύ⧇āϰ āϜāĻ¨ā§āϝ āĻŦāĻŋāϕ⧇āĻ¨ā§āĻĻā§āϰ⧀āĻ•ā§ƒāϤ āĻ…āĻĢ-āĻšā§‡āχāύ āĻ•āĻŽā§āĻĒāĻŋāωāϟ [āĻŦāĻžāĻ•āĻžāϞāĻšāĻžāω]
    • Bacalhau āĻšāϞ āĻāĻ•āϟāĻŋ āĻĒāĻŋāϝāĻŧāĻžāϰ-āϟ⧁-āĻĒāĻŋāϝāĻŧāĻžāϰ āĻ“āĻĒ⧇āύ āĻ•āĻŽā§āĻĒāĻŋāωāĻŸā§‡āĻļāύ āύ⧇āϟāĻ“āϝāĻŧāĻžāĻ°ā§āĻ• āϝāĻž āϏāĻ°ā§āĻŦāϜāύ⧀āύ, āĻ¸ā§āĻŦāĻšā§āĻ› āĻāĻŦāĻ‚ āϐāĻšā§āĻ›āĻŋāĻ•āĻ­āĻžāĻŦ⧇ āϝāĻžāϚāĻžāχāϝ⧋āĻ—ā§āϝ āĻ—āĻŖāύāĻž āĻĒā§āϰāĻ•ā§āϰāĻŋāϝāĻŧāĻžāϗ⧁āϞāĻŋāϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āĻĒā§āĻ˛ā§āϝāĻžāϟāĻĢāĻ°ā§āĻŽ āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰ⧇āĨ¤ āĻāϟāĻŋ āĻāĻ•āϟāĻŋ āĻŦāĻŋāϕ⧇āĻ¨ā§āĻĻā§āϰ⧀āĻ•ā§ƒāϤ āĻ…āĻĢ-āĻšā§‡āχāύ āĻĄā§‡āϟāĻž āĻ—āĻŖāύāĻž āĻ¸ā§āϤāϰāĨ¤
  • āĻŦāĻŋāϕ⧇āĻ¨ā§āĻĻā§āϰ⧀āĻ­ā§‚āϤ DApp āĻ¸ā§āĻĨāĻžāĻĒāύāĻž [āĻĢā§āϞāĻŋāĻ•]
    • Fleek IPFS āĻāĻŦāĻ‚ Filecoin-āĻ āĻ“āϝāĻŧ⧇āĻŦāϏāĻžāχāϟ āĻ¸ā§āĻĨāĻžāĻĒāύ⧇āϰ āĻĒā§āϰāĻ¸ā§āϤāĻžāĻŦ āĻĻ⧇āϝāĻŧāĨ¤ āĻāϟāĻŋ Vercel āĻŦāĻž Netlify-āĻāϰ āĻ“āϝāĻŧ⧇āĻŦ3 āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖ - āĻŦāϞāϤ⧇ āĻĒāĻžāϰāĻŋ āύāĻž āϝ⧇ āφāĻŽāĻžāĻĻ⧇āϰ āĻ•āĻžāϛ⧇ āϏāĻ¤ā§āϝāĻŋāχ āĻāĻ•āϟāĻŋ āĻŦāĻŋāϕ⧇āĻ¨ā§āĻĻā§āϰ⧀āĻ­ā§‚āϤ āĻ…ā§āϝāĻžāĻĒ āφāϛ⧇ āĻāĻŦāĻ‚ āϤāĻžāϰāĻĒāϰ āĻāϟāĻŋāϕ⧇ āĻ“āϝāĻŧ⧇āĻŦ2-āĻ āĻ¸ā§āĻĨāĻžāĻĒāύ āĻ•āϰāĻž āĻšāĻŦ⧇! :D

đŸ—ī¸ āĻĒāĻžāχāĻĨāύ āĻŸā§‡āĻ•ā§āϏāϟ-āϟ⧁-āχāĻŽā§‡āϜ āĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟ āϤ⧈āϰāĻŋ āĻ•āϰāĻž


💡 TLDR āϟāĻŋāĻĒ đŸ’Ą

āĻāχ āĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟāϟāĻŋ āχāϤāĻŋāĻŽāĻ§ā§āϝ⧇āχ CLI āĻāĻŦāĻ‚ āĻāĻ•āϟāĻŋ HTTP āĻāĻ¨ā§āĻĄāĻĒāϝāĻŧ⧇āĻ¨ā§āĻŸā§‡āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ Bacalhau-āĻāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻŦā§āϝāĻŦāĻšāĻžāϰ⧇āϰ āϜāĻ¨ā§āϝ āωāĻĒāϞāĻŦā§āϧ, āϤāĻžāχ āύāĻŋāĻ°ā§āĻĻā§āĻŦāĻŋāϧāĻžāϝāĻŧ āĻāχ āĻ…āĻ‚āĻļāϟāĻŋ āĻāĻĄāĻŧāĻŋāϝāĻŧ⧇ āϝāĻžāύāĨ¤


āĻ¸ā§āĻĨāĻŋāϤāĻŋāĻļā§€āϞ āĻŦāĻŋāĻ¸ā§āϤāĻžāϰ⧇āϰ āϜāĻ¨ā§āϝ āĻĻā§āϰ⧁āϤ āĻ­ā§‚āĻŽāĻŋāĻ•āĻž


āĻ¸ā§āĻŸā§āϝāĻžāĻŦāϞ āĻĄāĻŋāĻĢāĻŋāωāĻļāύ āĻŦāĻ°ā§āϤāĻŽāĻžāύ⧇ āĻŸā§‡āĻ•ā§āϏāϟ-āϟ⧁-āχāĻŽā§‡āϜ āĻĒā§āϰāϏ⧇āϏāĻŋāĻ‚ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻĒā§āϰāϧāĻžāύ āĻŽā§‡āĻļāĻŋāύ āϞāĻžāĻ°ā§āύāĻŋāĻ‚ āĻŽāĻĄā§‡āϞ (āĻāĻŦāĻ‚ āĻāĻ•āχ āĻŽāĻĄā§‡āϞ āĻĄāĻžāϞ-āχ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇)āĨ¤ āĻāϟāĻŋ āĻāĻ• āϧāϰāύ⧇āϰ āĻĄāĻŋāĻĒ āϞāĻžāĻ°ā§āύāĻŋāĻ‚ - āĻŽā§‡āĻļāĻŋāύ āϞāĻžāĻ°ā§āύāĻŋāĻ‚āϝāĻŧ⧇āϰ āĻāĻ•āϟāĻŋ āωāĻĒāϏ⧇āϟ āϝāĻž āύāĻŋāĻœā§‡āϕ⧇ āĻāĻ•āϟāĻŋ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻ•āĻžāϜ āϏāĻŽā§āĻĒāĻžāĻĻāύ āĻ•āϰāϤ⧇ āĻļ⧇āĻ–āĻžāϝāĻŧ - āĻāχ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇ āĻāĻ•āϟāĻŋ āĻĒāĻžāĻ ā§āϝ āχāύāĻĒ⧁āϟāϕ⧇ āĻāĻ•āϟāĻŋ āϚāĻŋāĻ¤ā§āϰ āφāωāϟāĻĒ⧁āĻŸā§‡ āϰ⧂āĻĒāĻžāĻ¨ā§āϤāϰ āĻ•āϰāĻž āĻšāϝāĻŧāĨ¤


āĻāχ āωāĻĻāĻžāĻšāϰāϪ⧇, āφāĻŽāϰāĻž āĻāĻ•āϟāĻŋ āĻĄāĻŋāĻĢāĻŋāωāĻļāύ āĻĒā§āϰ⧋āĻŦ⧇āĻŦāĻŋāϞāĻŋāĻ¸ā§āϟāĻŋāĻ• āĻŽāĻĄā§‡āϞ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻ›āĻŋ āϝāĻž āĻŸā§‡āĻ•ā§āϏāϟ āĻĨ⧇āϕ⧇ āχāĻŽā§‡āϜ āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇ āĻāĻ•āϟāĻŋ āĻŸā§āϰāĻžāĻ¨ā§āϏāĻĢāϰāĻŽāĻžāϰ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇āĨ¤


āϝāĻžāχāĻšā§‹āĻ• āϚāĻŋāĻ¨ā§āϤāĻž āĻ•āϰāĻŦ⧇āύ āύāĻž - āĻāϰ āϜāĻ¨ā§āϝ āφāĻŽāĻžāĻĻ⧇āϰāϕ⧇ āĻŽā§‡āĻļāĻŋāύ āϞāĻžāĻ°ā§āύāĻŋāĻ‚ āĻŽāĻĄā§‡āϞ⧇ āĻ—āĻŋāϝāĻŧ⧇ āĻĒā§āϰāĻļāĻŋāĻ•ā§āώāĻŖ āĻĻ⧇āĻ“āϝāĻŧāĻžāϰ āĻĻāϰāĻ•āĻžāϰ āύ⧇āχ (āϝāĻĻāĻŋāĻ“ āφāϰ⧇ - āϝāĻĻāĻŋ āĻāϟāĻŋ āφāĻĒāύāĻžāϰ āϜāĻŋāύāĻŋāϏ āĻšāϝāĻŧ - āφāĻĒāύāĻŋ āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ!)


āĻĒāϰāĻŋāĻŦāĻ°ā§āϤ⧇, āφāĻŽāϰāĻž āφāĻŽāĻžāĻĻ⧇āϰ āĻĒāĻžāχāĻĨāύ āĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āĻŸā§‡ Google-āĻāϰ TensorFlow āĻ“āĻĒ⧇āύ-āϏ⧋āĻ°ā§āϏ āĻŽā§‡āĻļāĻŋāύ āϞāĻžāĻ°ā§āύāĻŋāĻ‚ āϞāĻžāχāĻŦā§āϰ⧇āϰāĻŋ āĻĨ⧇āϕ⧇ āĻāĻ•āϟāĻŋ āĻĒā§āϰāĻžāĻ•-āĻĒā§āϰāĻļāĻŋāĻ•ā§āώāĻŋāϤ āĻŽāĻĄā§‡āϞ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāϤ⧇ āϝāĻžāĻšā§āĻ›āĻŋ āĻ•āĻžāϰāĻŖ āφāĻŽāĻžāĻĻ⧇āϰ āϜāĻ¨ā§āϝ ML āĻ“āϜāύāϗ⧁āϞāĻŋ āĻĒā§āϰāĻžāĻ•-āĻ—āĻŖāύāĻž āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇āĨ¤


āφāϰāĻ“ āϏāĻ āĻŋāĻ•āĻ­āĻžāĻŦ⧇, āφāĻŽāϰāĻž āφāϏāϞ āĻāĻŽāĻāϞ āĻŽāĻĄā§‡āϞ⧇āϰ āĻāĻ•āϟāĻŋ āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāϜ āĻ•āϰāĻž āϕ⧇āϰāĻžāϏ/āĻŸā§‡āύāϏāϰāĻĢā§āϞ⧋ āĻŦāĻžāĻ¸ā§āϤāĻŦāĻžāϝāĻŧāύ āĻĢāĻ°ā§āĻ• āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻ›āĻŋāĨ¤


āĻĒāĻžāχāĻĨāύ āĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟ


đŸĻ„ āφāĻĒāύāĻŋ āϕ⧀āĻ­āĻžāĻŦ⧇ āĻāχ āĻŸā§‡āĻ•ā§āϏāϟ-āϟ⧁-āχāĻŽā§‡āϜ āĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟāϟāĻŋ āϤ⧈āϰāĻŋ āĻ•āϰāĻŦ⧇āύ āĻāĻŦāĻ‚ āĻĄāĻ•āĻžāϰāĻžāχāϜ āĻ•āϰāĻŦ⧇āύ āϤāĻžāϰ āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻ“āϝāĻŧāĻžāĻ•āĻĨā§āϰ⧁ āϖ⧁āρāĻœā§‡ āĻĒāĻžāĻŦ⧇āύ āĻāĻŦāĻ‚ āĻāϟāĻŋ Bacalhau āĻĄāĻ•ā§āϏ⧇ āĻāĻŦāĻ‚ āĻāχ @BacalhauProject YouTube āĻ­āĻŋāĻĄāĻŋāĻ“āϤ⧇ āϚāĻžāϞāĻžāύāĨ¤ đŸĻ„ āφāĻĒāύāĻŋ āĻāχ Google Collabs āύ⧋āϟāĻŦ⧁āϕ⧇āĻ“ āĻāϟāĻŋ āϚāĻžāϞāĻžāϤ⧇ āĻĒāĻžāϰ⧇āύ


āĻāĻ–āĻžāύ⧇ āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻĒāĻžāχāĻĨāύ āĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟ!


 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 āĻāϰ āĻ…āĻ¨ā§āϤāĻ°ā§āύāĻŋāĻšāĻŋāϤ āĻŦāĻŋāϕ⧇āĻ¨ā§āĻĻā§āϰ⧀āĻ•āϰāĻŖ āĻŽāĻžāύāϗ⧁āϞāĻŋāϕ⧇ āφāϰāĻ“ āĻŦāĻŋāĻ¸ā§āϤ⧃āϤāĻ­āĻžāĻŦ⧇ āĻĒāϰāĻŋāĻ¤ā§āϝāĻžāĻ— āύāĻž āĻ•āϰ⧇ āĻĄā§‡āϟāĻžāϰ āωāĻĒāϰ āĻ…āĻĢ-āĻšā§‡āχāύ āĻ—āĻŖāύāĻž āϏāĻ•ā§āώāĻŽ āĻ•āϰ⧇ āĻĄā§‡āϟāĻž āĻĒā§āϰāĻ•ā§āϰāĻŋāϝāĻŧāĻžāĻ•āϰāϪ⧇āϰ āĻ­āĻŦāĻŋāĻˇā§āϝāϤāϕ⧇ āĻ—āĻŖāϤāĻžāĻ¨ā§āĻ¤ā§āϰāĻŋāĻ• āĻ•āϰāϤ⧇ āϏāĻšāĻžāϝāĻŧāϤāĻž āĻ•āϰāĻžāϰ āϞāĻ•ā§āĻˇā§āϝ⧇ āϰāϝāĻŧ⧇āϛ⧇⧎


Bacalhau āĻšāϞ āĻāĻ•āϟāĻŋ āĻĒāĻŋāϝāĻŧāĻžāϰ-āϟ⧁-āĻĒāĻŋāϝāĻŧāĻžāϰ āĻ“āĻĒ⧇āύ āĻ•āĻŽā§āĻĒāĻŋāωāĻŸā§‡āĻļāύ āύ⧇āϟāĻ“āϝāĻŧāĻžāĻ°ā§āĻ• āϝāĻž āϏāĻ°ā§āĻŦāϜāύ⧀āύ, āĻ¸ā§āĻŦāĻšā§āĻ› āĻāĻŦāĻ‚ āϐāĻšā§āĻ›āĻŋāĻ•āĻ­āĻžāĻŦ⧇ āϝāĻžāϚāĻžāχāϝ⧋āĻ—ā§āϝ āĻ—āĻŖāύāĻž āĻĒā§āϰāĻ•ā§āϰāĻŋāϝāĻŧāĻžāϗ⧁āϞāĻŋāϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āĻĒā§āĻ˛ā§āϝāĻžāϟāĻĢāĻ°ā§āĻŽ āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰ⧇ āϝ⧇āĻ–āĻžāύ⧇ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻ•āĻžāϰ⧀āϰāĻž āφāχāĻĒāĻŋāĻāĻĢāĻāϏ (āĻāĻŦāĻ‚ āĻļā§€āĻ˜ā§āϰāχ āĻĢāĻžāχāϞāĻ•āϝāĻŧ⧇āύ) āĻ āϏāĻžā§āϚāĻŋāϤ āĻĄā§‡āϟāĻž āϏāĻš āϝ⧇āϕ⧋āύ⧋ āĻĄā§‡āϟāĻžāϰ āĻŦāĻŋāϰ⧁āĻĻā§āϧ⧇ āĻ•āĻžāϜ āĻšāĻŋāϏāĻžāĻŦ⧇ āĻĄāĻ•āĻžāϰ āĻ•āĻ¨ā§āĻŸā§‡āχāύāĻžāϰ āĻŦāĻž āĻ“āϝāĻŧ⧇āĻŦ āĻ…ā§āϝāĻžāϏ⧇āĻŽā§āĻŦāϞāĻŋ āĻ›āĻŦāĻŋ āϚāĻžāϞāĻžāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āĻāĻŽāύāĻ•āĻŋ āĻāϟāĻŋāϰ GPU āĻ•āĻžāĻœā§‡āϰ āϜāĻ¨ā§āϝ āϏāĻŽāĻ°ā§āĻĨāύ āϰāϝāĻŧ⧇āϛ⧇ āĻāĻŦāĻ‚ US$400 āĻŦāĻž āϤāĻžāϰ āĻŦ⧇āĻļāĻŋ āύāϝāĻŧ!

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

Bacalhau āϤ⧇ āĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟ āϚāĻžāϞāĻžāύ⧋


āĻāχ āĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟāϟāĻŋ āϚāĻžāϞāĻžāύ⧋āϰ āϜāĻ¨ā§āϝ, āφāĻŽāϰāĻž āĻāϟāĻŋāϕ⧇ Bacalhau-āĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ⧇āϰ āϜāĻ¨ā§āϝ Dockerise āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻŋāĨ¤ āφāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻāϟāĻŋ āĻ•āϰāϤ⧇ āĻļāĻŋāĻ–āϤ⧇ āϚāĻžāύ āϤāĻŦ⧇ āφāĻĒāύāĻŋ āĻāĻ–āĻžāύ⧇ āϟāĻŋāωāĻŸā§‹āϰāĻŋāϝāĻŧāĻžāϞāϟāĻŋ āĻ…āύ⧁āϏāϰāĻŖ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ⧎ āϤāĻžāϰāĻĒāϰ⧇ āφāĻŽāϰāĻž āĻāϟāĻŋāϕ⧇ Bacalhau CLI-āĻāϰ āϏāĻžāĻĨ⧇ āĻŽāĻžāĻ¤ā§āϰ āĻāĻ• āϞāĻžāχāύ⧇āϰ āϕ⧋āĻĄ āĻĻāĻŋāϝāĻŧ⧇ āϚāĻžāϞāĻžāϤ⧇ āĻĒāĻžāϰāĻŋ (āĻ…āĻ¨ā§āϝ āĻāĻ•-āϞāĻžāχāύāĻžāϰ āĻĻāĻŋāϝāĻŧ⧇ Bacalhau āχāύāĻ¸ā§āϟāϞ āĻ•āϰāĻžāϰ āĻĒāϰ⧇):

 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 āĻ¸ā§āĻŽāĻžāĻ°ā§āϟ āϚ⧁āĻ•ā§āϤāĻŋāϟāĻŋ āĻ“āĻĒ⧇āύ āĻœā§‡āĻĒ⧇āϞāĻŋāύ⧇āϰ ERC721 āĻŦāĻžāĻ¸ā§āϤāĻŦāĻžāϝāĻŧāύ⧇āϰ āωāĻĒāϰ āĻ­āĻŋāĻ¤ā§āϤāĻŋ āĻ•āϰ⧇ āϤ⧈āϰāĻŋ āĻ•āĻŋāĻ¨ā§āϤ⧁ 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]; }


āĻĒā§āϰāϝāĻŧā§‹āϜāύ⧀āϝāĻŧāϤāĻž

āφāĻŽāĻŋ Filecoin āĻ­āĻžāĻ°ā§āϚ⧁āϝāĻŧāĻžāϞ āĻŽā§‡āĻļāĻŋāύ āĻšāĻžāχāĻĒāĻžāϰāĻ¸ā§āĻĒ⧇āϏ āĻŸā§‡āĻ¸ā§āϟāύ⧇āĻŸā§‡ āĻāχ āϚ⧁āĻ•ā§āϤāĻŋāϟāĻŋ āĻ¸ā§āĻĨāĻžāĻĒāύ āĻ•āϰāĻŦ, āϤāĻŦ⧇ āφāĻĒāύāĻŋ āĻāχ āϚ⧁āĻ•ā§āϤāĻŋāϟāĻŋ āĻĒāϞāĻŋāĻ—āύ, BSC, āĻ…āĻĒāϟāĻŋāĻŽāĻŋāϜāĻŽ, āφāĻ°ā§āĻŦāĻŋāĻŸā§āϰāĻžāĻŽ, āĻ…ā§āϝāĻžāĻ­āĻžāϞāĻžāĻžā§āϚ āĻāĻŦāĻ‚ āφāϰāĻ“ āĻ…āύ⧇āĻ• āĻ•āĻŋāϛ⧁ āϏāĻš āϝ⧇āϕ⧋āύ EVM-āϏāĻžāĻŽāĻžā§āϜāĻ¸ā§āϝāĻĒā§‚āĻ°ā§āĻŖ āĻšā§‡āχāύ⧇ āĻ¸ā§āĻĨāĻžāĻĒāύ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤ āĻāĻŽāύāĻ•āĻŋ āφāĻĒāύāĻŋ āĻāĻ•āϟāĻŋ āĻŽāĻžāĻ˛ā§āϟāĻŋ-āĻšā§‡āχāύ āĻāύāĻāĻĢāϟāĻŋ (āχāĻ™ā§āĻ—āĻŋāϤ: āĻāχ āϰ⧇āĻĒā§‹ ) āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇ āφāĻĒāύāĻžāϰ āϏāĻžāĻŽāύ⧇āϰ āĻĒā§āϰāĻžāĻ¨ā§āϤ⧇ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ!


āĻšāĻžāχāĻĒāĻžāϰāĻ¸ā§āĻĒ⧇āϏ āĻŸā§‡āĻ¸ā§āϟāύ⧇āĻŸā§‡ āĻ¸ā§āĻĨāĻžāĻĒāύ āĻ•āϰāϤ⧇ āφāĻŽāĻžāĻĻ⧇āϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āĻšāĻŦ⧇

  1. āĻšāĻžāχāĻĒāĻžāϰāĻ¸ā§āĻĒ⧇āϏ āĻŸā§‡āĻ¸ā§āϟāύ⧇āĻŸā§‡ āĻŽā§‡āϟāĻžāĻŽāĻžāĻ¸ā§āĻ• āĻ“āϝāĻŧāĻžāϞ⧇āϟ āϏ⧇āϟ āφāĻĒ āĻ•āϰ⧁āύ āĻāĻŦāĻ‚ āϏāĻ‚āϝ⧁āĻ•ā§āϤ āĻ•āϰ⧁āύ
  2. āĻāĻ•āϟāĻŋ āĻ•āϞ āĻĨ⧇āϕ⧇ āĻ•āĻŋāϛ⧁ āĻĒāϰ⧀āĻ•ā§āώāĻž āϟāĻŋāĻāĻĢāφāχāĻāϞ āϤāĻšāĻŦāĻŋāϞ āĻĒāĻžāύ ( āϝ⧋āĻ— āĻŦāĻž āĻœā§‹āύāĻĄāĻžāĻ•ā§āϏ )


Hardhat āϏāĻ™ā§āϗ⧇ āĻ¸ā§āĻŽāĻžāĻ°ā§āϟ āϚ⧁āĻ•ā§āϤāĻŋ āĻ¸ā§āĻĨāĻžāĻĒāύ

āĻšāĻžāχāĻĒāĻžāϰāĻ¸ā§āĻĒ⧇āϏ āĻŸā§‡āĻ¸ā§āϟāύ⧇āĻŸā§‡ āĻāχ āϚ⧁āĻ•ā§āϤāĻŋāϟāĻŋ āĻ¸ā§āĻĨāĻžāĻĒāύ āĻ•āϰāϤ⧇ āφāĻŽāĻŋ āĻšāĻžāĻ°ā§āĻĄāĻšā§āϝāĻžāϟ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻ›āĻŋāĨ¤


🛸 āĻšāĻžāχāĻĒāĻžāϰāĻ¸ā§āĻĒ⧇āϏ RPC āĻāĻŦāĻ‚ āĻŦā§āϞāĻ•āĻāĻ•ā§āϏāĻĒā§āϞ⧋āϰāĻžāϰ āĻŦāĻŋāĻ•āĻ˛ā§āĻĒ:

āĻĒāĻžāĻŦāϞāĻŋāĻ• RPC āĻāĻ¨ā§āĻĄāĻĒāϝāĻŧ⧇āĻ¨ā§āϟ

āĻŦā§āϞāĻ•āĻāĻ•ā§āϏāĻĒā§āϞ⧋āϰāĻžāϰ

https://filecoin-hyperspace.chainstacklabs.com/rpc/v0

https://beryx.zondax.ch/

https://hyperspace.filfox.info/rpc/v0

https://fvm.starboard.ventures/contracts/

https://rpc.ankr.com/filecoin_testnet

https://explorer.glif.io/?network=hyperspacenet

API āϖ⧁āϞ⧁āύ : beryx.zondax.ch

https://hyperspace.filfox.info/en


āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ āϏ⧇āϟ-āφāĻĒ⧇āϰ āϜāĻ¨ā§āϝ, āφāĻŽāϰāĻž āωāĻĒāϞāĻŦā§āϧ āϝ⧇ āϕ⧋āύ⧋ āĻĒāĻžāĻŦāϞāĻŋāĻ• 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: 'https://api.hyperspace.node.glif.io/rpc/v1', chainId: 3141, accounts: [process.env.WALLET_PRIVATE_KEY ?? 'undefined'], }, // bleeding edge often-reset FVM testnet filecoinWallaby: { url: 'https://wallaby.node.glif.io/rpc/v0', chainId: 31415, accounts: [process.env.WALLET_PRIVATE_KEY ?? 'undefined'], //explorer: https://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āĨ¤ āĻāĻ–āĻžāύ⧇ āĻŦāĻž FilecoinProject āĻ¸ā§āĻ˛ā§āϝāĻžāϕ⧇āϰ #bacalhau āĻšā§āϝāĻžāύ⧇āϞ⧇ āĻāϟāĻŋāϰ āωāĻĒāϰ āύāϜāϰ āϰāĻžāϖ⧁āύāĨ¤


>run/test in terminal


 curl -XPOST -d '{"prompt": "rainbow unicorn"}' 'http://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 = 'http://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 āĻāĻŦāĻ‚ āĻāϟāĻŋāϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ API āϕ⧀ (āφāĻĒāύāĻžāϰ .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 https://[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 āĻāĻ›āĻžāĻĄāĻŧāĻžāĻ“ āĻ¸ā§āĻŸā§‹āϰ āĻ•āĻžāϰ āĻāĻŦāĻ‚ āĻ¸ā§āĻŸā§‹āϰ āĻĄāĻžāχāϰ⧇āĻ•ā§āϟāϰāĻŋ āĻāĻŦāĻ‚ āĻāĻ•āϟāĻŋ āĻ¸ā§āĻŸā§āϝāĻžāϟāĻžāϏ() āĻĢāĻžāĻ‚āĻļāύ⧇āϰ āĻŽāϤ⧋ āĻ…āĻ¨ā§āϝāĻžāĻ¨ā§āϝ API āĻ•āϞāϗ⧁āϞāĻŋāϰ āĻāĻ•āϟāĻŋ āĻĒāϰāĻŋāϏāϰāĻ“ āĻ…āĻĢāĻžāϰ āĻ•āϰ⧇ - āϝāĻž āĻāĻ•āϟāĻŋ CID-āĻāϰ IPFS āĻĒāĻŋāύāĻŋāĻ‚ āĻāĻŦāĻ‚ āĻĢāĻžāχāϞāĻ•āϝāĻŧ⧇āύ āĻ¸ā§āĻŸā§‹āϰ⧇āϜ āĻĄāĻŋāϞ āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰ⧇ -> āĻāϟāĻŋ āĻāĻ•āϟāĻŋ āĻĻ⧁āĻ°ā§āĻĻāĻžāĻ¨ā§āϤ āϏāĻ‚āϝ⧋āϜāύ āĻšāϤ⧇ āĻĒāĻžāϰ⧇ NFT-āĻāϰ āĻ¸ā§āĻĨāĻŋāϤāĻŋ āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ FEVM DApp (āĻŦāĻž FEVM āĻŽā§‡āχāύāύ⧇āϟ āϰāĻŋāϞāĻŋāϜ āĻšāĻŋāϟ āĻšāϞ⧇ FEVM-āĻ NFT āĻŦāĻžāĻ¸ā§āϤāĻŦāĻžāϝāĻŧāύ)āĨ¤

āϚ⧁āĻ•ā§āϤāĻŋ āĻŽāĻŋāĻĨāĻ¸ā§āĻ•ā§āϰāĻŋāϝāĻŧāĻž

āĻāĻ–āĻžāύ⧇ 3 āϧāϰāύ⧇āϰ āχāĻ¨ā§āϟāĻžāϰāĻ…ā§āϝāĻžāĻ•āĻļāύ āϰāϝāĻŧ⧇āϛ⧇ (āĻāĻŦāĻ‚ āĻ•āϝāĻŧ⧇āĻ•āϟāĻŋ FEVM āĻ—ā§‹āϟāϚāĻž - āĻŦāĻŋāϟāĻž āĻĒā§āϰāϝ⧁āĻ•ā§āϤāĻŋāϤ⧇ āϏāĻŦāϏāĻŽāϝāĻŧ āĻ•āĻŋāϛ⧁ āĻ…āĻĻā§āϭ⧁āϤ āĻŦāĻžāĻ— āĻŦ⧈āĻļāĻŋāĻˇā§āĻŸā§āϝ āĻĨāĻžāĻ•āĻŦ⧇!)


  • āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ›āĻžāĻĄāĻŧāĻžāχ āĻšā§‡āχāύ āĻĨ⧇āϕ⧇ āĻĄā§‡āϟāĻž āĻĒ⧁āύāϰ⧁āĻĻā§āϧāĻžāϰ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ āĻĒāĻ āύāϝ⧋āĻ—ā§āϝ āĻ•āϞ

  • āĻāĻŽāύ āĻ•āϞ āϞāĻŋāϖ⧁āύ āϝāĻžāϤ⧇ āϏāĻžāχāύ āχāύ āĻ•āϰāϤ⧇ āĻāĻŦāĻ‚ āĻ—ā§āϝāĻžāϏ āĻĒāϰāĻŋāĻļā§‹āϧ āĻ•āϰāϤ⧇ āĻāĻ•āϟāĻŋ āĻ“āϝāĻŧāĻžāϞ⧇āϟ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āĻšāϝāĻŧāĨ¤ āϝ⧇ āĻĢāĻžāĻ‚āĻļāύāϗ⧁āϞāĻŋ āĻšā§‡āχāύ⧇āϰ āĻ…āĻŦāĻ¸ā§āĻĨāĻž āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰ⧇, āϝ⧇āĻŽāύ NFT āĻŽāĻŋāĻ¨ā§āϟ āĻ•āϰāĻž!

  • āχāϭ⧇āĻ¨ā§āϟ āĻļā§āϰ⧋āϤāĻž - āϝāĻžāϰāĻž āϚ⧁āĻ•ā§āϤāĻŋ āĻĨ⧇āϕ⧇ āύāĻŋāĻ°ā§āĻ—āϤ āχāϭ⧇āĻ¨ā§āĻŸā§‡āϰ āϜāĻ¨ā§āϝ āĻļā§‹āύ⧇


āĻāχ āϏāĻŽāĻ¸ā§āϤ āĻĢāĻžāĻ‚āĻļāύ⧇āϰ āϜāĻ¨ā§āϝ, āφāĻŽāϰāĻž ethers.js āϞāĻžāχāĻŦā§āϰ⧇āϰāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻŦ - 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 = 'https://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: [ 'https://hyperspace.filfox.info/rpc/v0', 'https://filecoin-hyperspace.chainstacklabs.com/rpc/v0', ], chainName: 'Filecoin Hyperspace', nativeCurrency: { name: 'tFIL', symbol: 'tFIL', decimals: 18, }, blockExplorerUrls: [ 'https://fvm.starboard.ventures/contracts/', 'https://hyperspace.filscan.io/', 'https://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 āĻĄāĻ•ā§āϏ⧇ āĻāĻ•āĻžāϧāĻŋāĻ• āωāĻĻāĻžāĻšāϰāĻŖ āφāϛ⧇ āĻ•āĻŋāĻ­āĻžāĻŦ⧇ āωāĻĒāϰ⧇āϰ āĻ•āĻŋāϛ⧁ āĻ…āĻ°ā§āϜāύ āĻ•āϰāĻž āϝāĻžāϝāĻŧāĨ¤

āϝāĻ–āύ Bacalhau FEVM āĻ¸ā§āĻŽāĻžāĻ°ā§āϟ āϚ⧁āĻ•ā§āϤāĻŋāϗ⧁āϞāĻŋ āĻĨ⧇āϕ⧇ Bacalhau āϕ⧇ āϏāϰāĻžāϏāϰāĻŋ āĻ•āϞ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āχāĻ¨ā§āϟāĻŋāĻ—ā§āϰ⧇āĻļāύ āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇ āĻŦā§āϝāĻ¸ā§āϤ, āĻāĻ–āĻžāύ⧇ Bacalhau x FVM āϏāĻšāϝ⧋āĻ—āĻŋāϤāĻžāϰ āĻŦāĻŋāώāϝāĻŧ⧇ āĻ•āĻŋāϛ⧁ āϚāĻŋāĻ¨ā§āϤāĻžāĻ­āĻžāĻŦāύāĻž āϰāϝāĻŧ⧇āϛ⧇:


  • āĻ­āĻŦāĻŋāĻˇā§āϝāϤ⧇ āĻĢāĻžāχāϞāĻ•āϝāĻŧ⧇āύ āĻĄā§‡āϟāĻž āĻ…āύāĻŦā§‹āĻ°ā§āĻĄāĻŋāĻ‚ āĻāĻŦāĻ‚ āĻ…āĻĢāĻŦā§‹āĻ°ā§āĻĄāĻŋāĻ‚āϝāĻŧ⧇ āϏāĻšāĻžāϝāĻŧāϤāĻž āĻ•āϰ⧁āύ
  • āĻĄāĻŋāϞ āĻāĻŦāĻ‚ āĻ¸ā§āĻŸā§‹āϰ⧇āϜ āĻĒā§āϰāĻĻāĻžāύāĻ•āĻžāϰ⧀āĻĻ⧇āϰ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āĻšā§‡āχāύ⧇ āĻĒ⧁āύāϰ⧁āĻĻā§āϧāĻžāϰ āĻ•āϰāĻž āĻĄā§‡āϟāĻž āĻĒā§āϰāĻ•ā§āϰāĻŋāϝāĻŧāĻžāĻ•āϰāϪ⧇āϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ Filecoin-āĻāϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āĻ–ā§āϝāĻžāϤāĻŋ āĻāĻŦāĻ‚ āĻĒāϰāĻŋāώ⧇āĻŦāĻžāϰ āϗ⧁āĻŖāĻŽāĻžāύ āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇ āϏāĻšāĻžāϝāĻŧāϤāĻž āĻ•āϰ⧁āύāĨ¤
  • Bacalhau āĻŦāĻžāϜāĻžāϰ āĻāĻŦāĻ‚ āĻĒ⧇āĻŽā§‡āĻ¨ā§āϟ āĻĄā§‡āϟāĻžāϰ āϜāĻ¨ā§āϝ āĻ—āĻŖāύāĻž āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇
  • Bacalhau DAO's & DataDAOs āĻĨ⧇āϕ⧇ āĻĄā§‡āϟāĻž āĻĒā§āϰāĻ•ā§āϰāĻŋāϝāĻŧāĻžāĻ•āϰāϪ⧇ āϏāĻžāĻšāĻžāĻ¯ā§āϝ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇⧎
  • Bacalhau āĻ­āĻŋāĻĄāĻŋāĻ“ āĻāĻŦāĻ‚ āϚāĻŋāĻ¤ā§āϰ āĻĒā§āϰāĻ•ā§āϰāĻŋāϝāĻŧāĻžāĻ•āϰāϪ⧇āϰ āĻŽāϤ⧋ āϏ⧃āϜāύāĻļā§€āϞ āĻĒā§āϰāĻšā§‡āĻˇā§āϟāĻžāϰ āϜāĻ¨ā§āϝ āφāϰāĻ“ āĻ…āĻŸā§‹āĻŽā§‡āĻļāύāϕ⧇ āĻļāĻ•ā§āϤāĻŋāĻļāĻžāϞ⧀ āĻ•āϰāϤ⧇ āϏāĻšāĻžāϝāĻŧāϤāĻž āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇
  • Bacalhau VR āĻāĻŦāĻ‚ AR āϏāĻš āϗ⧇āĻŽ āĻāĻŦāĻ‚ āĻŽā§‡āϟāĻžāĻ­āĻžāĻ°ā§āϏ āĻĄā§‡āϟāĻž āĻĒā§āϰāϏ⧇āϏāĻŋāĻ‚ āϏāĻ•ā§āώāĻŽ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤
  • Bacalhau, IOT āĻāĻŦāĻ‚ āϏāĻŋāĻŽā§āϞ⧇āĻļāύ āϏāĻŽā§āĻ­āĻŦ
  • āĻāφāχ āĻāĻŦāĻ‚ āĻāĻŽāĻāϞ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ

🐠 āĻŦāĻžāĻ•āĻžāϞāĻšāĻžāω āϰ⧋āĻĄāĻŽā§āϝāĻžāĻĒ


āφāĻŽāϰāĻž āĻŦāĻ°ā§āϤāĻŽāĻžāύ⧇ āφāĻĒāύāĻžāϰ āĻ¸ā§āĻŽāĻžāĻ°ā§āϟ āϚ⧁āĻ•ā§āϤāĻŋ āĻĨ⧇āϕ⧇ āϏāϰāĻžāϏāϰāĻŋ Bacalhau āϚāĻžāϞāĻžāύ⧋āϰ āϜāĻ¨ā§āϝ āĻāĻ•āϟāĻŋ āωāĻĒāĻžāϝāĻŧ āϤ⧈āϰāĻŋ āĻ•āϰāĻ›āĻŋ!!!! āĻāχ āĻĒā§āϰāĻ•āĻ˛ā§āĻĒāϟāĻŋāϕ⧇ āĻŦāϞāĻž āĻšāϝāĻŧ āĻĒā§āϰāĻœā§‡āĻ•ā§āϟ āĻĢā§āϰāĻ—/āĻĒā§āϰāĻœā§‡āĻ•ā§āϟ āϞāĻŋāϞāĻŋāĻĒā§āϝāĻžāĻĄ - āĻāĻŦāĻ‚ āĻāϟāĻŋ āĻāĻ•āϟāĻŋ āχāĻ¨ā§āϟāĻŋāĻ—ā§āϰ⧇āĻļāύ āϞ⧇āϝāĻŧāĻžāϰ āĻšāĻŦ⧇ āϝāĻž FEVM āĻ¸ā§āĻŽāĻžāĻ°ā§āϟ āĻ•āĻ¨ā§āĻŸā§āϰāĻžāĻ•ā§āϟ āĻĨ⧇āϕ⧇ Bacalhau āϜāĻŦ āĻ•āϞ āĻ•āϰāϤ⧇ āϏāĻ•ā§āώāĻŽ āĻ•āϰāĻŦ⧇āĨ¤


āφāĻŽāĻžāĻĻ⧇āϰ āύāĻŋāωāϜāϞ⧇āϟāĻžāϰ⧇āϰ āϜāĻ¨ā§āϝ āϏāĻžāχāύ āφāĻĒ āĻ•āϰ⧇ āĻŦāĻž āύ⧀āĻšā§‡āϰ āϏāĻžāĻŽāĻžāϜāĻŋāĻ•āϗ⧁āϞāĻŋāϤ⧇ āϝ⧋āĻ—āĻĻāĻžāύ āĻ•āϰ⧇ āĻāϰ āĻ…āĻ—ā§āϰāĻ—āϤāĻŋāϰ āωāĻĒāϰ āύāϜāϰ āϰāĻžāϖ⧁āύāĨ¤

âœī¸ āϝ⧋āĻ—āĻžāϝ⧋āĻ— āϰāĻžāϖ⧁āύ!

āĻ…āĻ­āĻŋāύāĻ¨ā§āĻĻāύ āϝāĻĻāĻŋ āφāĻĒāύāĻŋ āĻĒ⧁āϰ⧋ āĻĒāĻĨ āĻĒāĻĄāĻŧ⧇āύ!!!


āφāĻŽāĻŋ āĻāĻ•āϟāĻŋ āϞāĻžāχāĻ•, āĻŽāĻ¨ā§āϤāĻŦā§āϝ, āĻ…āύ⧁āϏāϰāĻŖ āĻŦāĻž āĻļ⧇āϝāĻŧāĻžāϰ āĻ•ā§ƒāϤāĻœā§āĻž āϝāĻĻāĻŋ āĻāϟāĻŋ āφāĻĒāύāĻžāϰ āϜāĻ¨ā§āϝ āĻĻāϰāĻ•āĻžāϰ⧀ āĻ›āĻŋāϞ! <3


Bacalhau āϏāĻžāĻĨ⧇ āϝ⧋āĻ—āĻžāϝ⧋āĻ— āϰāĻžāϖ⧁āύ!



â™Ĩī¸ āĻĄā§‡āϭ⧇āϞāĻĒāĻžāϰāĻ…ā§āϝāĻžāϞāĻŋāϰ āϏāĻžāĻĨ⧇

āφāĻĒāύāĻŋ āĻāχ āύāĻŋāĻŦāĻ¨ā§āϧāϟāĻŋ āĻŽā§‚āĻ˛ā§āϝāĻŦāĻžāύ āϖ⧁āρāĻœā§‡ āĻĒ⧇āϝāĻŧ⧇āϛ⧇āύ?

āĻāĻ•āϜāύ āĻ¸ā§āĻĒāύāϏāϰ āĻšāϝāĻŧ⧇ āĻ…ā§āϝāĻžāϞāĻŋāϏāύ āĻšā§‡āϝāĻŧāĻžāϰāϕ⧇ āϏāĻŽāĻ°ā§āĻĨāύ āĻ•āϰ⧁āύāĨ¤ āϕ⧋āύ āĻĒāϰāĻŋāĻŽāĻžāĻŖ āĻĒā§āϰāĻļāĻ‚āϏāĻž āĻ•āϰāĻž āĻšāϝāĻŧ!


āĻšā§āϝāĻžāĻļāύ⧋āĻĄ āĻ¸ā§āĻĒāύāϏāϰ āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇ āφāϰāĻ“ āϜāĻžāύ⧁āύ


āĻāĻ›āĻžāĻĄāĻŧāĻžāĻ“ āĻāĻ–āĻžāύ⧇ āĻĒā§āϰāĻ•āĻžāĻļāĻŋāϤ.


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

About Author

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

āφāϏ⧇ āĻŸā§āϝāĻžāĻ—

āĻāχ āύāĻŋāĻŦāĻ¨ā§āϧāϟāĻŋ āωāĻĒāĻ¸ā§āĻĨāĻžāĻĒāύ āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇...

Trending Topics

blockchaincryptocurrencyhackernoon-top-storyprogrammingsoftware-developmenttechnologystartuphackernoon-booksBitcoinbooks