Brownie: โครงสร้างพื้นฐานสัญญาอัจฉริยะของ Ethereum
หมายเหตุบรรณาธิการ: บทความนี้มาจากหาจำนวน Kicking Horse River (ID: gh_e9da2a6cbc62)พิมพ์ซ้ำโดย Odaily โดยได้รับอนุญาต
หมายเหตุบรรณาธิการ: บทความนี้มาจาก
หาจำนวน Kicking Horse River (ID: gh_e9da2a6cbc62)
หาจำนวน Kicking Horse River (ID: gh_e9da2a6cbc62)
พิมพ์ซ้ำโดย Odaily โดยได้รับอนุญาต
เมื่อพูดถึงบราวนี่อย่าคิดว่ามันคือเค้กชิ้นเล็กๆ อร่อยๆ ที่มีรสดาร์กช็อกโกแลต บราวนี่ที่กล่าวถึงในที่นี้หมายถึงกรอบพื้นฐานของสัญญาอัจฉริยะที่เรียกว่าบราวนี่บน Ethereum Brownie ใช้ในการพัฒนา Ethereum smart contracts ความทนทานและใช้งานง่ายสูงมากและมักใช้สำหรับ:
การปรับใช้: ปรับใช้สัญญาจำนวนมากกับบล็อกเชนโดยอัตโนมัติ เริ่มต้นหรือรวมธุรกรรมใด ๆ ที่จำเป็นสำหรับพวกเขา
การโต้ตอบ: เขียนสคริปต์หรือใช้คอนโซลเพื่อโต้ตอบกับสัญญาบน mainnet หรือทำการทดสอบอย่างรวดเร็วในสภาพแวดล้อมท้องถิ่น
การดีบัก: รับข้อมูลโดยละเอียดเมื่อธุรกรรมกำลังกู้คืนเพื่อช่วยให้คุณระบุปัญหาได้อย่างรวดเร็ว
การทดสอบ: เขียนการทดสอบหน่วยใน Python และประเมินความครอบคลุมการทดสอบตามการวิเคราะห์สแต็กเทรซ
ต่อไป มาลองสร้าง smart contract แบบง่ายๆ ใน Solidity ซึ่งเปิดเผยเพียงสองฟังก์ชันภายนอก getValue และ setValue บันทึก smart contract นี้ในไฟล์ smart_contract.sol
ปรับใช้และโต้ตอบกับสัญญาอัจฉริยะนี้ผ่าน Brownie
ติดตั้ง
ความพยายามนี้ใช้ Python3.7 และ virtualenv เพื่อแยกสภาพแวดล้อมของเรา หากไม่ได้ติดตั้ง Python3.7 คุณสามารถทำตามขั้นตอนด้านล่าง
เราจะใช้ Ganache ซึ่งเป็นบล็อกเชนส่วนบุคคลสำหรับการพัฒนา Ethereum คุณยังสามารถติดตั้ง ethereum-testrpc แทนได้ แต่นั่นจะทำให้ไม่สามารถเรียกใช้ GUI ได้ เมื่อติดตั้ง Ganache ให้ทำตามขั้นตอน
สร้างสภาพแวดล้อมเสมือนจริงสำหรับโครงการ Solidity ของคุณ สิ่งนี้ถูกสร้างขึ้นและตั้งชื่อว่า TestBrownie ติดตั้ง Brownie
ในการเริ่มต้นโปรเจ็กต์เปล่า ให้เริ่มด้วยการสร้างโฟลเดอร์ใหม่ ในโฟลเดอร์นั้น พิมพ์:
โครงสร้างโครงการ
โครงการบราวนี่แต่ละโครงการมีโฟลเดอร์ต่อไปนี้:
สัญญา/: แหล่งที่มาของสัญญา
อินเทอร์เฟซ/: แหล่งที่มาของอินเทอร์เฟซ
สคริปต์/: สคริปต์สำหรับการปรับใช้และการโต้ตอบ
การทดสอบ/: สคริปต์สำหรับการทดสอบโครงการ
brownie-config.yaml: ไฟล์การกำหนดค่าโครงการ
โฟลเดอร์เหล่านี้ด้านล่างยังสร้างโดย Brownie และใช้ภายในสำหรับการจัดการโครงการและไม่สามารถแก้ไขหรือลบได้
build/: ข้อมูลโครงการ เช่น สิ่งประดิษฐ์ของคอมไพเลอร์และผลการทดสอบหน่วย
รายงาน/: ไฟล์รายงาน JSON ที่ใช้ใน GUI
รวบรวม
smart_contract.sol คัดลอกสัญญาอัจฉริยะของคุณในไดเรกทอรีสัญญา รวบรวมแหล่งที่มาของสัญญาทั้งหมดในโฟลเดอร์ย่อยของสัญญา/โครงการ:
ทุกครั้งที่คอมไพเลอร์ทำงาน Brownie จะเปรียบเทียบแฮชของแหล่งสัญญาแต่ละแหล่งกับแฮชของเวอร์ชันที่คอมไพล์แล้ว หากสัญญาไม่มีการเปลี่ยนแปลง ก็จะไม่ถูกคอมไพล์ใหม่ ใช้การคอมไพล์ brownie --all หากคุณต้องการบังคับให้คอมไพล์ทั้งโปรเจ็กต์ใหม่
หากคุณต้องการคอมไพล์สัญญา Solidity กับเวอร์ชันอื่น คุณเพียงแค่ระบุสัญญาในคำแนะนำการใช้งานไฟล์ .sol หากไม่มีอยู่ ระบบจะติดตั้งโดยอัตโนมัติ ควรสังเกตที่นี่: การตั้งค่าสำหรับโปรแกรมเปลี่ยนไฟล์จะอยู่ใน brownie-config.yaml
Byzantium: Solidity <=0.5.4
Petersburg: Solidity >=0.5.5< =0.5.12
Istanbul: Solidity >=0.5.13, Vyper
การแก้ไขการตั้งค่าคอมไพเลอร์จะส่งผลให้มีการคอมไพล์โปรเจ็กต์ใหม่ทั้งหมด
หากมีการตั้งค่าเวอร์ชันคอมไพเลอร์ในไฟล์คอนฟิกูเรชัน เวอร์ชันนั้นจะถูกใช้เพื่อคอมไพล์สัญญาทั้งหมดในโครงการ ควรระบุเวอร์ชันเป็นสตริงในรูปแบบ 0.xx
หากตั้งค่าเวอร์ชันเป็น null บราวนี่จะดูโปรแกรมการใช้งานเวอร์ชันสำหรับแต่ละสัญญาและใช้เวอร์ชันคอมไพเลอร์ที่ตรงกันล่าสุดที่ติดตั้ง
เกี่ยวกับ evm_version บราวนี่ตั้งค่าชุดกฎตามคอมไพเลอร์
คุณยังสามารถตั้งค่าเวอร์ชัน EVM ได้ด้วยตนเอง ตัวเลือกที่ใช้ได้ ได้แก่ ไบแซนเทียม คอนสแตนติโนเปิล ปีเตอร์สเบิร์ก และอิสตันบูล นอกจากนี้ยังมีชุดกฎ Ethereum Classic ที่แอตแลนติสและอาการ์ตาซึ่งจะถูกแปลงให้เทียบเท่ากับอีเธอร์ก่อนที่จะส่งไปยังคอมไพเลอร์
หมายเหตุ: Brownie รองรับเวอร์ชัน Solidity >= 0.4.22 และ Vyper เวอร์ชัน 0.1.0-b16
หลังจากคอมไพล์สำเร็จ Brownie จะสร้างไฟล์ SimpleContract.json ในโฟลเดอร์ builds/contract
ปรับใช้
เปิด brownie-config.yaml มีส่วนเครือข่าย คุณสามารถปรับแต่งเครือข่ายที่มีอยู่ หรือสร้างบล็อกใหม่ภายใต้เครือข่าย ที่นี่ใช้ Ganache GUI ที่รันบนพอร์ต 7545
สร้างบล็อกส่วนตัวภายใต้เครือข่าย
บันทึกไฟล์นี้ ตอนนี้ปรับใช้สัญญาอัจฉริยะที่คอมไพล์แล้วโดยใช้คอนโซลบราวนี่ มันคล้ายกับตัวแปล Python ทั่วไปมาก จากโฟลเดอร์โปรเจ็กต์ ให้โหลดโดยพิมพ์:
ตรวจสอบข้ามบัญชีในผลลัพธ์ด้วยบัญชีที่มองเห็นได้บน Ganache GUI
บัญชีส่วนบุคคลแต่ละบัญชีจะแสดงด้วยวัตถุบัญชีที่สามารถดำเนินการได้ เช่น การสอบถามยอดคงเหลือหรือการส่ง ETH
สัญญาและไลบรารีที่ปรับใช้ได้ทั้งหมดมี ContractContainer สำหรับการปรับใช้สัญญาใหม่และเข้าถึงสิ่งที่มีอยู่ สัญญาที่รวบรวมทั้งหมดมีให้ใช้งานเป็นตัวแปรที่มีชื่อเดียวกัน
ปรับใช้สัญญา 0 กับบัญชี:
หากคุณพิมพ์ SimpleContract คุณจะเห็น SimpleContract เป็นรายการของอินสแตนซ์ที่ปรับใช้ของออบเจ็กต์ ContractContainer
ปฏิสัมพันธ์
ดูวิธีการที่มีอยู่ในสัญญานี้:
เริ่มต้นด้วยการตั้งค่าตัวแปรในสัญญาอัจฉริยะ


