EP 2: ตีบวกไอเทม ด้วย Extension Object

Search for a command to run...

No comments yet. Be the first to comment.
สวัสดีครับ สวัสดีปีใหม่ ขอโทษที่ห่างหายไปนานเป็นเดือน ชีวิตยังวนเวียนกับการปั่นงาน จนไม่ค่อยมีเวลาสักเท่าไหร่ ก่อนที่เราจะลุยกันต่อในปี 2026 เรามาสรุปภาพรวมไวๆของ SUI ดีกว่า ว่าในตลอดปี 2025 ที่ผ่านมา SUI Technology มีอะไรที่สำคัญเกิดขึ้นมาบ้าง Myst...
A developer's overview of the Sui Payment Stack: components, roles, and the problems it solves

Understanding How DeepBook Predict Works Under the Hood

Understanding How Prediction Markets Work — DeepBook Predict vs Polymarket vs Kalshi

Build an AI Chatbot with Groq on Sui Encrypted Messaging

Setup, Create Encrypted Channel, and Chat via CLI on Sui Testnet

จากบทความที่เเล้วเราได้วิธีการสร้าง ไอเทม เเละกระเป๋าไปเรียบร้อยแล้ว หากใครยังไม่มีดาบ ไปสร้างมันมาสะบัดเดียวนี้ https://onthemoveth.hashnode.dev/ep-1-game-item-with-sui-object
มีดาบเเล้ว เทพทรูก็ต้องเข้าละ นั้นคือการตีบวกเพิ่มความสามารถให้กับไอเทมของเรานั้นเอง
ปัญหาที่ต้องแก้ก่อน
Sui จะไม่ให้เรา เพิ่ม field ใหม่ ในโครงสร้างของไอเทมเดิมได้ตรงๆ เพราะจะทำให้ object เก่าพัง (layout ไม่ตรง) แต่ไม่ต้องกลัว! เรามีเวทมนตร์ที่ชื่อว่า Dynamic Field 🔮 ที่จะช่วยให้เพิ่มข้อมูลใหม่โดยไม่แตะ object เดิมเลย
พร้อมแล้วไปลุยกันเลย…
เพิ่มพลังให้ Item ด้วย Extension
เราจะสร้าง object ลูกชื่อ ItemExtra เพิ่มไปในไฟล์เดิมของเรา items.move โดยใช้ dynamic_field ของ Sui Framework
use 0x2::dynamic_field as df;
public struct ExtraKey has copy, drop, store {}
public struct ItemExtra has key, store {
id: UID,
rarity: u8,
durability: u64,
parent: address,
}
public fun attach_extra_to_item(
item: &mut Item,
rarity: u8,
durability: u64,
ctx: &mut TxContext
) {
let extra = ItemExtra {
id: object::new(ctx),
rarity,
durability,
parent: object::id_address(item),
};
df::add(&mut item.id, ExtraKey{}, extra);
}
public entry fun set_extra(item: &mut Item, new_rarity: u8, new_durability: u64) {
let extra_ref = df::borrow_mut<ExtraKey, ItemExtra>(&mut item.id, ExtraKey{});
extra_ref.rarity = new_rarity;
extra_ref.durability = new_durability;
}
ทำการอัพเกรด กันก่อนเลยเพื่อทำให้ตัว Object ของเรามีความสามารถเพิ่มเติมด้วยคำสั่งด้านล่างนี้
sui client upgrade --upgrade-capability $UPGRADE_CAP_ID --gas-budget 100000000
โดย UPGRADE_CAP_ID คือข้อมูล CAP_ID จากบทความที่แล้ว ที่เราได้ deploy ขึ้นไปกันนั้นเอง
เริ่มใช้งาน Extension Object
ทำการเพิ่มคุณสมบัติเพิ่มเติมให้กับ item ของเราก่อนโดยใช้คำสั่ง
sui client call --package $PACKAGE_ID --module items --function attach_extra_to_item --args $ITEM_ID 5 1000 --gas-budget 50000000
หลังจากนั้นในฐานะ gm ของระบบ เราก็สามารถทำการเเก้ไขคุณสมบัติของ item ได้เต็มที่เลยโดยใช้คำสั่ง
sui client call --package $PACKAGE_ID --module items --function set_extra --args $ITEM_ID 6 1200 --gas-budget 50000000
ซึ่งในที้นี้เราได้ทำการเเก้ไข rarity และ durability เป็น 6, 1200 ตามลำดับนั้นเอง
Diagram แสดงความสัมพันธ์
classDiagram
class Inventory {
+UID id
+address owner
}
class Item {
+UID id
+String name
+String class
+u64 power
+String image_url
}
class ItemExtra {
+UID id
+u8 rarity
+u64 durability
+address parent
}
Inventory "1" o-- "many" Item : holds
Item "1" o-- "1" ItemExtra : dynamic_field
จากตรงนี้ เราก็ได้เรียนรู้วิธีการอัพเดดไอเทมเป็นที่เรียบร้อยแล้ว
✅ อัปเกรดแพ็กเกจโดยไม่ทำของเก่าพัง
✅ เพิ่ม field ใหม่ได้เรื่อย ๆ ผ่าน Extension
✅ ใช้ Dynamic Field ทำให้ Item ขยายได้ไม่จำกัด
ตอนนี้เราก็มีระบบไอเทมที่ อัปเกรดได้ จริง ๆ แล้ว จะเพิ่มระบบตีบวก คราฟต์ของ หรือแม้แต่ marketplace ก็เริ่มต่อยอดได้เลย!
By GANG | ContributionDAO