NFTRainbow API 使用指南
NFTRainbow API 作为以 gin 框架为根底的 NFT 服务,为无 web3 技术栈的 web2 用户在 conflux 平台公布本人的 NFT 提供了不便。本文将从 web2 用户的角度登程,对如何应用 NFTRainbow API 做出具体阐明。
前置筹备
用户注册
进入 NFTRinbow API 服务页面进行用户注册
在用户注册结束并登录后, 能够在仪表盘的 用户设置
页面欠缺用户的信息:
企业认证
若是用户为企业代表, 能够在右上角的企业认证页面填入相应信息来进行企业认证
创立 app
点击 dashboard
左侧的利用页面,并点击创立利用
填入以下信息后实现创立
app 页面如下所示
点击右上角的 查看 AppKey
能够获取到 app_id
与app_secret
app_id
与 app_secret
用户获取 JWT 来调用 Open APIs。
鉴权
NFTRainbow API 是基于 JWT 来实现用户权限的鉴定的.
获取 JWT
在通过 Rainbow Console
获取到 app_id
与app_secret
后,能够通过调用Login
API 来取得对应的 JWT. 具体的有:
curl --request POST \
--url https://api.nftrainbow.xyz/v1/login \
--header 'Content-Type: application/json' \
--data `{
"app_id": "qUUcdueA",
"app_secret": "zGCaP8kAFEmwanqo"
}
响应后果如下:
{
"code": 0,
"data": {
"expire": "2022-08-28T16:50:05.7704294+08:00",
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NjE2NzY2MDUsImlkIjoyLCJvcmlnX2lhdCI6MTY1OTA4NDYwNX0.vEXdWizTUcTtUjHzrJqrOjCLe5PmnR9sHuZqqGICLqw"
}
}
留神的是,在一个小时的无效时限内, 用户能够利用该 JWT 去调用 Open APIs, 包含 Files
, Metadata
, NFT
和contract
.
刷新 JWT
一旦超出了一个小时, 在五个小时的无效时限内, 用户能够利用该 JWT 去调用refresh_token
,实现 JWT 的刷新性能. 具体的有:
curl --request GET \
--url https://api.nftrainbow.xyz/v1/refresh_token \
--header 'Authorization: Bearer {JWT}' \
--header 'Content-Type: application/json'
响应后果如下:
{
"code": 0,
"data": {
"expire": "2022-08-28T16:50:55.8437443+08:00",
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NjE2NzY2NTUsImlkIjoyLCJvcmlnX2lhdCI6MTY1OTA4NDY1NX0.8k3JrmgmD20EfEJVGWbZ3gQYH_-Bt80miQXcQscq3MY"
}
}
铸造 NFT 流程
铸造 NFT 的流程如下图所示. 能够看到, NFTRainbow API 为用户提供了三种铸造形式. 为了实现传统形式铸造 NFT, 在部署合约胜利取得合约地址的根底上, 用户须要上传文件, 并用取得的 file_url
来创立 Metadata 从而获取对应的metadata_uri
. 而上传文件来铸造 NFT 与创立 Metadata 来铸造 NFT 的形式则为用户提供了更加凋谢与快捷的形式去实现 NFT 铸造. 在本节中将为各个接口如何实现进行阐明.
上传文件
为了实现传统铸造 NFT 的性能, 用户须要取得metadata_uri
. 而为了获取metadata_uri
, 用户须要上传文件来获取相应的file_url
. 具体的有:
curl --request POST \
--url https://api.nftrainbow.xyz/v1/files \
--header 'Authorization: Bearer {JWT}' \
--header 'Content-Type: multipart/form-data' \
--header 'content-type: multipart/form-data; boundary=---011000010111000001101001' \
--form file=
相应的响应为:
{
"code": 0,
"data": {
"file_url": "http://localhost:8080/assets/file/2/nft/fa6f733c258e3a0f364aeb18198c9e2bae2e2c91bee4d38a1c88fb9cc8a71a1b.jpeg",
"file_size": 11295,
"file_type": "jpeg",
"file_name": "fa6f733c258e3a0f364aeb18198c9e2bae2e2c91bee4d38a1c88fb9cc8a71a1b"
}
}
创立 Metadata
在取得了 file_url
后, 须要调用 create_metadata
去取得metadata_uri
. 具体的有:
curl --request POST
--url https://api.nftrainbow.xyz/v1/metadata/ \
--header 'Authorization: Bearer {JWT}' \
--header 'Content-Type: application/json' \
--data '{"attributes": [
{
"attribute_name": "mouse",
"display_type": "test hey hey",
"trait_type": "big",
"value": "big"
}
],
"description": "this is a test metadata",
"external_link": "https://www.google.com/search",
"file": "https://www.google.com/search",
"name": "test"
}
相应的响应为:
{
"code": 0,
"data": {"metadata_uri": "http://localhost:8080/assets/metadata/2/nft/f35c25ced3f537e8850a377c01d22aa7507069270054d12587ddbe5fc47ec490.json"}
}
部署合约
目前 NFTRainbow API 通过 NFTFactory 合约来进行合约部署。该合约在测试网的合约地址为cfxtest:acdh1unre2bsdtwfuv0enu7tuychw0sm9afxe9f8b0
,该合约的对应代码能够参考我的项目的 git 仓库.
用户若想要调用该合约去部署本人的 ERC721 合约或 ERC1155 合约, 须要使得本人的账户领有对应的角色,因而须要 NFTFactory
合约的 admin 调用合约办法对账户进行赋权。在用户账户领有了相应的角色后,能够调用 NFTRainbow API 来进行合约的部署。
NFTRinbow API 为用户提供了相应的 API, 帮忙用户去创立合约, 从而取得合约地址address
. 为了部署合约, 能够调用deploy_contract
API. 具体的有:
curl --request POST \
--url https://api.nftrainbow.xyz/v1/contracts \
--header 'Authorization: Bearer {JWT}' \
--header 'Content-Type: application/json' \
--data '{"chain":"conflux_test","name":"NFT-name","symbol":"ENFT","owner_address":"cfxtest:aatk708nbb7573bkwumsu00h0r1rtkcdz2chwhttzk","type":"erc721","base_uri":""}'
留神的是, type
必须为 erc721
或是 erc1155
(辨别大小写).
相应的响应为:
{
"code": 0,
"data": {
"id": 6,
"created_at": "2022-07-29T16:52:44.596+08:00",
"updated_at": "2022-07-29T16:52:44.596+08:00",
"deleted_at": null,
"app_id": 2,
"chain_type": 1,
"chain_id": 1,
"address": "","owner_address":"cfxtest:aatk708nbb7573bkwumsu00h0r1rtkcdz2chwhttzk","type": 1,"base_uri":"",
"name": "NFT-name",
"symbol": "ENFT",
"hash": "","tx_id": 14,"status": 0
}
}
在取得上述响应后,能够在 conflux scan 中查找部署的合约地址。步骤如下:
- 依据账户地址查找交易列表
- 依据交易哈希查找对应交易
- 在对应的交易信息页面中依据事件日志获取合约地址
如下图所示, 红框中的地址是部署后的合约地址
传统形式铸造 NFT
在通过 创立 Metadata
与 部署合约
取得 metadata_uri
与contract_address
后, 能够调用合约中的办法去铸造 NFT. NFTRainbow API 简化了用户与合约间的交互流程, 用户能够间接调用相应的 API 去实现与合约的交互. 传统形式铸造 NFT, 具体的有:
curl --request POST \
--url https://api.nftrainbow.xyz/v1/mints \
--header 'Authorization: Bearer {JWT}' \
--header 'Content-Type: application/json' \
--data '{"chain":"conflux_test","token_id":"",
"mint_to_address": "cfxtest:aasr1hmezez1wepvh8ew8sk9p40khhhj1ymxwmpaf0",
"contract_address": "cfxtest:acgat1yux2rk0xmk2s8ceferyprgm0u1hetj0w72yf",
"metadata_uri": "https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png"
}'
相应的响应为:
{
"chain": "conflux_test",
"name": "123",
"description": "123",
"mint_to_address": "cfxtest:aasr1hmezez1wepvh8ew8sk9p40khhhj1ymxwmpaf0",
"contract_address": "cfxtest:acf8m2gzrv8pnfsjbne2d28m4h2ycj569uupgys473",
"metadata_uri": "https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png"
}
上传文件来铸造 NFT
除了传统形式铸造 NFT 外, NFTRainbow API 还为用户提供了更加简捷的办法来铸造 NFT. 这包含 上传文件来铸造 NFT
与 创立 Metadata 来铸造 NFT
. 上传文件疏忽了 上传文件
与创立 Metadata
两步, 用户能够间接调用 API 来实现 NFT 的铸造. 具体的有:
curl --request POST \
--url https://api.nftrainbow.xyz/v1/mints/files \
--header 'Authorization: Bearer {JWT}' \
--header 'Content-Type: multipart/form-data' \
--header 'content-type: multipart/form-data; boundary=---011000010111000001101001' \
--form file= \
--form chain= 'conflux_test' \
--form description= 'throll description' \
--form mint_to_address= 'cfxtest:aatk708nbb7573bkwumsu00h0r1rtkcdz2chwhttzk' \
--form name= 'throll'
相应的响应为:
{
"code": 0,
"data": {
"id": 10,
"created_at": "2022-07-29T16:53:46.867+08:00",
"updated_at": "2022-07-29T16:53:46.867+08:00",
"deleted_at": null,
"app_id": 2,
"chain_type": 1,
"chain_id": 1,
"contract": "cfxtest:acgraybn1g1upesed09g96vxev79sdhmxjmz7bxzyy",
"mint_to": "cfxtest:acdh1unre2bsdtwfuv0enu7tuychw0sm9afxe9f8b0",
"token_uri": "http://localhost:8080/assets/metadata/0/nft/f7393d22ab69bed8828a5cea068398a5f14701304ef5b9a3840bc018d4ed78b9.json",
"token_id": 0,
"amount": 1,
"status": 0,
"hash": "","tx_id": 16,"error":""
}
}
创立 Metadata 来铸造 NFT
创立 Metadata 来铸造 NFT
疏忽了 创立 Metada
, 用户只须要提供由 上传文件
生成的file_url
, 就能够实现 NFT 的铸造性能. 具体的有:
curl --request POST \
--url https://api.nftrainbow.xyz/mints/urls \
--header 'Authorization: Bearer {JWT}' \
--header 'Content-Type: application/json' \
--data '{"chain":"conflux_test","name":"123","description":"123","mint_to_address":"cfxtest:aasr1hmezez1wepvh8ew8sk9p40khhhj1ymxwmpaf0","file_url":"https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png"}'
相应的响应为:
{
"code": 0,
"data": {
"id": 11,
"created_at": "2022-07-29T16:54:01.745+08:00",
"updated_at": "2022-07-29T16:54:01.745+08:00",
"deleted_at": null,
"app_id": 2,
"chain_type": 1,
"chain_id": 1,
"contract": "cfxtest:acgraybn1g1upesed09g96vxev79sdhmxjmz7bxzyy",
"mint_to": "cfxtest:aasr1hmezez1wepvh8ew8sk9p40khhhj1ymxwmpaf0",
"token_uri": "http://localhost:8080/assets/metadata/0/nft/c3e31daa28ab54f6e3cfd650021373411b06a0692d4c4f01ae20be5fcf5cf70d.json",
"token_id": 0,
"amount": 1,
"status": 0,
"hash": "","tx_id": 17,"error":""
}
}
至此, 已实现 NFT 的铸造性能. 能够通过在 conflux scan 查找用户地址,在 数字藏品资产
页面下来查看生成的 NFT.
为合约设置 sponsor
在调用合约的办法去铸造 NFT 时, 须要破费相应的代币(相当于花钱). 这些代币能够在 fluent 钱包当中能够查问到. 若用户没有足够的代币, 则没法去铸造 NFT. 所幸的是, conflux 链中存在 sponsor 性能. 该性能能够为合约设置一个 sponsor, 在该合约白名单当中的用户, 能够收费调用该合约的办法, 而不须要领取相应的代币. 这些代币将由 sponsor 来代付.
NFTRainbow API 提供了相应的 API, 帮忙用户为部署的合约提供相应的 sponsor. 具体的有:
curl --request POST \
--url https://api.nftrainbow.xyz/v1/contracts/:address/sponsor \
--header 'Authorization: Bearer {JWT}' \
--header 'Content-Type: application/json'
相应的响应为:
{
"code": 0,
"data": "success"
}
须要留神的是, 该性能目前只能在 conflux 的测试网实现.
查问性能
NFTRainbow API 为用户提供了相应的信息查问性能.
查问文件列表
在上传完文件后, 用户能够调用query_fileList
API 去实现文件列表的查问性能. 具体的有:
curl --request GET \
--url https://api.nftrainbow.xyz/v1/files \
--header 'Authorization: Bearer {JWT}' \
--header 'Content-Type: application/json'
相应的响应为:
{
"code": 0,
"data": {
"count": 2,
"items": [
{
"file_url": "http://localhost:8080/assets/file/2/nft/fa6f733c258e3a0f364aeb18198c9e2bae2e2c91bee4d38a1c88fb9cc8a71a1b.jpeg",
"file_size": 11295,
"file_type": "jpeg",
"file_name": "fa6f733c258e3a0f364aeb18198c9e2bae2e2c91bee4d38a1c88fb9cc8a71a1b"
},
{
"file_url": "http://localhost:8080/assets/file/2/nft/06edf22f414234ea59c949104a054ca4af27cd71e87170d99401b50d15651cdc.jpeg",
"file_size": 11295,
"file_type": "jpeg",
"file_name": "06edf22f414234ea59c949104a054ca4af27cd71e87170d99401b50d15651cdc"
}
]
}
}
依据 metadata_id 查问 metadata
在创立 metadata 后, 用户能够提供 metadata_id
调用query_metadata
API 去实现查问 metadata 的性能. 具体的有:
curl --request GET \
--url https://localhost:8080/v1/metadata/:metadata_id \
--header 'Authorization:'Bearer {JWT}' \
--header 'Content-Type: application/json'
相应的响应为:
{
"code": 0,
"data": {
"name": "test",
"description": "this is a test metadata",
"external_link": "https://www.google.com/search",
"image": "http://localhost:8080/assets/file/3/nft/02c95850aacd060da60f6fe500ff5bb06d67663682bef8fd490dedf0a0e7b2a7.png",
"attributes": [
{
"attribute_name": "eyes",
"trait_type": "test trait",
"display_type": "","value":"big"
},
{
"attribute_name": "mouse",
"trait_type": "test hey hey",
"display_type": "","value":"big"
}
]
}
}
值得注意的是, metadata_id
能够通过传回的 metadata_uri
取得. 如
http://localhost:8080/assets/metadata/2/nft/f35c25ced3f537e8850a377c01d22aa7507069270054d12587ddbe5fc47ec490.json
该 metadata 的 id 为:f35c25ced3f537e8850a377c01d22aa7507069270054d12587ddbe5fc47ec490
查问 metadata 列表
在创立 metadata 后, 用户能够调用query_metadata_list
API 去实现查问 metadata 列表的性能. 具体的有:
curl --request GET \
--url https://api.nftrainbow.xyz/v1/metadata/ \
--header 'Authorization: Bearer {JWT}' \
--header 'Content-Type: application/json'
相应的响应为:
{
"code": 0,
"data": {
"count": 1,
"items": [
{
"metadata": {
"name": "test",
"description": "this is a test metadata",
"external_link": "https://www.google.com/search",
"image": "http://localhost:8080/assets/file/3/nft/02c95850aacd060da60f6fe500ff5bb06d67663682bef8fd490dedf0a0e7b2a7.png",
"attributes": [
{
"attribute_name": "eyes",
"trait_type": "test trait",
"display_type": "","value":"big"
},
{
"attribute_name": "mouse",
"trait_type": "test hey hey",
"display_type": "","value":"big"
}
]
},
"uri": "http://localhost:8080/assets/metadata/2/nft/f35c25ced3f537e8850a377c01d22aa7507069270054d12587ddbe5fc47ec490.json"
}
]
}
}
查问合约列表
在部署完合约后, 用户能够通过list_contracts
API 来获取合约列表. 具体的有:
curl --request GET \
--url https://api.nftrainbow.xyz/v1/contracts \
--header 'Authorization: Bearer {JWT}' \
--header 'Content-Type: application/json'
相应的响应为:
{
"code": 0,
"data": {
"count": 1,
"items": [
{
"id": 6,
"created_at": "2022-07-29T16:52:44.596+08:00",
"updated_at": "2022-07-29T16:53:10.282+08:00",
"deleted_at": null,
"app_id": 2,
"chain_type": 1,
"chain_id": 1,
"address": "","owner_address":"cfxtest:aatk708nbb7573bkwumsu00h0r1rtkcdz2chwhttzk","type": 1,"base_uri":"",
"name": "NFT-name",
"symbol": "ENFT",
"hash": "","tx_id": 14,"status": 2
}
]
}
}
依据合约地址查问 sponsor 信息
在为合约设置完 sponsor 后, 用户能够通过get_contract_sponsor
API 来获取该 sponsor 的信息. 具体的有:
curl --request GET \
--url https://api.nftrainbow.xyz/v1/contracts/:address/sponsor \
--header 'Authorization: Bearer {JWT}' \
--header 'Content-Type: application/json'
相应的响应为:
{
"code": 0,
"data": {
"gas_sponsor": "cfxtest:aasr1hmezez1wepvh8ew8sk9p40khhhj1ymxwmpaf0",
"gas_sponsor_balance": 10000000000000000000,
"collateral_sponsor": "cfxtest:aasr1hmezez1wepvh8ew8sk9p40khhhj1ymxwmpaf0",
"collateral_sponsor_balance": 100000000000000000000,
"is_all_white_listed": true,
"gas_upper_bound": 5000000000000000
}
}
查问 NFT 列表
在铸造完 NFT 后, 用户能够通过list_mints
API 来获取铸造的 NFT 的列表. 具体的有:
curl --request GET \
--url https://api.nftrainbow.xyz/v1/mints \
--header 'Authorization: Bearer {JWT}' \
--header 'Content-Type: application/json'
相应的响应为:
{
"code": 0,
"data": {
"count": 1,
"items": [
{
"id": 12,
"created_at": "2022-07-29T21:32:54.006+08:00",
"updated_at": "2022-07-29T21:32:54.006+08:00",
"deleted_at": null,
"app_id": 2,
"chain_type": 1,
"chain_id": 1,
"contract": "cfxtest:acf8m2gzrv8pnfsjbne2d28m4h2ycj569uupgys473",
"mint_to": "cfxtest:aasr1hmezez1wepvh8ew8sk9p40khhhj1ymxwmpaf0",
"token_uri": "https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png",
"token_id": 4514651488,
"amount": 1,
"status": 0,
"hash": "","tx_id": 27,"error":""
}
]
}
}
参考文献
NFTRainbow 文档
conflux 内置 sponsorwhitelistcontrol 合约
NFTRainbow 服务