Lesson 4

การสร้างสัญญา FIFO

ในบทนี้ เราจะเจาะลึกตัวอย่างที่ซับซ้อนยิ่งขึ้นของสัญญา SmartPy: คิวเข้าก่อนออกก่อน (FIFO) FIFO เป็นวิธีการจัดระเบียบและจัดการบัฟเฟอร์ข้อมูล โดยที่รายการเก่าที่สุด (รายการแรก) หรือ 'ส่วนหัว' ของคิวจะถูกประมวลผลก่อน

ทฤษฎี

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

ที่มา: Invostopedia

ในบริบทของสัญญาอัจฉริยะ การใช้คิว FIFO จะมีประโยชน์สำหรับหลายๆ สถานการณ์ เช่น ระบบคิวที่ยุติธรรมซึ่งทุกคนจะได้รับบริการ (หรือประมวลผล) ตามลำดับที่เข้ามา

ใช้ได้จริง

เรามาเขียนสัญญา FIFO กันดีกว่า การดำเนินการหลักสำหรับสัญญาของเราคือ push เพื่อเพิ่มองค์ประกอบลงในคิว และ pop เพื่อลบองค์ประกอบออกจากคิว

สัญญาจะจัดเก็บคิวไว้ในรายการในพื้นที่จัดเก็บข้อมูล และการดำเนินการ push ทุกครั้งจะเพิ่มองค์ประกอบต่อท้ายรายการ ในขณะที่การดำเนินการ pop ทุกครั้งจะลบองค์ประกอบออกจากจุดเริ่มต้นของรายการ

สัญญาอาจมีลักษณะดังนี้:

Python 
 นำเข้า smartpy เป็น sp 


 @sp.module 
 def main(): 
 # คลาส Fifo กำหนดสัญญาง่ายๆ ที่จัดการคำสั่งแบบพุชและป๊อป 
 # บนพื้นฐานเข้าก่อนออกก่อน

    คลาส SimpleFifo (sp.Contract): 
 def __init__(ตนเอง): 
 self.data.first = 0 
 self.data.last = -1 
 self.data.saved = {} 

 @sp.entrypoint 
 def ป๊อป (ตัวเอง): 
 ยืนยัน self.data.first < self.data.last 
 del self.data.saved [self.data.first]
            self.data.first += 1 

 @sp.entrypoint 
 def push (ตนเององค์ประกอบ): 
 self.data.last += 1 
 self.data.saved [self.data.last] = องค์ประกอบ 

 @sp.onchain_view 
 def head(self): 
 return self.data.saved[self.data.first]


หาก "เทมเพลต" ไม่ได้อยู่ใน __name__: 

 @sp.add_test(name="Fifo") 
 def test(): 
 สถานการณ์ = sp.test_scenario(main)
        สถานการณ์.h1("ง่าย สัญญา Fifo") 
 c1 = main.SimpleFifo() 
 สถานการณ์ += c1 
 c1.push(4) 
 c1.push(5) 
 c1.push(6) 
 c1.push(7) 
 c1.pop( ) 
 สถานการณ์ ตรวจสอบ (sp.View (c1, "หัว") () == 5)

วิธีทดสอบสัญญา FIFO:

ขั้นตอนที่ 1: คัดลอกรหัสสัญญาและวางลงใน SmartPy IDE

ขั้นตอนที่ 2: คลิกปุ่ม Run ที่ด้านบนขวาเพื่อรวบรวมและจำลองสัญญา

ขั้นตอนที่ 3: ตรวจสอบทางด้านขวาของ IDE เพื่อดูผลการจำลอง คุณจะเห็นสถานะของพื้นที่จัดเก็บตามสัญญาหลังการดำเนินการแต่ละครั้ง

ขั้นตอนที่ 4: ทดลองโดยเปลี่ยนลำดับการดำเนินการหรือเพิ่มการดำเนินการใหม่

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

Disclaimer
* Crypto investment involves significant risks. Please proceed with caution. The course is not intended as investment advice.
* The course is created by the author who has joined Gate Learn. Any opinion shared by the author does not represent Gate Learn.
Catalog
Lesson 4

การสร้างสัญญา FIFO

ในบทนี้ เราจะเจาะลึกตัวอย่างที่ซับซ้อนยิ่งขึ้นของสัญญา SmartPy: คิวเข้าก่อนออกก่อน (FIFO) FIFO เป็นวิธีการจัดระเบียบและจัดการบัฟเฟอร์ข้อมูล โดยที่รายการเก่าที่สุด (รายการแรก) หรือ 'ส่วนหัว' ของคิวจะถูกประมวลผลก่อน

ทฤษฎี

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

ที่มา: Invostopedia

ในบริบทของสัญญาอัจฉริยะ การใช้คิว FIFO จะมีประโยชน์สำหรับหลายๆ สถานการณ์ เช่น ระบบคิวที่ยุติธรรมซึ่งทุกคนจะได้รับบริการ (หรือประมวลผล) ตามลำดับที่เข้ามา

ใช้ได้จริง

เรามาเขียนสัญญา FIFO กันดีกว่า การดำเนินการหลักสำหรับสัญญาของเราคือ push เพื่อเพิ่มองค์ประกอบลงในคิว และ pop เพื่อลบองค์ประกอบออกจากคิว

สัญญาจะจัดเก็บคิวไว้ในรายการในพื้นที่จัดเก็บข้อมูล และการดำเนินการ push ทุกครั้งจะเพิ่มองค์ประกอบต่อท้ายรายการ ในขณะที่การดำเนินการ pop ทุกครั้งจะลบองค์ประกอบออกจากจุดเริ่มต้นของรายการ

สัญญาอาจมีลักษณะดังนี้:

Python 
 นำเข้า smartpy เป็น sp 


 @sp.module 
 def main(): 
 # คลาส Fifo กำหนดสัญญาง่ายๆ ที่จัดการคำสั่งแบบพุชและป๊อป 
 # บนพื้นฐานเข้าก่อนออกก่อน

    คลาส SimpleFifo (sp.Contract): 
 def __init__(ตนเอง): 
 self.data.first = 0 
 self.data.last = -1 
 self.data.saved = {} 

 @sp.entrypoint 
 def ป๊อป (ตัวเอง): 
 ยืนยัน self.data.first < self.data.last 
 del self.data.saved [self.data.first]
            self.data.first += 1 

 @sp.entrypoint 
 def push (ตนเององค์ประกอบ): 
 self.data.last += 1 
 self.data.saved [self.data.last] = องค์ประกอบ 

 @sp.onchain_view 
 def head(self): 
 return self.data.saved[self.data.first]


หาก "เทมเพลต" ไม่ได้อยู่ใน __name__: 

 @sp.add_test(name="Fifo") 
 def test(): 
 สถานการณ์ = sp.test_scenario(main)
        สถานการณ์.h1("ง่าย สัญญา Fifo") 
 c1 = main.SimpleFifo() 
 สถานการณ์ += c1 
 c1.push(4) 
 c1.push(5) 
 c1.push(6) 
 c1.push(7) 
 c1.pop( ) 
 สถานการณ์ ตรวจสอบ (sp.View (c1, "หัว") () == 5)

วิธีทดสอบสัญญา FIFO:

ขั้นตอนที่ 1: คัดลอกรหัสสัญญาและวางลงใน SmartPy IDE

ขั้นตอนที่ 2: คลิกปุ่ม Run ที่ด้านบนขวาเพื่อรวบรวมและจำลองสัญญา

ขั้นตอนที่ 3: ตรวจสอบทางด้านขวาของ IDE เพื่อดูผลการจำลอง คุณจะเห็นสถานะของพื้นที่จัดเก็บตามสัญญาหลังการดำเนินการแต่ละครั้ง

ขั้นตอนที่ 4: ทดลองโดยเปลี่ยนลำดับการดำเนินการหรือเพิ่มการดำเนินการใหม่

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

Disclaimer
* Crypto investment involves significant risks. Please proceed with caution. The course is not intended as investment advice.
* The course is created by the author who has joined Gate Learn. Any opinion shared by the author does not represent Gate Learn.