API บล็อกเชนของ Hive
Hive Blockchain API คือ API เกมเว็บ 3.0 ที่ขับเคลื่อนโดย Hive แพลตฟอร์ม โดยใช้ AppID และ PlayerID ของมัน ผู้เล่นเกมสามารถสร้างโทเค็นได้หลายโทเค็นในครั้งเดียว สูงสุดถึง 200 โทเค็น และสตูดิโอเกมสามารถรับบันทึกการทำธุรกรรมต่อผู้ใช้ได้ มีฟีเจอร์อื่นๆ อีกมากมายที่เหมาะสมสำหรับเกมเว็บ 3 ด้วย Hive Blockchain API คุณสามารถตั้งค่าการพัฒนา การดำเนินงาน และการจัดการโครงการเกมเว็บ 3 ได้อย่างมีประสิทธิภาพ Hive Blockchain API รองรับบล็อกเชน Polygon และ XPLA
การเตรียมการล่วงหน้า: การออกโทเค็นการรับรอง API
ในการเรียกใช้ API ของ Hive บล็อกเชน คุณต้องแนบโทเค็นการรับรองความถูกต้องไปยัง API Header วิธีการขอรับโทเค็นการรับรองความถูกต้องของ API มีดังนี้
- ลงทะเบียนเกมที่ App Center > รายการเกม > ลงทะเบียนเกมใหม่ หลังจากสมัครสมาชิกใน Hive Console
- สร้าง AppID ที่ App Center > รายการ AppID > ลงทะเบียน AppID ใหม่
- สร้าง AppID: AppID สำหรับการเข้าสู่ระบบเว็บ
- เลือกการใช้งาน: บล็อกเชน
- เลือก AppID ที่จะใช้: เลือก "AppID ที่สร้างขึ้นโดยอัตโนมัติ" หรือ "AppID ที่สร้างขึ้นโดยอัตโนมัติ + ข้อมูลเพิ่มเติม"
- เลือกชื่อเกมและขอ ID และรหัสรับรอง (SecretKey) ที่ Hive Console > บล็อกเชน > ตรวจสอบรหัสรับรอง API
- ใส่ ID และ SecretKey ใน Request Body ของ auth-token API และเรียก API
data.accessToken ในค่าตอบกลับของ API คือโทเค็นรับรองตัวตน
NFT API
การออก NFT
สร้างธุรกรรมที่ออกโทเค็นไปยังที่อยู่ที่เฉพาะเจาะจง (to) ข้อมูล NFT ที่จะออก (mintMsg.tokenId, mintMsg.metadata เป็นต้น) จะถูกบรรจุในอาร์เรย์และเรียกใช้ได้ สำหรับการเรียก API หนึ่งครั้ง XPLA สามารถออกโทเค็นได้สูงสุด 200 โทเค็นต่อบัญชี และ Polygon สามารถออกโทเค็นได้สูงสุด 50 โทเค็น from จะต้องเป็นบัญชีที่มีสิทธิ์ในการออกโทเค็น
Note
สินทรัพย์ดิจิทัลที่ออกโดย API และเมตาดาต้าของสินทรัพย์ (mintMsg.metadata) จะถูกลงทะเบียนใน Public IPFS (InterPlanetary File System)
URL การร้องขอ
พารามิเตอร์เส้นทาง
| ชื่อฟิลด์ | คำอธิบาย | ประเภท | จำเป็นหรือไม่ |
| contract | ที่อยู่ของ NFT คอนแทรกต์ | string | Y |
พารามิเตอร์หัวข้อ
| ชื่อฟิลด์ | คำอธิบาย | ประเภท | ความจำเป็น |
| Authorization | โทเค็นการรับรองความถูกต้องสำหรับการเรียก API | string | Y |
| x-network | เครือข่ายบล็อกเชน | string | Y |
| x-appid | รหัสประจำแอปเฉพาะ แอป Hive คอนโซล > รายการ AppID | string | Y |
เนื้อหาคำขอ
| ชื่อฟิลด์ | คำอธิบาย | ประเภท | จำเป็นหรือไม่ |
| playerId | รหัสผู้เล่น | string | Y |
| from | ที่อยู่บัญชีที่ออก NFT | string | Y |
| to | ที่อยู่กระเป๋าเงินที่จะรับ NFT | string | Y |
| isSend | หากเป็น true เมื่อมีคีย์กระเป๋าเงินใน KMS จะมีการลงนามธุรกรรมโดยอัตโนมัติด้วยคีย์นี้และส่งไปยังบล็อกเชน จะได้รับค่าผลลัพธ์เป็น txHash หากเป็น false จะได้รับข้อมูลธุรกรรมที่ผู้ใช้ต้องลงนามด้วยตนเองเป็นค่าผลลัพธ์ data.rawTx | boolean | Y |
| mintMsg | ข้อมูลที่จำเป็นในการออก | array | Y |
| mintMsg.tokenId | รหัส NFT ซึ่งกำหนดโดยผู้สร้าง NFT และไม่อนุญาตให้ซ้ำกัน - Polygon: ใช้ได้เฉพาะสตริงและจำนวนเต็ม (0~2256-1)
- XPLA: ใช้ได้เฉพาะสตริง
| string | Y |
| mintMsg.royaltyPercentage | อัตราค่าลิขสิทธิ์ ซึ่งเป็นจำนวนเงินที่จะจ่ายให้กับผู้สร้าง NFT หรือผู้ถือสิทธิ์เมื่อ NFT ถูกขายหรือขายต่อ อัตราส่วนที่จะจ่ายเป็นค่าลิขสิทธิ์จะถูกตั้งค่าจากยอดขายรวม ฟังก์ชันสำหรับตลาด NFT ที่ต้องการสนับสนุนเงินทุนอย่างต่อเนื่องให้กับศิลปินและผู้สร้าง NFT อื่น ๆ ค่าลิขสิทธิ์จะไม่ถูกจ่ายโดยอัตโนมัติเมื่อมีการโอน NFT แต่จะถูกตรวจสอบและจ่ายโดยตลาด NFT ฟังก์ชันที่ใช้ใน OpenSea - Polygon: อนุญาตให้มีทศนิยมสองตำแหน่ง.
- XPLA: ไม่อนุญาตให้มีทศนิยม.
| number | Y |
| mintMsg.metadata | เมตาดาต้า - ตรวจสอบประเภทและรูปแบบ url (
animationUrl, youtubeUrl, externalUrl) เมื่อป้อนเมตาดาต้า หากส่งข้อมูลที่ไม่ถูกต้อง API จะไม่ทำงานตามปกติ - เมื่อเมตาดาต้าถูกจัดเก็บใน IPFS จะถูกจัดเก็บในรูปแบบ snake case ที่สามารถเชื่อมต่อกับ OpenSea (ตัวอย่าง:
animationUrl → animation_url)
| json | Y |
| mintMsg.metadata.name | ชื่อ NFT | string | Y |
| mintMsg.metadata.description | คำอธิบาย NFT | string | N |
| mintMsg.metadata.image | ที่อยู่ภาพ NFT ซึ่งเป็นที่อยู่เว็บไซต์ที่เข้าถึงได้จากภายนอกหรือที่อยู่ Public IPFS สำหรับอัปโหลดไปยัง IPFS | string | Y |
| mintMsg.metadata.animationUrl | ที่อยู่อนิเมชันที่เกี่ยวข้องกับ NFT | string | N |
| mintMsg.metadata.youtubeUrl | ที่อยู่ยูทูบ | string | N |
| mintMsg.metadata.imageData | ข้อมูลภาพ NFT | string | N |
| mintMsg.metadata.externalUrl | ที่อยู่ที่เชื่อมต่อกับภายนอก | string | N |
| mintMsg.metadata.backgroundColor | ข้อมูลสีพื้นหลังของโทเค็นใน OpenSea | string | N |
| mintMsg.metadata.attributes | ข้อมูลคุณสมบัติของเมตาดาต้า ซึ่งเป็น ข้อมูลเพิ่มเติม ที่ไม่ได้ระบุในเมตาดาต้า | json | N |
| mintMsg.metadata.attributes.traitType | ชื่อรายการที่ประกอบเป็น attributes | string | N |
| mintMsg.metadata.attributes.maxValue | ค่าสูงสุดของ trait | number | N |
| mintMsg.metadata.attributes.value | ค่าของ trait ซึ่งต้องน้อยกว่าค่า mintMsg.metadata.attributes.maxValue หาก mintMsg.metadata.attributes.displayType เป็น date ให้ป้อนค่าเป็น unix timestamp (seconds) | string หรือ number | N |
| mintMsg.metadata.attributes.displayType | ประเภทการแสดงผลของ trait ค่าเริ่มต้นคือประเภท string - number: ประเภท Number
- boost_percentage: แสดงข้อมูล % ใน OpenSea Boosts
- boost_number: แสดงใน OpenSea Boosts
- date: แสดงในรูปแบบวันที่ (ตัวอย่าง: วันอังคารที่ 1 มกราคม 2019)
| string | N |
| encoded | การเข้ารหัสธุรกรรมที่ต้องการรับ -
true: รับ Raw Transaction String ที่เข้ารหัสด้วย data.rawTx false: รับผลลัพธ์ JSON ที่ถอดรหัสจาก data.rawTx.
| boolean | Y |
| callbackUrl | ที่อยู่ที่จะได้รับผลลัพธ์ว่าธุรกรรมถูกบันทึกลงบล็อกเชนสำเร็จ/ล้มเหลวหรือไม่ | string | Y |
การตอบสนอง
| ชื่อฟิลด์ | คำอธิบาย | ประเภท |
| code | รหัสผลลัพธ์การเรียก API, 0:สำเร็จ | number |
| message | ข้อความผลลัพธ์ | string |
| data | ข้อมูลการตอบกลับ API | json |
| data.rawTx | ข้อมูลธุรกรรม.isSendจะได้รับค่าตอนที่เป็น false เท่านั้น. | string หรือ json |
| data.hashedTx | data.rawTx ที่ถูกแฮช. จะได้รับค่าตอนที่ตรงตามเงื่อนไขทั้งหมดด้านล่างนี้. 1. x-network เป็น polygon 2. from เป็นที่อยู่กระเป๋าเงินหลายลายเซ็น 3. isSend เป็น false | string |
| data.txhash | แฮชธุรกรรมที่ได้รับจากผลลัพธ์การส่งธุรกรรม.isSendจะได้รับค่าตอนที่เป็น true เท่านั้น. | string |
| data.status | สถานะของธุรกรรมที่ส่ง.isSendจะได้รับค่าตอนที่เป็น true, ถ้าธุรกรรมถูกส่งอย่างถูกต้องจะได้รับค่าเป็น PENDING. ถ้า isSend เป็น false, หมายความว่าสถานะต้องการลายเซ็นก่อนที่จะส่งธุรกรรมจะได้รับค่าเป็น WAITING. | string |
| data.reqeustId | ค่าที่ไม่ซ้ำกันที่สามารถใช้ระบุคำขอ API | string |
ตัวอย่างคำขอ
curl -X 'POST'
'https://sandbox-bc-api.qpyou.cn/service/v1/nft/0x31a6854383c81daab14089cba0b9de1d42ecd65f/mint'
-H 'accept: */*'
-H 'x-network: polygon'
-H 'x-appid: com.com2us.hivesdk.normal.freefull.apple.global.ios.universal'
-H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImNvbS5jb20y...'
-H 'Content-Type: application/json'
-d '{
"playerId": 1324,
"from": "0xD6e69da7f1be111394dfef4C48eaC9b52ddf2Fd0",
"to": "0xA10078576Ca6f63dc6f78ff9a8ed8bd05B51f463",
"isSend": true,
"royaltyPercentage": 7.5,
"mintMsg": [
{
"tokenId": "1",
"metadata": {
"name": "Arbiter'''s Robe",
"description": "desc",
"image": "https://image01.c2x.world/equip_92053030.gif",
"animationUrl": "https://image01.c2x.world/equip_92053030.gif",
"externalUrl": "https://dex.c2xnft.com/market?key=4423",
"attributes": [
{
"traitType": "Category",
"value": "Game",
}
]
}
}
],
"encoded": true,
"callbackUrl": "https://withhive.com/"
}'
ตัวอย่างการตอบกลับ
// Request Body의 isSend가 true이고 from이 KMS 주소일 경우
{
"code": 0,
"message": "success",
"data": {
"txhash": "02f8f3830138810b8459682f008459682f1083023...",
"status": "pending",
"requestId": "6fb62650-d52e-4bec-bb91-dd081813d7f1"
}
}
// Request Body의 isSend가 false이고 from이 다중 서명 지갑 주소일 경우
{
"code": 0,
"message": "success",
"data": {
"rawTx": "02f8f3830138810b8459682f008459682f1083023...",
"hashedTx": "0x53e8783e4da707daf58c96a8cea278e7b2a8a5f185af0913b518974556c79076...",
"requestId": "6fb62650-d52e-4bec-bb91-dd081813d7f1"
}
}
// Request Body의 isSend가 false이고 from이 KMS 주소나 일반 지갑 주소일 경우
{
"code": 0,
"message": "success",
"data": {
"rawTx": "02f8f3830138810b8459682f008459682f1083023...",
"requestId": "6fb62650-d52e-4bec-bb91-dd081813d7f1"
}
}
// Request Body의 isSend가 false일 때: data.rawTx가 string
{
"code": 0,
"message": "success",
"data": {
"rawTx": "02f8d3830138810b8458e948068458e948168302e71494ebd9144485089ebe248f8...",
"requestId": "5743f0aa-0323-47fc-a3da-173eee27bbe4"
}
}
// Request Body의 isSend가 false일 때: data.rawTx가 json
{
"code": 0,
"message": "success",
"data": {
"rawTx": {
"from": "0xdcd51770d06B54204abd8c30A25b4583D4cABa39",
"to": "0xebd9144485089ebe248f8490984a60579407c262",
"data": "0xb88d4fde000000000000000000000000dcd51770d06b54204abd8c30a25b4583d4caba3900...",
"nonce": 11,
"chainId": 80001,
"gas": 190228,
"maxFeePerGas": 1491259270,
"maxPriorityFeePerGas": 1491259255
},
"requestId": "dd33ddd8-31fa-4491-9c3c-2f912f7059bc"
}
}
ตรวจสอบ NFT
ตรวจสอบ NFT ที่ตรงกับ ID โทเคน (tokenId)
URL ที่ร้องขอ
พารามิเตอร์เส้นทาง
| ชื่อฟิลด์ | คำอธิบาย | ประเภท | ความจำเป็น |
| contract | ที่อยู่ของ NFT คอนแทรค | string | Y |
| tokenId | ID ของโทเค็น | string | Y |
พารามิเตอร์หัวเรื่อง
| ชื่อฟิลด์ | คำอธิบาย | ประเภท | ความจำเป็น |
| Authorization | โทเค็นการรับรองความถูกต้องสำหรับการเรียก API | string | Y |
| x-network | เครือข่ายบล็อกเชน | string | Y |
| x-appid | เป็น ID เฉพาะของแอป สามารถตรวจสอบได้จาก AppID รายการใน Hive คอนโซล แอปเซ็นเตอร์ | string | Y |
การตอบกลับ
| ชื่อฟิลด์ | คำอธิบาย | ประเภท |
| code | รหัสผลลัพธ์การเรียก API, 0:สำเร็จ | number |
| message | ข้อความผลลัพธ์ | string |
| data | ข้อมูลการตอบกลับ API | json |
| data.nftContract | ที่อยู่ของ NFT คอนแทรค | string |
| data.tokenId | ID โทเค็น | string |
| data.tokenUri | ที่อยู่ IPFS ของโทเค็น | string |
| data.gatewayUrl | ที่อยู่ Gateway ของโทเค็น | string |
| data.metadata | ข้อมูลเมตาดาต้า | json |
| data.metadata.name | ชื่อ NFT | string |
| data.metadata.description | คำอธิบาย NFT | string |
| data.metadata.image | ที่อยู่ของภาพ NFT เป็นที่อยู่เว็บไซต์ที่เข้าถึงได้จากภายนอกหรือที่อยู่ Public IPFS | string |
| data.metadata.animationUrl | ที่อยู่ของอนิเมชันที่เกี่ยวข้องกับ NFT | string |
| data.metadata.youtubeUrl | ที่อยู่ยูทูบ | string |
| data.metadata.imageData | ข้อมูลภาพ NFT | string |
| data.metadata.externalUrl | ที่อยู่ที่เชื่อมต่อกับภายนอก | string |
| data.metadata.backgroundColor | ข้อมูลสีพื้นหลังของโทเค็นใน OpenSea | string |
| data.metadata.attributes | ข้อมูลคุณสมบัติของเมตาดาต้า ข้อมูลเพิ่มเติมที่ไม่ได้ระบุในเมตาดาต้า | json |
| data.metadata.attributes.traitType | ชื่อฟิลด์ที่ประกอบขึ้นเป็น attributes | string |
| data.metadata.attributes.maxValue | ค่าสูงสุดของ trait | string |
| data.metadata.attributes.value | ค่าของ trait ต้องน้อยกว่าค่า data.metadata.attributes.maxValue หาก data.metadata.attributes.displayType เป็น date ให้ป้อนค่า unix timestamp (seconds) ใน value | string หรือ number |
| data.metadata.attributes.displayType | ประเภทการแสดงผลของ trait ค่าเริ่มต้นคือประเภท string.- number: ประเภท Number
- boost_percentage: แสดงข้อมูล % ใน OpenSea Boosts
boost_number: แสดงใน OpenSea Boosts - date: แสดงในรูปแบบวันที่ (ตัวอย่าง: วันอังคารที่ 1 มกราคม 2019)
| string |
ตัวอย่างคำขอ
curl -X 'GET'
'https://sandbox-bc-api.qpyou.cn/service/v1/nft/0x31a6854383c81daab14089cba0b9de1d42ecd65f/tokens/1'
-H 'accept: application/json'
-H 'x-network: polygon'
-H 'x-appid: com.com2us.hivesdk.c2xwallet.hivepc.kr.test'
-H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6...'
ตัวอย่างการตอบกลับ
{
"code": 0,
"message": "success",
"data": {
"nftContract": "0x31a6854383c81daab14089cba0b9de1d42ecd65f",
"tokenId": "5",
"tokenUri": "ipfs://QmTPp6KFmBiDQyVL5b9fUGgp9tJtKrVEayRiXadDuBaPSD",
"gatewayUrl": "https://test-bc-file.qpyou.cn/ipfs/QmTPp6KFmBiDQyVL5b9fUGgp9tJtKrVEayRiXadDuBaPSD",
"metadata": {
"name": "Arbiter's Robe",
"description": "desc",
"image": "https://image01.c2x.world/equip_92053030.gif",
"animationUrl": "https://image01.c2x.world/equip_92053030.gif",
"externalUrl": "https://dex.c2xnft.com/market?key=4423",
"backgroundColor": "orange",
"attributes": [
{
"traitType": "Category",
"value": "Game",
"displayType": "string"
}
]
}
}
}
API ล็อก
การล็อก NFT
NFT การล็อกคือการล็อก NFT ที่ออกโดยไม่ให้สามารถซื้อขายได้ หากผู้เล่นเกมต้องการใช้ไอเทมในเกมหลังจากที่ได้ NFT โดยการมินต์ไอเทมเกม จะทำการล็อก NFT เพื่อไม่ให้สามารถซื้อขายได้ เจ้าของ (owner) จะสร้างธุรกรรมการตั้งค่าการล็อกเพื่อไม่ให้สามารถใช้ NFT (tokenId) ที่ถืออยู่ได้
URL การร้องขอ
พารามิเตอร์เส้นทาง
| ชื่อฟิลด์ | คำอธิบาย | ประเภท | จำเป็นหรือไม่ |
| contract | ที่อยู่ของ NFT คอนแทรกต์ | string | Y |
พารามิเตอร์หัวเรื่อง
| ชื่อฟิลด์ | คำอธิบาย | ประเภท | จำเป็นหรือไม่ |
| Authorization | โทเค็นการรับรองความถูกต้องสำหรับการเรียก API | string | Y |
| x-network | เครือข่ายบล็อกเชน | string | Y |
| x-appid | ID ที่ไม่ซ้ำกันของแอป สามารถตรวจสอบได้จาก Hive Console App Center > รายการ AppID | string | Y |
เนื้อหาการร้องขอ
| ชื่อฟิลด์ | คำอธิบาย | ประเภท | จำเป็นต้องใช้ |
| playerId | ID ของผู้เล่น | string | Y |
| from | ที่อยู่กระเป๋าเงินของเจ้าของ NFT | string | Y |
| isSend | หากเป็น true จะส่งคำสั่งซื้อไปยังบล็อกเชนโดยอัตโนมัติเมื่อมีคีย์กระเป๋าใน KMS โดยจะได้รับ txHash เป็นค่าตอบกลับ หากเป็น false จะได้รับข้อมูลธุรกรรมที่ต้องลงนามโดยผู้ใช้เองใน data.rawTx เป็นค่าตอบกลับ | boolean | Y |
| lockContract | ที่อยู่ของสัญญาที่ล็อก | string | Y |
| tokenId | ID ของ NFT | string | Y |
| encoded | ความจำเป็นในการเข้ารหัสธุรกรรมที่ส่งกลับ <i> true: จะได้รับ Raw Transaction String ที่เข้ารหัสใน data.rawTx </i> false: จะได้รับผลลัพธ์ JSON ที่ถอดรหัสจาก data.rawTx | boolean | Y |
| callbackUrl | ที่อยู่ที่จะได้รับผลลัพธ์ว่าการบันทึกธุรกรรมในบล็อกเชนสำเร็จหรือไม่ | string | Y |
การตอบสนอง
| ชื่อฟิลด์ | คำอธิบาย | ประเภท |
| code | รหัสผลลัพธ์การเรียก API, 0:สำเร็จ | number |
| message | ข้อความผลลัพธ์ | string |
| data | ข้อมูลการตอบกลับ API | json |
| data.rawTx | ข้อมูลธุรกรรม.isSendจะรับค่าได้เฉพาะเมื่อเป็น false เท่านั้น | string หรือ json |
| data.hashedTx | data.rawTx ที่ถูกแฮช จะรับค่าได้เฉพาะเมื่อมีเงื่อนไขทั้งหมดดังต่อไปนี้ , 1. x-network เป็น polygon 2. from เป็นที่อยู่กระเป๋าเงินหลายลายเซ็น 3. isSend เป็น false | string |
| data.txhash | แฮชธุรกรรมที่ได้รับจากผลลัพธ์การส่งธุรกรรม.isSendจะรับค่าได้เฉพาะเมื่อเป็น true เท่านั้น | string |
| data.status | สถานะของธุรกรรมที่ส่ง.isSendจะรับค่าเป็น true หากธุรกรรมถูกส่งอย่างถูกต้องจะได้รับค่าเป็น PENDING หาก isSend เป็น false หมายความว่าต้องมีลายเซ็นก่อนที่จะส่งธุรกรรมจึงจะได้รับค่าเป็น WAITING | string |
| data.reqeustId | ข้อมูลระบุเอกลักษณ์สำหรับคำขอ API | string |
ตัวอย่างคำขอ
curl -X 'POST'
'https://sandbox-bc-api.qpyou.cn/service/v1/nft/contract/0xebd9144485089ebe248f8490984a60579407c262/lock'
-H 'accept: application/json'
-H 'x-network: polygon'
-H 'x-appid: com.com2us.hivesdk.normal.freefull.apple.global.ios.universal'
-H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImNvbS5jb20...'
-H 'Content-Type: application/json'
-d '{
"playerId": 1324,
"from": "0xdcd51770d06B54204abd8c30A25b4583D4cABa39",
"isSend": true,
"lockContract": "0x572f47db51a98ae0d51324c2703d9d63ee3c9f03",
"tokenId": "1",
"encoded": true,
"callbackUrl": "https://withhive.com/"
}'
ตัวอย่างการตอบกลับ
// Request Body의 isSend가 true이고 from이 KMS 주소일 경우
{
"code": 0,
"message": "success",
"data": {
"txhash": "02f8f3830138810b8459682f008459682f1083023...",
"status": "pending",
"requestId": "6fb62650-d52e-4bec-bb91-dd081813d7f1"
}
}
// Request Body의 isSend가 false이고 from이 다중 서명 지갑 주소일 경우
{
"code": 0,
"message": "success",
"data": {
"rawTx": "02f8f3830138810b8459682f008459682f1083023...",
"hashedTx": "0x53e8783e4da707daf58c96a8cea278e7b2a8a5f185af0913b518974556c79076...",
"requestId": "6fb62650-d52e-4bec-bb91-dd081813d7f1"
}
}
// Request Body의 isSend가 false이고 from이 KMS 주소나 일반 지갑 주소일 경우
{
"code": 0,
"message": "success",
"data": {
"rawTx": "02f8f3830138810b8459682f008459682f1083023...",
"requestId": "6fb62650-d52e-4bec-bb91-dd081813d7f1"
}
}
// Request Body의 isSend가 false일 때: data.rawTx가 string
{
"code": 0,
"message": "success",
"data": {
"rawTx": "02f8d3830138810b8458e948068458e948168302e71494ebd9144485089ebe248f8...",
"requestId": "5743f0aa-0323-47fc-a3da-173eee27bbe4"
}
}
// Request Body의 isSend가 false일 때: data.rawTx가 json
{
"code": 0,
"message": "success",
"data": {
"rawTx": {
"from": "0xdcd51770d06B54204abd8c30A25b4583D4cABa39",
"to": "0xebd9144485089ebe248f8490984a60579407c262",
"data": "0xb88d4fde000000000000000000000000dcd51770d06b54204abd8c30a25b4583d4caba3900...",
"nonce": 11,
"chainId": 80001,
"gas": 190228,
"maxFeePerGas": 1491259270,
"maxPriorityFeePerGas": 1491259255
},
"requestId": "dd33ddd8-31fa-4491-9c3c-2f912f7059bc"
}
}
การปลดล็อก NFT
สร้างธุรกรรมเพื่อปลดล็อกการตั้งค่าการล็อกให้เจ้าของ (owner) สามารถใช้ NFT (tokenId) ได้
URL การร้องขอ
พารามิเตอร์เส้นทาง
| ชื่อฟิลด์ | คำอธิบาย | ประเภท | จำเป็นหรือไม่ |
| contract | ที่อยู่ของสัญญาล็อก | string | Y |
พารามิเตอร์หัว
| ชื่อฟิลด์ | คำอธิบาย | ประเภท | จำเป็นหรือไม่ |
| Authorization | โทเค็นการรับรองความถูกต้องสำหรับการเรียก API | string | ใช่ |
| x-network | เครือข่ายบล็อกเชน | string | ใช่ |
| x-appid | เป็น ID เฉพาะของแอป สามารถตรวจสอบได้จาก Hive Console App Center > รายการ AppID | string | ใช่ |
เนื้อหาการร้องขอ
| ชื่อฟิลด์ | คำอธิบาย | ประเภท | ความจำเป็น |
| playerId | ID ผู้เล่น | string | Y |
| nftContract | ที่อยู่ของ NFT คอนแทรค | string | Y |
| from | ที่อยู่กระเป๋าของเจ้าของคอนแทรคล็อก | string | Y |
| isSend | true หมายถึง เมื่อมีคีย์กระเป๋าใน KMS จะทำการลงนามธุรกรรมโดยอัตโนมัติด้วยคีย์นี้แล้วส่งไปยังบล็อกเชน โดยจะได้รับค่า txHash เป็นผลตอบกลับ หากเป็น false จะได้รับข้อมูลธุรกรรมที่ต้องลงนามโดยผู้ใช้เองใน data.rawTx เป็นผลตอบกลับ | boolean | Y |
| tokenId | ID ของ NFT | string | Y |
| encoded | ความจำเป็นในการเข้ารหัสธุรกรรมที่ส่งกลับ -
true: จะได้รับ Raw Transaction String ที่เข้ารหัสใน data.rawTx -
false: จะได้รับผลลัพธ์ JSON ที่ถอดรหัสจาก data.rawTx | boolean | Y |
| callbackUrl | ที่อยู่ที่จะแจ้งผลการบันทึกธุรกรรมลงในบล็อกเชนว่าประสบความสำเร็จ/ล้มเหลว | string | Y |
การตอบสนอง
| ชื่อฟิลด์ | คำอธิบาย | ประเภท |
| code | รหัสผลลัพธ์ของการเรียก API, 0:สำเร็จ | number |
| message | ข้อความผลลัพธ์ | string |
| data | ข้อมูลการตอบกลับ API | json |
| data.rawTx | ข้อมูลธุรกรรม.isSendจะรับค่าได้เฉพาะเมื่อเป็น false | string หรือ json |
| data.hashedTx | data.rawTx ที่ถูกแฮช. จะรับค่าได้เฉพาะเมื่อเป็นไปตามเงื่อนไขทั้งหมดด้านล่างนี้: 1. x-network เป็น polygon 2. from เป็นที่อยู่กระเป๋าเงินหลายลายเซ็น 3. isSend เป็น false | string |
| data.txhash | แฮชธุรกรรมที่ได้รับจากผลลัพธ์การส่งธุรกรรม.isSendจะรับค่าได้เฉพาะเมื่อเป็น true | string |
| data.status | สถานะของธุรกรรมที่ส่ง.isSendเป็น true หากธุรกรรมถูกส่งอย่างถูกต้องจะได้รับค่าเป็น PENDING. หาก isSend เป็น false หมายความว่าต้องการลายเซ็นก่อนที่จะส่งธุรกรรมจะได้รับค่าเป็น WAITING. | string |
| data.reqeustId | ค่าที่ไม่ซ้ำกันเพื่อระบุคำขอ API | string |
ตัวอย่างคำขอ
curl -X 'POST'
'https://sandbox-bc-api.qpyou.cn/service/v1/lock/contract/0x572f47db51a98ae0d51324c2703d9d63ee3c9f03/unlock'
-H 'accept: application/json'
-H 'x-network: polygon'
-H 'x-appid: com.com2us.hivesdk.normal.freefull.apple.global.ios.universal'
-H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImNvbS5jb20ydXMuaGl2ZXNka...'
-H 'Content-Type: application/json'
-d '{
"playerId": 1324,
"isSend": true,
"nftContract": "0xebd9144485089ebe248f8490984a60579407c262",
"from": "0xdcd51770d06B54204abd8c30A25b4583D4cABa39",
"tokenId": "2",
"encoded": true,
"callbackUrl": "https://withhive.com/"
}'
ตัวอย่างการตอบกลับ
// Request Body의 isSend가 true이고 from이 KMS 주소일 경우
{
"code": 0,
"message": "success",
"data": {
"txhash": "02f8f3830138810b8459682f008459682f1083023...",
"status": "pending",
"requestId": "6fb62650-d52e-4bec-bb91-dd081813d7f1"
}
}
// Request Body의 isSend가 false이고 from이 다중 서명 지갑 주소일 경우
{
"code": 0,
"message": "success",
"data": {
"rawTx": "02f8f3830138810b8459682f008459682f1083023...",
"hashedTx": "0x53e8783e4da707daf58c96a8cea278e7b2a8a5f185af0913b518974556c79076...",
"requestId": "6fb62650-d52e-4bec-bb91-dd081813d7f1"
}
}
// Request Body의 isSend가 false이고 from이 KMS 주소나 일반 지갑 주소일 경우
{
"code": 0,
"message": "success",
"data": {
"rawTx": "02f8f3830138810b8459682f008459682f1083023...",
"requestId": "6fb62650-d52e-4bec-bb91-dd081813d7f1"
}
}
// Request Body의 isSend가 false일 때: data.rawTx가 string
{
"code": 0,
"message": "success",
"data": {
"rawTx": "02f8d3830138810b8458e948068458e948168302e71494ebd9144485089ebe248f8...",
"requestId": "5743f0aa-0323-47fc-a3da-173eee27bbe4"
}
}
// Request Body의 isSend가 false일 때: data.rawTx가 json
{
"code": 0,
"message": "success",
"data": {
"rawTx": {
"from": "0xdcd51770d06B54204abd8c30A25b4583D4cABa39",
"to": "0xebd9144485089ebe248f8490984a60579407c262",
"data": "0xb88d4fde000000000000000000000000dcd51770d06b54204abd8c30a25b4583d4caba3900...",
"nonce": 11,
"chainId": 80001,
"gas": 190228,
"maxFeePerGas": 1491259270,
"maxPriorityFeePerGas": 1491259255
},
"requestId": "dd33ddd8-31fa-4491-9c3c-2f912f7059bc"
}
}
แปลง API
แลกเปลี่ยนสกุลเงินเกมและโทเค็นเกม
แลกเปลี่ยนโทเค็นเกมและสกุลเงินเกม
- to-token: แลกเปลี่ยนสกุลเงินเกม (gameCurrencyCode) เป็นโทเค็นเกม (gameToken)。
- to-currency: แลกเปลี่ยนโทเค็นเกม (gameToken) เป็นสกุลเงินเกม (gameCurrencyCode)。
URL การร้องขอ
พารามิเตอร์เส้นทาง
| ชื่อฟิลด์ | คำอธิบาย | ประเภท | จำเป็นหรือไม่ |
| type | ประเภทการแปลง - to-token: แลกเปลี่ยนสกุลเงินเกม(
gameCurrencyCode)เป็นโทเค็นเกม(gameToken) - to-currency: แลกเปลี่ยนโทเค็นเกม(
gameToken)เป็นสกุลเงินเกม(gameCurrencyCode). | string | Y |
พารามิเตอร์หัวเรื่อง
| ชื่อฟิลด์ | คำอธิบาย | ประเภท | จำเป็นหรือไม่ |
| Authorization | โทเค็นการรับรองความถูกต้องสำหรับการเรียก API | string | ใช่ |
| x-network | เครือข่ายบล็อกเชน | string | ใช่ |
| x-appid | ID เฉพาะของแอป สามารถตรวจสอบได้จาก Hive Console App Center > รายการ AppID | string | ใช่ |
เนื้อหาคำขอ
| ชื่อฟิลด์ | คำอธิบาย | ประเภท | จำเป็นหรือไม่ |
| playerId | รหัสผู้เล่น | string | ใช่ |
| isSend | หากเป็น true จะทำการเซ็นธุรกรรมโดยอัตโนมัติด้วยกุญแจกระเป๋าเงินจาก KMS และส่งไปยังบล็อกเชน จะได้รับค่าตอบกลับเป็น txHash หากเป็น false จะได้รับข้อมูลธุรกรรมที่ผู้ใช้ต้องเซ็นเองซึ่งคือ data.rawTx | boolean | ใช่ |
| owner | ที่อยู่กระเป๋าเงินของผู้ใช้ | string | ใช่ |
| convertPool | ที่อยู่ของพูลการแปลง | string | ใช่ |
| gameTokenAmount | จำนวนโทเค็นเกม | string | ใช่ |
| gameCurrencyCode | รหัสสกุลเงินเกม | string | ใช่ |
| gameCurrencyAmount | จำนวนสกุลเงินเกม | string | ใช่ |
| encoded | สถานะการเข้ารหัสของธุรกรรมที่ได้รับคืน <i> true: จะได้รับ Raw Transaction String ที่เข้ารหัสด้วย data.rawTx </i> false: จะได้รับผลลัพธ์ JSON ที่ถอดรหัสจาก data.rawTx | boolean | ใช่ |
| callbackUrl | ที่อยู่ที่จะได้รับผลลัพธ์ว่าการบันทึกธุรกรรมในบล็อกเชนสำเร็จ/ล้มเหลว | string | ใช่ |
การตอบสนอง
| ชื่อฟิลด์ | คำอธิบาย | ประเภท |
| code | รหัสผลลัพธ์การเรียก API, 0:สำเร็จ | number |
| message | ข้อความผลลัพธ์ | string |
| data | ข้อมูลการตอบกลับ API | json |
| data.rawTx | ข้อมูลธุรกรรม.isSendจะรับค่านี้ได้เฉพาะเมื่อเป็น false เท่านั้น | string หรือ json |
| data.hashedTx | data.rawTx ที่ถูกแฮช. จะรับค่านี้ได้เฉพาะเมื่อเป็นไปตามเงื่อนไขทั้งหมดด้านล่างนี้: 1. x-network เป็น polygon 2. from เป็นที่อยู่กระเป๋าเงินหลายลายเซ็น 3. isSend เป็น false | string |
| data.txhash | แฮชธุรกรรมที่ได้รับเป็นผลลัพธ์จากการส่งธุรกรรม.isSendจะรับค่านี้ได้เฉพาะเมื่อเป็น true เท่านั้น | string |
| data.status | สถานะของธุรกรรมที่ส่ง.isSendเป็น true หากธุรกรรมถูกส่งอย่างถูกต้องจะได้รับค่า PENDING. หาก isSend เป็น false หมายความว่าต้องการลายเซ็นก่อนที่จะส่งธุรกรรมจึงได้รับค่า WAITING | string |
| data.reqeustId | ค่าที่ไม่ซ้ำกันเพื่อระบุคำขอ API | string |
ตัวอย่างคำขอ
curl -X 'POST'
'https://sandbox-bc-api.qpyou.cn/service/v1/convert/to-token'
-H 'accept: application/json'
-H 'x-network: polygon'
-H 'x-appid: com.com2us.hivesdk.normal.freefull.apple.global.ios.universal'
-H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImNvb...'
-H 'Content-Type: application/json'
-d '{
"playerId": 1324,
"isSend": true,
"owner": "0xA10078576Ca6f63dc6f78ff9a8ed8bd05B51f463",
"convertPool": "0xdcd51770d06B54204abd8c30A25b4583D4cABa39",
"gameTokenAmount": "1",
"gameCurrencyCode": "A39539HFTGOLD0001",
"gameCurrencyAmount": "1000",
"encoded": true,
"callbackUrl": "https://withhive.com/"
}'
ตัวอย่างการตอบกลับ
// Request Body의 isSend가 true이고 from이 KMS 주소일 경우
{
"code": 0,
"message": "success",
"data": {
"txhash": "02f8f3830138810b8459682f008459682f1083023...",
"status": "pending",
"requestId": "6fb62650-d52e-4bec-bb91-dd081813d7f1"
}
}
// Request Body의 isSend가 false이고 from이 다중 서명 지갑 주소일 경우
{
"code": 0,
"message": "success",
"data": {
"rawTx": "02f8f3830138810b8459682f008459682f1083023...",
"hashedTx": "0x53e8783e4da707daf58c96a8cea278e7b2a8a5f185af0913b518974556c79076...",
"requestId": "6fb62650-d52e-4bec-bb91-dd081813d7f1"
}
}
// Request Body의 isSend가 false이고 from이 KMS 주소나 일반 지갑 주소일 경우
{
"code": 0,
"message": "success",
"data": {
"rawTx": "02f8f3830138810b8459682f008459682f1083023...",
"requestId": "6fb62650-d52e-4bec-bb91-dd081813d7f1"
}
}
// Request Body의 isSend가 false일 때: data.rawTx가 string
{
"code": 0,
"message": "success",
"data": {
"rawTx": "02f8d3830138810b8458e948068458e948168302e71494ebd9144485089ebe248f8...",
"requestId": "5743f0aa-0323-47fc-a3da-173eee27bbe4"
}
}
// Request Body의 isSend가 false일 때: data.rawTx가 json
{
"code": 0,
"message": "success",
"data": {
"rawTx": {
"from": "0xdcd51770d06B54204abd8c30A25b4583D4cABa39",
"to": "0xebd9144485089ebe248f8490984a60579407c262",
"data": "0xb88d4fde000000000000000000000000dcd51770d06b54204abd8c30a25b4583d4caba3900...",
"nonce": 11,
"chainId": 80001,
"gas": 190228,
"maxFeePerGas": 1491259270,
"maxPriorityFeePerGas": 1491259255
},
"requestId": "dd33ddd8-31fa-4491-9c3c-2f912f7059bc"
}
}
ตรวจสอบการแปลงพูล
การแลกเปลี่ยนคอนเวิร์ตคือสถานที่ที่ผู้พัฒนาเกมสามารถแลกเปลี่ยนโทเค็นเกมและทรัพยากรในเกมซึ่งกันและกันได้ คุณสามารถตรวจสอบจำนวนโทเค็นที่เหลืออยู่ในคอนเวิร์ตพูลและจำนวนทรัพยากรในเกมได้
URL คำขอ
พารามิเตอร์เส้นทาง
| ชื่อฟิลด์ | คำอธิบาย | ประเภท | ความจำเป็น |
| convertPool | ที่อยู่ของคอนเวิร์ทพูล | string | Y |
พารามิเตอร์ส่วนหัว
| ชื่อฟิลด์ | คำอธิบาย | ประเภท | จำเป็นหรือไม่ |
| Authorization | โทเค็นการรับรองความถูกต้องสำหรับการเรียก API | string | ใช่ |
| x-network | เครือข่ายบล็อกเชน | string | ใช่ |
| x-appid | เป็น ID เฉพาะของแอป สามารถตรวจสอบได้จาก Hive คอนโซล แอปเซ็นเตอร์ > รายการ AppID | string | ใช่ |
การตอบกลับ
| ชื่อฟิลด์ | คำอธิบาย | ประเภท |
| code | รหัสผลลัพธ์การเรียก API, 0:สำเร็จ | number |
| message | ข้อความผลลัพธ์ | string |
| data | ข้อมูลการตอบกลับ API | json |
ตัวอย่างคำขอ
curl -X 'GET'
'https://sandbox-bc-api.qpyou.cn/service/v1/convert/pool/0xdcd51770d06B54204abd8c30A25b4583D4cABa39'
-H 'accept: application/json'
-H 'x-network: polygon'
-H 'x-appid: com.com2us.hivesdk.normal.freefull.apple.global.ios.universal'
-H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImNvb...'
-d ''
ตัวอย่างการตอบกลับ
{
"code": 0,
"message": "success",
"data": {
"convertPoolAmount": "1000000000",
"gameCurrency": [
{
"goodsCode": "A39539HFTBRONZE0003",
"goodsAmount": "10000000000"
},
{
"goodsCode": "A39539HFTGOLD0001",
"goodsAmount": "1000000000000"
},
{
"goodsCode": "A39539HFTSILVER0002",
"goodsAmount": "100000000000"
}
]
}
}
API การทำธุรกรรม
การลงทะเบียน Txhash
เมื่อสร้างธุรกรรมใด ๆ (เช่น mint, convert, lock API เป็นต้น) จะลงทะเบียน requestId ที่ได้รับเป็นค่าตอบกลับ และ txHash ที่ได้รับเมื่อบันทึกธุรกรรมนี้ลงในบล็อกเชน นี่เป็นขั้นตอนในการติดตามว่าการขอสร้างธุรกรรมเสร็จสมบูรณ์อย่างถูกต้องหรือไม่
URL ที่ร้องขอ
พารามิเตอร์ส่วนหัว
| ชื่อฟิลด์ | คำอธิบาย | ประเภท | จำเป็นหรือไม่ |
| Authorization | โทเค็นการตรวจสอบสิทธิ์สำหรับการเรียก API | string | Y |
| x-network | เครือข่ายบล็อกเชน | string | Y |
| x-appid | เป็น ID ที่ไม่ซ้ำกันของแอป สามารถตรวจสอบได้จาก Hive คอนโซล แอปเซ็นเตอร์ > รายการ AppID | string | Y |
เนื้อหาของคำขอ
| ชื่อฟิลด์ | คำอธิบาย | ประเภท | ความจำเป็น |
| requestId | ค่าที่ไม่ซ้ำกันที่สามารถใช้ระบุคำขอ API | string | Y |
| txHash | แฮชของธุรกรรม | string | Y |
การตอบสนอง
| ชื่อฟิลด์ | คำอธิบาย | ประเภท |
| code | รหัสผลลัพธ์การเรียก API, 0:สำเร็จ | number |
| message | ข้อความผลลัพธ์ | string |
| data | ข้อมูลการตอบกลับ API | json |
ตัวอย่างคำขอ
curl -X 'PATCH'
'https://sandbox-bc-api.qpyou.cn/service/v1/tx/hash'
-H 'accept: application/json'
-H 'x-network: polygon'
-H 'x-appid: com.com2us.hivesdk.normal.freefull.apple.global.ios.universal'
-H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImN...'
-H 'Content-Type: application/json'
-d '{
"requestId": "538d0ca4-9d8b-4b8c-ab02-c68bc1623ed3",
"txHash": "0x99a93c8ba06865bd7054835d5f9abe57424289dca15ea61fe55a33a0651b058c"
}'
ตัวอย่างการตอบกลับ
{
"code": 0,
"message": "success"
}
ดูรายการธุรกรรม
กำลังตรวจสอบรายการธุรกรรมที่ร้องขอ หากธุรกรรมที่ร้องขอถูกบันทึกลงในบล็อกเชนอย่างถูกต้อง สถานะธุรกรรม (transactions.txStatus) จะถูกอัปเดตเป็นสำเร็จ
URL การร้องขอ
พารามิเตอร์หัวเรื่อง
| ชื่อฟิลด์ | คำอธิบาย | ประเภท | ความจำเป็น |
| Authorization | โทเค็นการรับรองตัวตนสำหรับการเรียก API | string | Y |
| x-network | เครือข่ายบล็อกเชน | string | Y |
| x-appid | ID เฉพาะของแอป สามารถตรวจสอบได้จาก Hive คอนโซล แอปเซ็นเตอร์ > รายการ AppID | string | Y |
พารามิเตอร์การค้นหา
| ชื่อฟิลด์ | คำอธิบาย | ประเภท | จำเป็นต้องมี |
| playerId | รหัสผู้เล่น | string | N |
| startDate | เงื่อนไขการค้นหาวันที่สร้างธุรกรรม (วันเริ่มต้น, yyyy-mm-dd) | string | N |
| endDate | เงื่อนไขการค้นหาวันที่สร้างธุรกรรม (วันสิ้นสุด, yyyy-mm-dd) | string | N |
| page | หมายเลขหน้าปัจจุบัน | number | N |
| limit | จำนวนธุรกรรมที่จะปรากฏใน 1 หน้าผลลัพธ์ | number | N |
การตอบสนอง
| ชื่อฟิลด์ | คำอธิบาย | ประเภท |
| code | รหัสผลลัพธ์การเรียก API, 0:สำเร็จ | number |
| message | ข้อความผลลัพธ์ | string |
| data | ข้อมูลการตอบกลับ API | json |
| transactions | ข้อมูลธุรกรรม | array |
| transactions.appid | รหัสประจำตัวแอพที่ลงทะเบียนใน App Center | string |
| transactions.playerId | รหัสผู้เล่น | number |
| transactions.address | ที่อยู่ของกระเป๋าที่สร้างธุรกรรม | string |
| transactions.contract | ที่อยู่ของสัญญาธุรกรรมที่ร้องขอ | string |
| transactions.requestId | รหัสเฉพาะสำหรับการเรียก API | string |
| transactions.requestParams | พารามิเตอร์การเรียก API | json |
| transactions.txType | ประเภทธุรกรรม | string |
| transactions.txStatus | สถานะธุรกรรม | string |
| transactions.txHash | Hash ของธุรกรรม | string |
| transactions.createdAt | วันที่สร้างธุรกรรม | string |
| transactions.updatedAt | วันที่อัปเดตธุรกรรม | string |
| meta | ข้อมูลการแบ่งหน้า | json |
| meta.totalItems | จำนวนทั้งหมด | number |
| meta.itemCount | จำนวนที่แสดง | number |
| meta.itemsPerPage | จำนวนที่จะแสดงต่อหน้า | number |
| meta.totalPages | จำนวนหน้าทั้งหมด | number |
| meta.currentPage | หมายเลขหน้าปัจจุบัน | number |
ตัวอย่างคำขอ
curl -X 'GET'
'https://sandbox-bc-api.qpyou.cn/service/v1/tx?playerId=1324&startDate=2023-08-10&endDate=2023-08-10'
-H 'accept: application/json'
-H 'x-network: polygon'
-H 'x-appid: com.com2us.hivesdk.c2xwallet.hivepc.kr.test'
-H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImNvbS5jb20ydXMuaGl2...'
ตัวอย่างการตอบกลับ
{
"code": 0,
"message": "success",
"data": {
"transactions": [
{
"appid": "com.com2us.hivesdk.c2xwallet.hivepc.kr.test",
"address": "0x9428e6eF51FEb2201676deEc11B7E36F7c1F0765",
"contract": "0xB3A634AAC8F04f1946C1c9Fc461055AC1Bdc4b34",
"requestId": "1643105b-7669-4260-8679-ca967660df41",
"requestParams": {
"encoded": true,
"tokenId": "1",
"playerId": 1324,
"callbackUrl": "https://withhive.com/",
"nftContract": "0xa3fd0377a12b75ac2f70d5f69550332c96582b00",
"lockContract": "0xB3A634AAC8F04f1946C1c9Fc461055AC1Bdc4b34",
"lockContractOwner": "0x9428e6eF51FEb2201676deEc11B7E36F7c1F0765"
},
"txType": "UNLOCK",
"txStatus": "SUCCESS",
"txHash": "0x78889d58613816c16389a7031634cc781fc725c3b3a88999524c92f67be89236",
"createdAt": "2023-08-10T07:23:05.000Z",
"updatedAt": "2023-08-10T07:25:00.000Z"
}
],
"meta": {
"totalItems": 11,
"itemCount": 1,
"itemsPerPage": 1,
"totalPages": 11,
"currentPage": 1
}
}
}
API โทเค็น
ตรวจสอบยอดคงเหลือของโทเค็น
ตรวจสอบยอดเงินโทเค็นปัจจุบันของที่อยู่บัญชีเจ้าของโทเค็น (from)
URL การร้องขอ
พารามิเตอร์เส้นทาง
| ชื่อฟิลด์ | คำอธิบาย | ประเภท | ความจำเป็น |
| contract | ที่อยู่ของสัญญาโทเค็น | string | Y |
| from | บัญชีเจ้าของโทเค็น | string | Y |
พารามิเตอร์หัวเรื่อง
| ชื่อฟิลด์ | คำอธิบาย | ประเภท | ความจำเป็น |
| Authorization | โทเค็นการรับรองความถูกต้องสำหรับการเรียก API | string | Y |
| x-network | เครือข่ายบล็อกเชน{ploygon, xpla} | string | Y |
| x-appid | รหัสประจำแอปที่ไม่ซ้ำกัน สามารถตรวจสอบได้จาก Hive คอนโซล แอปเซ็นเตอร์ > รายการ AppID | string | Y |
การตอบสนอง
| ชื่อฟิลด์ | คำอธิบาย | ประเภท |
| code | รหัสผลลัพธ์การเรียก API, 0:สำเร็จ | number |
| message | ข้อความผลลัพธ์ | string |
| data | ข้อมูลการตอบกลับ API | json |
| data.value | ยอดคงเหลือของโทเค็น | string |
| data.rawValue | ยอดคงเหลือของโทเค็นที่ไม่ได้ใช้ data.decimals | string |
| data.decimals | จำนวนตำแหน่งทศนิยมสูงสุดของโทเค็น | number |
| data.symbol | สัญลักษณ์ของโทเค็น | string |
| data.symbolUri | URI รูปภาพสัญลักษณ์ของโทเค็น | string |
ตัวอย่างคำขอ
curl -X 'GET'
'https://sandbox-bc-api.qpyou.cn/service/v1/ft/0x94853BdC9c6AdD50D7842D1A3117fab385457470/account/0x9428e6eF51FEb2201676deEc11B7E36F7c1F0765/balance'
-H 'accept: application/json'
-H 'x-network: polygon'
-H 'x-appid: com.com2us.hivesdk.c2xwallet.hivepc.kr.test'
-H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6I...'
ตัวอย่างการตอบกลับ
{
"code": 0,
"message": "success",
"data": {
"value": "999998999",
"symbol": "ST",
"decimals": 18,
"rawValue": "999998999000000000000000000"
}
}
API สัญญา
ตรวจสอบสัญญา
ตรวจสอบสัญญาที่ถูกเผยแพร่จากที่อยู่บัญชีที่เผยแพร่สัญญา (owner)
URL ที่ร้องขอ
พารามิเตอร์เส้นทาง
| ชื่อฟิลด์ | คำอธิบาย | ประเภท | จำเป็นหรือไม่ |
| owner | ที่อยู่บัญชีที่เผยแพร่สัญญา | string | Y |
พารามิเตอร์หัวเรื่อง
| ชื่อฟิลด์ | คำอธิบาย | ประเภท | จำเป็นหรือไม่ |
| Authorization | โทเค็นการรับรองความถูกต้องสำหรับการเรียก API | string | Y |
| x-network | เครือข่ายบล็อกเชน | string | Y |
| x-appid | ID เฉพาะของแอป สามารถตรวจสอบได้จากศูนย์แอป Hive Console > รายการ AppID | string | Y |
พารามิเตอร์การค้นหา
| ชื่อฟิลด์ | คำอธิบาย | ประเภท | จำเป็นหรือไม่ |
| contractType | ประเภทของสัญญา | string | N |
| page | หมายเลขหน้าปัจจุบัน | number | N |
| limit | จำนวนสัญญาที่จะแสดงใน 1 หน้า | number | N |
การตอบกลับ
| ชื่อฟิลด์ | คำอธิบาย | ประเภท |
| code | รหัสผลลัพธ์การเรียก API, 0:สำเร็จ | number |
| message | ข้อความผลลัพธ์ | string |
| data | ข้อมูลการตอบกลับ API | json |
| data.contracts | ข้อมูลสัญญา | array |
| data.contracts.network | ข้อมูลเชน | string |
| data.contracts.owner | ที่อยู่บัญชีที่เผยแพร่สัญญา | string |
| data.contracts.address | ที่อยู่สัญญา | string |
| data.contracts.type | ประเภทสัญญา | string |
| data.contracts.name | ชื่อสัญญา | string |
| data.contracts.gameIndex | ดัชนีเกม | number |
| data.contracts.gameName | ชื่อเกม | string |
| data.contracts.symbol | URI รูปภาพสัญลักษณ์สัญญา | string |
| data.contracts.symbolUri | URI รูปภาพสัญลักษณ์สัญญา | string |
| data.contracts.createdAt | วันที่ลงทะเบียนสัญญา | string |
| meta | ข้อมูลการแบ่งหน้า | json |
| meta.totalItems | จำนวนทั้งหมด | number |
| meta.itemCount | จำนวนที่แสดง | number |
| meta.itemsPerPage | จำนวนที่จะแสดงต่อหน้า | number |
| meta.totalPages | จำนวนหน้าทั้งหมด | number |
| meta.currentPage | หมายเลขหน้าปัจจุบัน | number |
ตัวอย่างคำขอ
curl -X 'GET'
'https://sandbox-bc-api.qpyou.cn/service/v1/contract/owner/0x9428e6eF51FEb2201676deEc11B7E36F7c1F0765?contractType=FT&limit=1'
-H 'accept: application/json'
-H 'x-network: polygon'
-H 'x-appid: com.com2us.hivesdk.c2xwallet.hivepc.kr.test'
-H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImNvbS5jb20ydX...'
ตัวอย่างการตอบกลับ
{
"code": 0,
"message": "success",
"data": {
"contracts": [
{
"gameIndex": 539,
"gameName": "HIVE SDK(en)",
"owner": "0x9428e6eF51FEb2201676deEc11B7E36F7c1F0765",
"address": "0x05524fd875255ebd9c5f8871015ccc37b7fb20de",
"name": "Fungible Token",
"type": "FT",
"symbol": "Fungible Token",
"symbolUri": "https://sandbox-bc-file.qpyou.cn/ipfs/QmfJ9oT8Yb69bGr9bKozoYFYDQ4e1qPy31q4W3xsxfVw9L",
"createdAt": "2023-08-10T01:09:59.000Z",
"network": "polygon"
}
],
"meta": {
"totalItems": 5,
"itemCount": 1,
"itemsPerPage": 1,
"totalPages": 5,
"currentPage": 1
}
}
}
Actions API
Actions API เป็น API ที่ให้บริการ URL ของหน้าเว็บโดยเชื่อมต่อกับเกมที่สร้างขึ้นบนบล็อกเชน XPLA ผู้ใช้สามารถดำเนินการฟังก์ชัน Mint, Convert, Lock, Unlock, Burn ระหว่างสินทรัพย์ในเกมและโทเค็นเกม (XPLA) ผ่าน Actions API ได้
API สร้าง Action
ผู้ใช้สามารถเข้าถึงเว็บเพจที่ได้รับการตอบกลับหลังจากส่งคำขอสร้าง Action (actionLink) และดำเนินการฟังก์ชันบล็อกเชนดังต่อไปนี้
- Mint: ฟังก์ชันในการออกไอเท็มเป็น NFT โดยตั้งค่า NFT ID (tokenId) เป็นค่าที่ไม่ซ้ำกันสำหรับไอเท็ม เมื่อ NFT ถูกออกแล้ว ไอเท็มในเกมจะต้องถูกปิดการใช้งาน.
- Convert: ฟังก์ชันในการแลกเปลี่ยนสกุลเงินในเกมกับ XPLA หรือโทเค็นเกม ซึ่งต้องการรหัสสกุลเงินในเกม (gameCurrencyCode) ที่ลงทะเบียนใน Hive Console เมื่อการแลกเปลี่ยนระหว่างสกุลเงินในเกมและโทเค็น (XPLA) เสร็จสิ้น จะต้องมีการอัปเดตจำนวนสกุลเงินในเกม.
- Lock: ฟังก์ชันในการล็อก NFT ที่ออกแล้วและใช้ซ้ำในเกม ซึ่งต้องมีการเปิดใช้งานไอเท็มในเกม (ไอเท็มที่สามารถใช้ในเกมหลังจากล็อกจะต้องไม่ถูกแลกเปลี่ยนหรือถูกลบในเกมเพื่อให้สามารถปลดล็อกได้).
- ปลดล็อก: ฟีเจอร์การปลดล็อก NFT ที่อนุญาตให้ผู้ใช้สามารถใช้ไอเทมที่ใช้งานอยู่ในเกมอีกครั้งจากกระเป๋าเงินของผู้ใช้ โดยต้องมีค่า NFT ID (tokenId) ที่ไม่ซ้ำกันสำหรับไอเทม และสามารถปลดล็อกได้เฉพาะจากบัญชีและกระเป๋าเงินที่ล็อก NFT เท่านั้น เมื่อทำการปลดล็อก อินเกมไอเทมจะต้องถูกทำให้ไม่สามารถใช้งานได้.
- เผา: ฟังก์ชันในการทำลาย NFT ที่ออกแล้วและใช้ไอเท็มนั้นในเกม หลังจากเผาแล้วสามารถแลกเปลี่ยนและลบไอเท็มในเกมได้
ทำการ Mint, Convert, Lock, Unlock, Burn และส่งผลลัพธ์ผ่าน callbackUrl
Note
Action ที่สร้างขึ้นครั้งหนึ่งจะมีอายุ 5 นาที และเมื่อผ่านไป 5 นาทีหรือเมื่อทำงานของ Action นั้นเสร็จสิ้น จะไม่สามารถใช้งานได้อีกต่อไป
URL คำขอ
| ลิงก์สด | https://bc-api.qpyou.cn/xpla-platform/v1/actions |
| ลิงก์ Sandbox | https://sandbox-bc-api.qpyou.cn/xpla-platform/v1/actions |
| วิธีการ HTTP | POST |
| ประเภทเนื้อหา | application/json |
พารามิเตอร์หัวเรื่อง
| ชื่อฟิลด์ | คำอธิบาย | ประเภท | จำเป็นหรือไม่ |
| Authorization | โทเค็นการรับรองความถูกต้องสำหรับการเรียก API | string | Y |
เนื้อหาการร้องขอ
| ชื่อฟิลด์ | คำอธิบาย | ประเภท | ความจำเป็น |
| actionType | การแยกประเภทฟังก์ชันบล็อกเชน {MINT | CONVERT | LOCK | UNLOCK | BURN} | string | Y |
| info | ข้อมูลตัวเลือกสำหรับฟังก์ชันบล็อกเชน | json | Y |
| appid | หมายเลข ID ที่ไม่ซ้ำกันของแอปบล็อกเชน สามารถตรวจสอบได้จาก Hive Console App Center > รายการ AppID | string | Y |
| gameAppid | หมายเลข ID ที่ไม่ซ้ำกันของเกมแอป สามารถตรวจสอบได้จาก Hive Console App Center > รายการ AppID | string | Y |
| playerId | หมายเลข ID ของผู้เล่น | number | Y |
| callbackUrl | ที่อยู่ที่จะได้รับผลลัพธ์สำเร็จ/ล้มเหลวหลังจากบันทึกธุรกรรมลงในบล็อกเชน | string | Y |
| language | รหัสภาษา | string | Y |
ข้อมูลแต่ละองค์ประกอบที่บรรจุใน request body ตาม actionType
- มินต์
| ชื่อฟิลด์ | คำอธิบาย | ประเภท |
| nftContract | ที่อยู่ของ NFT สัญญา | string |
| itemName | ชื่อไอเทมในเกม | string |
| tokenId | รหัสระบุตัวตน NFT (ค่าที่ไม่ซ้ำกันของไอเทม) | string |
| metadata | ข้อมูลเมตา (ดูที่อยู่ API request body สำหรับการออก NFT) | json |
- CONVERT
| ชื่อฟิลด์ | คำอธิบาย | ประเภท |
| convertPool | ที่อยู่บัญชีของ Convert Pool | string |
| gameCurrencyCode | รหัสสกุลเงินในเกม | string |
| userGameCurrencyAmount | จำนวนสกุลเงินในเกมที่ผู้ใช้จะแลกเปลี่ยน | number |
| minCurrencyAmount | จำนวนสกุลเงินในเกมขั้นต่ำที่สามารถแลกเปลี่ยนได้ | number |
| maxCurrencyAmount | จำนวนสกุลเงินในเกมสูงสุดที่สามารถแลกเปลี่ยนได้ | number |
| totalExchangedCurrencyAmount | จำนวนสกุลเงินในเกมที่ผู้ใช้แลกเปลี่ยนไปจนถึงปัจจุบัน | number |
- LOCK
| ชื่อฟิลด์ | คำอธิบาย | ประเภท |
| nftContract | ที่อยู่ของ NFT สัญญา | string |
| lockContract | ที่อยู่ของ Lock สัญญา | string |
- UNLOCK
| ชื่อฟิลด์ | คำอธิบาย | ประเภท |
| nftContract | ที่อยู่ของ NFT สัญญา | string |
| lockContract | ที่อยู่ของ Lock สัญญา | string |
| tokenId | รหัสระบุตัวตน NFT (ค่าที่ไม่ซ้ำกันของไอเทม) | string |
- BURN
| ชื่อฟิลด์ | คำอธิบาย | ประเภท |
| nftContract | ที่อยู่ของ NFT คอนแทรค | string |
การตอบสนอง
| ชื่อฟิลด์ | คำอธิบาย | ประเภท |
| code | รหัสผลลัพธ์การเรียก API, 0:สำเร็จ | number |
| message | ข้อความผลลัพธ์ | string |
| data | ข้อมูลการตอบกลับจาก API | json |
| data.id | รหัสเฉพาะของ Action | string |
| data.actionType | ประเภทของฟังก์ชันบล็อกเชน {MINT | CONVERT | LOCK | UNLOCK | BURN} | string |
| data.info | ข้อมูลการตอบกลับตาม actionType | json |
| data.info.serviceFee | ค่าธรรมเนียมบริการสำหรับการใช้ฟังก์ชันบล็อกเชน | number |
| data.appid | รหัสเฉพาะของแอปบล็อกเชน สามารถตรวจสอบได้ที่ Hive คอนโซล แอปเซ็นเตอร์ > รายการ AppID | json |
| data.gameAppid | รหัสเฉพาะของเกมแอป สามารถตรวจสอบได้ที่ Hive คอนโซล แอปเซ็นเตอร์ > รายการ AppID | string |
| data.playerId | รหัสผู้เล่น | number |
| data.language | รหัสภาษา | string |
| data.callbackUrl | ที่อยู่ที่จะได้รับผลลัพธ์สำเร็จ/ล้มเหลวหลังจากบันทึกธุรกรรมลงในบล็อกเชน | string |
| data.company | หมายเลขเฉพาะของบริษัท | number |
| data.gameindex | ดัชนีเกม | number |
| data.appindex | หมายเลขเฉพาะของแอปที่มอบให้โดย Hive แอปเซ็นเตอร์ | number |
| data.actionLink | ลิงก์ไปยังหน้าเว็บที่สามารถดำเนินการฟังก์ชันบล็อกเชนได้ | string |
| data.result | ผลลัพธ์ของการดำเนินการ Action | string |
| data.createdAt | วันที่ลงทะเบียน Action | string |
| data.updatedAt | วันที่แก้ไข Action | string |
ข้อมูลแต่ละองค์ประกอบที่บรรจุอยู่ในข้อมูลการตอบกลับตาม actionType
- MINT: ข้อมูล MINT ของ request body เหมือนกัน
- CONVERT
| ชื่อฟิลด์ | คำอธิบาย | ประเภท |
| convertPool | ที่อยู่บัญชี convertPool | string |
| gameCurrencyCode | รหัสสกุลเงินเกม | string |
| userGameCurrencyAmount | จำนวนสกุลเงินเกมที่ผู้ใช้จะแลกเปลี่ยน | number |
| minCurrencyAmount | จำนวนขั้นต่ำของสกุลเงินเกมที่สามารถแลกเปลี่ยนได้ | number |
| maxCurrencyAmount | จำนวนสูงสุดของสกุลเงินเกมที่สามารถแลกเปลี่ยนได้ | number |
| totalExchangedCurrencyAmount | จำนวนสกุลเงินเกมที่ผู้ใช้แลกเปลี่ยนไปจนถึงปัจจุบัน | number |
| currencyName | ชื่อสกุลเงินเกม | string |
| currencyLogoUrl | URL โลโก้สกุลเงินเกม | string |
| assetType | ประเภทโทเคน {token | coin} | string |
| ftContract | ที่อยู่โทเคนเกม | string |
| tokenName | ชื่อโทเคนเกม | string |
| tokenLogoUrl | URL โลโก้โทเคนเกม | string |
- LOCK: ข้อมูล LOCK ของ request body เหมือนกัน
- UNLOCK: ข้อมูล UNLOCK ของ request body เหมือนกัน
- BURN: ข้อมูล BURN ของ request body เหมือนกัน
ตัวอย่างคำขอ
curl -X 'POST' \
'https://sandbox-bc-api.qpyou.cn/xpla-platform/v1/actions' \
-H 'accept: application/json' \
-H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJrZXlObyI6NiwiaWQiOiIvVWpXN....' \
-H 'Content-Type: application/json' \
-d '{
// MINT--------------------------------------------------------------------------------------------
"actionType": "MINT",
"info": {
"nftContract": "xpla1wtv5dwu90pe4jqfckyhr6cq3hdr7rrjdta7ntsczawe8ffupsq3s25sg0s",
"itemName": "아비터의 로브",
"tokenId": "A1234",
"metadata": {
"name": "Arbiter'\''s Robe",
"description": "A robe worn by the arbiter of the world.",
"image": "https://image01.c2x.world/equip_92053030.gif",
"animationUrl": "https://image01.c2x.world/equip_92053030.gif",
"youtubeUrl": "https://www.youtube.com/watch?v=gmdexWtuzAE&pp=ygUEeHBsYQ%3D%3D",
"externalUrl": "https://dex.c2xnft.com/market?key=4423",
"attributes": [
{
"traitType": "Category",
"value": "Game"
}
]
}
},
// CONVERT--------------------------------------------------------------------------------------------
"actionType": "CONVERT",
"info": {
"convertPool": "xpla1zaztjwm0tequ8rf70vk6f5qsen55zsy2445j94",
"gameCurrencyCode": "J94597FISHGOLD0001",
"userGameCurrencyAmount": 1000,
"minCurrencyAmount": 100,
"maxCurrencyAmount": 100000,
"totalExchangedCurrencyAmount": 100
},
// LOCK--------------------------------------------------------------------------------------------
"actionType": "lock",
"info": {
"nftContract": "xpla1wtv5dwu90pe4jqfckyhr6cq3hdr7rrjdta7ntsczawe8ffupsq3s25sg0s",
"lockContract": "xpla139lxe8d6ml2hqtkdz9nnw2u47pqyw9spcgqgd6apmyt2wnqc4nwqecf0xp"
},
// UNLOCK--------------------------------------------------------------------------------------------
"actionType": "unlock",
"info": {
"nftContract": "xpla1wtv5dwu90pe4jqfckyhr6cq3hdr7rrjdta7ntsczawe8ffupsq3s25sg0s",
"tokenId": "283ed-8b23-e4a",
"lockContract": "xpla139lxe8d6ml2hqtkdz9nnw2u47pqyw9spcgqgd6apmyt2wnqc4nwqecf0xp"
},
// BURN--------------------------------------------------------------------------------------------
"actionType": "burn",
"info": {"nftContract": "xpla1wtv5dwu90pe4jqfckyhr6cq3hdr7rrjdta7ntsczawe8ffupsq3s25sg0s"},
// -------------------------------------------------------------------------------------------------
"appid": "com.gcp.stepbystep.pcweb.blockchain",
"gameAppid": "com.gcp.stepbystep.pcweb.blockchain",
"playerId": 1,
"callbackUrl": "https://sandbox-bc-api.qpyou.cn/sample/v1/backend/callback",
"language": "ko"
}'
</pre>
<h3>Response Sample</h3>
<pre class="lang:json decode:true">
// MINT
{
"code": 0,
"message": "success",
"data": {
// MINT--------------------------------------------------------------------------------------------
"actionType": "MINT",
"info": {
"nftContract": "xpla1wtv5dwu90pe4jqfckyhr6cq3hdr7rrjdta7ntsczawe8ffupsq3s25sg0s",
"itemName": "아비터의 로브",
"tokenId": "A1234",
"metadata": {
"name": "Arbiter's Robe",
"description": "A robe worn by the arbiter of the world.",
"image": "https://image01.c2x.world/equip_92053030.gif",
"animationUrl": "https://image01.c2x.world/equip_92053030.gif",
"youtubeUrl": "https://www.youtube.com/watch?v=gmdexWtuzAE&pp=ygUEeHBsYQ%3D%3D",
"externalUrl": "https://dex.c2xnft.com/market?key=4423",
"attributes": [
{
"traitType": "Category",
"value": "Game"
}
]
},
"serviceFee": 0.2
},
"id": "b6d2ca1b-b43a-4129-bf54-9a189e3aa664",
"actionLink": "https://sandbox-xpla-platform.withhive.com/games/mint?access-token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9&action-id=b6d2ca1b-b43a-4129-bf54-9a189e3aa664&lang=ko",
// CONVERT--------------------------------------------------------------------------------------------
"actionType": "CONVERT",
"info": {
"convertPool": "xpla1zaztjwm0tequ8rf70vk6f5qsen55zsy2445j94",
"gameCurrencyCode": "J94597FISHGOLD0001",
"userGameCurrencyAmount": 1000,
"minCurrencyAmount": 100,
"maxCurrencyAmount": 100000,
"totalExchangedCurrencyAmount": 100,
"currencyName": "GOLD",
"currencyLogoUrl": "https://sandbox-bc-file.qpyou.cn/ipfs/QmdqBYarCoFpPzkG9tgQJoe9NqcLuP9rBnVWn8tRo51uTR",
"assetType": "token",
"ftContract": "xpla1dhwmvf876g4fwhg28x6ep7jmulrreu8ztrhfk6wmp83f9y3xjstsz78pzy",
"tokenName": "FISH",
"tokenLogoUrl": "https://sandbox-bc-file.qpyou.cn/ipfs/QmbLRYXgk57KeanzmKuxjv2TtvXwt4DrFoFFYTH1MPkCgU",
"serviceFee": 10
},
"id": "81c705ac-2e03-4fa7-bb10-feb533b5e754",
"actionLink": "https://sandbox-xpla-platform.withhive.com/games/convert?access-token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9&action-id=81c705ac-2e03-4fa7-bb10-feb533b5e754&lang=ko",
// LOCK--------------------------------------------------------------------------------------------
"actionType": "LOCK",
"info": {
"nftContract": "xpla1wtv5dwu90pe4jqfckyhr6cq3hdr7rrjdta7ntsczawe8ffupsq3s25sg0s",
"lockContract": "xpla139lxe8d6ml2hqtkdz9nnw2u47pqyw9spcgqgd6apmyt2wnqc4nwqecf0xp",
"serviceFee": 0.1
},
"id": "20cf84b8-af60-4ad4-9251-babf1a6778c3",
"actionLink": "https://sandbox-xpla-platform.withhive.com/games/convert?access-token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9&action-id=81c705ac-2e03-4fa7-bb10-feb533b5e754&lang=ko",
// UNLOCK--------------------------------------------------------------------------------------------
"actionType": "UNLOCK",
"info": {
"nftContract": "xpla1wtv5dwu90pe4jqfckyhr6cq3hdr7rrjdta7ntsczawe8ffupsq3s25sg0s",
"tokenId": "283ed-8b23-e4a",
"lockContract": "xpla139lxe8d6ml2hqtkdz9nnw2u47pqyw9spcgqgd6apmyt2wnqc4nwqecf0xp",
"serviceFee": 0.1
},
"id": "8e701ff2-d37b-473a-bdd7-886e40e18d7c",
"actionLink": "https://sandbox-xpla-platform.withhive.com/games/unlock?access-token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9&action-id=b6d2ca1b-b43a-4129-bf54-9a189e3aa664&lang=ko",
// BURN--------------------------------------------------------------------------------------------
"actionType": "BURN",
"info": {
"nftContract": "xpla1wtv5dwu90pe4jqfckyhr6cq3hdr7rrjdta7ntsczawe8ffupsq3s25sg0s",
"serviceFee": 0.1
},
"id": "8fb0c236-71a3-4b40-9ba0-d558f351757a",
"actionLink": "https://sandbox-xpla-platform.withhive.com/games/burn?access-token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9&action-id=b6d2ca1b-b43a-4129-bf54-9a189e3aa664&lang=ko",
// --------------------------------------------------------------------------------------------------
"appid": "com.gcp.stepbystep.pcweb.blockchain",
"gameAppid": "com.gcp.stepbystep.android.google",
"pid": 1,
"language": "ko",
"callbackUrl": "https://sandbox-bc-api.qpyou.cn/sample/v1/backend/callback",
"company": 3,
"gameindex": 597,
"appindex": 21001,
"result": null,
"createdAt": "2024-08-05T08:33:15.448Z",
"updatedAt": "2024-08-05T08:33:15.448Z"
}
}
callbackUrl API
เมื่อผู้ใช้เรียกใช้ฟังก์ชัน Action (MINT, LOCK, UNLOCK, BURN, CONVERT) หลังจากนั้นสามารถขอ callbackUrl เพื่อรับผลลัพธ์ของการดำเนินการ
URL ที่ร้องขอ
| URL | กำหนดเอง |
| HTTP Method | POST |
| Content-Type | application/json |
พารามิเตอร์หัวเรื่อง
| ชื่อฟิลด์ | คำอธิบาย | ประเภท | จำเป็นหรือไม่ |
| Authorization | มีพารามิเตอร์ token ใน query ของ callbackUrl: หากไม่มีพารามิเตอร์ Bearer ${token} ให้ละเว้น | string | N |
| X-Request-ID | ID ที่ได้รับเมื่อทำการร้องขอ Action | string | Y |
| User-Agent | XplaPlatform/1.0 | string | Y |
Request Body (MINT, LOCK, UNLOCK, BURN ใช้เมื่อ callbackUrl)
- ส่งสถานะการดำเนินการ (result.actionStatus) สำหรับการดำเนินการ Mint, Lock, Unlock, Burn และความสามารถในการใช้งานไอเท็มที่ต้องการการอัปเดตในเกม (result.isAvailableItem)。
- ต้องการการอัปเดตเกี่ยวกับไอเท็ม (data.nft.tokenId) ที่ผู้ใช้ (data.user.playerId) ถือครอง。
| ชื่อฟิลด์ | คำอธิบาย | ประเภท | จำเป็นหรือไม่ |
| result | ผลลัพธ์การดำเนินการ | json | Y |
| result.actionStatus | สถานะการดำเนินการ {SUCCESS, FAILRUE, EXPIRATION, CANCELLATION} | string | Y |
| result.actionType | ประเภทของการดำเนินการ MINT, BURN, LOCK, UNLOCK | json | Y |
| result.txHash | แฮชธุรกรรม | string | Y |
| result.isAvailableItem | สถานะการใช้งานของไอเท็มในเกม | boolean | Y |
| data | รายละเอียดการดำเนินการ | json | Y |
| data.user | ข้อมูลผู้ใช้ที่ใช้ในการดำเนินการ | json | Y |
| data.user.playerId | รหัสผู้เล่น | string | Y |
| data.user.wallet | ที่อยู่กระเป๋าเงินของผู้เล่น | string | Y |
| data.nft | ข้อมูล nft ที่ใช้ในการดำเนินการ | json | Y |
| data.nft.nftContract | ที่อยู่สัญญา NFT | string | Y |
| data.nft.tokenId | รหัส NFT | string | Y |
| data.serviceFeeAmount | ค่าธรรมเนียมบริการที่ผู้ใช้จ่าย (XPLA) | number | Y |
เนื้อหาของคำขอ (เมื่อใช้ CONVERT callbackUrl)
- ส่งสถานะการดำเนินการของการแปลง (result.actionStatus) และจำนวนทรัพยากรเกมที่ต้องการอัปเดตในเกม (result.amount)。
- จำเป็นต้องอัปเดตจำนวนทรัพยากรเกมที่ผู้ใช้ถือครองซึ่งตรงกับรหัสทรัพยากรเกม (result.amount.currencyCode) (result.amount)。
| ชื่อฟิลด์ | คำอธิบาย | ประเภท | จำเป็นหรือไม่ |
| result | ผลลัพธ์ของการดำเนินการ | json | Y |
| result.actionStatus | สถานะการดำเนินการ {SUCCESS, FAILRUE, EXPIRATION, CANCELLATION} | string | Y |
| result.actionType | ประเภทของการดำเนินการ CONVERT | json | Y |
| result.txHash | แฮชธุรกรรม | string | Y |
| result.amount | ข้อมูลจำนวนผลลัพธ์การแปลง | json | Y |
| result.amount.changeUserAmount | จำนวนการเปลี่ยนแปลงของสกุลเงินเกมของผู้ใช้ (+, -) | number | Y |
| result.amount.changePoolAmount | จำนวนการเปลี่ยนแปลงของสกุลเงินเกมในพูลการแปลง (+, -) | number | Y |
| result.amount.currencyCode | รหัสสกุลเงินเกม | string | Y |
| data | เนื้อหาการดำเนินการ | json | Y |
| data.user | ข้อมูลผู้ใช้ที่ใช้ในการดำเนินการ | json | Y |
| data.user.playerId | รหัสผู้เล่น | string | Y |
| data.user.wallet | ที่อยู่กระเป๋าของผู้เล่น | string | Y |
| data.convert | ข้อมูลการแปลงที่ใช้ในการดำเนินการ | json | Y |
| data.convert.type | ประเภทการแปลง (CONVERT_TO_TOKEN, CONVERT_TO_CURRENCY) | string | Y |
| data.convert.convertPool | ที่อยู่พูลการแปลง | string | Y |
| data.convert.ftContract | ที่อยู่โทเค็น (หรือ XPLA) | string | Y |
| data.convert.currencyCode | รหัสสกุลเงินเกม | string | Y |
| data.in | ข้อมูลจำนวนที่ไหลเข้าสู่พูลการแปลง | json | Y |
| data.in.amount | จำนวนโทเค็น (สกุลเงิน) ที่ผู้ใช้ร้องขอ | number | Y |
| data.in.txFeeAmount | ค่าธรรมเนียมธุรกรรมที่ผู้ใช้จ่าย | number | Y |
| data.in.txFeeType | XPLA หรือ CURRENCY | string | Y |
| data.out | ข้อมูลจำนวนที่ไหลออกจากพูลการแปลง | json | Y |
| data.out.amout | จำนวนโทเค็น (สกุลเงิน) ที่ผู้ใช้จะได้รับ | number | Y |
| data.serviceFeeAmount | ค่าธรรมเนียมบริการที่ผู้ใช้จ่าย (XPLA) | number | Y |
XPLA แพลตฟอร์ม API
API ของแพลตฟอร์ม XPLA เป็น API ที่ให้ URL ของหน้าเว็บโดยเชื่อมต่อกับเกมที่ใช้บล็อกเชน XPLA ผู้ใช้สามารถดำเนินการฟังก์ชัน Mint, Convert, Lock, Unlock, Burn ระหว่างทรัพย์สินในเกมและโทเค็นเกม (XPLA) ผ่าน API ของแพลตฟอร์ม XPLA ได้
API สำหรับสร้างลิงก์เว็บ XPLA
ผู้ใช้สามารถเข้าถึงหน้าเว็บที่ได้รับการตอบกลับหลังจากขอสร้างลิงก์เว็บ XPLA (actionLink) และสามารถดำเนินการฟังก์ชันบล็อกเชนดังต่อไปนี้
- Mint: ฟังก์ชันในการออก NFT สำหรับไอเทม โดยกำหนดค่าเฉพาะสำหรับไอเทมด้วย NFT ID (tokenId) เมื่อ NFT ถูกออกแล้ว ไอเทมในเกมจะต้องถูกทำให้ไม่สามารถใช้งานได้
- Convert: ฟังก์ชันในการแลกเปลี่ยนระหว่างสกุลเงินในเกมและ XPLA หรือโทเคนเกม โดยต้องมีรหัสสกุลเงินในเกม (gameCurrencyCode) ที่ลงทะเบียนใน Hive Console เมื่อการแลกเปลี่ยนระหว่างสกุลเงินในเกมและโทเคน (XPLA) เสร็จสิ้น จะต้องมีการอัปเดตจำนวนสกุลเงินในเกม
- Lock: ฟังก์ชันในการล็อก NFT ที่ออกแล้วและใช้งานในเกมอีกครั้ง โดยต้องมีการเปิดใช้งานไอเทมในเกม (ไอเทมที่สามารถใช้งานได้ในเกมหลังจากล็อกจะต้องไม่ถูกแลกเปลี่ยนหรือถูกลบออกในเกมเพื่อให้สามารถปลดล็อกได้)
- Unlock: ฟังก์ชันในการปลดล็อก NFT เพื่อให้สามารถใช้งานไอเทมที่กำลังใช้งานในเกมได้อีกครั้ง โดยต้องมีค่าเฉพาะสำหรับไอเทม NFT ID (tokenId) และสามารถปลดล็อกได้เฉพาะจากบัญชีและกระเป๋าเงินที่ล็อก (Lock) NFT เท่านั้น เมื่อทำการปลดล็อกแล้ว ไอเทมในเกมจะต้องถูกทำให้ไม่สามารถใช้งานได้
- Burn: ฟังก์ชันในการทำลาย NFT ที่ออกแล้วและใช้งานไอเทมในเกม โดยหลังจากการเผา (Burn) จะสามารถแลกเปลี่ยนและลบไอเทมในเกมได้
ทำการทำงานฟังก์ชัน Mint, Convert, Lock, Unlock, Burn แล้วส่งผลลัพธ์ผ่าน callbackUrl
Note
ลิงก์เว็บ XPLA ที่สร้างขึ้นจะมีอายุ 5 นาที และหลังจากผ่านไป 5 นาทีหรือเมื่อฟังก์ชันนั้นเสร็จสิ้น จะไม่สามารถใช้งานได้อีกต่อไป.
การตอบสนอง
| ชื่อฟิลด์ | คำอธิบาย | ประเภท |
| code | รหัสผลลัพธ์การเรียก API, 0:สำเร็จ | number |
| message | ข้อความผลลัพธ์ | string |
| data | ข้อมูลการตอบกลับจาก API | json |
| data.id | ID เฉพาะของ XPLA Web Link | string |
| data.actionType | การแยกประเภทฟังก์ชันของบล็อกเชน | string |
| data.info | ข้อมูลการตอบกลับตาม actionType | json |
| data.info.serviceFee | ค่าธรรมเนียมบริการสำหรับการใช้ฟังก์ชันของบล็อกเชน | number |
| data.appid | ID เฉพาะของแอปบล็อกเชน สามารถตรวจสอบได้ที่ Hive คอนโซล แอปเซ็นเตอร์ > รายการ AppID | json |
| data.gameAppid | ID เฉพาะของเกมแอป สามารถตรวจสอบได้ที่ Hive คอนโซล แอปเซ็นเตอร์ > รายการ AppID | string |
| data.playerId | ID ผู้เล่น | number |
| data.language | รหัสภาษา | string |
| data.callbackUrl | ที่อยู่ที่จะแจ้งผลลัพธ์สำเร็จ/ล้มเหลวหลังจากบันทึกธุรกรรมในบล็อกเชน | string |
| data.company | หมายเลขเฉพาะของบริษัท | number |
| data.gameindex | ดัชนีเกม | number |
| data.appindex | หมายเลขเฉพาะของแอปที่มอบให้โดย Hive แอปเซ็นเตอร์ | number |
| data.actionLink | ลิงก์ไปยังหน้าเว็บที่สามารถดำเนินการฟังก์ชันของบล็อกเชน | string |
| data.result | ผลลัพธ์การประมวลผลของ XPLA Web Link | string |
| data.createdAt | วันที่สร้าง XPLA Web Link | string |
| data.updatedAt | วันที่แก้ไข XPLA Web Link | string |
CallbackUrl API
เมื่อผู้ใช้เรียกใช้ฟังก์ชัน Action (MINT, LOCK, UNLOCK, BURN, CONVERT) หลังจากนั้นสามารถรับผลลัพธ์ของการดำเนินการได้โดยการร้องขอ callbackUrl
พารามิเตอร์ส่วนหัว
| ชื่อฟิลด์ | คำอธิบาย | ประเภท | ความจำเป็น |
| Authorization | หากมีพารามิเตอร์ token ใน callbackUrl: Bearer ${token} หากไม่มีพารามิเตอร์: ข้ามไป | string | N |
| X-Request-ID | ID ที่ได้รับเมื่อทำการขอสร้างลิงก์ XPLA | string | Y |
| User-Agent | XplaPlatform/1.0 | string | Y |
Request Body (MINT, LOCK, UNLOCK, BURN ใช้เมื่อ CallbackUrl)
ส่งสถานะการดำเนินการสำหรับการดำเนินการ Mint, Lock, Unlock, Burn (result.actionStatus) และความสามารถในการใช้ไอเทมที่ต้องการการอัปเดตในเกม (result.isAvailableItem)
ผู้ใช้(data.user.playerId)ต้องการการอัปเดตไอเทมที่ถืออยู่(data.nft.tokenId)
| ชื่อฟิลด์ | คำอธิบาย | ประเภท | ความจำเป็น |
| result | ผลลัพธ์ที่ประมวลผลหลังจากการแลกเปลี่ยนใน XPLA Web Link | json | Y |
| result.actionStatus | สถานะการดำเนินการ | string | Y |
| result.actionType | ประเภท XPLA Web Link MINT, BURN, LOCK, UNLOCK | json | Y |
| result.txHash | แฮชของธุรกรรม | string | Y |
| result.isAvailableItem | ความสามารถในการใช้ไอเทมในเกม | boolean | Y |
| data | เนื้อหาที่ประมวลผลใน XPLA Web Link | json | Y |
| data.user | ข้อมูลผู้ใช้ที่ประมวลผลใน XPLA Web Link | json | Y |
| data.user.playerId | รหัสผู้เล่น | string | Y |
| data.user.wallet | ที่อยู่กระเป๋าเงินของผู้เล่น | string | Y |
| data.nft | ข้อมูล nft ที่ประมวลผลใน XPLA Web Link | json | Y |
| data.nft.nftContract | ที่อยู่ของสัญญา NFT | string | Y |
| data.nft.tokenId | รหัส NFT | string | Y |
| data.serviceFeeAmount | ค่าธรรมเนียมบริการที่ผู้ใช้จ่าย (XPLA) | number | Y |
Request Body (เมื่อใช้ CONVERT CallbackUrl)
ส่งสถานะการดำเนินการของการแปลง (result.actionStatus) และจำนวนทรัพยากรเกมที่ต้องอัปเดตในเกม (result.amount)
ต้องการอัปเดตจำนวนทรัพยากรเกมที่ผู้ใช้ถือครองซึ่งตรงกับรหัสทรัพยากรเกม (result.amount.currencyCode) (result.amount)
| ชื่อฟิลด์ | คำอธิบาย | ประเภท | ความจำเป็น |
| result | ผลลัพธ์ที่ประมวลผลหลังจากการแลกเปลี่ยนใน XPLA Web Link | json | Y |
| result.actionStatus | สถานะการดำเนินการ | string | Y |
| result.actionType | ประเภท XPLA Web Link CONVERT | json | Y |
| result.txHash | แฮชธุรกรรม | string | Y |
| result.amount | ข้อมูลจำนวนผลลัพธ์การแปลง | json | Y |
| result.amount.changeUserAmount | จำนวนการเปลี่ยนแปลงของเกมทรัพย์สินของผู้ใช้ (+, -) | number | Y |
| result.amount.changePoolAmount | จำนวนการเปลี่ยนแปลงของเกมทรัพย์สินในพูลแปลง (+, -) | number | Y |
| result.amount.currencyCode | รหัสเกมทรัพย์สิน | string | Y |
| data | เนื้อหาที่ประมวลผลใน XPLA Web Link | json | Y |
| data.user | ข้อมูลผู้ใช้ที่ประมวลผลใน XPLA Web Link | json | Y |
| data.user.playerId | รหัสผู้เล่น | string | Y |
| data.user.wallet | ที่อยู่กระเป๋าเงินของผู้เล่น | string | Y |
| data.convert | ข้อมูลการแปลงที่ประมวลผลใน XPLA Web Link | json | Y |
| data.convert.type | ประเภทการแปลง (CONVERT_TO_TOKEN, CONVERT_TO_CURRENCY) | string | Y |
| data.convert.convertPool | ที่อยู่พูลแปลง | string | Y |
| data.convert.ftContract | ที่อยู่โทเค็น (หรือ XPLA) | string | Y |
| data.convert.currencyCode | รหัสเกมทรัพย์สิน | string | Y |
| data.in | ข้อมูลจำนวนที่ไหลเข้าสู่พูลแปลง | json | Y |
| data.in.amount | จำนวนโทเค็น (ทรัพย์สิน) ที่ผู้ใช้ขอ | number | Y |
| data.in.txFeeAmount | ค่าธรรมเนียมธุรกรรมที่ผู้ใช้จ่าย | number | Y |
| data.in.txFeeType | XPLA หรือ CURRENCY | string | Y |
| data.out | ข้อมูลจำนวนที่ไหลออกจากพูลแปลง | json | Y |
| data.out.amout | จำนวนโทเค็น (ทรัพย์สิน) ที่ผู้ใช้จะได้รับ | number | Y |
| data.serviceFeeAmount | ค่าธรรมเนียมบริการที่ผู้ใช้จ่าย (XPLA) | number | Y |