เจาะลึกระบบมอบทรัพยากรของ TRON: กลไกที่แท้จริงเบื้องหลัง
ทำความเข้าใจโมเดลทรัพยากรก่อนจะพูดถึงการมอบสิทธิ์
TRON ไม่ได้คิดค่าธรรมเนียมแบบ gas เหมือน Ethereum แต่ทุกบัญชีจะมีกลุ่มทรัพยากรสองอย่างคือ Energy และ bandwidth โดย Energy จะถูกใช้เมื่อมีการรันสัญญาอัจฉริยะ ส่วน bandwidth จะถูกใช้ในทุกธุรกรรมไม่ว่าจะเกี่ยวข้องกับสัญญาหรือไม่ก็ตาม เมื่อทรัพยากรในบัญชีหมด เครือข่ายจะเผา TRX จากยอดคงเหลือของคุณเพื่อชดเชยส่วนที่ขาด ซึ่งนั่นแหละคือสาเหตุที่ทำให้ค่าใช้จ่ายพุ่งสูงขึ้น
ทรัพยากรเกิดขึ้นได้สองทาง ทางแรกคือการ stake TRX โดยล็อก TRX ไว้แล้วเครือข่ายจะให้เครดิตแก่บัญชีของคุณในสัดส่วนที่สอดคล้องกับกลุ่ม Energy หรือ bandwidth ทั่วโลก และจะรีเฟรชทุก 24 ชั่วโมง ทางที่สองคือการรับการมอบสิทธิ์ทรัพยากร กล่าวคือบัญชีอื่น stake TRX แล้วกำหนดให้ทรัพยากรที่ได้มาถูกส่งมาที่ที่อยู่ของคุณ บัญชีของคุณจะใช้ทรัพยากรที่ได้รับมอบนั้นเหมือนกับที่คุณ stake เองทุกประการ จาก VM ไม่มีความแตกต่างเลยแม้แต่น้อย
นี่คือรากฐานที่ทุกอย่างตั้งอยู่ การมอบสิทธิ์ทรัพยากรไม่ใช่ช่องทางชำระเงินหรือการห่อหุ้มใดๆ แต่คือการกำหนดสิทธิ์ทรัพยากรบนเชนโดยตรงจากบัญชีหนึ่งไปยังอีกบัญชีหนึ่ง
Stake 2.0 เปลี่ยนแปลงระบบการมอบสิทธิ์ไปอย่างไร
โมเดล staking เดิม (Stake 1.0) กำหนดให้คุณต้องเลือกตั้งแต่ตอน stake ว่า TRX ของคุณจะผลิต Energy หรือ bandwidth และสามารถ unfreeze ได้ทีละทั้งหมดเท่านั้นหลังจากล็อกไว้ 3 วัน การมอบสิทธิ์มีอยู่แล้วแต่ยังหยาบมาก คือ stake TRX ได้ทรัพยากรประเภทเดียว แล้วจะส่งทรัพยากรนั้นไปยังที่อยู่อื่นก็ได้ตามต้องการ
Stake 2.0 ที่เปิดใช้งานบน mainnet ช่วงกลางปี 2566 ได้ปรับโครงสร้างส่วนนี้ไปอย่างมาก การเปลี่ยนแปลงสำคัญที่เกี่ยวกับการมอบสิทธิ์ได้แก่
- การแบ่งทรัพยากรตามสัดส่วน: ตำแหน่ง TRX ที่ stake เพียงตำแหน่งเดียวสามารถแบ่งทรัพยากรที่ผลิตได้ออกมาแล้วมอบให้หลายที่อยู่พร้อมกัน คุณไม่ได้ส่ง TRX ไปไหน แต่แค่กำหนดเส้นทางให้กับผลผลิตทรัพยากร
- การ unstake แบบแบ่งส่วน: สามารถ unstake บางส่วนได้โดยไม่กระทบกับส่วนที่เหลือ ทำให้ผู้ให้บริการทรัพยากรบริหารสภาพคล่องได้โดยไม่รบกวนการมอบสิทธิ์ที่ดำเนินอยู่
- ระยะรอการ unstake 14 วัน: หลังจากเรียก
unstakeแล้ว TRX จะเข้าคิวรอถอน โดยถูกล็อกประมาณ 14 วันก่อนที่จะสามารถเรียกwithdrawExpireUnfreezeเพื่อรับคืนได้ ในระหว่างนั้นการมอบสิทธิ์ใดก็ตามที่พึ่งพา TRX ดังกล่าวจะถูกยกเลิกทันที ไม่ใช่รอจนครบ 14 วัน การมอบสิทธิ์สิ้นสุดตั้งแต่ตอนที่เริ่ม unstake ไม่ใช่ตอนที่ได้รับ TRX คืน - ไม่ต้องล็อกเพื่อเปลี่ยนประเภททรัพยากรอีกต่อไป: ใน 1.0 การเปลี่ยนจาก Energy ไปเป็น bandwidth ต้องผ่านการ unstake และ stake ใหม่ทั้งหมด แต่ใน 2.0 สามารถมอบทรัพยากรของตำแหน่ง stake เดิมใหม่เป็นประเภทอื่นได้โดยไม่ต้อง unstake แม้ว่าจะยังต้องทำธุรกรรมบนเชนแยกต่างหากอยู่
สิ่งที่ต้องระวังสำหรับผู้รับ Energy ที่ถูกมอบสิทธิ์มาคือ ยอดทรัพยากรของคุณอาจหล่นเป็นศูนย์กลางวันได้ทันทีหากผู้มอบสิทธิ์เริ่มกระบวนการ unstake โดยไม่มีช่วงผ่อนผันใดๆ ฝั่งผู้รับเลย
กลไกบนเชนของธุรกรรมการมอบสิทธิ์ทรัพยากร
เมื่อผู้มอบสิทธิ์เรียก delegateResource ธุรกรรมจะบันทึกข้อมูลสามอย่างคือ ที่อยู่ผู้มอบ ที่อยู่ผู้รับ และจำนวน Energy (หรือ bandwidth) ที่มอบให้ จากนั้นเครือข่ายจะปรับขีดจำกัดทรัพยากรที่แสดงในสถานะบัญชีของผู้รับให้สอดคล้องกัน
ภายในระบบ โหนด TRON ติดตามทรัพยากรที่ถูกมอบแยกออกจากทรัพยากรที่ตัวเองถือ หากคุณ query บัญชีผ่าน wallet/getaccount ทาง HTTP API จะเห็นฟิลด์อย่าง delegated_frozenV2_balance_for_energy และ acquired_delegated_frozenV2_balance_for_energy อันแรกคือที่คุณส่งออกไป อันหลังคือที่คุณได้รับมา โดยทั้งคู่ไม่มีการเคลื่อนย้าย TRX จริงๆ เลย TRX จริงยังคงอยู่ใน staked balance ของผู้มอบสิทธิ์
การใช้ทรัพยากรระหว่างธุรกรรมทำงานดังนี้ VM จะตรวจสอบ Energy ที่ใช้ได้ของบัญชีที่กำลังรันอยู่ (รวมทั้งที่ stake เองและที่รับมอบมา) หากเพียงพอก็จะหักออกจากกลุ่มนั้นตามลำดับคือหักจากทรัพยากรที่รับมอบก่อน แล้วจึงหักจากที่ stake เอง ถ้ากลุ่มทรัพยากรหมด TRX จะถูกเผาจากยอดเงินอิสระของบัญชีตามอัตราเครือข่ายปัจจุบัน ซึ่งอัตรานี้ไม่ตายตัว แต่คำนวณแบบไดนามิกตาม Energy รวมทั้งเครือข่ายและราคาเผาที่กำหนดโดยพารามิเตอร์บนเชน
Energy ฟื้นตัวหลังใช้งานได้อย่างไร
Energy ไม่ใช่เครดิตที่ใช้แล้วหมดเลย แต่จะฟื้นตัวอย่างสม่ำเสมอในช่วง 24 ชั่วโมง ถ้าบัญชีของคุณมีขีดจำกัด Energy สูงสุดอยู่ที่ 100,000 แล้วคุณใช้ไป 65,000 ในการรันสัญญา คุณจะกลับมาเต็มอีกครั้งหลัง 24 ชั่วโมง และที่ครึ่งทาง 12 ชั่วโมง คุณจะมี Energy ใช้ได้ประมาณ 32,500 แล้ว
การฟื้นตัวนี้ใช้กับทั้ง Energy ที่ stake เองและที่รับมอบมา อัตราฟื้นตัวขึ้นอยู่กับขีดจำกัดสูงสุดของบัญชีนั้นๆ ไม่ใช่นาฬิกาสากลคงที่ ดังนั้นสองบัญชีที่มีขีดจำกัด Energy ต่างกันจะฟื้นตัวในอัตราสัมบูรณ์ต่างกัน แม้ว่าทั้งคู่จะกลับมาเต็มใน 24 ชั่วโมงเท่ากัน
สำหรับการใช้งานที่มีความถี่สูง รอบ 24 ชั่วโมงนี้คือข้อจำกัดหลักที่ต้องคำนึงถึง การมอบสิทธิ์ Energy ที่ออกแบบมาสำหรับการโอนวันละครั้งจะไม่เพียงพอสำหรับการโอนสิบครั้งต่อวัน แม้ว่ายอด Energy รวมดูเหมือนพอก็ตาม คุณต้องคำนึงถึงรอบการฟื้นตัว ไม่ใช่แค่ความจุรวม
การเพิกถอนและการกำหนดการมอบสิทธิ์ใหม่
การมอบสิทธิ์ไม่ได้เป็นการถาวร ผู้มอบสิทธิ์สามารถเรียก unDelegateResource เมื่อใดก็ได้เพื่อดึงทรัพยากรกลับคืน ผลกระทบเกิดขึ้นทันที Energy ที่ใช้ได้ของผู้รับจะลดลงตามจำนวนที่ถูกเพิกถอนในบล็อกถัดไป โดยไม่มีช่วงรอใดๆ ฝั่งผู้รับและไม่มีกลไกชดเชยในระดับโปรโตคอล
การกำหนดการมอบสิทธิ์ใหม่ คือการส่งผลผลิตทรัพยากรเดิมไปยังผู้รับรายอื่น ต้องใช้สองธุรกรรมคือเพิกถอนจากผู้รับปัจจุบันก่อน แล้วจึงมอบให้ผู้รับรายใหม่ นั่นเป็นการดำเนินการบนเชนแยกต่างหากและใช้ bandwidth เองด้วย ใน Stake 2.0 สามารถจัดการเรื่องนี้ได้มีประสิทธิภาพมากขึ้นกว่าเดิม แต่ก็ยังไม่ถือเป็น atomic จากมุมมองของธุรกรรมเดียว
มีกรณีพิเศษที่ควรรู้คือ ถ้า TRX ที่ผู้มอบสิทธิ์ stake ไว้ผลิต Energy ได้ 200,000 และมอบไป 150,000 ให้ที่อยู่ A แล้ว ผู้มอบสิทธิ์ก็สามารถมอบ Energy ที่เหลือ 50,000 ให้ที่อยู่ B ได้โดยไม่ต้องแตะการมอบของ A เลย ข้อจำกัดคือ Energy ที่มอบทั้งหมดรวมกันต้องไม่เกิน Energy ที่ผลิตได้ทั้งหมด การพยายามมอบเกินกว่านั้นจะถูกปฏิเสธในระดับธุรกรรม
ความหมายของเรื่องนี้ต่อการเช่า Energy
บริการเช่า Energy อย่าง tronenergyrent.com ดำเนินงานทั้งหมดอยู่ภายในโมเดลการมอบสิทธิ์นี้ เมื่อคุณเช่า Energy ผู้ให้บริการจะ stake TRX ผลิต Energy แล้วเรียก delegateResource โดยระบุที่อยู่ของคุณเป็นปลายทาง จากมุมมองของบัญชีคุณ คุณจะได้รับ acquired_delegated_frozenV2_balance_for_energy ตามที่อธิบายไว้ข้างต้น คุณไม่ได้ถือ TRX แต่ถือสิทธิ์ใช้ทรัพยากรชั่วคราว
ระยะเวลาการเช่าสอดคล้องกับระยะเวลาที่ผู้ให้บริการคงการมอบสิทธิ์นั้นไว้ การเช่า 1 วันในราคาปัจจุบันอยู่ที่ 8.19 TRX ต่อ Energy 65,000 หน่วย ซึ่งเพียงพอสำหรับการโอน USDT แบบ TRC-20 มาตรฐานหนึ่งครั้งที่ต้องการ Energy ประมาณ 65,000 หน่วยและ bandwidth ประมาณ 345 หน่วย ส่วนการเช่า 30 วันอยู่ที่ 175.50 TRX สำหรับ Energy ก้อนเดิม คุณสามารถตรวจสอบค่าใช้จ่ายที่แน่นอนสำหรับปริมาณการโอนของคุณได้ที่ เครื่องคำนวณ
เหตุผลที่การเช่าระยะสั้นมีต้นทุนต่อวันสูงกว่านั้นเป็นเรื่องกลไกล้วนๆ เพราะผู้ให้บริการต้องบริหารจัดการคิว unstake และค่าใช้จ่ายในการมอบสิทธิ์ใหม่สำหรับรอบที่บ่อยกว่า ระยะรอถอน 14 วันทำให้ทุนถูกล็อกอยู่โดยไม่คำนึงว่าจะเช่านานแค่ไหน
การมอบสิทธิ์ bandwidth ทำงานในโมเดลเดียวกัน
ทุกอย่างที่อธิบายไว้ข้างต้นใช้ได้กับ bandwidth เช่นกัน ต่างกันตรงพฤติกรรมเริ่มต้นอย่างหนึ่ง คือทุกบัญชีจะได้รับ bandwidth ฟรี 600 หน่วยต่อวันจากเครือข่ายโดยไม่ต้อง stake เลย ปริมาณฟรีนี้เพียงพอสำหรับการโอน TRX พื้นฐาน แต่ไม่ครอบคลุมส่วน bandwidth ของการโอน TRC-20 ที่มีความถี่สูง การ stake หรือรับการมอบ bandwidth จะเพิ่มขีดจำกัดของคุณให้เกิน 600 หน่วยพื้นฐานนั้น
เมื่อคุณมอบ bandwidth ให้บัญชีหนึ่ง คุณกำลังเพิ่มความจุให้บนยอดที่มีอยู่แล้ว ลำดับการใช้ทรัพยากรคือ bandwidth ฟรีก่อน จากนั้น bandwidth ที่รับมอบมา แล้วจึง bandwidth ที่ stake เอง และสุดท้ายคือการเผา TRX ลำดับนี้สำคัญมากหากคุณต้องการคำนวณให้แม่นยำว่าการเผาจะเริ่มขึ้นเมื่อใดสำหรับบัญชีใดบัญชีหนึ่ง
อ่านสถานะการมอบสิทธิ์จาก API
หากคุณกำลังสร้างเครื่องมือหรือติดตามการมอบสิทธิ์ การเรียก API ที่เกี่ยวข้องมีดังนี้
wallet/getaccount: คืนค่าสถานะบัญชีทั้งหมดรวมถึงฟิลด์ทรัพยากรที่มอบออกและที่รับเข้ามาwallet/getdelegatedresourcev2: คืนค่าบันทึกการมอบสิทธิ์เฉพาะระหว่างสองที่อยู่ รวมถึงจำนวน Energy ที่แน่นอนและวันหมดอายุการล็อกหากมีการตั้งล็อกไว้wallet/getcanwithdrawunfreezeamount: ให้ผู้มอบสิทธิ์ตรวจสอบว่า TRX ในคิวรอถอนมีเท่าไหร่ที่พร้อมถอนได้แล้ว
endpoint getdelegatedresourcev2 มีประโยชน์มากเป็นพิเศษสำหรับการยืนยันว่าการมอบสิทธิ์ยังคงทำงานอยู่และมีขนาดถูกต้องก่อนที่จะรันธุรกรรมที่ต้องพึ่งพามัน อย่าสมมติว่าการมอบสิทธิ์ยังอยู่เพียงเพราะตั้งค่าไว้เมื่อวาน ให้ยืนยันสถานะบนเชนเสมอก่อนที่จะพึ่งพามัน