Smart Contract บน Tezos สามารถมีจุดเข้าได้หลายจุด ซึ่งถือเป็นวิธีการหรือฟังก์ชันในการเขียนโปรแกรมเชิงวัตถุ จุดเข้าใช้งานแต่ละจุดสามารถมีพารามิเตอร์ของตัวเองและสามารถโต้ตอบกับพื้นที่จัดเก็บข้อมูลของสัญญาได้ ในสัญญาเครื่องคิดเลขของเรา การดำเนินการทางคณิตศาสตร์แต่ละรายการจะเป็นจุดเริ่มต้น
สิ่งสำคัญคือต้องทราบว่าการแก้ไขพื้นที่เก็บข้อมูลทั้งหมดจะถูกบันทึกไว้ในบล็อกเชน ด้วยเหตุนี้ การดำเนินการที่เราทำจึงไม่เกิดขึ้นชั่วคราวเหมือนในเครื่องคิดเลขทั่วไป แต่เป็นการดำเนินการที่ไม่เปลี่ยนรูปและตรวจสอบได้บนบล็อคเชน Tezos
นอกจากนี้ โปรดจำไว้ว่าเนื่องจากบล็อกเชนของ Tezos มีการกระจายอำนาจ การคำนวณทั้งหมดจึงควรมีการกำหนดไว้ ซึ่งหมายความว่าการดำเนินการเช่นการแบ่งอาจทำงานแตกต่างไปจากที่คุณคุ้นเคยเล็กน้อย ตัวอย่างเช่น การหารในสัญญา Tezos คือการหารจำนวนเต็ม ดังนั้น 3 หารด้วย 2 จะให้ 1 ไม่ใช่ 1.5
ด้านล่างนี้เป็นรหัสสัญญาสำหรับเครื่องคิดเลข สัญญา Calculator
จะจัดเก็บผลลัพธ์ของการดำเนินการไว้ในพื้นที่จัดเก็บข้อมูล แต่ละจุดเข้ารับหนึ่งพารามิเตอร์และดำเนินการกับผลลัพธ์ที่เก็บไว้และพารามิเตอร์อินพุต
Python
นำเข้า smartpy เป็น sp
@sp.module
def main():
คลาสเครื่องคิดเลข (sp.Contract):
def __init__(ตนเอง):
self.data.result = 0
@sp.entrypoint
def คูณ (ตัวเอง, x, y):
self.data.result = x * y
@sp.entrypoint
def เพิ่ม (ตัวเอง, x, y):
self.data.result = x + y
@sp.entrypoint
def square(self, x):
self.data.result = x * x
@sp.entrypoint
def squareRoot(self, x):
ยืนยัน x >= 0
y = x
ในขณะที่ y * y > x :
y = (x / y + y) / 2
ยืนยัน y * y <= x และ x < (y + 1) * (y + 1)
self.data.result = y
@sp.entrypoint
def factorial(self, x):
self.data.result = 1
สำหรับ y อยู่ในช่วง (1, x + 1):
self.data.result *= y
@sp.entrypoint
def log2(self, x) :
ยืนยัน x > 0, "อินพุตต้องมากกว่า 0"
self.data.result = 0 # เริ่มต้นตัวนับ
ถ้า x < 1: # สำหรับ 0 < x < 1 ช่วง
y = x
ในขณะที่ y < 1:
self.data.result -= 1 # ลดค่าตัวนับ
y *= 2 # คูณ y ด้วย 2 จนกระทั่ง y >= 1
else: # สำหรับ x >= 1
y = x
ในขณะที่ y >= 2:
self.data.result += 1 # เพิ่มตัวนับ
y /= 2 # หาร y ด้วย 2
ถ้า "เทมเพลต" ไม่อยู่ใน __name__:
@sp.add_test(name="Calculator")
def test( ):
c1 = main.Calculator()
สถานการณ์ = sp.test_scenario(main)
Scenario.h1("เครื่องคิดเลข")
สถานการณ์ += c1
c1.multiply(x=2, y=5)
c1.add(x=2, y=5)
c1.add(x=2, y=5)
c1.square(12)
c1.squareRoot(0)
c1.squareRoot(1234)
c1.factorial(100)
c1.log2(c1.data.result)
สถานการณ์ ตรวจสอบ (c1.data.result == 524)
มาเริ่มทำสัญญานี้กันเถอะ!
ขั้นตอนที่ 1: วางรหัสสัญญาลงใน SmartPy IDE
ขั้นตอนที่ 2: คลิกที่ปุ่ม Run
ที่ด้านบนขวาเพื่อรวบรวมและจำลองสัญญา
ขั้นตอนที่ 3: สังเกตผลการจำลองทางด้านขวาของ IDE คุณสามารถดูสถานะของพื้นที่จัดเก็บตามสัญญาได้หลังการดำเนินการแต่ละครั้ง เช่น คูณ บวก รากที่สอง ฯลฯ
ขั้นตอนที่ 4: คุณสามารถแก้ไขพารามิเตอร์สำหรับการดำเนินงานและสังเกตการเปลี่ยนแปลงในพื้นที่จัดเก็บสัญญาได้ตามใจชอบ!
ตอนนี้คุณได้สร้างและโต้ตอบกับสัญญาอัจฉริยะที่ดำเนินการเครื่องคิดเลขขั้นพื้นฐานแล้ว! ในบทเรียนถัดไป เราจะดูแนวคิดขั้นสูงเพิ่มเติม เช่น การสร้างสัญญา FIFO อย่าลืมสำรวจต่อไปและขอให้มีความสุขกับการเขียนโค้ด!
Smart Contract บน Tezos สามารถมีจุดเข้าได้หลายจุด ซึ่งถือเป็นวิธีการหรือฟังก์ชันในการเขียนโปรแกรมเชิงวัตถุ จุดเข้าใช้งานแต่ละจุดสามารถมีพารามิเตอร์ของตัวเองและสามารถโต้ตอบกับพื้นที่จัดเก็บข้อมูลของสัญญาได้ ในสัญญาเครื่องคิดเลขของเรา การดำเนินการทางคณิตศาสตร์แต่ละรายการจะเป็นจุดเริ่มต้น
สิ่งสำคัญคือต้องทราบว่าการแก้ไขพื้นที่เก็บข้อมูลทั้งหมดจะถูกบันทึกไว้ในบล็อกเชน ด้วยเหตุนี้ การดำเนินการที่เราทำจึงไม่เกิดขึ้นชั่วคราวเหมือนในเครื่องคิดเลขทั่วไป แต่เป็นการดำเนินการที่ไม่เปลี่ยนรูปและตรวจสอบได้บนบล็อคเชน Tezos
นอกจากนี้ โปรดจำไว้ว่าเนื่องจากบล็อกเชนของ Tezos มีการกระจายอำนาจ การคำนวณทั้งหมดจึงควรมีการกำหนดไว้ ซึ่งหมายความว่าการดำเนินการเช่นการแบ่งอาจทำงานแตกต่างไปจากที่คุณคุ้นเคยเล็กน้อย ตัวอย่างเช่น การหารในสัญญา Tezos คือการหารจำนวนเต็ม ดังนั้น 3 หารด้วย 2 จะให้ 1 ไม่ใช่ 1.5
ด้านล่างนี้เป็นรหัสสัญญาสำหรับเครื่องคิดเลข สัญญา Calculator
จะจัดเก็บผลลัพธ์ของการดำเนินการไว้ในพื้นที่จัดเก็บข้อมูล แต่ละจุดเข้ารับหนึ่งพารามิเตอร์และดำเนินการกับผลลัพธ์ที่เก็บไว้และพารามิเตอร์อินพุต
Python
นำเข้า smartpy เป็น sp
@sp.module
def main():
คลาสเครื่องคิดเลข (sp.Contract):
def __init__(ตนเอง):
self.data.result = 0
@sp.entrypoint
def คูณ (ตัวเอง, x, y):
self.data.result = x * y
@sp.entrypoint
def เพิ่ม (ตัวเอง, x, y):
self.data.result = x + y
@sp.entrypoint
def square(self, x):
self.data.result = x * x
@sp.entrypoint
def squareRoot(self, x):
ยืนยัน x >= 0
y = x
ในขณะที่ y * y > x :
y = (x / y + y) / 2
ยืนยัน y * y <= x และ x < (y + 1) * (y + 1)
self.data.result = y
@sp.entrypoint
def factorial(self, x):
self.data.result = 1
สำหรับ y อยู่ในช่วง (1, x + 1):
self.data.result *= y
@sp.entrypoint
def log2(self, x) :
ยืนยัน x > 0, "อินพุตต้องมากกว่า 0"
self.data.result = 0 # เริ่มต้นตัวนับ
ถ้า x < 1: # สำหรับ 0 < x < 1 ช่วง
y = x
ในขณะที่ y < 1:
self.data.result -= 1 # ลดค่าตัวนับ
y *= 2 # คูณ y ด้วย 2 จนกระทั่ง y >= 1
else: # สำหรับ x >= 1
y = x
ในขณะที่ y >= 2:
self.data.result += 1 # เพิ่มตัวนับ
y /= 2 # หาร y ด้วย 2
ถ้า "เทมเพลต" ไม่อยู่ใน __name__:
@sp.add_test(name="Calculator")
def test( ):
c1 = main.Calculator()
สถานการณ์ = sp.test_scenario(main)
Scenario.h1("เครื่องคิดเลข")
สถานการณ์ += c1
c1.multiply(x=2, y=5)
c1.add(x=2, y=5)
c1.add(x=2, y=5)
c1.square(12)
c1.squareRoot(0)
c1.squareRoot(1234)
c1.factorial(100)
c1.log2(c1.data.result)
สถานการณ์ ตรวจสอบ (c1.data.result == 524)
มาเริ่มทำสัญญานี้กันเถอะ!
ขั้นตอนที่ 1: วางรหัสสัญญาลงใน SmartPy IDE
ขั้นตอนที่ 2: คลิกที่ปุ่ม Run
ที่ด้านบนขวาเพื่อรวบรวมและจำลองสัญญา
ขั้นตอนที่ 3: สังเกตผลการจำลองทางด้านขวาของ IDE คุณสามารถดูสถานะของพื้นที่จัดเก็บตามสัญญาได้หลังการดำเนินการแต่ละครั้ง เช่น คูณ บวก รากที่สอง ฯลฯ
ขั้นตอนที่ 4: คุณสามารถแก้ไขพารามิเตอร์สำหรับการดำเนินงานและสังเกตการเปลี่ยนแปลงในพื้นที่จัดเก็บสัญญาได้ตามใจชอบ!
ตอนนี้คุณได้สร้างและโต้ตอบกับสัญญาอัจฉริยะที่ดำเนินการเครื่องคิดเลขขั้นพื้นฐานแล้ว! ในบทเรียนถัดไป เราจะดูแนวคิดขั้นสูงเพิ่มเติม เช่น การสร้างสัญญา FIFO อย่าลืมสำรวจต่อไปและขอให้มีความสุขกับการเขียนโค้ด!