หากต้องการดูตัวอย่างผลลัพธ์ของฉันในอินสแตนซ์การทดสอบ OpenSea คลิก โปรดคลิกที่นี่เพื่ออ่านรายละเอียดเพิ่มเติม!
หากต้องการโต้ตอบกับสัญญาอัจฉริยะโดยตรง และสร้าง NFT ของคุณเอง (อุปทานมีจำกัด) คลิก โปรดคลิกที่นี่เพื่ออ่านรายละเอียดเพิ่มเติม.
นักพัฒนาซอฟต์แวร์สร้างผลงานศิลปะที่มีเอกลักษณ์หลายพันชิ้นโดยทางโปรแกรมได้อย่างไร ประการแรก สิ่งสำคัญคือต้องเข้าใจว่า NFT ส่วนใหญ่ไม่ได้ถูกสร้างขึ้นบนเครือข่ายเลย Solidity ทำให้เรามีวิธีในการ 'ตั้งกฎ' ของสัญญาอัจฉริยะแบบ on-chain แต่เครื่องมือการเขียนสคริปต์อย่าง Python จำเป็นสำหรับการสร้างงานศิลปะและโต้ตอบกับสัญญาของเรา
สำหรับงานศิลปะนั้น เราจะต้องสร้างเลเยอร์ของคุณลักษณะที่สามารถเปลี่ยนแทนกันได้เป็น PNG ตราบใดที่เราระมัดระวังในการออกแบบของเรา เราสามารถสร้างและรวมเลเยอร์เหล่านี้เป็นตัวละครสุ่มขั้นสุดท้ายที่เราปรับใช้บนเครือข่ายได้
อย่างแรกเลย ฉันต้องการพื้นฐานสำหรับการออกแบบของฉัน เนื่องจากฉันไม่ใช่ศิลปิน ฉันจึงเลือกที่จะสร้างงานศิลปะตัวหนังสือแบบพิกเซลที่เรียบง่าย คล้ายกับของ CryptoPunks ดั้งเดิม ในการสร้างไฟล์ PNG ฉันใช้ Pixlr ซึ่งเป็นเครื่องมือฟรีที่คุณสามารถทำได้ พบที่นี่; เพื่อให้ได้เอฟเฟกต์ที่ต้องการ ฉันตั้งขนาดภาพเป็น 25×25
ตอนนี้ คุณคงสังเกตเห็นแล้วว่าคอลเลกชั่น NFT ส่วนใหญ่ใช้ตัวฐานหรือรูปร่างที่โดยทั่วไปแล้วจะมีสี จากนั้นจึงตามด้วยลักษณะเฉพาะต่างๆ ตั้งแต่ส่วนต่อไปจนถึงเครื่องประดับ เช่น อาวุธ เสื้อผ้า เครื่องประดับ และอาวุธ ในกรณีของฉัน ฉันเริ่มต้นด้วยเลเยอร์ที่จำเป็นหลายอย่าง รวมทั้งร่างกาย ตา ปาก และผม; ฉันปฏิบัติตามสิ่งเหล่านี้ด้วยคุณลักษณะเสริม: ขนบนใบหน้า เครื่องประดับ หมวก แว่นตา และหน้ากาก ตามลำดับ แต่ละชั้นจะแสดงด้วยโฟลเดอร์ โดยแต่ละโฟลเดอร์มีคุณสมบัติต่างๆ มากมาย เช่น ไฟล์ PNG
ฉันเลือกที่จะกำหนดหมายเลขรูปภาพของฉัน แต่เนื่องจากเราจะใช้ประโยชน์จากออบเจ็กต์ Map คุณจึงสามารถใช้ไฟล์ที่มีชื่อสำหรับแต่ละคุณลักษณะได้อย่างง่ายดายเช่นกัน — คู่คีย์-ค่าใดๆ ก็ตามจะทำได้
เราเริ่มต้นด้วยเลเยอร์ฐาน ซึ่งเป็นประเภท 'ร่างกาย' ของเรา ซึ่งเป็นฐานที่ทุกอย่างจะถูกเพิ่มเข้าไป เป็นเลเยอร์แบบโปรเกรสซีฟ
ที่นี่คุณสามารถดูเลเยอร์ที่สองของเรา 'ดวงตา' ซึ่งสามารถผสานหรือวางบนฐานของเราเพื่อสร้างภาพที่คุณเห็นด้านล่าง
สำหรับกระบวนการคัดเลือก เราจะใช้ประโยชน์จากตัวสร้างตัวเลขสุ่มและ 'แผนที่' ของลักษณะเฉพาะที่สอดคล้องกับไฟล์ PNG ของเรา ตัวอย่างเช่น ถ้าตัวสร้างตัวเลขสุ่มของเราให้ '3' แก่เรา เราจะเปิดไฟล์นี้โดยทางโปรแกรม 3.png
ใน Hair
โฟลเดอร์ — เส้นทางของเราจะเป็นดังนี้: ../Assets/Hair/3.png
. แผนที่ที่แสดงด้านล่างมีทั้งหมายเลข key
เช่นเดียวกับชื่อประเภทสตริง value
, คู่คีย์-ค่าของเรา; สิ่งนี้จะมีผลในภายหลังในกระบวนการ:
การโต้ตอบกับไฟล์เหล่านี้จะมาจากความเอื้อเฟื้อของ pathlib
และ os
ห้องสมุดไพทอน
การสุ่มตัวอย่าง
การสุ่มตัวอย่างเป็นหัวข้อที่น่าสนใจในตัวของมันเอง เนื่องจากคอมพิวเตอร์มีการกำหนดลักษณะโดยธรรมชาติ จึงมีข้อจำกัดอย่างมากเกี่ยวกับการสร้างตัวเลขสุ่มอย่างแท้จริง สำหรับวัตถุประสงค์ของโครงการนี้ ตัวเลขสุ่มหลอกที่สร้างผ่านไลบรารี NumPy ของ Python ก็เพียงพอแล้ว
โปรดดู 'การสุ่ม, การดำน้ำลึก' ที่ท้ายบทความหากคุณสนใจที่จะใช้ประโยชน์จาก Chain Link VRF (ฟังก์ชันสุ่มที่ตรวจสอบได้) เพื่อสร้างตัวเลขสุ่มที่ตรวจสอบได้โดยใช้การเข้ารหัสลับ
ตัวอย่างต่อไปนี้จะส่งคืนตัวเลขสุ่มในช่วงที่ต้องการ ที่นี่ ค่า SEED ของเราเป็นทางเลือก กลยุทธ์การสุ่มส่วนใหญ่จะอนุญาตให้รวมค่า SEED บางรูปแบบได้ ซึ่งโดยทั่วไปจะเป็น timeStamp
ของ OS currentTime
ซึ่งเพิ่มความหลากหลายแต่ไม่รับประกันการสุ่ม
หรือคุณสามารถส่งคืนตัวเลขหลายตัวหรือส่งคืนตัวเลขเดียว (ขนาดใหญ่) และใช้คณิตศาสตร์บางส่วนเพื่อแบ่งออกเป็นตัวเลขสุ่มที่เล็กกว่าจำนวนมาก ตัวอย่างเช่น จำนวนที่มาก <randomNumber = 1234567899999>
สามารถแบ่งออกเป็นชิ้นเล็ก ๆ เพื่อการบริโภคโดยดำเนินการดังต่อไปนี้:
randomNumber
randomNumber/10
randomNumber/10000
ทั้งหมดมีผู้สมัครที่ทำงานได้ เราสามารถก้าวไปอีกขั้นและใช้วิธีเดียวกันนี้เพื่อสร้าง SEED หลายรายการ เพื่อการสุ่มที่มากยิ่งขึ้น
ทางเลือก & ลักษณะที่จำเป็น
เมื่อพูดถึงคุณลักษณะเสริม ฉันได้ขยาย RANGE เพื่อรวม 0 ซึ่งหมายความว่าหากตัวเลขสุ่มของฉันเป็น 0 ฉันจะข้ามคุณลักษณะนี้ทั้งหมด
สำหรับลักษณะที่ต้องการ (ร่างกาย ตา ปาก) ฉันไม่รวม 0 จากช่วงของเรา ซึ่งหมายความว่าเราจะจำกัดช่วงของเราจาก 1-N ตัวเลือก
เพื่อลดโอกาสที่กลุ่มของคุณลักษณะทางเลือกใดกลุ่มหนึ่งจะถูกสร้างขึ้น เราเพียงแค่เพิ่มช่วงที่อยู่นอกตัวเลือกที่ถูกต้องของเรา ในกรณีด้านล่าง เรามี 5 ตัวเลือก ที่นี่เราสามารถสร้างตัวเลขระหว่าง 0–20 ซึ่งหมายความว่ามีโอกาส ~25% ที่เราจะได้รับ Mask
และมีโอกาส ~ 75% ที่เราจะไม่ ต่อไปนี้เป็นของฉัน Mask
ลักษณะเฉพาะ ปรับเพิ่มขึ้น rarity
:
Modulo (%) เป็นอีกแนวคิดหนึ่งที่อาจมีประโยชน์ในที่นี้ เนื่องจากจะลดจำนวนที่มากเป็นช่วงวงกลมที่ต้องการ:
ตัวอย่าง: 12345678 % 8 =
ในกรณีที่เราใช้ประโยชน์จาก Modulo (%) และเรากำลังดำเนินการกับคุณลักษณะที่จำเป็น เราสามารถเพิ่มผลลัพธ์ของเราเป็น shift
ช่วงนี้ขวา:
ลักษณะทางเลือก: randomNumber % 8 = ช่วงตั้งแต่ 0–7
ลักษณะที่ต้องการ: (randomNumber % 8) + 1 = ช่วงตั้งแต่ 1–8
รูปภาพ — พื้นหลัง
คุณอาจจะสงสัยเกี่ยวกับพื้นหลัง เรามาเริ่มกันที่นี่เลยไหม? ใช่และไม่ใช่— ตลาดเช่นเฟรม OpenSea จัดกึ่งกลาง และปรับขนาดภาพของเราในระดับหนึ่งเพื่อมอบอินเทอร์เฟซที่น่าดึงดูดและหลากหลาย คุณสามารถเห็นผลลัพธ์ของภาพ 'รวมพื้นหลัง' ด้านล่าง เราต้องการหลีกเลี่ยงสิ่งนี้:
อันที่จริง OpenSea คาดหวัง PNG ของตัวละครของเราและพื้นหลังที่ให้ไว้เป็นรหัสสีฐานสิบหกในข้อมูลเมตาของเรา; ซึ่งหมายความว่าพื้นหลังไม่จำเป็นต้องเป็นส่วนหนึ่งของภาพเลย แต่แสดงโดยเบราว์เซอร์หรือแอปพลิเคชัน ที่ถูกกล่าวว่าบางโครงการสร้างภูมิหลังเป็นลักษณะ; สุดท้ายนี้เป็นการตัดสินใจออกแบบสำหรับแต่ละโครงการ ข้อมูลเพิ่มเติมเกี่ยวกับเมตาดาต้าที่จะมา…
ภาพ-ผสาน
โดยสังเขป ฉันใช้ประโยชน์จาก Python library PIL (Pillow) สำหรับความสามารถในการผสานรูปภาพที่เราต้องการ มีหลายวิธีที่สามารถทำได้ด้วยเครื่องมือและภาษามากมาย
ความท้าทายอย่างหนึ่งที่คุณอาจเผชิญ อย่างน้อยกับภาพพิกเซลแบบดิจิทัลขนาด 25×25 ก็คือการรักษาความคมชัดและความคมชัดเมื่อคุณปรับขนาดสำหรับตลาด OpenSsea — OpenSea ขอแนะนำภาพขนาด 350×350 การอัปโหลดโดยไม่ต้องคำนึงถึงสิ่งนี้จะทำให้ภาพของคุณสับสน ในระดับใหญ่ ในกรณีของฉัน Resample Nearest อนุญาตให้ฉันรักษาความละเอียดที่เหมาะสมในขณะที่ปรับขนาด
ก่อนหน้านี้ฉันพูดถึงเมตาดาต้า ให้ฉันอธิบาย: นี่อาจเป็นเรื่องที่น่าประหลาดใจ แต่โดยทั่วไปแล้ว ข้อมูลภาพ NFT จะไม่ถูกจัดเก็บบนเครือข่าย เนื่องจากมีราคาแพงมากในการทำเช่นนั้น เพื่อแก้ปัญหานี้ เราจัดเตรียม URI หรือลิงก์สำหรับ 'โทเค็น'/NFT แต่ละรายการที่ชี้ไปยังรูปแบบการจัดเก็บบางรูปแบบ พื้นที่เก็บข้อมูลนี้โฮสต์ข้อมูลเมตาของเราเป็นไฟล์ .json นอกจากนี้ ข้อมูลเมตานี้ยังรวมถึง URI ที่สองหรือ 'ลิงก์' ไปยังรูปภาพของเรา
โดยพื้นฐานแล้ว ไฟล์ JSON ของเราจะบอกทุกสิ่งที่ตลาดกลางจำเป็นต้องรู้เกี่ยวกับ NFT ของเรา รวมถึงตำแหน่งที่จะค้นหารูปภาพ แนวทางนี้สอดคล้องกับมาตรฐาน ERC 721 ซึ่งช่วยให้นักพัฒนาและตลาดกลางสามารถตกลงกันล่วงหน้าเกี่ยวกับการทำงานที่จำเป็น เช่น การโอนกรรมสิทธิ์
ตามมาตรฐานเหล่านี้ OpenSea เสนอคำแนะนำเพิ่มเติมเกี่ยวกับความคาดหวังและการทำงานของข้อมูลเมตา เพื่อให้แน่ใจว่าคุณได้จัดเตรียมสิ่งที่จำเป็นในด้าน Solidity คุณสามารถนำเข้าไลบรารีเช่น OpenZeppelin ERC 721 ซึ่งช่วยให้เรารับช่วงการทำงานที่จำเป็นทั้งหมด พร้อมความสามารถเพิ่มเติมในการโอเวอร์โหลดฟังก์ชันได้ตามต้องการ ฟังก์ชันเหล่านี้จะปรากฏใน Etherscan เหมือนกับว่าคุณได้ใช้งานด้วยตนเอง ไฟล์ความแข็งแกร่งของคุณควรมีสิ่งต่อไปนี้:
นำเข้า “@openzeppelin/contracts/token/ERC721/ERC721.sol”;
OpenSea ขยายสิ่งนี้โดยให้ฟังก์ชัน UI เพิ่มเติมบางอย่างรวมถึง 'บูสต์' และสถิติ คุณสามารถค้นหาข้อมูลเมตาของ Open Sea เอกสารที่นี่.
ต่อไปนี้คือฟังก์ชันเพื่อสร้างเทมเพลตออบเจ็กต์ JSON สำหรับข้อมูลเมตาของเรา ซึ่งตั้งค่าทั่วไปและ tokenId
(หมายเลข NFT) ซึ่งในกรณีของฉันถูกกำหนดโดยการวนซ้ำ:
เมื่อการสร้างอิมเมจ NFT ของฉันเสร็จสมบูรณ์ ฉันจะอัปเดต image
ค่าของวัตถุข้อมูลเมตาของฉันรวมทั้งผนวก attributes
ส่วนที่มีรายละเอียดของลักษณะสุ่มของฉัน ซึ่งเราไม่สามารถทราบได้ ก่อนขั้นตอนนี้
คุณน่าจะคิดว่า นี่ไม่ได้หมายความว่า NFT แบบกระจายศูนย์ของเราเป็นแบบรวมศูนย์ใช่หรือไม่ การกระจายอำนาจโครงการของคุณนั้นขึ้นอยู่กับกรณีการใช้งานของคุณทั้งหมด คุณจะพบว่าโปรเจ็กต์ NFT จำนวนมากชี้ไปที่ระบบไฟล์แบบรวมศูนย์ ซึ่งไม่แนะนำแต่ไม่ได้บังคับใช้อย่างเข้มงวด อันที่จริง คุณลักษณะที่มีคุณค่าบางอย่างอาจต้องใช้แนวทางแบบรวมศูนย์มากกว่า
ในกรณีของฉัน ฉันอัปโหลดข้อมูลเมตาและรูปภาพโดยทางโปรแกรมไปยัง IPFS ทันทีหลังจากสร้าง IPFS หรือ Interplanetary File System คืออินเทอร์เน็ตแบบกระจายอำนาจ มันให้วิธีการจัดเก็บข้อมูลของเราที่ไม่เปลี่ยนรูปและกระจายอำนาจ
คุณจะพบข้อมูลเพิ่มเติมเกี่ยวกับ IPFS รวมถึงคำแนะนำใน 'IPFS, A Deep Dive' ที่ท้ายบทความนี้
รายละเอียดของสัญญาอัจฉริยะของเรามีความสำคัญอย่างไม่น่าเชื่อ โดยส่วนใหญ่แล้ว เมื่อสัญญาบนเครือข่ายเชื่อมต่อกัน สัญญานั้นจะไม่เปลี่ยนแปลง ซึ่งหมายความว่าเราต้องการทำให้ถูกต้องในครั้งแรก
เนื่องจากโครงการนี้เป็น POC สำหรับฉันในการสำรวจเครื่องมือและเทคนิคที่ใช้ในการสร้าง NFT ฉันต้องการสำรวจแนวคิดเชิงลึกบางอย่างนอกเหนือจากการรับ NFT ในตลาด OpenSea
เปิดเผยล่าช้า
หัวข้อแรกที่ฉันสำรวจคือวิธีการใช้การเปิดเผยที่ล่าช้า คุณอาจเคยเห็นสิ่งนี้ในโครงการอื่นเช่น ทีมอดัมบอมบ์; ในกรณีนี้ 'minting' จะทำให้คุณมีรูปภาพที่ 'รอดำเนินการ' และข้อมูลเมตาเปล่า ดูเหมือนว่าจะเป็นวิธีที่ยอดเยี่ยมในการส่งเสริมการซื้อขายในปัจจัยอื่นที่ไม่ใช่ความหายาก
ปัญหาอยู่ที่การกระจายอำนาจ เว้นแต่คุณต้องการให้แอปพลิเคชันแบบรวมศูนย์ที่สามารถรับคำสั่งจากสัญญาอัจฉริยะของคุณเพื่อสร้าง NFT อัปโหลดไปยัง IPFS และ 'สร้าง' โทเค็นใหม่ที่คุณต้องดำเนินการทั้งหมดก่อนการปรับใช้
เพื่อแก้ปัญหานี้ ฉันไม่ได้ชะลอการสร้างรูปภาพ NFT และข้อมูลเมตา แต่ฉันชะลอการเปิดเผยโดยเริ่มแรกให้ URI ที่ชี้ไปยังข้อมูลเมตาทั่วไปและรูปภาพที่คุณเห็นด้านล่าง รูปภาพที่รอดำเนินการนี้ถูกอัปโหลดไปยัง IPFS ด้วยตนเองล่วงหน้า และคู่ข้อมูลเมตา/รูปภาพเดี่ยวนี้ใช้สำหรับโทเค็นทั้งหมดที่ฉันต้องการให้มีการเปิดเผยที่ล่าช้า
แล้วเราจะเก็บ URI สุดท้ายได้อย่างไร?
สัญญามักจะใช้การแมปเพื่อติดตามทุกสิ่งกลับไปยังของเรา tokenId
. ซึ่งหมายความว่าเรามีวิธีการจัดเก็บรายละเอียด NFT; ถ้าเราตั้งค่าการแมปนี้มากกว่ากำหนดสุดท้าย tokenURI
ในการสร้าง เราเหลือความสามารถในการ 'ตั้งค่า' หรือ 'แก้ไข' URI จากการทำแผนที่ในภายหลัง
สังเกตแผนที่ของเรา tokenIdToURI
ด้านล่างนี้จะเก็บค่า URI ของเราสำหรับโทเค็น NFT ของเรา
ตัวสร้างของเราคาดหวังมูลค่า loadingURI
ซึ่งเป็นที่ตั้งไว้ล่วงหน้าของเรา pending
URI ของรูปภาพและข้อมูลเมตา เราจัดหา URI นี้เมื่อเราปรับใช้สัญญาของเรา ซึ่งจะทริกเกอร์ตัวสร้าง
คุณจะสังเกตเห็น mintPending
ฟังก์ชั่นยอมรับ URI แต่แทนที่จะตั้งค่า tokenURI (_setTokenURI)
มันเพียงเก็บข้อมูลนี้ในการแมปโทเค็นที่เกี่ยวข้องกับ tokenID
.
ผู้ใช้ Mint
ฉันยังต้องการให้แน่ใจว่าผู้ใช้ซึ่งเป็นเจ้าของที่ไม่มีสัญญาจ้างสามารถสร้าง NFT ใหม่ได้ เนื่องจากฉันไม่ต้องการให้แอปพลิเคชันส่วนกลางเรียกใช้การสร้างและอัปโหลดข้อมูลเมตา ฉันจึงต้องการวิธีดำเนินการนี้ล่วงหน้า
ฉันต้องการ a setTokenMapping()
ฟังก์ชันนี้จะข้ามการสร้างโทเค็นไปเลย เพื่อติดตามการวนซ้ำฉันสร้างวินาที Counter
, mappedCounter
— ตอนนี้ฉันมีวิธีติดตามจำนวนโทเค็นทั้งหมด รวมถึงจำนวนโทเค็นที่เป็นไปได้ทั้งหมดสำหรับเหรียญกษาปณ์ (แมป)
ในช่วงเวลาแห่งการมินต์ โทเค็นใหม่จะถูกสร้างขึ้น และ URI จะถูกตั้งค่าจากการแมปของเรา นี่คล้ายกับการเปิดเผยที่ล่าช้าของเรา ความแตกต่างคือการสร้างจริงก็ล่าช้าเช่นกัน
เช่นเดียวกับการขุดใด ๆ ที่อยู่ผู้ใช้ที่เรียก mint จะเป็นเจ้าของ NFT ที่สร้างขึ้นก่อนหน้านี้แต่สร้างใหม่
เพื่อโต้ตอบและจัดการสัญญาของเรา เราสร้างสคริปต์ Python สองตัวอย่างดังต่อไปนี้ อันดับแรก เรามีฟังก์ชันส่งกลับหรือ tokenCount (minted)
เช่นเดียวกับของเรา mappedCount (mapped)
.
ตอนนี้เกี่ยวกับการทดสอบ ระบบนิเวศทำให้เรามีตัวเลือกมากมาย ในกรณีของฉัน ฉันใช้อินสแตนซ์การทดสอบของ OpenSea และเครือข่ายทดสอบ Rinkeby (Etherem) ทำให้เราได้ใช้ fake
บัญชีกับ fake
or free
eth และดู NFT ของเราในเวอร์ชันทดสอบของตลาด OpenSea
คุณจะต้องการติดตั้งส่วนขยายเบราว์เซอร์ MetaMask ที่นี่คุณจะเห็นตัวเลือกเน็ตทดสอบหลายตัว ฉันใช้ Rinkeby ในการเติมเงินในบัญชีทดสอบของคุณ คุณจะต้องไปที่ 'faucet' (โดยทั่วไปแล้วจะเป็นแหล่งที่มาของ Ethereum ปลอมสำหรับการทดสอบของเรา) คุณสามารถหา faucet ได้หนึ่งอันเช่น faucet ที่นี่; ทำตามคำแนะนำบนเว็บไซต์
รายละเอียดการใช้งานของคุณขึ้นอยู่กับเครื่องมือหรือไลบรารีที่คุณตัดสินใจใช้ โดยส่วนใหญ่จะมีคีย์สำหรับการโต้ตอบกับเน็ตทดสอบเหล่านี้
ประเด็นหนึ่งที่ฉันจะเน้นคือตำแหน่งที่จะวางคีย์ส่วนตัวของคุณ เนื่องจากสิ่งนี้ให้การเข้าถึงทั้งกองทุนทดสอบและกองทุนจริงของคุณ คุณจะต้องการไม่ให้รหัสนี้หมด โดยเฉพาะอย่างยิ่งหากมีการอัปโหลดไปยัง GitHub
คุณสามารถบันทึกไว้ใน .env
ไฟล์ที่ควรอ้างถึงใน your .gitignore
ไฟล์ได้ดียิ่งขึ้นคุณสามารถส่งออกคีย์นี้ไปยัง your PRIVATE_KEY
ตัวแปรสภาพแวดล้อมและทำซ้ำขั้นตอนเพื่อเปลี่ยนจากบัญชีหนึ่งไปอีกบัญชีหนึ่งและทดสอบเน็ตเป็น Mainnet ดังนี้:
$export PRIVATE_KEY='0x……….'
$echo PRIVATE_KEY // เพื่อแสดงคีย์ปัจจุบัน
พื้นที่ ระบบไฟล์ InterPlanetary (IPFs) เป็นโปรโตคอลและเครือข่ายเพียร์ทูเพียร์สำหรับการจัดเก็บและแบ่งปันข้อมูลในระบบไฟล์แบบกระจาย IPFS ใช้การกำหนดที่อยู่เนื้อหาเพื่อระบุแต่ละไฟล์โดยไม่ซ้ำกันในเนมสเปซส่วนกลางที่เชื่อมต่ออุปกรณ์คอมพิวเตอร์ทั้งหมด — วิกิพีเดีย
ในการใช้ประโยชน์จาก IPFS เราต้องการ 2 สิ่ง1 — เครื่องมือบรรทัดคำสั่ง IPFS และ 2 — บริการปักหมุดที่จะอนุญาตให้มีการเก็บรักษาข้อมูลของเราในหลายโหนด
คุณจะต้องติดตั้ง IPFS ซึ่งคุณสามารถหาได้ โปรดคลิกที่นี่เพื่ออ่านรายละเอียดเพิ่มเติม. คุณสามารถติดตั้งเดสก์ท็อป IPFS และสามารถใช้ร่วมกันหรือแยกกันได้
ฉันใช้บริการ Pinata เพื่อความสามารถในการปักหมุดจากระยะไกล คุณสามารถหา คำแนะนำที่นี่โดยพื้นฐานแล้ว เราจำเป็นต้องลงทะเบียนและสร้างคีย์ API และข้อมูลลับใน Pinata ซึ่งจำเป็นในบริการท้องถิ่น IPFS ของเราเพื่อให้ทั้งสองโต้ตอบกันได้
เพื่อความสะดวก คุณอาจลองติดตั้งส่วนขยายที่แสดงร่วม IPFS ใน Chrome ซึ่งจะช่วยให้คุณสามารถแก้ไข URI ของ IPFS สำหรับการดู (ทั้งรูปภาพและไฟล์ข้อมูลเมตา JSON ของคุณ)
อย่าลืมเริ่มต้นอินสแตนซ์ IPFS ของคุณโดยรัน Ipfs init
ตามคำแนะนำ มิฉะนั้น คุณอาจเห็นข้อผิดพลาด 'ไม่มี IPFS repo'
ถัดไป คุณจะต้องเริ่ม IPFS daemon โดยพิมพ์ ipfs daemon
โดยค่าเริ่มต้น สิ่งนี้จะทำงานบน http://localhost:5001. อีกวิธีหนึ่ง คุณสามารถเริ่ม IPFS โดยติดตั้งเดสก์ท็อป IPFS และเริ่มใช้งานก่อนใช้งาน หากตัวใดตัวหนึ่งกำลังทำงาน อีกตัวหนึ่งจะไม่เริ่มทำงาน และจะไม่จำเป็น (เปิดอยู่แล้ว!)
ด้วยอินสแตนซ์ท้องถิ่นของ IPFS ที่ทำงานอยู่ ไม่ว่าจะโดยการเริ่มต้น IPFS Desktop หรือโดยการเรียกใช้ IPFS daemon
คุณจะสามารถเรียกใช้โค้ดต่อไปนี้ได้ ซึ่งจะเป็นการอัปโหลดไฟล์ของเราไปยัง IPFS และปักหมุดรายการผ่าน Pinata นี่เป็นแนวทางปฏิบัติที่ดีที่สุด แต่ OpenSea จะแคชรูปภาพเหล่านี้และยังเสนอ a freeze
วิธีเพื่อให้แน่ใจว่าข้อมูลของเราถูกจัดเก็บและยังคงมีอยู่หากคุณเลือกที่จะใช้วิธีการจัดเก็บแบบอื่น
IPFS แฮช & โฟลเดอร์ที่โหลดไว้ล่วงหน้า
หากไม่มีรายละเอียดมากเกินไปในที่นี้ ไฟล์ IPFS แต่ละไฟล์จะเชื่อมโยงกับแฮชแทนที่จะเป็น 'ที่อยู่' หรือเส้นทางโฟลเดอร์แบบเดิม แฮชนี้จึงถูกสร้างขึ้นจากตัวข้อมูลเอง การเปลี่ยนแปลงข้อมูล ทำให้เป็นโมฆะ หรืออย่างน้อยก็เปลี่ยนแฮช
หากคุณฉลาดเป็นพิเศษ คุณอาจพิจารณาถึงข้อจำกัดที่แฮชสร้างขึ้น คุณไม่สามารถ PRE อัปโหลดข้อมูลเมตาและรูปภาพของคุณ เนื่องจากรูปภาพและข้อมูลเมตานั้นกำหนดขึ้นเองเกี่ยวกับแฮช ซึ่งไม่เหมือนกับโฟลเดอร์ทั่วไปที่เราสามารถทำได้ เพิ่มไฟล์; ในกรณีนี้ การเพิ่มไฟล์หรือต่อท้าย PNGs URI จะเปลี่ยนข้อมูลเมตา ดังนั้นจึงเปลี่ยนแฮช ipfs://<hash>
ไร้ประโยชน์
มีบางวิธีในการแก้ปัญหานี้ คุณจะต้องโหลด PNG ของคุณล่วงหน้าและใช้การตั้งชื่อไฟล์ที่สอดคล้องกัน — เราขอแนะนำให้คุณสำรวจความสามารถนี้เพิ่มเติม คุณจะต้องศึกษาฟังก์ชัน setBaseURI อย่างแน่นหนา ซึ่งทำให้คุณสามารถตั้งค่า URI ได้เป็นสองส่วน baseURI + tokenURI
ด้วยวิธีนี้คุณสามารถสร้าง baseURI
และเพียงแค่ใช้ setTokenURI
ฟังก์ชั่นเพื่อ append
ชื่อไฟล์ ตามที่คาดไว้ รูปแบบการตั้งชื่อไฟล์ (1.png, 2.png เป็นต้น)
“คุณยังสามารถรวมชื่อไฟล์ไว้ในองค์ประกอบพาธของ IPFS URI ได้อีกด้วย ตัวอย่างเช่น หากคุณจัดเก็บข้อมูลเมตาของโทเค็นบน IPFS ที่รวมอยู่ในไดเรกทอรี URI ของคุณอาจเป็น:
ipfs://bafybeibnsoufr2renqzsh347nrx54wcubt5lgkeivez63xvivplfwhtpym/metadata.json "
https://docs.ipfs.io/how-to/best-practices-for-nft-data/#types-of-ipfs-links-and-when-to-use-them
ในกรณีของฉัน ฉันเพียงแค่สร้างรูปภาพ & ข้อมูลเมตาแบบไดนามิกและอัปโหลด (และปักหมุด) ไปยัง IPFS ระหว่างการวนซ้ำแต่ละครั้ง — ข้อเสียเปรียบที่นี่คือ NFT แต่ละรายการต้องการการทำซ้ำแบบเต็ม โดยอัปโหลดไปยังธุรกรรม IPFS และ Ethereum อีกครั้งมีข้อดีและข้อเสียสำหรับกลยุทธ์ใดๆ กรณีการใช้งานของคุณควรกำหนดแนวทางที่เหมาะสมที่สุดสำหรับคุณ
ก่อนหน้านี้ฉันพูดถึง Chain Link VRF หรือฟังก์ชันสุ่มที่ตรวจสอบได้ เอกสารสามารถพบได้ ที่นี่ แต่ฉันต้องการขยายเรื่องนี้ในระดับหนึ่ง
ดังที่กล่าวไว้ก่อนหน้านี้ ภาษาการเขียนโปรแกรมถูกกำหนดไว้แล้ว การสร้างตัวเลขสุ่ม Python ของเราด้วยเมล็ดพันธุ์ที่เหมาะสม จะเริ่มแสดงรูปแบบเสมอเมื่อรันหลายครั้ง สิ่งนี้เป็นจริงในเครือข่าย และข้อมูลบล็อกใด ๆ ที่เราอาจใช้ประโยชน์ไม่ได้เป็นเพียงการกำหนดในลักษณะเท่านั้น แต่ยังปรากฏต่อสาธารณะทั้งหมด – นี่เป็นจุดที่มีศักยภาพในการใช้ประโยชน์ นี้อาจดูเหมือนไม่สำคัญอย่างยิ่ง แต่ให้พิจารณานัยของลอตเตอรีออนไลน์ นี่คือที่มาของ chainLink VRF
“Chainlink VRF สร้างตัวเลขสุ่มและหลักฐานการเข้ารหัสว่าตัวเลขนั้นถูกกำหนดอย่างไร หลักฐานได้รับการเผยแพร่และยืนยันบนเครือข่ายก่อนที่จะนำไปใช้โดยแอปพลิเคชันที่ใช้งานมาก กระบวนการนี้ทำให้แน่ใจได้ว่าผลลัพธ์จะไม่ถูกดัดแปลงหรือจัดการโดยใครก็ตาม รวมถึงโอเปอเรเตอร์ของ Oracle นักขุด ผู้ใช้ และแม้แต่นักพัฒนาสัญญาอัจฉริยะ” — เอกสาร Chainlink
ฉันจะไม่ลงรายละเอียดมากเกินไปที่นี่ ประเด็นหลักที่ฉันหวังว่าจะแชร์ในที่นี้คือมีวิธีอันชาญฉลาดในการแก้ปัญหาการสุ่มใน Solidity แบบ on-chain บางสิ่งที่คุณควรพิจารณา:
- เพื่อใช้ประโยชน์จากคุณลักษณะนี้ เราจะต้องลงทุนสัญญาอัจฉริยะของเรากับลิงก์ ซึ่งช่วยให้สัญญาของเราติดต่อกับ ChainLink VRF และชำระค่าธรรมเนียมสำหรับการทำเช่นนั้นได้ ในการทำสัญญาของเรา เราจะต้องเพิ่มโทเค็น 'ลิงก์' ของ ChainLink ลงในบัญชีของเราใน Metamask ก่อน ทันทีที่เราปรับใช้ผู้ติดต่อของเรา เราก็สามารถส่งลิงก์นี้ไปยังที่อยู่ของสัญญาใหม่นี้ (สคริปต์การปรับใช้ของเราควรส่งคืนที่อยู่นี้ ).
- เห็นได้ชัดว่า VRF ต้องการการคำนวณและการตอบกลับ ซึ่งหมายความว่าเราจำเป็นต้องพิจารณาถึงลักษณะการเรียกนี้แบบอะซิงโครนัส ฟังก์ชัน minting ของเราจะต้องเรียกใช้ฟังก์ชัน VRF requestRandomness() ซึ่งจะเรียกกลับไปที่ฟังก์ชันที่สอง 'fulfillRandoness()'; การทำเหมืองแร่เกิดขึ้นจริงที่นี่ และด้วยความล่าช้า
หมายเหตุ: VRF ยังให้วิธีการสร้างตัวเลขสุ่มจำนวนมากด้วย — เราขอแนะนำให้คุณสำรวจเพิ่มเติมหากมันตรงกับผลลัพธ์ที่คุณต้องการ
- Python สำหรับการปรับใช้และการโต้ตอบกับสัญญาอัจฉริยะของเรา การสร้างรูปภาพและข้อมูลเมตา และการอัปโหลด/ปักหมุดแบบเป็นโปรแกรมไปยัง IPFS
- ความแข็งแกร่งด้วยไลบรารี OpenZeppelin ERC 721 สำหรับ NFT
- บราวนี่ (ส่วนขยายเบราว์เซอร์สหาย IPFS เพื่อดูไฟล์ IPFS
- บรรทัดคำสั่ง IPFS และ/หรือ IPFS Desktop
- ส่วนขยายเบราว์เซอร์ MetaMask เพื่อให้เรามีคีย์สาธารณะและส่วนตัวสำหรับทั้งการทดสอบและเน็ตหลัก
- OpenSea Testnet & เมนเน็ต
- Remix Ethereum IDE สำหรับการตรวจสอบสัญญา
- Etherscan — การอนุมัติสัญญาและการทดสอบ
สำหรับวิดีโอแนะนำแบบเต็มของโครงการ chainlink VRF NFT คลิกที่นี่.
ขอบคุณสำหรับการอ่าน
- "
- &
- 7
- เข้า
- ลงชื่อเข้าใช้
- การบัญชี
- เพิ่มเติม
- ทั้งหมด
- API
- การใช้งาน
- การใช้งาน
- รอบ
- ศิลปะ
- บทความ
- ศิลปิน
- ที่ดีที่สุด
- ร่างกาย
- วางระเบิด
- เบราว์เซอร์
- โทรศัพท์
- chainlink
- ท้าทาย
- เปลี่ยนแปลง
- Chrome
- เสื้อผ้า
- รหัส
- ส่วนประกอบ
- คอมพิวเตอร์
- การคำนวณ
- การบริโภค
- เนื้อหา
- สัญญา
- สัญญา
- การสร้าง
- ปัจจุบัน
- ข้อมูล
- วัน
- การกระจายอำนาจ
- ซึ่งกระจายอำนาจ
- ความล่าช้า
- ออกแบบ
- รายละเอียด
- ผู้พัฒนา
- นักพัฒนา
- พัฒนาการ
- อุปกรณ์
- DID
- ระบบนิเวศ
- สิ่งแวดล้อม
- ETH
- ethereum
- EU
- แสดง
- ขยาย
- คาดว่า
- เอาเปรียบ
- ใบหน้า
- เทียม
- ลักษณะ
- คุณสมบัติ
- ชื่อจริง
- ครั้งแรก
- ปฏิบัติตาม
- ฟอร์ม
- กรอบ
- ฟรี
- เต็ม
- ฟังก์ชัน
- กองทุน
- เงิน
- GitHub
- เหตุการณ์ที่
- ยิ่งใหญ่
- บัญชีกลุ่ม
- ผม
- กัญชา
- hashing
- โปรดคลิกที่นี่เพื่ออ่านรายละเอียดเพิ่มเติม
- หวัง
- สรุป ความน่าเชื่อถือของ Olymp Trade?
- ทำอย่างไร
- hr
- HTTPS
- ia
- แยกแยะ
- ภาพ
- รวมทั้ง
- เพิ่ม
- บูรณาการ
- ปฏิสัมพันธ์
- อินเทอร์เน็ต
- IP
- IPFs
- IT
- คีย์
- กุญแจ
- ภาษา
- ใหญ่
- เลฟเวอเรจ
- LG
- ห้องสมุด
- ถูก จำกัด
- Line
- LINK
- ในประเทศ
- นาน
- หวย
- แผนที่
- ตลาด
- ตลาด
- ตลาด
- หน้ากาก
- คณิตศาสตร์
- กลาง
- MetaMask
- คนงานเหมือง
- สุทธิ
- เครือข่าย
- NFT
- โครงการ NFT
- NFTS
- โหนด
- ตัวเลข
- เสนอ
- เปิด
- ตัวเลือกเสริม (Option)
- Options
- คำพยากรณ์
- ใบสั่ง
- อื่นๆ
- เจ้าของ
- แบบแผน
- ชำระ
- PoC
- ส่วนตัว
- คีย์ส่วนตัว
- คีย์ส่วนตัว
- การเขียนโปรแกรม
- การเขียนโปรแกรมภาษา
- โครงการ
- โครงการ
- พิสูจน์
- สาธารณะ
- สุ่ม
- พิสัย
- การอ่าน
- ลด
- การวิจัย
- ผลสอบ
- วิ่ง
- วิ่ง
- เอเชียตะวันออกเฉียงใต้
- เมล็ดพันธุ์
- เมล็ด
- บริการ
- ชุด
- การตั้งค่า
- Share
- ง่าย
- ขนาด
- เล็ก
- สมาร์ท
- สัญญาสมาร์ท
- สัญญาสมาร์ท
- So
- ความแข็งแรง
- แก้
- มาตรฐาน
- เริ่มต้น
- ข้อความที่เริ่ม
- สถิติ
- การเก็บรักษา
- จัดเก็บ
- ร้านค้า
- กลยุทธ์
- ความเครียด
- จัดหาอุปกรณ์
- การจัดหา
- แปลกใจ
- สวิตซ์
- ระบบ
- บอก
- ทดสอบ
- การทดสอบ
- คิด
- เวลา
- โทเค็น
- ราชสกุล
- ลู่
- เทรด
- การทำธุกรรม
- ui
- บันทึก
- us
- ผู้ใช้
- ความคุ้มค่า
- วีดีโอ
- รายละเอียด
- เสมือน
- เครื่องเสมือน
- ความหมายของ
- วิกิพีเดีย
- โรงงาน
- YouTube