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服务