paint-brush
ЁЯМИЁЯжД рдмрдХрд▓рд╣рд╛рдК рдХреЗ рд╕рд╛рде рдЕрдкрдиреА рдЦреБрдж рдХреА рдПрдЖрдИ-рдЬреЗрдирд░реЗрдЯреЗрдб рдЖрд░реНрдЯ рдПрдирдПрдлрдЯреА рдбреАрдПрдкреА рдХрд╛ рдирд┐рд░реНрдорд╛рдгтАВрджреНрд╡рд╛рд░рд╛@developerally
2,427 рд░реАрдбрд┐рдВрдЧ
2,427 рд░реАрдбрд┐рдВрдЧ

ЁЯМИЁЯжД рдмрдХрд▓рд╣рд╛рдК рдХреЗ рд╕рд╛рде рдЕрдкрдиреА рдЦреБрдж рдХреА рдПрдЖрдИ-рдЬреЗрдирд░реЗрдЯреЗрдб рдЖрд░реНрдЯ рдПрдирдПрдлрдЯреА рдбреАрдПрдкреА рдХрд╛ рдирд┐рд░реНрдорд╛рдг

рджреНрд╡рд╛рд░рд╛ DeveloperAlly29m2023/02/08
Read on Terminal Reader

рдмрд╣реБрдд рд▓рдВрдмрд╛; рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП

FVM рд╣рд╛рдЗрдкрд░рд╕реНрдкреЗрд╕ рдЯреЗрд╕реНрдЯрдиреЗрдЯ рдкрд░ AI-рдЬрдирд┐рдд рдЖрд░реНрдЯ NFTs рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдЦреБрдж рдХреА рдЯреЗрдХреНрд╕реНрдЯ-рдЯреВ-рдЗрдореЗрдЬ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде DApp рдмрдирд╛рдиреЗ, рдЪрд▓рд╛рдиреЗ рдФрд░ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдкреВрд░реНрдг рдЧрд╛рдЗрдбред рдпрд╣ рдмреНрд▓реЙрдЧ рдЖрдкрдХреЛ рдЯреЗрдВрд╕рд░рдлрд╝реНрд▓реЛ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдПрдХ рдУрдкрдирд╕реЛрд░реНрд╕ рдкрд╛рдпрдерди-рдЖрдзрд╛рд░рд┐рдд рдЯреЗрдХреНрд╕реНрдЯ-рдЯреВ-рдЗрдореЗрдЬ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдПрдЧрд╛ред рдореИрдВрдиреЗ рдЬрд╛рдирдмреВрдЭрдХрд░ рдЗрд╕ рд╕реНрдЯреИрдХ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдУрдкрди-рд╕реЛрд░реНрд╕ рдФрд░ рд╡рд┐рдХреЗрдВрджреНрд░реАрдХреГрдд рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪреБрдирд╛ рд╣реИред
featured image - ЁЯМИЁЯжД рдмрдХрд▓рд╣рд╛рдК рдХреЗ рд╕рд╛рде рдЕрдкрдиреА рдЦреБрдж рдХреА рдПрдЖрдИ-рдЬреЗрдирд░реЗрдЯреЗрдб рдЖрд░реНрдЯ рдПрдирдПрдлрдЯреА рдбреАрдПрдкреА рдХрд╛ рдирд┐рд░реНрдорд╛рдг
DeveloperAlly HackerNoon profile picture
0-item

FVM рд╣рд╛рдЗрдкрд░рд╕реНрдкреЗрд╕ рдЯреЗрд╕реНрдЯрдиреЗрдЯ рдкрд░ AI-рдЬрдирд┐рдд рдЖрд░реНрдЯ NFTs рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдЦреБрдж рдХреА рдЯреЗрдХреНрд╕реНрдЯ-рдЯреВ-рдЗрдореЗрдЬ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде DApp рдмрдирд╛рдиреЗ, рдЪрд▓рд╛рдиреЗ рдФрд░ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдкреВрд░реНрдг рдЧрд╛рдЗрдб!


рд╡рд┐рд╖рдпрд╕реВрдЪреА

  • ЁЯСйтАНЁЯТ╗ рд╣рдо рдХреНрдпрд╛ рдХрд░реЗрдВрдЧреЗ...
  • ЁЯПЫ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдЖрд░реЗрдЦ (рдереЛрдбрд╝реЗ)
  • ЁЯеЮ рдбреАрдПрдкреА рдЯреЗрдХреНрдиреЛрд▓реЙрдЬреА рд╕реНрдЯреИрдХ
  • ЁЯПЧя╕П рдкрд╛рдпрдерди рдЯреЗрдХреНрд╕реНрдЯ-рдЯреВ-рдЗрдореЗрдЬ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдирд┐рд░реНрдорд╛рдг
  • тЪТя╕П рд╕реЙрд▓рд┐рдбрд┐рдЯреА рдПрдирдПрдлрдЯреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдФрд░ рддреИрдирд╛рддреА
  • ЁЯОм рдлреНрд░рдВрдЯ-рдПрдВрдб рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХрд╛ рдирд┐рд░реНрдорд╛рдг
    • рдкреВрд░реНрдг рдкреНрд░рд╡рд╛рд╣
    • рдмрд╛рдХрд▓рд╣рд╛рдК рдЗрдВрдЯрд░реЗрдХреНрд╢рди
    • рдПрдирдПрдлрдЯреА.рднрдВрдбрд╛рд░рдг
    • рдЕрдиреБрдмрдВрдз рд╕рд╣рднрд╛рдЧрд┐рддрд╛
  • ЁЯМЯ рдЕрдВрддрд┐рдо рд╡рд┐рдЪрд╛рд░: рдПрдЖрдИ рдФрд░ рдмреНрд▓реЙрдХрдЪреЗрди рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ
  • ЁЯРа рдмрд╛рдХрд▓рд╣рд╛рдК рд░реЛрдбрдореИрдк
  • тЬНя╕П рд╕рдВрдкрд░реНрдХ рдореЗрдВ рд░рд╣реЗрдВ!


ЁЯжД рддреНрд╡рд░рд┐рдд рд▓рд┐рдВрдХ:


ЁЯСйтАНЁЯТ╗ рд╣рдо рдХреНрдпрд╛ рдХрд░реЗрдВрдЧреЗ...

рдпрд╣ рдмреНрд▓реЙрдЧ рдЖрдкрдХреЛ рдмрддрд╛рдПрдЧрд╛ рдХрд┐ рдХреИрд╕реЗ рдХрд░реЗрдВ


  1. Tensorflow рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдПрдХ рдУрдкрдирд╕реЛрд░реНрд╕ рдкрд╛рдпрдерди-рдЖрдзрд╛рд░рд┐рдд рдЯреЗрдХреНрд╕реНрдЯ-рдЯреВ-рдЗрдореЗрдЬ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рдПрдВ (рдпрджрд┐ рдЖрдк рдЗрд╕рдореЗрдВ рд░реБрдЪрд┐ рдирд╣реАрдВ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдХреЗрд╡рд▓ Bacalhau HTTP рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)

  2. рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдмрд╛рдХрд▓рд╣рд╛рдК (рдПрдХ рдЦреБрд▓рд╛ рдкреА2рдкреА рдСрдл-рдЪреЗрди рдХрдВрдкреНрдпреВрдЯ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо) рдкрд░ рдЪрд▓рд╛рдПрдВ

  3. рд╕реЙрд▓рд┐рдбрд┐рдЯреА рдореЗрдВ рдПрдХ NFT рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯ рдмрдирд╛рдПрдВ (рдПрдХ рдУрдкрди рдЬрд╝реЗрдкреЗрд▓рд┐рди ERC721 рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯ рдкрд░ рдЖрдзрд╛рд░рд┐рдд)

  4. рдлрд╛рдЗрд▓рдХреЙрдЗрди рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди (FVM) рд╣рд╛рдЗрдкрд░рд╕реНрдкреЗрд╕ рдЯреЗрд╕реНрдЯрдиреЗрдЯ рдореЗрдВ рд╣рд╛рд░реНрдбрд╣реИрдЯ рдХреЗ рд╕рд╛рде NFT рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯ рддреИрдирд╛рдд рдХрд░реЗрдВ

  5. рдлреНрд░рдВрдЯ-рдПрдВрдб рдЗрдВрдЯрд░реИрдХреНрд╢рди - рдмрдХрд▓рд╣рд╛рдК рдЯреЗрдХреНрд╕реНрдЯ-рдЯреВ-рдЗрдореЗрдЬ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рд░рд┐рдПрдХреНрдЯ рдореЗрдВ рдЕрдкрдиреЗ рдПрдирдПрдлрдЯреА рдЕрдиреБрдмрдВрдз рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдмрд╛рддрдЪреАрдд рдХрд░реЗрдВ

  6. рдЕрдкрдиреЗ NFT рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХреЛ NFT.Storage рдореЗрдВ рдХреИрд╕реЗ рд╕реЗрд╡ рдХрд░реЗрдВ

  7. рдЕрдкрдиреЗ рдлреНрд░рдВрдЯ-рдПрдВрдб рдбреАрдПрдкреА рдХреЛ рдлреНрд▓реАрдХ рдореЗрдВ рдХреИрд╕реЗ рдкрд░рд┐рдирд┐рдпреЛрдЬрд┐рдд рдХрд░реЗрдВ


рдореИрдВрдиреЗ рдЬрд╛рдирдмреВрдЭрдХрд░ рдЗрд╕ рдвреЗрд░ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдУрдкрди-рд╕реЛрд░реНрд╕ рдФрд░ рд╡рд┐рдХреЗрдВрджреНрд░реАрдХреГрдд рддрдХрдиреАрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪреБрдирд╛ рд╣реИред


рдпрд╣ рдмреНрд▓реЙрдЧ рдХрд╛рдлреА рд▓рдВрдмрд╛ рд╣реЛрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИ (рдЕрд░реЗ - рдореИрдВ рд╕рднреА рдЬрд╛рдирдХрд╛рд░реА рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд╣рдо рд╢реБрд░реБрдЖрддреА-рдЕрдиреБрдХреВрд▓ рдФрд░ рд╕рдорд╛рд╡реЗрд╢реА рд╣реИрдВ!) - рддреЛ рдмреЗрдЭрд┐рдЭрдХ рдЙрди рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВ рдЬреЛ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдЖрдкрдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИрдВ рд╕рд╛рдордЧреНрд░реА рдХрд╛ <3

ЁЯПЫ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдЖрд░реЗрдЦ (рдереЛрдбрд╝реЗ)

ЁЯеЮ рдбреАрдПрдкреА рдЯреЗрдХреНрдиреЛрд▓реЙрдЬреА рд╕реНрдЯреИрдХ

(рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ - рдпрд╣ рдПрдХ рдкреИрдирдХреЗрдХ рд╕реНрдЯреИрдХ #sorrynotsorry рд╣реИ)


рдУрдкрди рд╕реЛрд░реНрд╕ рдФрд░ рд╡реЗрдм3-рдореВрд▓реНрдпрд╡рд╛рди рд╢реБрд░реБрдЖрдд рд╕реЗ :)



  • рд╕реНрдорд╛рд░реНрдЯ рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯ [рд╕реЙрд▓рд┐рдбрд┐рдЯреА, рдУрдкрди рдЬрд╝реЗрдкреЗрд▓рд┐рди]
    • рд╕реЙрд▓рд┐рдбрд┐рдЯреА рдПрдереЗрд░рд┐рдпрдо (рдИрд╡реАрдПрдо)-рд╕рдВрдЧрдд рдмреНрд▓реЙрдХрдЪреЗрди рдХреЗ рд▓рд┐рдП рдПрдХ рдУрдУ рд╕реНрдорд╛рд░реНрдЯ рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд▓реИрдВрдЧреНрд╡реЗрдЬ рд╣реИ
    • рдУрдкрди рдЬрд╝реЗрдкреЗрд▓рд┐рди рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдорд╛рд░реНрдЯ рдЕрдиреБрдмрдВрдз рдШрдЯрдХреЛрдВ рдФрд░ рдЕрдиреБрдмрдВрдзреЛрдВ рдХреА рд╕реБрд░рдХреНрд╖рд╛-рд▓реЗрдЦрд╛рдкрд░реАрдХреНрд╖рд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ
  • рд╕реНрдорд╛рд░реНрдЯ рдЕрдиреБрдмрдВрдз рдЖрдИрдбреАрдИ [рд╣рд╛рд░реНрдбрд╣рдЯ]
    • рд╣рд╛рд░реНрдбрд╣рдЯ рдПрдереЗрд░рд┐рдпрдо рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдХреЗ рд╕рдВрдкрд╛рджрди, рд╕рдВрдХрд▓рди, рдбрд┐рдмрдЧрд┐рдВрдЧ рдФрд░ рддреИрдирд╛рддреА рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдХрд╛рд╕ рдХрд╛ рд╡рд╛рддрд╛рд╡рд░рдг рд╣реИ
  • рдмреНрд▓реЙрдХрдЪреЗрди рдЯреЗрд╕реНрдЯрдиреЗрдЯ [рдлрд╛рдЗрд▓рдХреЙрдЗрди рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рд╣рд╛рдЗрдкрд░рд╕реНрдкреЗрд╕]
  • NFT рдореЗрдЯрд╛рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣рдг [NFT.Storage]
    • NFT.Storage IPFS рдФрд░ Filecoin рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ NFT рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХреЛ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд░реВрдк рд╕реЗ рдФрд░ рд▓рдЧрд╛рддрд╛рд░ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдПрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЕрдЪреНрдЫрд╛ рд╣реИ рдФрд░ NFTs рдФрд░ рдПрдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ sdk рдХреЗ рд▓рд┐рдП рдореБрдлреНрдд рд╡рд┐рдХреЗрдиреНрджреНрд░реАрдХреГрдд рднрдВрдбрд╛рд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
  • рдлреНрд░рдВрдЯ-рдПрдВрдб [рдиреЗрдХреНрд╕реНрдЯрдЬреЗрдПрд╕ / рд░рд┐рдПрдХреНрдЯ + рдПрдирдкреАрдПрдо]
    • рд╣рдо рд╢рд╛рдпрдж рдпреЗ рд╕рдм рдЬрд╛рдирддреЗ рд╣реИрдВ... рдареАрдХ рд╣реИ? :рдкреА
  • рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рд╕реНрдорд╛рд░реНрдЯ рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯ рдЗрдВрдЯрд░реИрдХреНрд╢рди [рдореЗрдЯрд╛рдорд╛рд╕реНрдХ, рдИрдерд░, рдЪреЗрдирд╕реНрдЯреИрдХ рдЖрд░рдкреАрд╕реА рдиреЛрдб]
    • рдПрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ RPC рдиреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ - рдореИрдВ рдЕрдкрдиреЗ рдмреНрд▓реЙрдХрдЪреЗрди рдЕрдиреБрдмрдВрдз рдХреЗ рд╕рд╛рде рдХреЗрд╡рд▓-рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░реИрдХреНрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред
    • рдореЗрдЯрд╛рдорд╛рд╕реНрдХ рдкреНрд░рджрд╛рддрд╛ (рдпрд╛ рдЗрд╕реА рддрд░рд╣ рдХреЗ рд╡реЙрд▓реЗрдЯ рдЬреЛ EIP-1193 рджреНрд╡рд╛рд░рд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдПрдереЗрд░рд┐рдпрдо рдПрдкреАрдЖрдИ рдХреЛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рддрд╛ рд╣реИ) рдХреЗ рд╕рд╛рде, рд╣рдо рдмреНрд▓реЙрдХрдЪреИрди рдЕрдиреБрдмрдВрдз рдХреЛ рдХреЙрд▓ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдмрдирд╛рддреЗ рд╣реИрдВред
    • рдИрдерд░ рдЬреЗрдПрд╕ рдИрд╡реАрдПрдо-рд╕рдВрдЧрдд рд╕реНрдорд╛рд░реНрдЯ рдЕрдиреБрдмрдВрдзреЛрдВ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ
  • рдПрдЖрдИ рдЯреЗрдХреНрд╕реНрдЯ-рдЯреВ-рдЗрдореЗрдЬ рд╕реНрдЯреЗрдмрд▓ рдбрд┐рдлреНрдпреВрдЬрди рд╕реНрдХреНрд░рд┐рдкреНрдЯ [рдкрд╛рдпрдерди, рдЯреЗрдиреНрд╕рд░рдлреНрд▓реЛ]
    • TensorFlow рдПрдХ рдУрдкрди-рд╕реЛрд░реНрд╕ рдорд╢реАрди рд▓рд░реНрдирд┐рдВрдЧ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдФрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИ рдЬреЛ рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдореЙрдбрд▓ рдФрд░ рдЕрдиреНрдп рдбреЗрдЯрд╛ рдФрд░ ML рдЯреВрд▓ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
  • рдПрдЖрдИ рдЯреЗрдХреНрд╕реНрдЯ-рдЯреВ-рдЗрдореЗрдЬ рдЬрдирд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рд╡рд┐рдХреЗрдВрджреНрд░реАрдХреГрдд рдСрдл-рдЪреЗрди рдХрдВрдкреНрдпреВрдЯ [рдмрд╛рдХрд╛рд▓рд╣рд╛рдК]
    • Bacalhau рдПрдХ рдкреАрдпрд░-рдЯреВ-рдкреАрдпрд░ рдУрдкрди рдХрдВрдкреНрдпреВрдЯреЗрд╢рди рдиреЗрдЯрд╡рд░реНрдХ рд╣реИ рдЬреЛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ, рдкрд╛рд░рджрд░реНрд╢реА рдФрд░ рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рд╕рддреНрдпрд╛рдкрди рдпреЛрдЧреНрдп рдХрдВрдкреНрдпреВрдЯреЗрд╢рди рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдордВрдЪ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдПрдХ рд╡рд┐рдХреЗрдиреНрджреНрд░реАрдХреГрдд рдСрдл-рдЪреЗрди рдбреЗрдЯрд╛ рд╕рдВрдЧрдгрдирд╛ рдкрд░рдд рд╣реИред
  • рд╡рд┐рдХреЗрдВрджреНрд░реАрдХреГрдд рдбреАрдПрдкреА рдкрд░рд┐рдирд┐рдпреЛрдЬрди [рдлреНрд▓реАрдХ ]
    • Fleek IPFS рдФрд░ Filecoin рдкрд░ рд╡реЗрдмрд╕рд╛рдЗрдЯреЛрдВ рдХреА рддреИрдирд╛рддреА рдХреА рдкреЗрд╢рдХрд╢ рдХрд░рддрд╛ рд╣реИред рдпрд╣ Vercel рдпрд╛ Netlify рдХрд╛ рд╡реЗрдм3 рд╕рдВрд╕реНрдХрд░рдг рд╣реИ - рдпрд╣ рдирд╣реАрдВ рдХрд╣ рд╕рдХрддрд╛ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╡рд┐рдХреЗрдиреНрджреНрд░реАрдХреГрдд рдРрдк рд╣реИ рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рд╡реЗрдм2 рдкрд░ рдкрд░рд┐рдирд┐рдпреЛрдЬрд┐рдд рдХрд░реЗрдВ! :рдбреА

ЁЯПЧя╕П рдкрд╛рдпрдерди рдЯреЗрдХреНрд╕реНрдЯ-рдЯреВ-рдЗрдореЗрдЬ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдирд┐рд░реНрдорд╛рдг


ЁЯТб рдЯреАрдПрд▓рдбреАрдЖрд░ рдЯрд┐рдк ЁЯТб

рдпрд╣ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрд╛рдХрд▓рд╣рд╛рдК рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реАрдПрд▓рдЖрдИ рдФрд░ рдПрдХ HTTP рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рднрд╛рдЧ рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВред


рд╕реНрдерд┐рд░ рдкреНрд░рд╕рд╛рд░ рдХрд╛ рддреНрд╡рд░рд┐рдд рдкрд░рд┐рдЪрдп


рд╕реНрдерд┐рд░ рдкреНрд░рд╕рд╛рд░ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЯреЗрдХреНрд╕реНрдЯ-рдЯреВ-рдЗрдореЗрдЬ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЧреНрд░рдгреА рдорд╢реАрди рд▓рд░реНрдирд┐рдВрдЧ рдореЙрдбрд▓ рд╣реИ (рдФрд░ рдпрд╣реА рдореЙрдбрд▓ Dall-E рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ)ред рдпрд╣ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдбреАрдк рд▓рд░реНрдирд┐рдВрдЧ рд╣реИ - рдорд╢реАрди рд▓рд░реНрдирд┐рдВрдЧ рдХрд╛ рдПрдХ рд╕рдмрд╕реЗрдЯ рдЬреЛ рдЦреБрдж рдХреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдп рдХрд░рдирд╛ рд╕рд┐рдЦрд╛рддрд╛ рд╣реИ - рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЯреЗрдХреНрд╕реНрдЯ рдЗрдирдкреБрдЯ рдХреЛ рдЗрдореЗрдЬ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рдмрджрд▓рдирд╛ред


рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рдПрдХ рдкреНрд░рд╕рд╛рд░ рд╕рдВрднрд╛рд╡реНрдп рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдЯреЗрдХреНрд╕реНрдЯ рд╕реЗ рдЫрд╡рд┐рдпрд╛рдВ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдорд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред


рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЪрд┐рдВрддрд╛ рди рдХрд░реЗрдВ - рд╣рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдорд╢реАрди рд▓рд░реНрдирд┐рдВрдЧ рдореЙрдбрд▓ рдХреЛ рдЬрд╛рдиреЗ рдФрд░ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╣реЗ - рдЕрдЧрд░ рдпрд╣ рдЖрдкрдХреА рдмрд╛рдд рд╣реИ - рддреЛ рдЖрдк рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ!)


рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдЕрдкрдиреА рдкрд╛рдпрдерди рд▓рд┐рдкрд┐ рдореЗрдВ Google рдХреЗ TensorFlow рдУрдкрди-рд╕реЛрд░реНрд╕ рдорд╢реАрди рд▓рд░реНрдирд┐рдВрдЧ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ рдПрдХ рдкреВрд░реНрд╡-рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдореЙрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рд▓рд┐рдП ML рд╡рдЬрд╝рди рдХреА рдкреВрд░реНрд╡-рдЧрдгрдирд╛ рдХреА рдЧрдИ рд╣реИред


рдЕрдзрд┐рдХ рд╕рд╣реА рдврдВрдЧ рд╕реЗ, рд╣рдо рдореВрд▓ рдПрдордПрд▓ рдореЙрдбрд▓ рдХреЗ рдПрдХ рдЕрдиреБрдХреВрд▓рд┐рдд рдХреЗрд░рд╕/рдЯреЗрдВрд╕рд░рдлреНрд▓реЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛рдВрдЯреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред


рдкрд╛рдпрдерди рд╕реНрдХреНрд░рд┐рдкреНрдЯ


ЁЯжД рдЖрдк рдЗрд╕ рдЯреЗрдХреНрд╕реНрдЯ-рдЯреВ-рдЗрдореЗрдЬ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдмрдирд╛рдиреЗ рдФрд░ рдбреЙрдХрд░рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рдмрд╛рдХрд▓рд╣рд╛рдК рдбреЙрдХреНрд╕ рдФрд░ рдЗрд╕ @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")


рдКрдкрд░ рджреА рдЧрдИ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗрд╡рд▓ рдПрдХ рдЯреЗрдХреНрд╕реНрдЯ рдкреНрд░реЙрдореНрдкреНрдЯ рдЗрдирдкреБрдЯ рддрд░реНрдХ рдФрд░ рдХреБрдЫ рдЕрдиреНрдп рд╡реИрдХрд▓реНрдкрд┐рдХ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд▓реЗрддреА рд╣реИ рдФрд░ рдлрд┐рд░ рдлреЛрд░реНрдХреНрдб TensorFlow рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдЗрдореЗрдЬ рдЬреЗрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХрд░рддреА рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реЗрд╡ рдХрд░рддреА рд╣реИред


рдпрд╣рд╛рдВ рдХрд┐рдП рдЧрдП рд╕рднреА рднрд╛рд░реА рднрд╛рд░реЛрддреНрддреЛрд▓рди рдиреАрдЪреЗ рдХреЗ рдЦрдВрдб рдореЗрдВ рд╣реЛрддреЗ рд╣реИрдВ - рдпрд╣реАрдВ рдкрд░ рдорд╢реАрди рд▓рд░реНрдирд┐рдВрдЧ рдореЙрдбрд▓ рдЕрдкрдирд╛ рдЬрд╛рджреВ рдХрд░рддрд╛ рд╣реИред ЁЯкД


 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 рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд┐рдпрд╛ рдерд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдкрд░рд┐рдгрд╛рдореЛрдВ рдкрд░ рдмрд╣реБрдд рд▓рдВрдмрд╛ рдЗрдВрддрдЬрд╛рд░ рдерд╛ (рдЯреЗрдмрд▓ рдЯреЗрдирд┐рд╕ рдХрд╛ рдЦреЗрд▓?) рдЗрд╕рд▓рд┐рдП, рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдк рдмрдбрд╝реА рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЕрдзрд┐рдХ рдЧреИрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ (рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рдЕрдиреБрд╕рд╛рд░) рдФрд░ рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдШрд░ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдПрдХ рд╕рдорд░реНрдкрд┐рдд рд╕рд░реНрд╡рд░ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдПрдХ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдХреНрд▓рд╛рдЙрдб рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдоред


рди рдХреЗрд╡рд▓ рд╡рд╣ рдХреЗрдВрджреНрд░реАрдХреГрдд рд╣реИ, рдмрд▓реНрдХрд┐ рдпрд╣ рдЕрдХреНрд╖рдо рднреА рд╣реИ - рдЧрдгрдирд╛ рдорд╢реАрди рд╕реЗ рдбреЗрдЯрд╛ рдЕрдЬреНрдЮрд╛рдд рджреВрд░реА рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг, рдФрд░ рдпрд╣ рддреЗрдЬреА рд╕реЗ рдорд╣рдВрдЧрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЬреАрдкреАрдпреВ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдХрд┐рд╕реА рднреА рдлреНрд░реА-рдЯрд┐рдпрд░ рдХреНрд▓рд╛рдЙрдб рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рд╕реЗрд╡рд╛ рдХреЛ рдЦреЛрдЬрдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣рд╛ (рдХреНрдпрд╛ рдХрд┐рд╕реА рдиреЗ рдХреНрд░рд┐рдкреНрдЯреЛ рдорд╛рдЗрдирд┐рдВрдЧ рдмреИрди рдХрд╣рд╛ ..?) рдФрд░ рдпреЛрдЬрдирд╛рдПрдВ > рдпреВрдПрд╕ $ 400 рдкреНрд░рддрд┐ рдорд╛рд╣ (рдиреЛ рдереИрдВрдХреНрдпреВ) рдкрд░ рдЖрдИрдВред



рдмрдХрд▓рд╣рд╛рдК!


рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдпреЗ рд╕рдорд╕реНрдпрд╛рдПрдВ рдХреБрдЫ рдРрд╕реЗ рдореБрджреНрджреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдмрд╛рдХрд▓рд╣рд╛рдК рд╣рд▓ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдмрд╛рдХрд▓рд╣рд╛рдК рдореЗрдВ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдФрд░ рдХрдореНрдкреНрдпреВрдЯреЗрд╢рди рдХреЛ рдЦреБрд▓рд╛ рдФрд░ рд╕рднреА рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдмрдирд╛рдирд╛ рдФрд░ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рд╕рдордп рдХреЛ рддреЗрдЬ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ - рдХрдИ рдиреЛрдбреНрд╕ рдореЗрдВ рдмреИрдЪ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдФрд░ рджреВрд╕рд░рд╛ рдЬрд╣рд╛рдВ рдбреЗрдЯрд╛ рд░рд╣рддрд╛ рд╣реИ рд╡рд╣рд╛рдВ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдиреЛрдбреНрд╕ рдбрд╛рд▓рдХрд░!


Bacalhau рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп IPFS, Filecoin рдФрд░ Web3 рдореЗрдВ рдирд┐рд╣рд┐рдд рд╡рд┐рдХреЗрдВрджреНрд░реАрдХрд░рдг рдореВрд▓реНрдпреЛрдВ рдХреЛ рдЕрдзрд┐рдХ рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЫреЛрдбрд╝реЗ рдмрд┐рдирд╛ рдбреЗрдЯрд╛ рдкрд░ рдСрдл-рдЪреЗрди рдЧрдгрдирд╛ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдХреЗ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ рднрд╡рд┐рд╖реНрдп рдХреЛ рд▓реЛрдХрддрд╛рдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдирд╛ рд╣реИред


Bacalhau рдПрдХ рдкреАрдпрд░-рдЯреВ-рдкреАрдпрд░ рдУрдкрди рдХрдВрдкреНрдпреВрдЯреЗрд╢рди рдиреЗрдЯрд╡рд░реНрдХ рд╣реИ рдЬреЛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ, рдкрд╛рд░рджрд░реНрд╢реА рдФрд░ рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рд╕рддреНрдпрд╛рдкрди рдпреЛрдЧреНрдп рдХрдВрдкреНрдпреВрдЯреЗрд╢рди рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдордВрдЪ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрдИрдкреАрдПрдлрдПрд╕ (рдФрд░ рдЬрд▓реНрдж рд╣реА рдлрд╛рдЗрд▓рдХреЛрдЗрди) рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдбреЗрдЯрд╛ рд╕рд╣рд┐рдд рдХрд┐рд╕реА рднреА рдбреЗрдЯрд╛ рдХреЗ рдЦрд┐рд▓рд╛рдл рдбреЙрдХрд░ рдХрдВрдЯреЗрдирд░ рдпрд╛ рд╡реЗрдм рдЕрд╕реЗрдВрдмрд▓реА рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рддрдХ рдХрд┐ рдЗрд╕рдореЗрдВ рдЬреАрдкреАрдпреВ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд╣реИ рдФрд░ рдпреВрдПрд╕$400 рдпрд╛ рдЕрдзрд┐рдХ рдкрд░ рдирд╣реАрдВ!

рдкрд░рд┐рдЪрдп | рдмрд╛рдХрд▓рд╣рд╛рдК рдбреЙрдХреНрд╕

рдмрдХрд▓рд╣рд╛рдК рдкрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛ рд░рд╣реЗ рд╣реИрдВ


рдЗрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЗрд╕реЗ рдмрдХрд▓рд╣рд╛рдК рдкрд░ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдбреЙрдХрд░реАрдЬрд╝ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдРрд╕рд╛ рдХрд░рдирд╛ рд╕реАрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдпрд╣рд╛рдВ рджрд┐рдП рдЧрдП рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдлрд┐рд░ рд╣рдо рдЗрд╕реЗ рдХреЛрдб рдХреА рдХреЗрд╡рд▓ рдПрдХ рдкрдВрдХреНрддрд┐ рдХреЗ рд╕рд╛рде рдмрд╛рдХрд▓рд╣рд╛рдК рд╕реАрдПрд▓рдЖрдИ рдХреЗ рд╕рд╛рде рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ ( рдмрд╛рдХрд▓рд╣рд╛рдК рдХреЛ рджреВрд╕рд░реЗ рд╡рди-рд▓рд╛рдЗрдирд░ рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж):

 bacalhau docker run --gpu 1 ghcr.io/bacalhau-project/examples/stable-diffusion-gpu:0.0.1 -- python main.py --o ./outputs --p "Rainbow Unicorn" 



рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдореИрдВ рдПрдХ HTTP рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдореБрдЭреЗ рдЗрд╕ рдбреЙрдХрд░реАрдХреГрдд рд╕реНрдерд┐рд░ рдкреНрд░рд╕рд╛рд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдореИрдВ рдЖрдкрдХреЛ рдПрдХреАрдХрд░рдг рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рджрд┐рдЦрд╛рдКрдВрдЧрд╛!

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВ рдпрд╣рд╛рдВ рдзреНрдпрд╛рди рджреВрдВрдЧрд╛ рдХрд┐ рдпрд╣ рдбреЗрдЯрд╛ рд╕рдВрдЧрдгрдирд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХрд╛ рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдФрд░ рд▓рдЪреАрд▓рд╛ рддрд░реАрдХрд╛ рд╣реИ рдЬреЛ рд╡реЗрдм3 рдХреЗ рдЕрдиреБрдХреВрд▓ рднреА рд╣реИ - рд╣рдо рдХреЗрд╡рд▓ рдЗрд╕ рдПрдХ рдЫреЛрдЯреЗ рдореЙрдбрд▓ рддрдХ рд╕реАрдорд┐рдд рдирд╣реАрдВ рд╣реИрдВред

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдПрдирдПрдлрдЯреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ! :)

тЪТя╕П рд╕реЙрд▓рд┐рдбрд┐рдЯреА рдПрдирдПрдлрдЯреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдФрд░ рддреИрдирд╛рддреА

рд╕реНрдорд╛рд░реНрдЯ рдЕрдиреБрдмрдВрдз

NFT рд╕реНрдорд╛рд░реНрдЯ рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯ Open Zeppelin рдХреЗ ERC721 рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди ERC721URIStorage рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдорд╛рдирдХ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╢рд╛рдорд┐рд▓ рд╣реИрдВ (рддрд╛рдХрд┐ рд╣рдо рдЕрдкрдиреЗ IPFS-рдкрддреЗ рд╡рд╛рд▓реЗ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдореЗрдВ рдкрд╛рд╕ рдХрд░ рд╕рдХреЗрдВ - рдЬрд┐рд╕реЗ рд╣рдо NFT.Storage рдкрд░ рдЕрдиреБрдмрдВрдз рдореЗрдВ рд╕рд╣реЗрдЬ рд▓реЗрдВрдЧреЗ) .


рдпрд╣ рдЖрдзрд╛рд░ рдЕрдиреБрдмрдВрдз рдЕрддрд┐рд░рд┐рдХреНрдд рд░реВрдк рд╕реЗ рд╣рдореЗрдВ рдПрдирдПрдлрдЯреА рдЕрдиреБрдмрдВрдз рдХреА рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рджреЗрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдЯрдХрд╕рд╛рд▓ () рдФрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг () рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓рд╛рдЧреВ рд╣реИрдВред


рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдлреНрд░рдВрдЯ рдПрдВрдб рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЧреЗрдЯреНрдЯрд░ рдлрд╝рдВрдХреНрд╢рдВрд╕ рднреА рдЬреЛрдбрд╝реЗ рд╣реИрдВ рдФрд░ рд╕рд╛рде рд╣реА рдПрдХ рдЗрд╡реЗрдВрдЯ рдЬреЛ рд╣рд░ рдмрд╛рд░ рдПрдХ рдирдпрд╛ рдПрдирдПрдлрдЯреА рдЦрдирди рд╣реЛрдиреЗ рдкрд░ рдСрди-рдЪреЗрди рдЙрддреНрд╕рд░реНрдЬрд┐рдд рд╣реЛрдЧрд╛ред рдпрд╣ рдбреАрдПрдкреА рд╕реЗ рдСрди-рдЪреЗрди рдЗрд╡реЗрдВрдЯреНрд╕ рдХреЛ рд╕реБрдирдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рджреЗрддрд╛ рд╣реИред


ЁЯТб рдЗрд╕реЗ рд░реАрдорд┐рдХреНрд╕ рдкрд░ рдЖрдЬрд╝рдорд╛рдПрдВ рдФрд░ рдЗрд╕ рд▓рд┐рдВрдХ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рд╕рднреА рдЙрдкрд▓рдмреНрдз рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рджреЗрдЦреЗрдВ! ЁЯТб


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]; }


рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ

рдореИрдВ рдЗрд╕ рдЕрдиреБрдмрдВрдз рдХреЛ рдлрд┐рд▓реНрдХреЛрдЗрди рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рд╣рд╛рдЗрдкрд░рд╕реНрдкреЗрд╕ рдЯреЗрд╕реНрдЯрдиреЗрдЯ рдкрд░ рддреИрдирд╛рдд рдХрд░реВрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕ рдЕрдиреБрдмрдВрдз рдХреЛ рдкреЙрд▓реАрдЧреЙрди, рдмреАрдПрд╕рд╕реА, рдСрдкреНрдЯрд┐рдорд┐рдЬреНрдо, рдЖрд░реНрдмрд┐рдЯреНрд░рдо, рд╣рд┐рдорд╕реНрдЦрд▓рди рдФрд░ рдЕрдиреНрдп рд╕рд╣рд┐рдд рдХрд┐рд╕реА рднреА рдИрд╡реАрдПрдо-рд╕рдВрдЧрдд рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рддреИрдирд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдорд▓реНрдЯреА-рдЪреЗрди рдПрдирдПрдлрдЯреА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рдЕрдкрдиреЗ рдлреНрд░рдВрдЯ рдПрдВрдб рдХреЛ рднреА рдЯреНрд╡реАрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рд╕рдВрдХреЗрдд: рдпрд╣ рд░реЗрдкреЛ )!


рд╣рд╛рдЗрдкрд░рд╕реНрдкреЗрд╕ рдЯреЗрд╕реНрдЯрдиреЗрдЯ рдкрд░ рдкрд░рд┐рдирд┐рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА

  1. рдореЗрдЯрд╛рдорд╛рд╕реНрдХ рд╡реЙрд▓реЗрдЯ рдХреЛ рд╣рд╛рдЗрдкрд░рд╕реНрдкреЗрд╕ рдЯреЗрд╕реНрдЯрдиреЗрдЯ рд╕реЗ рд╕реЗрдЯ рдФрд░ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ
  2. рдирд▓ рд╕реЗ рдХреБрдЫ рдкрд░реАрдХреНрд╖рдг tFIL рдлрдВрдб рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ ( рдпреЛрдЧрд╛ рдпрд╛ Zondax )


рд╣рд╛рд░реНрдбрд╣рдЯ рдХреЗ рд╕рд╛рде рд╕реНрдорд╛рд░реНрдЯ рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯ рдХреА рддреИрдирд╛рддреА

рдореИрдВ рдЗрд╕ рдЕрдиреБрдмрдВрдз рдХреЛ рд╣рд╛рдЗрдкрд░рд╕реНрдкреЗрд╕ рдЯреЗрд╕реНрдЯрдиреЗрдЯ рдкрд░ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рд╛рд░реНрдбрд╣реИрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред


ЁЯЫ╕ рд╣рд╛рдЗрдкрд░рд╕реНрдкреЗрд╕ рдЖрд░рдкреАрд╕реА рдФрд░ рдмреНрд▓реЙрдХ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рд╡рд┐рдХрд▓реНрдк:

рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЖрд░рдкреАрд╕реА рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ

рдмреНрд▓реЙрдХ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░

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

рдУрдкрди рдПрдкреАрдЖрдИ : 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: рдЪреВрдВрдХрд┐ рд╣рдордиреЗ рдЕрдкрдиреЗ рдХреЙрдиреНрдлрд┐рдЧ рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рдлрд╛рдЗрд▓рдХреЙрдЗрдирд╣рд╛рдЗрдкрд░рд╕реНрдкреЗрд╕ рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд▓рд┐рдП рдлреНрд▓реИрдЧ рдкрд╛рд╕ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ)

> cd ./pages/hardhat/deploy/


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


рдЬрд╢реНрди рдордирд╛рдирд╛! рд╣рдордиреЗ рдЕрднреА-рдЕрднреА рдЕрдкрдиреЗ рдПрдирдПрдлрдЯреА рдЕрдиреБрдмрдВрдз рдХреЛ рдлрд┐рд▓реНрдХреЛрдЗрди рд╣рд╛рдЗрдкрд░рд╕реНрдкреЗрд╕ рдЯреЗрд╕реНрдЯрдиреЗрдЯ рдкрд░ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рд╣реИ!

ЁЯОм рдлреНрд░рдВрдЯ-рдПрдВрдб рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХрд╛ рдирд┐рд░реНрдорд╛рдг

рд╕реБрдВрджрд░ рд╣рд┐рд╕реНрд╕реЗ рдкрд░ рд╡рд╛рд╣ ... рдФрд░ рд╡рд╣ рдЧреЛрдВрдж рднреА рдЬреЛ рдЗрд╕реЗ рдПрдХ рд╕рд╛рде рд░рдЦрддрд╛ рд╣реИ :)


рдлреНрд░рдВрдЯ рдПрдВрдб рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдиреЗрдХреНрд╕реНрдЯрдЬреЗрдПрд╕ рдФрд░ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдИрдорд╛рдирджрд╛рд░ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП - рдореИрдВ рдиреЗрдХреНрд╕реНрдЯрдЬреЗрдПрд╕ рдХреЗ рдПрд╕рдПрд╕рдЖрд░ (рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рд░реЗрдВрдбрд░рд┐рдВрдЧ) рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХрд╛ рд▓рд╛рдн рдирд╣реАрдВ рд▓реЗ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдореИрдВ рдЙрдирдХреЗ рдкреЗрдЬ рд░реВрдЯрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рднреА рдирд╣реАрдВ рдХрд░рддрд╛ (рдЪреВрдВрдХрд┐ рдпрд╣ рд╕рд┐рдВрдЧрд▓-рдкреЗрдЬ рдбреИрдк рд╣реИ), рдЗрд╕рд▓рд┐рдП рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╕ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдПрдХ рд╡реИрдирд┐рд▓рд╛ рд░рд┐рдПрдХреНрдЯ рд╕реЗрдЯ рдЕрдк рдХреЗ рд╕рд╛рде (рдпрд╛ рдЕрдкрдиреА рдкрд╕рдВрдж рдХрд╛ рдХреЛрдИ рднреА рдврд╛рдВрдЪрд╛!)


рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП ... рдареАрдХ рд╣реИ, рдореИрдВрдиреЗ рдЗрд╕реЗ рдереЛрдбрд╝реА рд╣рдбрд╝рдмрдбрд╝реА рдореЗрдВ рдмрдирд╛рдпрд╛ рд╣реИ рдФрд░ рдпрд╣ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдпрд╣ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рд╣реИ - var рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЦреБрд╢ рд▓рдЧрддреЗ рд╣реИрдВ ...;)



рдХрд┐рд╕реА рднреА рддрд░рд╣ - рдЗрд╕ рдЦрдВрдб рдХрд╛ рдореБрдЦреНрдп рдмрд┐рдВрджреБ рдЖрдкрдХреЛ рдпрд╣ рджрд┐рдЦрд╛рдирд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдлреНрд░рдВрдЯ рдПрдВрдб рдХреЛ рдХреИрд╕реЗ рдХреЛрдб рдХрд░рдирд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдЖрдкрдХреЛ рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рд╕реНрдорд╛рд░реНрдЯ рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯ, рдмрд╛рдХрд▓рд╣рд╛рдК (рд╣рдорд╛рд░реЗ рд╕реНрдерд┐рд░ рдкреНрд░рд╕рд╛рд░ рдПрдордПрд▓ рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде) рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, NFT.Storage - # рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдмрд╛рддрдЪреАрдд рдХрд░реЗрдВред рдиреЙрдЯрдСрдирдЖрдИрдкреАрдПрдлрдПрд╕рдиреЙрдЯ рдпреЛрд░рдПрдирдПрдлрдЯреАред

рдкреВрд░реНрдг рдкреНрд░рд╡рд╛рд╣

[рдЯреВрдбреВ: рдПрдХ рдкреНрд░рд╡рд╛рд╣ рдЪрд╛рд░реНрдЯ рдЖрд░реЗрдЦ рдмрдирд╛рдПрдВ]

  • рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдирдкреБрдЯ рдлрд╝реАрд▓реНрдб -> рдореЗрдВ рдЯреЗрдХреНрд╕реНрдЯ рдкреНрд░реЙрдореНрдкреНрдЯ рджрд░реНрдЬ рдХрд░рддрд╛ рд╣реИ
  • рдЗрдореЗрдЬ рдЬрдирд░реЗрдЯ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддрд╛ рд╣реИ -> рдЗрдореЗрдЬ рдЬреЗрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдХрд▓рд╣рд╛рдК рдЬреЙрдм рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ
  • Bacalhau рдХрд╛рд░реНрдп рдкреВрд░рд╛ рд╣реЛрддрд╛ рд╣реИ -> рдкреНрд░рд╛рд░реВрдк NFT рдореЗрдЯрд╛рдбреЗрдЯрд╛ JSON рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рд╡рд╛рдкрд╕ рдЖрддреЗ рд╣реИрдВ
  • рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдорд┐рдВрдЯ NFT рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддрд╛ рд╣реИ -> NFT.Storage рдХреЛ NFT рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХреЛ рд╕рд╣реЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рд▓рд┐рдП IPFS CID рдХреЗ рд╕рд╛рде рд╡рд╛рдкрд╕ рдЖрддрд╛ рд╣реИ -> рдЗрд╕ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде NFT рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдорд╛рд░реНрдЯ рдЕрдиреБрдмрдВрдз рдХреЗ рдорд┐рдВрдЯ NFT рдлрд╝рдВрдХреНрд╢рди рдХреЛ IPFS_URI рдХреЗ рд╕рд╛рде рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ->
  • !! [FEVM Gotcha] -> рдпрд╣рд╛рдВ рд╣рдо рдЖрдо рддреМрд░ рдкрд░ рдЗрд╕ рдкрд░рд┐рдгрд╛рдо рдХреЗ TX (рд▓реЗрди-рджреЗрди рд╣реИрд╢) рдХреЗ рд▓реМрдЯрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдкрд░ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рдПрдХ рдЕрдиреБрдмрдВрдз рдИрд╡реЗрдВрдЯ рд╢реНрд░реЛрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
  • рдкреВрд░реНрдг! -> рдЕрдм рдХрд┐рд╕реА рднреА рдбрд┐рд╕реНрдкреНрд▓реЗ рдбреЗрдЯрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдорд┐рдВрдЯрд┐рдВрдЧ рдкрд░ рдпреВрдЬрд░ рд╕реНрдЯреЗрдЯрд╕ рд╕рдХреНрд╕реЗрд╕ рдлреАрдбрдмреИрдХ рджреЗ рд╕рдХрддреЗ рд╣реИрдВред


рдЕрдЪреНрдЫрд╛ - рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдЗрд╕реЗ рдХреЛрдб рдореЗрдВ рдХреИрд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВ!

рдмрд╛рдХрд▓рд╣рд╛рдК рдЗрдВрдЯрд░реЗрдХреНрд╢рди

рдмрд╛рдХрд▓рд╣рд╛рдК рдХреЗ рд▓рд┐рдП рдлреНрд░рдВрдЯ-рдПрдВрдб рдПрдкреАрдЖрдИ рдПрдВрдбрдкреЙрдЗрдВрдЯ рдмрдирд╛рдирд╛ рдЗрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд░рд┐рдкреЛрд░реНрдЯ рдореЗрдВ рдЗрдВрдЬреАрдирд┐рдпрд░ рд▓реНрдпреВрдХ рдорд╛рд░реНрд╕рдбреЗрди рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд▓реЗрдЦрд┐рдд рд╣реИред


рдПрдкреАрдЖрдИ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХреЗрд╡рд▓ рдЗрд╕ рдмреНрд▓реЙрдЧ рдореЗрдВ рдкреНрд░рд▓реЗрдЦрд┐рдд рд╕реНрдерд┐рд░ рдкреНрд░рд╕рд╛рд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╕реАрдзреЗ рд╣рд┐рдЯ рдХрд░рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЯреАрдо рдЗрд╕реЗ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рдПрдкреАрдЖрдИ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╣реИ рддрд╛рдХрд┐ рдЖрдк рдХрд┐рд╕реА рднреА рдЙрджрд╛рд╣рд░рдг рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХреЗрдВ, рдФрд░ HTTP рд╕реЗ рдЕрдкрдиреА рдЦреБрдж рдХреА рддреИрдирд╛рдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рднреА рдмрд╛рдХреА рдПрдкреАрдЖрдИред FilecoinProject slac рдореЗрдВ рдпрд╣рд╛рдБ рдпрд╛ #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; };


рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рдПрдХ IPFS CID (рд╕рд╛рдордЧреНрд░реА рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛) рд▓реМрдЯрд╛рдПрдЧрд╛, рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЫрд╡рд┐ рдХреЛ рддрдм /outputs/image0.png рдХреЗ рдЕрдВрддрд░реНрдЧрдд рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


ЁЯТб рдпрд╣рд╛рдВ рдХреНрд▓рд┐рдХ рдХрд░рдХреЗ рдЗрд╕реЗ рдЕрдкрдиреЗ рд▓рд┐рдП рджреЗрдЦреЗрдВ ! ЁЯТб




рдЖрд╣ рдЗрдВрджреНрд░рдзрдиреБрд╖ рдпреВрдирд┐рдХреЙрд░реНрди... рдХреНрдпрд╛ рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ!

рдПрдирдПрдлрдЯреА.рднрдВрдбрд╛рд░рдг

NFT.Storage рдПрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡рд╕реНрддреБ (рдЙрд░реНрдлрд╝ рдореБрдХреНрдд) рд╣реИ рдЬреЛ рдХрд┐рд╕реА рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдпрд╛ HTTP SDK рдХреЗ рд╕рд╛рде IPFS рдФрд░ Filecoin рдкрд░ NFT рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХреЛ рд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред


NFT рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдПрдХ JSON рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╣реИ рдЬреЛ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ - рдЬреЛ рд╕реАрдзреЗ Open Zeppelin рдбреЙрдХреНрд╕ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:



NFTs рдмрдирд╛рддреЗ рд╕рдордп, рдпрд╣ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдЬрдм рддрдХ рдЖрдк рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХреЛ рдСрди-рдЪреЗрди (рдЬреЛ рдмрдбрд╝реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдирд┐рд╖реЗрдзрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рдорд╣рдВрдЧрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ) рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдПрдХ рдЯреЛрдХрди рдХреА 'рдЧреИрд░-рдкрд░рд┐рд╡рд░реНрддрдиреАрдпрддрд╛' рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рднрдВрдбрд╛рд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рд▓рдЧрд╛рддрд╛рд░, рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдФрд░ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдпред


рдпрджрд┐ рдЖрдкрдХреЗ NFT рдореЗрдВ рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдХреА рддрд░рд╣ рдПрдХ рд╕реНрдерд╛рди-рдЖрдзрд╛рд░рд┐рдд рдкрддрд╛ рд╣реИ, рддреЛ рдмрд┐рдХреНрд░реА рдХреЗ рдмрд╛рдж рдЗрд╕ рд╕реНрдерд╛рди рдкрде рдХреЛ рд╕реНрд╡рд┐рдЪ рдЖрдЙрдЯ рдХрд░рдирд╛ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдЬреЛ NFT рдЦрд░реАрджрд╛ рд╣реИ рд╡рд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ - рдпрд╛ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХ рд╢рд╛рдмреНрджрд┐рдХ рдЧрд▓реАрдЪрд╛ рдЦреАрдВрдЪ рдиреАрдЪреЗ рдЬрд╣рд╛рдВ рдПрдирдПрдлрдЯреА рдирд┐рд░реНрдорд╛рддрд╛ рдиреЗ рдЖрд╕рдиреЛрдВ рдХреЗ рдЪрд┐рддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдХрд▓рд╛ рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛ред



рдУрдкрди рдЬрд╝реЗрдкреЗрд▓рд┐рди рднреА рдХреБрдЫ рдЪреЗрддрд╛рд╡рдиреА рджреЗрддрд╛ рд╣реИ!



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'); });


рд╡реВрдЯ - рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмрд╛рдХрд▓рд╣рд╛рдК рд╕реЗ рд╣рдорд╛рд░реА рдЫрд╡рд┐ рд╣реИ, рд╣рдордиреЗ рдЕрдкрдиреЗ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдХреЛ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд░реВрдк рд╕реЗ рдФрд░ рд▓рдЧрд╛рддрд╛рд░ NFT.Strorage рдХреЗ рд╕рд╛рде рд╕рд╣реЗрдЬрд╛ рд╣реИ, рдЕрдм рд╣рдо рдЕрдкрдиреЗ NFT рдХрд╛ рдЯрдХрд╕рд╛рд▓ рдмрдирд╛рддреЗ рд╣реИрдВ!


ЁЯТб рддреНрд╡рд░рд┐рдд рдпреБрдХреНрддрд┐ ЁЯТбNFT.Storage рдЕрдиреНрдп API рдХреЙрд▓ рдЬреИрд╕реЗ storeCar рдФрд░ storeDirectory рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдПрдХ рд╕реНрдерд┐рддрд┐ () рдлрд╝рдВрдХреНрд╢рди рднреА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ - рдЬреЛ рдПрдХ CID рдХреЗ IPFS рдкрд┐рдирд┐рдВрдЧ рдФрд░ Filecoin рд╕реНрдЯреЛрд░реЗрдЬ рд╕реМрджреЛрдВ рдХреЛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ -> рдпрд╣ рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдЬреЛрдбрд╝ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдПрдирдПрдлрдЯреА рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдВрдЪ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдлрдИрд╡реАрдПрдо рдбреАрдПрдкреА (рдпрд╛ рдПрдлрдИрд╡реАрдПрдо рдореЗрдирдиреЗрдЯ рд░рд┐рд▓реАрдЬ рд╣реЛрдиреЗ рдкрд░ рдПрдлрдИрд╡реАрдПрдо рдкрд░ рдПрдирдПрдлрдЯреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди)ред

рдЕрдиреБрдмрдВрдз рд╕рд╣рднрд╛рдЧрд┐рддрд╛

рдпрд╣рд╛рдВ 3 рдкреНрд░рдХрд╛рд░ рдХреЗ рдЗрдВрдЯрд░реИрдХреНрд╢рди рд╣реИрдВ (рдФрд░ рдХреБрдЫ рдПрдлрдИрд╡реАрдПрдо рдЧреЛрдЪрд╛ - рдмреАрдЯрд╛ рддрдХрдиреАрдХ рдореЗрдВ рд╣рдореЗрд╢рд╛ рдХреБрдЫ рд╡рд┐рдЪрд┐рддреНрд░ рдмрдЧ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реЛрддреА рд╣реИрдВ!)


  • рдХреЗрд╡рд▓-рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╕реЗ рдбреЗрдЯрд╛ рдХреЛ рдмрд┐рдирд╛ рдореНрдпреВрдЯ рдХрд┐рдП рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ

  • рдРрд╕реЗ рдХреЙрд▓ рд▓рд┐рдЦреЗрдВ рдЬрд┐рдирдореЗрдВ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░рдиреЗ рдФрд░ рдЧреИрд╕ рдХрд╛ рднреБрдЧрддрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реЙрд▓реЗрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛред рдХрд╛рд░реНрдп рдЬреЛ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рдПрдирдПрдлрдЯреА рдЦрдирди!

  • рдШрдЯрдирд╛ рд╢реНрд░реЛрддрд╛ - рдЬреЛ рдЕрдиреБрдмрдВрдз рд╕реЗ рдирд┐рдХрд▓рдиреЗ рд╡рд╛рд▓реА рдШрдЯрдирд╛рдУрдВ рдХреЛ рд╕реБрдирддреЗ рд╣реИрдВ


рдЗрди рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рд╣рдо ethers.js рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ - рдПрдереЗрд░рд┐рдпрдо рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣рд▓реНрдХрд╛ рдЖрд╡рд░рдг, рд╣рдорд╛рд░реЗ рдЕрдиреБрдмрдВрдз рд╕реЗ рдЬреБрдбрд╝рдиреЗ рдФрд░ рдЗрд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред


рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ 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 );


рдЕрдиреБрдмрдВрдз рдкрд░ рдШрдЯрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕реБрдирдирд╛ред рдЪреВрдБрдХрд┐ рдпрд╣ рдХреЗрд╡рд▓-рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП (рдкреНрд░рд╛рдкреНрдд) рдШрдЯрдирд╛ рд╣реИ, рд╣рдо рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЖрд░рдкреАрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдСрди-рдЪреЗрди рдШрдЯрдирд╛ рдЙрддреНрд╕рд░реНрдЬрди рдХреЛ рд╕реБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


 //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 } );


рд▓рд┐рдЦрд┐рдд рдореЛрдб рдореЗрдВ рдЕрдиреБрдмрдВрдз рд╕реЗ рдЬреБрдбрд╝рдирд╛ - рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдПрдереЗрд░рд┐рдпрдо рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╡реЗрдм рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдПрдХ рд╡реЙрд▓реЗрдЯ рджреНрд╡рд╛рд░рд╛ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рддрд╛рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд▓реЗрдирджреЗрди рдХреЗ рд▓рд┐рдП рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд░ рд╕рдХреЗ рдФрд░ рдЧреИрд╕ рдХреЗ рд▓рд┐рдП рднреБрдЧрддрд╛рди рдХрд░ рд╕рдХреЗ - рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╣рдо рдПрдХ рд╡рд┐рдВрдбреЛ рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдПрдереЗрд░рд┐рдпрдо рд╡рд╕реНрддреБред


 //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 рд╣рд╛рдЗрдкрд░рд╕реНрдкреЗрд╕ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдкрд░ рд╣реИрдВред рдпрд╣рд╛рдВ рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рд╡реЙрд▓реЗрдЯ рдлрд╝рдВрдХреНрд╢рдВрд╕ рд╣реИрдВ рдЬреЛ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдЪреЗрдирдЖрдИрдб рдХреА рдЬрд╛рдВрдЪ рдХреИрд╕реЗ рдХрд░реЗрдВ, рдФрд░ рдореЗрдЯрд╛рдорд╛рд╕реНрдХ / рд╡реЙрд▓реЗрдЯ рдореЗрдВ рд╣рд╛рдЗрдкрд░рд╕реНрдкреЗрд╕ рдиреЗрдЯрд╡рд░реНрдХ рдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ рдХреИрд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПред


 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 рдбреЗрдЯрд╛ рдкрд░ рджреЛрд╣рд░рд╛рд╡, рдирд┐рдпрддрд╛рддреНрдордХ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреБрдж рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЙрдзрд╛рд░ рджреЗрддрд╛ рд╣реИред

  • рдИрдЯреАрдПрд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ

  • рдорд╢реАрди рд▓рд░реНрдирд┐рдВрдЧ рдФрд░ рдПрдЖрдИ

  • рдЖрдИрдУрдЯреА рдбреЗрдЯрд╛ рдПрдХреАрдХрд░рдг

  • рд╕рд╣рд┐рдд рдмреИрдЪ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг

    • рд╡рд┐рддреНрддреАрдп рдФрд░ рдмрд╛рдЬрд╛рд░ рдбреЗрдЯрд╛
  • рд╡реАрдбрд┐рдпреЛ рдФрд░ рдЗрдореЗрдЬ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ - рдХреНрд░рд┐рдПрдЯрд┐рд╡ рдХреЗ рд▓рд┐рдП рдмрдврд╝рд┐рдпрд╛


рдЙрдкрд░реЛрдХреНрдд рдореЗрдВ рд╕реЗ рдХреБрдЫ рдХреЛ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рдЗрд╕рдХреЗ рдмрд╛рдХрд▓рд╣рд╛рдК рдбреЙрдХреНрд╕ рдореЗрдВ рдХрдИ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВред

рдЬрдмрдХрд┐ рдмрд╛рдХрд▓рд╣рд╛рдК рдПрдлрдИрд╡реАрдПрдо рд╕реНрдорд╛рд░реНрдЯ рдЕрдиреБрдмрдВрдзреЛрдВ рд╕реЗ рд╕реАрдзреЗ рдмрд╛рдХрд▓рд╣рд╛рдК рдХреЛ рдмреБрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдХреАрдХрд░рдг рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдореЗрдВ рд╡реНрдпрд╕реНрдд рд╣реИ, рдпрд╣рд╛рдБ рдмрд╛рдХрд▓рд╣рд╛рдК рдПрдХреНрд╕ рдПрдлрд╡реАрдПрдо рд╕рд╣рдпреЛрдЧ рдкрд░ рдХреБрдЫ рд╡рд┐рдЪрд╛рд░ рд╣реИрдВ:


  • рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдлрд┐рд▓реНрдХреЙрдЗрди рдбреЗрдЯрд╛ рдХреА рдСрдирдмреЛрд░реНрдбрд┐рдВрдЧ рдФрд░ рдСрдлрдмреЛрд░реНрдбрд┐рдВрдЧ рдореЗрдВ рдорджрдж рдХрд░реЗрдВ
  • рдбреАрд▓ рдФрд░ рд╕реНрдЯреЛрд░реЗрдЬ рдкреНрд░рджрд╛рддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдСрди-рдЪреЗрди рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рдХреЛ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рдХреЗ рдлрд╛рдЗрд▓рдХреЛрдЗрди рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рд╖реНрдард╛ рдФрд░ рд╕реЗрд╡рд╛ рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдХреА рдкрд░рдд рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВред
  • рдмрд╛рдХрд▓рд╣рд╛рдК рдмрд╛рдЬрд╛рд░ рдФрд░ рднреБрдЧрддрд╛рди рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдЧрдгрдирд╛ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИ
  • Bacalhau DAO рдФрд░ DataDAO рдХреЗ рдбреЗрдЯрд╛ рдХреЛ рдкреНрд░реЛрд╕реЗрд╕ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ
  • рдмрд╛рдХрд▓рд╣рд╛рдК рд╡реАрдбрд┐рдпреЛ рдФрд░ рдЗрдореЗрдЬ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдЬреИрд╕реЗ рд░рдЪрдирд╛рддреНрдордХ рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕реНрд╡рдЪрд╛рд▓рди рдХреЛ рд╕рд╢рдХреНрдд рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ
  • Bacalhau VR рдФрд░ AR рд╕рд╣рд┐рдд рдЧреЗрдо рдФрд░ рдореЗрдЯрд╛рд╡рд░реНрд╕ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред
  • рдмрд╛рдХрд▓рд╣рд╛рдК, рдЖрдИрдУрдЯреА рдФрд░ рд╕рд┐рдореБрд▓реЗрд╢рди рд╕рдВрднрд╡ рд╣реИрдВ
  • рдПрдЖрдИ рдФрд░ рдПрдордПрд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧ

ЁЯРа рдмрд╛рдХрд▓рд╣рд╛рдК рд░реЛрдбрдореИрдк


рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╣рдо рдЖрдкрдХреЗ рд╕реНрдорд╛рд░реНрдЯ рдЕрдиреБрдмрдВрдзреЛрдВ рд╕реЗ рд╕реАрдзреЗ рдмрд╛рдХрд▓рд╣рд╛рдК рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд░рд╛рд╕реНрддрд╛ рддреИрдпрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ !!!! рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлреНрд░реЙрдЧ/рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд▓рд┐рд▓рд┐рдкреИрдб рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ - рдФрд░ рдпрд╣ рдПрдХ рдПрдХреАрдХрд░рдг рдкрд░рдд рд╣реЛрдЧреА рдЬреЛ FEVM рд╕реНрдорд╛рд░реНрдЯ рдЕрдиреБрдмрдВрдзреЛрдВ рд╕реЗ рдмрд╛рдХрд▓рд╣рд╛рдК рдиреМрдХрд░рд┐рдпреЛрдВ рдХреЛ рдмреБрд▓рд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧреАред


рд╣рдорд╛рд░реЗ рдиреНрдпреВрдЬрд╝рд▓реЗрдЯрд░ рдХреЗ рд▓рд┐рдП рд╕рд╛рдЗрди рдЕрдк рдХрд░рдХреЗ рдпрд╛ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рд╕реЛрд╢рд▓ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдХрд░ рдЗрд╕рдХреА рдкреНрд░рдЧрддрд┐ рдкрд░ рдирдЬрд╝рд░ рд░рдЦреЗрдВред

тЬНя╕П рд╕рдВрдкрд░реНрдХ рдореЗрдВ рд░рд╣реЗрдВ!

рдпрджрд┐ рдЖрдкрдиреЗ рдкреВрд░рд╛ рдкрдврд╝рд╛ рд╣реИ рддреЛ рдмрдзрд╛рдИ!!!


рдЕрдЧрд░ рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рдерд╛ рддреЛ рдореИрдВ рд▓рд╛рдЗрдХ, рдХрдореЗрдВрдЯ, рдлреЙрд▓реЛ рдпрд╛ рд╢реЗрдпрд░ рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░реВрдВрдЧрд╛! <3


рдмрд╛рдХрд▓рд╣рд╛рдК рдХреЗ рд╕рдВрдкрд░реНрдХ рдореЗрдВ рд░рд╣реЗрдВ!



тЩея╕П рдбреЗрд╡рд▓рдкрд░рдПрд▓реА рдХреЗ рд╕рд╛рде

рдХреНрдпрд╛ рдЖрдкрдХреЛ рдпрд╣ рд▓реЗрдЦ рдореВрд▓реНрдпрд╡рд╛рди рд▓рдЧрд╛?

рдкреНрд░рд╛рдпреЛрдЬрдХ рдмрдирдХрд░ рдПрд▓рд┐рд╕рди рд╣реЗрдпрд░ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВред рдХрд┐рд╕реА рднреА рд░рд╛рд╢рд┐ рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ!


рд╣реИрд╢рдиреЛрдб рдкреНрд░рд╛рдпреЛрдЬрдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдиреЗрдВ


рдпрд╣рд╛рдБ рднреА рдкреНрд░рдХрд╛рд╢рд┐рдд рд╣реБрдЖред


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

About Author

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

рд▓реЗрдмрд▓

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдЪрд┐рддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛...