title | actions | material | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
เนื้อหาพิเศษ!: Kitty Genes |
|
|
ตอนนี้ logic ในฟังก์ชั่นของเราก็เสร็จสมบูรณ์แล้ว... แต่ก็มาเพิ่ม bonus feature กันอีกหน่อยดีกว่า
ลองให้ซอมบี้ที่ถูกสร้างขึ้นมาจาก kitties มีลักษณะพิเศษที่บอกว่ามันคือ cat-zombies ซอมบี้น้องแมวนั่นเอง!
ในการที่จะทำให้เป็นเช่นนั้นได้ เราสามารถเพิ่ม kitty code เข้าไปภายใน DNA ของซอมบี้
หากยังจำบทเรียนแรกได้ ณ ตอนนี้เราใช้รหัส DNA เพียงแค่ 12 ตัวแรกจาก 16 สำหรับการวิเคราะห์หน้าตาของซอมบี้ ดังนั้นยังสามารถใช้รหัส 2 ตัวสุดท้ายในการรับมือกับลักษณะ "พิเศษ"
เราจะกำหนดให้ cat-zombies มีรหัส 99
อยู่ตรงตำแหน่ง 2 ตัวสุดท้ายใน DNA ของมัน(เพราะแมวมี 9 ชีวิต) ฉะนั้นในโค้ดจะกำหนดเงื่อนไข if
คือถ้าหากซอมบี้เกิดจากohv'แมว เราจะให้รหัส 2 ตัวสุดท้ายเป็น 99
If statements in Solidity look just like javascript:
function eatBLT(string sandwich) public {
// เนื่องจากเราต้องนำ keccak256 hashes มาเปรียบเทียบกัน จึงต้องเก็บตัวแปรเป็นข้อมูลชนิด string
// เอามาเปรียบเทียบกัน
if (keccak256(sandwich) == keccak256("BLT")) {
eat();
}
}
บรรจุ cat genes ลงในโค้ดซอมบี้
-
ก่อนอื่นให้เปลี่ยน definition ของฟังก์ชั่น
feedAndMultiply
ให้สามารถรับ argument ที่ 3 ได้: ข้อมูลชนิดstring
ที่มีชื่อว่า_species
-
ต่อมาหลังจากเราได้คำนวณ DNA ของซอมบี้แล้ว ก็คือเวลาของการเพิ่มเงื่อนไข
if
เพื่อการเปรียบเทียบkeccak256
hashes ระหว่าง_species
และข้อมูล string ชื่อว่า"kitty"
-
ภายใต้เงื่อนไข
if
เราต้องแทนที่รหัส DNA 2 ตัวสุดท้ายด้วย99
ในการที่จะทำได้เราต้องใช้ logic ดังนี้:newDna = newDna - newDna % 100 + 99;
.
Explanation: สมมติให้
newDna
เป็น334455
ดังนั้นnewDna % 100
มีค่าเท่ากับ55
ซึ่งทำให้newDna - newDna % 100
มีค่า334400
สุดท้ายเพิ่ม99
ลงไปที่ตำแหน่ง 2 ตัวสุดท้าย จะกลายเป็น334499
.
- ท้ายที่สุดแล้วเราจะต้องเปลี่ยนฟังก์ชั่นที่เรียกภายใน
feedOnKitty
เมื่อมีการเรียกฟังก์ชั่นfeedAndMultiply
ให้เพิ่มตัวแปรชื่อว่า"kitty"
เข้าไปเป็นตอนสุดท้าย