<code>nonce</code> คืออะไร?

อัปเดตล่าสุด: 31 มีนาคม 2568

บทนำ

nonce คือตัวเลขที่ระบุการเรียกใช้แต่ละครั้งไปยังเอนด์พอยต์ส่วนตัวของ REST API โดยไม่ซ้ำกัน จำเป็นต้องมี nonce สำหรับการเรียกใช้ที่ผ่านการรับรองความถูกต้องทั้งหมดไปยัง Spot REST API รวมถึงเอนด์พอยต์การจัดการบัญชี (เช่น Balance, QueryOrders, QueryLedgers เป็นต้น) เอนด์พอยต์การฝาก/รับผลตอบแทน (DepositAddresses, DepositStatus เป็นต้น) และเอนด์พอยต์การซื้อขาย (AddOrderCancelOrder เป็นต้น)

สำหรับ Futures REST authentication ไม่จำเป็นต้องมีค่า nonce

การนำไปใช้งาน

nonce ถูกนำมาใช้เป็นตัวนับที่ต้องไม่ซ้ำกันและต้องเพิ่มขึ้นทุกครั้งที่เรียกใช้ API ตัวอย่างเช่น หากสมมติว่าค่า nonce เริ่มต้นคือ 0 ค่า nonce ที่ถูกต้องถัดไปจะเป็น 1, 2, 3, 4 และต่อไปเรื่อยๆ

แม้ว่าตัวนับง่ายๆ ดังกล่าวจะให้ nonce ที่ถูกต้อง แต่การสร้างค่า nonce ที่ถูกต้องอย่างมีประสิทธิภาพมากขึ้นคือการใช้ UNIX timestamp ในหน่วยมิลลิวินาที (จำนวนมิลลิวินาทีตั้งแต่วันที่ 1 มกราคม 1970 เวลา 00:00:00 UTC) การใช้ timestamp ที่มีความละเอียดระดับมิลลิวินาทีหรือสูงกว่าสำหรับ nonce จะรับประกันว่าข้อกำหนดทั้งหมดของ nonce ที่ถูกต้องจะได้รับการปฏิบัติตาม (ไม่ซ้ำกันและเพิ่มขึ้นเสมอ) และให้ค่าที่เพียงพอสำหรับเทรดเดอร์ที่ทำการเรียกใช้ API อย่างรวดเร็วต่อเนื่องกัน (เช่น market makers, high frequency trading bots เป็นต้น)

ตัวอย่างโค้ด

ตัวอย่างต่อไปนี้คือวิธีการสร้างค่า nonce ที่มีความละเอียดระดับมิลลิวินาทีที่ถูกต้องในภาษาโปรแกรมต่างๆ:

Python

api_nonce = str(int(time.time()*1000))

JavaScript

var api_nonce = Date.now().toString()

PHP

$api_nonce = explode(' ', microtime());
$api_nonce = $api_nonce[1].substr($api_nonce[0], 2, 3);

<code>API key</code> และ <code>nonce</code>

API key แต่ละรายการมี nonce แยกกัน และค่า nonce จะคงอยู่ ซึ่งหมายความว่า nonce ที่ใช้ล่าสุดจะยังคงไม่เปลี่ยนแปลงแม้ว่าจะไม่ได้ใช้ API key เป็นระยะเวลาหนึ่งก็ตาม

โปรดทราบว่าไม่สามารถรีเซ็ต nonce สำหรับ API key ที่ระบุได้ ในกรณีที่ค่า nonce ไม่ถูกต้อง (เช่น การใช้ UNIX timestamp ที่ล่วงหน้าไปในอนาคตโดยไม่ได้ตั้งใจ) วิธีแก้ปัญหาคือการลบ API key ที่ได้รับผลกระทบและ สร้าง ซึ่งจะมีค่า nonce เริ่มต้นเป็น 0 (ศูนย์) โดยอัตโนมัติ

ต้องการความช่วยเหลือเพิ่มเติมหรือไม่