Урок 1

ข้อมูลเบื้องต้นเกี่ยวกับการลงคะแนนเสียงแบบกระจายอำนาจและ Remix IDE

ยินดีต้อนรับสู่บทเรียนแรกของหลักสูตรของเราเกี่ยวกับการสร้างระบบการลงคะแนนเสียงแบบกระจายอำนาจ ในบทนี้ เราจะสำรวจแนวคิดของการลงคะแนนเสียงแบบกระจายอำนาจ และทำความเข้าใจประโยชน์ที่จะเกิดขึ้นกับกระบวนการลงคะแนนเสียง นอกจากนี้เรายังจะแนะนำให้คุณรู้จักกับ Remix IDE ซึ่งเป็นเครื่องมืออันทรงพลังที่ใช้สำหรับการพัฒนาและปรับใช้สัญญาอัจฉริยะ Ethereum

การลงคะแนนแบบกระจายอำนาจ

การลงคะแนนแบบกระจายอำนาจหมายถึงระบบการลงคะแนนที่ทำงานบนบล็อกเชน แนวคิดหลักในที่นี้คือการใช้ประโยชน์จากความโปร่งใส ความปลอดภัย และความเปลี่ยนแปลงไม่ได้ที่ได้รับจากเทคโนโลยีบล็อกเชน เพื่อสร้างระบบการลงคะแนนเสียงที่ยากต่อการจัดการและง่ายต่อการตรวจสอบ

ในระบบการลงคะแนนแบบกระจายอำนาจ การลงคะแนนแต่ละครั้งเป็นธุรกรรมบนบล็อกเชนที่ผู้เข้าร่วมทุกคนสามารถมองเห็นได้ แต่มีเพียงผู้มีสิทธิเลือกตั้งเท่านั้นที่สามารถแก้ไขได้จนกว่าจะมีการลงคะแนน เมื่อลงคะแนนแล้ว มันจะถูกบันทึกไว้ในบล็อกเชนและไม่สามารถเปลี่ยนแปลงได้ จึงเป็นกลไกการลงคะแนนที่โปร่งใสและป้องกันการงัดแงะ

ข้อมูลเบื้องต้นเกี่ยวกับ Remix IDE

Remix IDE (Integrated Development Environment) เป็นเครื่องมือโอเพ่นซอร์สที่ทรงพลังซึ่งออกแบบมาโดยเฉพาะสำหรับการพัฒนาสัญญาอัจฉริยะ Ethereum มันทำงานโดยตรงในเว็บเบราว์เซอร์ของคุณ ดังนั้นคุณไม่จำเป็นต้องติดตั้งอะไรลงในคอมพิวเตอร์ของคุณ

คุณสามารถเข้าถึง Remix IDE ได้ที่ https://remix.ethereum.org เมื่อคุณเปิด Remix ในเบราว์เซอร์ คุณจะพบแผงสามแผง:

  1. แผงด้านซ้าย: นี่คือที่ที่คุณสามารถสร้าง นำเข้า และจัดการไฟล์ Solidity ของคุณได้ นอกจากนี้ยังมีปลั๊กอินต่างๆ สำหรับการคอมไพล์ ทดสอบ ดีบัก และปรับใช้สัญญาของคุณ

  2. แผงกลาง: นี่คือเครื่องมือแก้ไขโค้ดของคุณ ที่นี่คุณจะเขียนและแก้ไขโค้ด Solidity ของคุณ

  3. แผงด้านขวา: แผงนี้มีเครื่องมือต่างๆ ในการรวบรวมสัญญาของคุณ ปรับใช้บนเครือข่าย Ethereum (ไม่ว่าจะบนเครือข่าย Ethereum จริงหรือการจำลอง JavaScript VM) และโต้ตอบกับสัญญาที่ปรับใช้ของคุณ

สัญญาอันชาญฉลาดครั้งแรกของคุณ

เรามาเริ่มกันด้วยสัญญา "ผู้ลงคะแนนเสียง" ง่ายๆ สัญญานี้จะติดตามผู้ลงคะแนนเสียงในระบบของเรา

ใน Remix IDE ไปที่ “File Explorer” และคลิกที่ไอคอน “+” เพื่อสร้างไฟล์ใหม่ ตั้งชื่อมันว่า Voter.sol

ตอนนี้เรามาเริ่มเขียนสัญญาของเรากันดีกว่า:

ความแข็งแกร่ง 
 // SPDX-License-Identifier: GPL-3.0 
 ความแข็งแกร่งของ pragma >=0.7.0 <0.9.0; 

 ผู้มีสิทธิเลือกตั้งในสัญญา { 
 // โครงสร้างเพื่อเป็นตัวแทนของบุคคล 
 โครงสร้างบุคคล {
        bool voted;  // if true, that person already voted
        uint vote;   // index of the voted proposal
    }

    // การทำแผนที่เพื่อติดตามผู้มีสิทธิเลือกตั้งทั้งหมด 
 การทำแผนที่ (ที่อยู่ => บุคคล) ผู้มีสิทธิเลือกตั้งสาธารณะ; 

 // ฟังก์ชั่นในการลงทะเบียนผู้มีสิทธิเลือกตั้ง 
 ฟังก์ชั่น registerVoter() สาธารณะ {
        voters[msg.sender].voted = false;
    }
}
  1. ตัวระบุใบอนุญาต SPDX: บรรทัด // SPDX-License-Identifier: GPL-3.0 ระบุว่าสัญญาของเราใช้ GNU General Public License v3.0 นี่คือสิทธิ์การใช้งานซอฟต์แวร์ฟรีที่ใช้กันทั่วไปซึ่งรับประกันว่าผู้ใช้จะมีอิสระในการใช้งาน ศึกษา แบ่งปัน และแก้ไขซอฟต์แวร์

  2. Pragma Directive: pragma solidity >=0.7.0 &lt;0.9.0; คำสั่งระบุว่าสัญญาเขียนในเวอร์ชันของ Solidity ที่มากกว่าหรือเท่ากับ 0.7.0 และน้อยกว่า 0.9.0 ช่วยป้องกันไม่ให้สัญญาถูกคอมไพล์ด้วยคอมไพเลอร์เวอร์ชันใหม่กว่าที่เข้ากันไม่ได้

  3. คำจำกัดความของสัญญา: บล็อก contract Voter {...} กำหนดสัญญาใหม่ชื่อ Voter นี่คือที่ที่เราระบุตัวแปรสถานะและฟังก์ชันของสัญญา

  4. คำจำกัดความของโครงสร้าง: ภายในสัญญา เรากำหนดโครงสร้าง Person ที่แสดงถึงบุคคลในระบบการลงคะแนนของเรา แต่ละ Person มีบูลีน voted ซึ่งบ่งชี้ว่าพวกเขาได้โหวตแล้วหรือไม่ และมีจำนวนเต็ม vote ที่คอยติดตามข้อเสนอที่พวกเขาโหวตให้

  5. ตัวแปรสถานะ: mapping(address => Person) public voters; คำสั่งประกาศผู้มีสิทธิ voters ตัวแปรสถานะที่สร้างการเชื่อมโยงระหว่างที่อยู่ Ethereum และโครงสร้าง Person ซึ่งจะทำให้เราสามารถติดตามได้ว่าใครมีสิทธิ์ลงคะแนนเสียงในระบบและลงคะแนนเสียงใดบ้าง คีย์เวิร์ด public จะสร้างฟังก์ชัน getter สำหรับ voters โดยอัตโนมัติ

  6. คำจำกัดความของฟังก์ชัน: บล็อก function registerVoter() public {...} กำหนดฟังก์ชันสาธารณะที่อนุญาตให้ผู้ใช้ลงทะเบียนตนเองเป็นผู้มีสิทธิเลือกตั้งในระบบ voters[msg.sender].voted = false; คำสั่งกำหนดสถานะ voted ของผู้มีสิทธิเลือกตั้งใหม่เป็น false
    แค่นั้นแหละสำหรับสัญญานี้! เมื่อเราดำเนินการผ่านหลักสูตรนี้ เราจะขยายสัญญานี้โดยเพิ่มฟังก์ชันเพิ่มเติมสำหรับกระบวนการลงคะแนนเสียง อย่าลืมคอมไพล์และทดสอบโค้ดของคุณเป็นประจำเพื่อให้แน่ใจว่าทุกอย่างทำงานได้ตามที่คาดหวัง ใน Remix IDE คุณสามารถคอมไพล์สัญญาของคุณได้โดยคลิกที่ไอคอนคอมไพเลอร์ Solidity ที่แถบด้านข้างซ้าย (อันที่สามจากด้านบน) จากนั้นคลิกที่ปุ่ม "คอมไพล์"

ในบทถัดไป เราจะเรียนรู้วิธีอนุญาตให้ผู้ลงคะแนนที่ลงทะเบียนลงคะแนนเสียง และใช้ตรรกะสำหรับระบบการลงคะแนนเสียง แต่สำหรับตอนนี้ ลองพิจารณาสัญญาและทำความคุ้นเคยกับสภาพแวดล้อมของ Remix คุณเพิ่งก้าวเข้าสู่โลกแห่งการพัฒนาสัญญาอัจฉริยะ!

Відмова від відповідальності
* Криптоінвестиції пов'язані зі значними ризиками. Дійте обережно. Курс не є інвестиційною консультацією.
* Курс створений автором, який приєднався до Gate Learn. Будь-яка думка, висловлена автором, не є позицією Gate Learn.
Каталог
Урок 1

ข้อมูลเบื้องต้นเกี่ยวกับการลงคะแนนเสียงแบบกระจายอำนาจและ Remix IDE

ยินดีต้อนรับสู่บทเรียนแรกของหลักสูตรของเราเกี่ยวกับการสร้างระบบการลงคะแนนเสียงแบบกระจายอำนาจ ในบทนี้ เราจะสำรวจแนวคิดของการลงคะแนนเสียงแบบกระจายอำนาจ และทำความเข้าใจประโยชน์ที่จะเกิดขึ้นกับกระบวนการลงคะแนนเสียง นอกจากนี้เรายังจะแนะนำให้คุณรู้จักกับ Remix IDE ซึ่งเป็นเครื่องมืออันทรงพลังที่ใช้สำหรับการพัฒนาและปรับใช้สัญญาอัจฉริยะ Ethereum

การลงคะแนนแบบกระจายอำนาจ

การลงคะแนนแบบกระจายอำนาจหมายถึงระบบการลงคะแนนที่ทำงานบนบล็อกเชน แนวคิดหลักในที่นี้คือการใช้ประโยชน์จากความโปร่งใส ความปลอดภัย และความเปลี่ยนแปลงไม่ได้ที่ได้รับจากเทคโนโลยีบล็อกเชน เพื่อสร้างระบบการลงคะแนนเสียงที่ยากต่อการจัดการและง่ายต่อการตรวจสอบ

ในระบบการลงคะแนนแบบกระจายอำนาจ การลงคะแนนแต่ละครั้งเป็นธุรกรรมบนบล็อกเชนที่ผู้เข้าร่วมทุกคนสามารถมองเห็นได้ แต่มีเพียงผู้มีสิทธิเลือกตั้งเท่านั้นที่สามารถแก้ไขได้จนกว่าจะมีการลงคะแนน เมื่อลงคะแนนแล้ว มันจะถูกบันทึกไว้ในบล็อกเชนและไม่สามารถเปลี่ยนแปลงได้ จึงเป็นกลไกการลงคะแนนที่โปร่งใสและป้องกันการงัดแงะ

ข้อมูลเบื้องต้นเกี่ยวกับ Remix IDE

Remix IDE (Integrated Development Environment) เป็นเครื่องมือโอเพ่นซอร์สที่ทรงพลังซึ่งออกแบบมาโดยเฉพาะสำหรับการพัฒนาสัญญาอัจฉริยะ Ethereum มันทำงานโดยตรงในเว็บเบราว์เซอร์ของคุณ ดังนั้นคุณไม่จำเป็นต้องติดตั้งอะไรลงในคอมพิวเตอร์ของคุณ

คุณสามารถเข้าถึง Remix IDE ได้ที่ https://remix.ethereum.org เมื่อคุณเปิด Remix ในเบราว์เซอร์ คุณจะพบแผงสามแผง:

  1. แผงด้านซ้าย: นี่คือที่ที่คุณสามารถสร้าง นำเข้า และจัดการไฟล์ Solidity ของคุณได้ นอกจากนี้ยังมีปลั๊กอินต่างๆ สำหรับการคอมไพล์ ทดสอบ ดีบัก และปรับใช้สัญญาของคุณ

  2. แผงกลาง: นี่คือเครื่องมือแก้ไขโค้ดของคุณ ที่นี่คุณจะเขียนและแก้ไขโค้ด Solidity ของคุณ

  3. แผงด้านขวา: แผงนี้มีเครื่องมือต่างๆ ในการรวบรวมสัญญาของคุณ ปรับใช้บนเครือข่าย Ethereum (ไม่ว่าจะบนเครือข่าย Ethereum จริงหรือการจำลอง JavaScript VM) และโต้ตอบกับสัญญาที่ปรับใช้ของคุณ

สัญญาอันชาญฉลาดครั้งแรกของคุณ

เรามาเริ่มกันด้วยสัญญา "ผู้ลงคะแนนเสียง" ง่ายๆ สัญญานี้จะติดตามผู้ลงคะแนนเสียงในระบบของเรา

ใน Remix IDE ไปที่ “File Explorer” และคลิกที่ไอคอน “+” เพื่อสร้างไฟล์ใหม่ ตั้งชื่อมันว่า Voter.sol

ตอนนี้เรามาเริ่มเขียนสัญญาของเรากันดีกว่า:

ความแข็งแกร่ง 
 // SPDX-License-Identifier: GPL-3.0 
 ความแข็งแกร่งของ pragma >=0.7.0 <0.9.0; 

 ผู้มีสิทธิเลือกตั้งในสัญญา { 
 // โครงสร้างเพื่อเป็นตัวแทนของบุคคล 
 โครงสร้างบุคคล {
        bool voted;  // if true, that person already voted
        uint vote;   // index of the voted proposal
    }

    // การทำแผนที่เพื่อติดตามผู้มีสิทธิเลือกตั้งทั้งหมด 
 การทำแผนที่ (ที่อยู่ => บุคคล) ผู้มีสิทธิเลือกตั้งสาธารณะ; 

 // ฟังก์ชั่นในการลงทะเบียนผู้มีสิทธิเลือกตั้ง 
 ฟังก์ชั่น registerVoter() สาธารณะ {
        voters[msg.sender].voted = false;
    }
}
  1. ตัวระบุใบอนุญาต SPDX: บรรทัด // SPDX-License-Identifier: GPL-3.0 ระบุว่าสัญญาของเราใช้ GNU General Public License v3.0 นี่คือสิทธิ์การใช้งานซอฟต์แวร์ฟรีที่ใช้กันทั่วไปซึ่งรับประกันว่าผู้ใช้จะมีอิสระในการใช้งาน ศึกษา แบ่งปัน และแก้ไขซอฟต์แวร์

  2. Pragma Directive: pragma solidity >=0.7.0 &lt;0.9.0; คำสั่งระบุว่าสัญญาเขียนในเวอร์ชันของ Solidity ที่มากกว่าหรือเท่ากับ 0.7.0 และน้อยกว่า 0.9.0 ช่วยป้องกันไม่ให้สัญญาถูกคอมไพล์ด้วยคอมไพเลอร์เวอร์ชันใหม่กว่าที่เข้ากันไม่ได้

  3. คำจำกัดความของสัญญา: บล็อก contract Voter {...} กำหนดสัญญาใหม่ชื่อ Voter นี่คือที่ที่เราระบุตัวแปรสถานะและฟังก์ชันของสัญญา

  4. คำจำกัดความของโครงสร้าง: ภายในสัญญา เรากำหนดโครงสร้าง Person ที่แสดงถึงบุคคลในระบบการลงคะแนนของเรา แต่ละ Person มีบูลีน voted ซึ่งบ่งชี้ว่าพวกเขาได้โหวตแล้วหรือไม่ และมีจำนวนเต็ม vote ที่คอยติดตามข้อเสนอที่พวกเขาโหวตให้

  5. ตัวแปรสถานะ: mapping(address => Person) public voters; คำสั่งประกาศผู้มีสิทธิ voters ตัวแปรสถานะที่สร้างการเชื่อมโยงระหว่างที่อยู่ Ethereum และโครงสร้าง Person ซึ่งจะทำให้เราสามารถติดตามได้ว่าใครมีสิทธิ์ลงคะแนนเสียงในระบบและลงคะแนนเสียงใดบ้าง คีย์เวิร์ด public จะสร้างฟังก์ชัน getter สำหรับ voters โดยอัตโนมัติ

  6. คำจำกัดความของฟังก์ชัน: บล็อก function registerVoter() public {...} กำหนดฟังก์ชันสาธารณะที่อนุญาตให้ผู้ใช้ลงทะเบียนตนเองเป็นผู้มีสิทธิเลือกตั้งในระบบ voters[msg.sender].voted = false; คำสั่งกำหนดสถานะ voted ของผู้มีสิทธิเลือกตั้งใหม่เป็น false
    แค่นั้นแหละสำหรับสัญญานี้! เมื่อเราดำเนินการผ่านหลักสูตรนี้ เราจะขยายสัญญานี้โดยเพิ่มฟังก์ชันเพิ่มเติมสำหรับกระบวนการลงคะแนนเสียง อย่าลืมคอมไพล์และทดสอบโค้ดของคุณเป็นประจำเพื่อให้แน่ใจว่าทุกอย่างทำงานได้ตามที่คาดหวัง ใน Remix IDE คุณสามารถคอมไพล์สัญญาของคุณได้โดยคลิกที่ไอคอนคอมไพเลอร์ Solidity ที่แถบด้านข้างซ้าย (อันที่สามจากด้านบน) จากนั้นคลิกที่ปุ่ม "คอมไพล์"

ในบทถัดไป เราจะเรียนรู้วิธีอนุญาตให้ผู้ลงคะแนนที่ลงทะเบียนลงคะแนนเสียง และใช้ตรรกะสำหรับระบบการลงคะแนนเสียง แต่สำหรับตอนนี้ ลองพิจารณาสัญญาและทำความคุ้นเคยกับสภาพแวดล้อมของ Remix คุณเพิ่งก้าวเข้าสู่โลกแห่งการพัฒนาสัญญาอัจฉริยะ!

Відмова від відповідальності
* Криптоінвестиції пов'язані зі значними ризиками. Дійте обережно. Курс не є інвестиційною консультацією.
* Курс створений автором, який приєднався до Gate Learn. Будь-яка думка, висловлена автором, не є позицією Gate Learn.