ยินดีต้อนรับสู่บทที่ 3! ในบทนี้ เราจะมุ่งเน้นไปที่การประยุกต์ใช้แนวคิดและไวยากรณ์ที่เราได้เรียนรู้จากบทเรียนก่อนหน้านี้เพื่อพัฒนาสัญญาอัจฉริยะ Ethereum โดยใช้ Vyper กับ Remix IDE เราจะสร้าง ปรับใช้ และโต้ตอบกับสัญญาอัจฉริยะง่ายๆ เพื่อให้คุณสัมผัสประสบการณ์จริงกับ Vyper และ Ethereum สัญญาฉบับแรกจะเป็นสัญญาการจัดเก็บข้อมูลอย่างง่าย ในขณะที่สัญญาฉบับที่สองจะจำลองระบบการลงคะแนนขั้นพื้นฐาน
สัญญาแรกที่เราจะปรับใช้คือ SimpleStorage
สัญญานี้เป็นสัญญาการจัดเก็บข้อมูลแบบธรรมดาที่จัดเก็บหมายเลขเดียวตามชื่อ SimpleStorage
ประกอบด้วยตัวแปร storedData
และสองฟังก์ชันคือ set
และ get
ฟังก์ชัน set
ช่วยให้ผู้ใช้สามารถจัดเก็บตัวเลขได้ และฟังก์ชัน get
ช่วยให้ใครก็ตามสามารถดึงข้อมูลหมายเลขนี้ได้
เราจะทำตามขั้นตอนต่างๆ เพื่อปรับใช้และโต้ตอบกับสัญญา SimpleStorage
บน Ethereum blockchain การปรับใช้สัญญากับบล็อกเชน Ethereum เป็นกระบวนการในการส่งไบต์โค้ดและ ABI ของสัญญาไปยังเครือข่าย Ethereum จากจุดที่สามารถเรียกและดำเนินการได้ เมื่อปรับใช้สัญญาแล้ว สัญญาจะได้รับที่อยู่เฉพาะที่สามารถติดต่อได้
นี่คือรหัสสำหรับ SimpleStorage
:
Python
# @title SimpleStorage
ข้อมูลที่เก็บไว้: int128
@external
def set (x: int128):
self.storedData = x
@external
def get () -> int128:
ส่งคืน self.storedData
ในสัญญานี้ เรากำหนดตัวแปรจำนวนเต็มสาธารณะ storedData
set(x: int128)
เพื่อตั้งค่าของ storedData
และฟังก์ชันคงที่สาธารณะ get() -> int128
เพื่อดึงค่าปัจจุบันของ storedData
คำแนะนำทีละขั้นตอนเกี่ยวกับวิธีการปรับใช้สัญญานี้โดยใช้ Remix:
เปิดเว็บเบราว์เซอร์ของคุณแล้วไปที่ Remix Ethereum IDE
เปิดใช้งานปลั๊กอิน Vyper
สลับสภาพแวดล้อมเป็น Injected Web3
ในส่วน Deploy & Run Transactions
วิธีนี้จะเชื่อมต่อ Remix กับกระเป๋าเงิน MetaMask ของคุณ
ในส่วน File Explorer
คลิกที่ไอคอน +
เพื่อสร้างไฟล์ใหม่ ตั้งชื่อมันว่า SimpleStorage.vy
วางรหัสสัญญา SimpleStorage
ลงในไฟล์ใหม่นี้
ตอนนี้ไปที่แท็บ VyperCompile
และเลือกสัญญา SimpleStorage
สลับไปที่แท็บ Deploy & Run Transactions
จากนั้นคลิกที่ปุ่ม Deploy
MetaMask จะเปิดป๊อปอัปยืนยันธุรกรรม ยืนยันการทำธุรกรรม
หลังจากยืนยันธุรกรรมแล้ว คุณจะเห็นสัญญา SimpleStorage
ที่ปรับใช้ในส่วน Deployed Contracts
ตอนนี้คุณสามารถโต้ตอบกับสัญญาได้แล้ว ตัวอย่างเช่น หากต้องการจัดเก็บตัวเลข ให้ป้อนตัวเลขในฟังก์ชัน set
แล้วคลิก transact
หากต้องการดึงหมายเลขที่เก็บไว้ให้คลิก get
หลังจากที่เราเริ่มใช้งาน SimpleStorage
แล้ว เราจะเข้าสู่สิ่งที่ซับซ้อนกว่านี้เล็กน้อย: SimpleVoting
สัญญา SimpleVoting
จะจำลองระบบการลงคะแนนเสียงแบบธรรมดา เราจะมีรายชื่อผู้สมัคร โดยแต่ละรายการจะแสดงเป็นสตริง ผู้ใช้จะสามารถลงคะแนนให้ผู้สมัครเหล่านี้ได้ และเราจะติดตามจำนวนคะแนนที่ผู้สมัครแต่ละคนได้รับ สัญญาจะจัดให้มีฟังก์ชันในการเพิ่มผู้สมัคร ลงคะแนนให้ผู้สมัคร และรับคะแนนทั้งหมดที่ผู้สมัครได้รับ
สัญญา SimpleVoting
นั้นซับซ้อนกว่า SimpleStorage
เล็กน้อย ใน SimpleVoting
เราจะมีรายชื่อผู้สมัคร โดยแต่ละรายการจะแสดงด้วยสตริง
นี่คือรหัสสำหรับ SimpleVoting
:
Python
# สัญญาการลงคะแนนเสียงของ Vyper
# ประกาศตัวแปรสถานะ `โหวต` เป็น HashMap เพื่อจัดเก็บคะแนนโหวตสำหรับผู้สมัครแต่ละคน
โหวต: HashMap [bytes32, uint256]
@ ภายนอก
def โหวต (ผู้สมัคร: bytes32):
"""
ลงคะแนนให้ผู้สมัคร
อาร์กิวเมนต์: ผู้สมัคร
คน: bytes32 - ตัวระบุของผู้สมัครที่จะลงคะแนนให้
"""
# เพิ่มการนับคะแนนของผู้สมัครที่ระบุ
self.votes[ผู้สมัคร] += 1
@external
@view
def get_votes(candidate: bytes32) -> uint256:
"""
รับจำนวนโหวตทั้งหมดสำหรับผู้สมัคร
อาร์กิวเมนต์: ผู้สมัคร
คน: bytes32 - ตัวระบุของผู้สมัครที่จะรับคะแนนโหวต
ส่งคืน:
uint256 - จำนวนคะแนนเสียงทั้งหมดที่ผู้สมัครได้รับ
"""
คืน self.votes [ผู้สมัคร]
สัญญานี้ค่อนข้างพื้นฐาน โดยไม่มีข้อควรระวังเกี่ยวกับการลงคะแนนเสียงสองครั้งหรือไม่ได้รับอนุญาต ในทางปฏิบัติ คุณจะต้องรวมขั้นตอนเพื่อป้องกันปัญหาเหล่านี้ เช่น การลงทะเบียนผู้มีสิทธิเลือกตั้งและการตรวจสอบเพื่อให้แน่ใจว่าแต่ละที่อยู่สามารถลงคะแนนเสียงได้เพียงครั้งเดียว
คุณได้สร้างพื้นฐานที่มั่นคงสำหรับการเขียนโปรแกรมบล็อคเชนกับ Vyper เมื่อจบหลักสูตรนี้ ตอนนี้คุณมีความเข้าใจอย่างมั่นคงเกี่ยวกับ Ethereum, สัญญาอัจฉริยะ และวิธีการสร้างมันใน Remix IDE ด้วย Vyper ความเข้าใจนี้เปิดโอกาสให้โลกแห่งการพัฒนาแอปพลิเคชันแบบกระจายอำนาจและการมีส่วนร่วมในระบบนิเวศบล็อกเชน
เพื่อพัฒนาทักษะและความรู้ของคุณเพิ่มเติม ให้พิจารณาสำรวจด้านต่อไปนี้:
การเขียนโปรแกรม Solidity ขั้นสูง: Solidity เป็นอีกหนึ่งภาษาการเขียนโปรแกรมยอดนิยมสำหรับ Ethereum smart Contract Learning Solidity จะขยายความสามารถของคุณในการทำงานกับสัญญาที่มีอยู่และสนับสนุนชุมชน Ethereum ตรวจสอบหลักสูตรของเราที่นี่: [แทรกลิงก์หลักสูตร Solidity เมื่อออนไลน์]
การพัฒนาแอปพลิเคชันแบบกระจายอำนาจ (DApp): เจาะลึกลงไปอีกในการสร้างแอปพลิเคชันแบบกระจายอำนาจที่สมบูรณ์โดยการรวมสัญญาอัจฉริยะเข้ากับการพัฒนาส่วนหน้าโดยใช้เฟรมเวิร์ก เช่น Web3.js, React หรือ Vue.js สิ่งนี้จะช่วยให้คุณสามารถสร้างส่วนต่อประสานผู้ใช้แบบโต้ตอบที่โต้ตอบกับสัญญาอัจฉริยะของคุณ
การรักษาความปลอดภัยและการตรวจสอบ: สำรวจแนวทางปฏิบัติที่ดีที่สุดในการรักษาสัญญาอัจฉริยะและดำเนินการตรวจสอบโค้ดอย่างละเอียด การทำความเข้าใจช่องโหว่ที่อาจเกิดขึ้นและการลดความเสี่ยงจะช่วยให้มั่นใจในความน่าเชื่อถือและความปลอดภัยของสัญญาอัจฉริยะของคุณ
การทำงานร่วมกันของบล็อคเชน: ตรวจสอบการบูรณาการเครือข่ายและโปรโตคอลบล็อคเชนที่แตกต่างกัน เรียนรู้เกี่ยวกับการสื่อสารข้ามสายโซ่และการพัฒนาสัญญาอัจฉริยะที่ทำงานร่วมกันได้ซึ่งสามารถโต้ตอบกับบล็อกเชนหลายรายการได้
โปรดจำไว้ว่าเทคโนโลยีบล็อกเชนมีการพัฒนาอยู่ตลอดเวลา และจำเป็นอย่างยิ่งที่จะต้องคอยอัปเดตความก้าวหน้าล่าสุดอยู่เสมอ มีส่วนร่วมกับชุมชนบล็อกเชน มีส่วนร่วมอย่างแข็งขันในการสนทนา และสำรวจแนวคิดและเทคโนโลยีใหม่ ๆ เพื่อรับทราบข้อมูลและอัปเดตอยู่เสมอ
ยินดีต้อนรับสู่บทที่ 3! ในบทนี้ เราจะมุ่งเน้นไปที่การประยุกต์ใช้แนวคิดและไวยากรณ์ที่เราได้เรียนรู้จากบทเรียนก่อนหน้านี้เพื่อพัฒนาสัญญาอัจฉริยะ Ethereum โดยใช้ Vyper กับ Remix IDE เราจะสร้าง ปรับใช้ และโต้ตอบกับสัญญาอัจฉริยะง่ายๆ เพื่อให้คุณสัมผัสประสบการณ์จริงกับ Vyper และ Ethereum สัญญาฉบับแรกจะเป็นสัญญาการจัดเก็บข้อมูลอย่างง่าย ในขณะที่สัญญาฉบับที่สองจะจำลองระบบการลงคะแนนขั้นพื้นฐาน
สัญญาแรกที่เราจะปรับใช้คือ SimpleStorage
สัญญานี้เป็นสัญญาการจัดเก็บข้อมูลแบบธรรมดาที่จัดเก็บหมายเลขเดียวตามชื่อ SimpleStorage
ประกอบด้วยตัวแปร storedData
และสองฟังก์ชันคือ set
และ get
ฟังก์ชัน set
ช่วยให้ผู้ใช้สามารถจัดเก็บตัวเลขได้ และฟังก์ชัน get
ช่วยให้ใครก็ตามสามารถดึงข้อมูลหมายเลขนี้ได้
เราจะทำตามขั้นตอนต่างๆ เพื่อปรับใช้และโต้ตอบกับสัญญา SimpleStorage
บน Ethereum blockchain การปรับใช้สัญญากับบล็อกเชน Ethereum เป็นกระบวนการในการส่งไบต์โค้ดและ ABI ของสัญญาไปยังเครือข่าย Ethereum จากจุดที่สามารถเรียกและดำเนินการได้ เมื่อปรับใช้สัญญาแล้ว สัญญาจะได้รับที่อยู่เฉพาะที่สามารถติดต่อได้
นี่คือรหัสสำหรับ SimpleStorage
:
Python
# @title SimpleStorage
ข้อมูลที่เก็บไว้: int128
@external
def set (x: int128):
self.storedData = x
@external
def get () -> int128:
ส่งคืน self.storedData
ในสัญญานี้ เรากำหนดตัวแปรจำนวนเต็มสาธารณะ storedData
set(x: int128)
เพื่อตั้งค่าของ storedData
และฟังก์ชันคงที่สาธารณะ get() -> int128
เพื่อดึงค่าปัจจุบันของ storedData
คำแนะนำทีละขั้นตอนเกี่ยวกับวิธีการปรับใช้สัญญานี้โดยใช้ Remix:
เปิดเว็บเบราว์เซอร์ของคุณแล้วไปที่ Remix Ethereum IDE
เปิดใช้งานปลั๊กอิน Vyper
สลับสภาพแวดล้อมเป็น Injected Web3
ในส่วน Deploy & Run Transactions
วิธีนี้จะเชื่อมต่อ Remix กับกระเป๋าเงิน MetaMask ของคุณ
ในส่วน File Explorer
คลิกที่ไอคอน +
เพื่อสร้างไฟล์ใหม่ ตั้งชื่อมันว่า SimpleStorage.vy
วางรหัสสัญญา SimpleStorage
ลงในไฟล์ใหม่นี้
ตอนนี้ไปที่แท็บ VyperCompile
และเลือกสัญญา SimpleStorage
สลับไปที่แท็บ Deploy & Run Transactions
จากนั้นคลิกที่ปุ่ม Deploy
MetaMask จะเปิดป๊อปอัปยืนยันธุรกรรม ยืนยันการทำธุรกรรม
หลังจากยืนยันธุรกรรมแล้ว คุณจะเห็นสัญญา SimpleStorage
ที่ปรับใช้ในส่วน Deployed Contracts
ตอนนี้คุณสามารถโต้ตอบกับสัญญาได้แล้ว ตัวอย่างเช่น หากต้องการจัดเก็บตัวเลข ให้ป้อนตัวเลขในฟังก์ชัน set
แล้วคลิก transact
หากต้องการดึงหมายเลขที่เก็บไว้ให้คลิก get
หลังจากที่เราเริ่มใช้งาน SimpleStorage
แล้ว เราจะเข้าสู่สิ่งที่ซับซ้อนกว่านี้เล็กน้อย: SimpleVoting
สัญญา SimpleVoting
จะจำลองระบบการลงคะแนนเสียงแบบธรรมดา เราจะมีรายชื่อผู้สมัคร โดยแต่ละรายการจะแสดงเป็นสตริง ผู้ใช้จะสามารถลงคะแนนให้ผู้สมัครเหล่านี้ได้ และเราจะติดตามจำนวนคะแนนที่ผู้สมัครแต่ละคนได้รับ สัญญาจะจัดให้มีฟังก์ชันในการเพิ่มผู้สมัคร ลงคะแนนให้ผู้สมัคร และรับคะแนนทั้งหมดที่ผู้สมัครได้รับ
สัญญา SimpleVoting
นั้นซับซ้อนกว่า SimpleStorage
เล็กน้อย ใน SimpleVoting
เราจะมีรายชื่อผู้สมัคร โดยแต่ละรายการจะแสดงด้วยสตริง
นี่คือรหัสสำหรับ SimpleVoting
:
Python
# สัญญาการลงคะแนนเสียงของ Vyper
# ประกาศตัวแปรสถานะ `โหวต` เป็น HashMap เพื่อจัดเก็บคะแนนโหวตสำหรับผู้สมัครแต่ละคน
โหวต: HashMap [bytes32, uint256]
@ ภายนอก
def โหวต (ผู้สมัคร: bytes32):
"""
ลงคะแนนให้ผู้สมัคร
อาร์กิวเมนต์: ผู้สมัคร
คน: bytes32 - ตัวระบุของผู้สมัครที่จะลงคะแนนให้
"""
# เพิ่มการนับคะแนนของผู้สมัครที่ระบุ
self.votes[ผู้สมัคร] += 1
@external
@view
def get_votes(candidate: bytes32) -> uint256:
"""
รับจำนวนโหวตทั้งหมดสำหรับผู้สมัคร
อาร์กิวเมนต์: ผู้สมัคร
คน: bytes32 - ตัวระบุของผู้สมัครที่จะรับคะแนนโหวต
ส่งคืน:
uint256 - จำนวนคะแนนเสียงทั้งหมดที่ผู้สมัครได้รับ
"""
คืน self.votes [ผู้สมัคร]
สัญญานี้ค่อนข้างพื้นฐาน โดยไม่มีข้อควรระวังเกี่ยวกับการลงคะแนนเสียงสองครั้งหรือไม่ได้รับอนุญาต ในทางปฏิบัติ คุณจะต้องรวมขั้นตอนเพื่อป้องกันปัญหาเหล่านี้ เช่น การลงทะเบียนผู้มีสิทธิเลือกตั้งและการตรวจสอบเพื่อให้แน่ใจว่าแต่ละที่อยู่สามารถลงคะแนนเสียงได้เพียงครั้งเดียว
คุณได้สร้างพื้นฐานที่มั่นคงสำหรับการเขียนโปรแกรมบล็อคเชนกับ Vyper เมื่อจบหลักสูตรนี้ ตอนนี้คุณมีความเข้าใจอย่างมั่นคงเกี่ยวกับ Ethereum, สัญญาอัจฉริยะ และวิธีการสร้างมันใน Remix IDE ด้วย Vyper ความเข้าใจนี้เปิดโอกาสให้โลกแห่งการพัฒนาแอปพลิเคชันแบบกระจายอำนาจและการมีส่วนร่วมในระบบนิเวศบล็อกเชน
เพื่อพัฒนาทักษะและความรู้ของคุณเพิ่มเติม ให้พิจารณาสำรวจด้านต่อไปนี้:
การเขียนโปรแกรม Solidity ขั้นสูง: Solidity เป็นอีกหนึ่งภาษาการเขียนโปรแกรมยอดนิยมสำหรับ Ethereum smart Contract Learning Solidity จะขยายความสามารถของคุณในการทำงานกับสัญญาที่มีอยู่และสนับสนุนชุมชน Ethereum ตรวจสอบหลักสูตรของเราที่นี่: [แทรกลิงก์หลักสูตร Solidity เมื่อออนไลน์]
การพัฒนาแอปพลิเคชันแบบกระจายอำนาจ (DApp): เจาะลึกลงไปอีกในการสร้างแอปพลิเคชันแบบกระจายอำนาจที่สมบูรณ์โดยการรวมสัญญาอัจฉริยะเข้ากับการพัฒนาส่วนหน้าโดยใช้เฟรมเวิร์ก เช่น Web3.js, React หรือ Vue.js สิ่งนี้จะช่วยให้คุณสามารถสร้างส่วนต่อประสานผู้ใช้แบบโต้ตอบที่โต้ตอบกับสัญญาอัจฉริยะของคุณ
การรักษาความปลอดภัยและการตรวจสอบ: สำรวจแนวทางปฏิบัติที่ดีที่สุดในการรักษาสัญญาอัจฉริยะและดำเนินการตรวจสอบโค้ดอย่างละเอียด การทำความเข้าใจช่องโหว่ที่อาจเกิดขึ้นและการลดความเสี่ยงจะช่วยให้มั่นใจในความน่าเชื่อถือและความปลอดภัยของสัญญาอัจฉริยะของคุณ
การทำงานร่วมกันของบล็อคเชน: ตรวจสอบการบูรณาการเครือข่ายและโปรโตคอลบล็อคเชนที่แตกต่างกัน เรียนรู้เกี่ยวกับการสื่อสารข้ามสายโซ่และการพัฒนาสัญญาอัจฉริยะที่ทำงานร่วมกันได้ซึ่งสามารถโต้ตอบกับบล็อกเชนหลายรายการได้
โปรดจำไว้ว่าเทคโนโลยีบล็อกเชนมีการพัฒนาอยู่ตลอดเวลา และจำเป็นอย่างยิ่งที่จะต้องคอยอัปเดตความก้าวหน้าล่าสุดอยู่เสมอ มีส่วนร่วมกับชุมชนบล็อกเชน มีส่วนร่วมอย่างแข็งขันในการสนทนา และสำรวจแนวคิดและเทคโนโลยีใหม่ ๆ เพื่อรับทราบข้อมูลและอัปเดตอยู่เสมอ