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 |