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.rawTxfalse: รับผลลัพธ์ 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เป็นpolygon2.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เป็นpolygon2.
 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เป็นpolygon2.
 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เป็นpolygon2.
 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
    }
  }
}
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 |