低代码插件--ERC721插件

ERC721插件

ERC721协议

ERC721的标准接口

interface ERC721 {
    // 返回指定地址的NFT余额,一个地址可能会拥有多个
    function balanceOf(address _owner) external view returns (uint256);
    // 根据指定的tokenId返回该NFT的拥有者地址
    function ownerOf(uint256 _tokenId) external view returns (address);
    // 安全的将指定的tokenId的NFT从_from地址转移到_to地址,并且还可以携带一些额外数据
    function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes data) external payable;
    // 安全的将指定的tokenId的NFT从_from地址转移到_to地址,不能携带一些额外数据
    function safeTransferFrom(address _from, address _to, uint256 _tokenId) external payable;
    // 将指定的tokenId的NFT从_from地址转移到_to地址
    function transferFrom(address _from, address _to, uint256 _tokenId) external payable;
    // 授权某个地址_approved可以转移指定tokenId的NFT
    function approve(address _approved, uint256 _tokenId) external payable;
    // 授权或取消授权_operator地址可以管理调用者的所有NFT
    function setApprovalForAll(address _operator, bool _approved) external;
    // 返回指定tokenId的NFT被授权哪个地址可以进行转移
    function getApproved(uint256 _tokenId) external view returns (address);
    // _operator是否被授权管理_owner的所有NFT
    function isApprovedForAll(address _owner, address _operator) external view returns (bool);
    event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId);
    event Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId);
    event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved);
}

支持的插件大全

插件类型
插件名称插件说明
广告插件bannerbanner图的管理
连接器connector基于低代码框架实现的app与官方api交互
内容插件content内容分类管理、内容管理和单页内容管理
地区插件district中国省市县乡的数据
文件插件file基于IPFS实现的文件上传下载
后台插件manager后台菜单管理、角色管理和管理员管理,实现RBAC鉴权
插件管理plugins对所有满足协议的插件进行管理
短信插件sms短信发送和记录查询,支持沙盒和阿里云短信
单点登录sso浏览器插件单点登录后,获取jwt
用户插件user前台用户信息管理
Docker插件dockerDocker镜像、容器、网络和卷管理
钱包插件ETH实现以太坊节点交互的相关操作
钱包插件ERC20实现ERC20协议交互的相关操作
钱包插件ERC721实现ERC721协议交互的相关操作
钱包插件ERC115实现ERC1155协议交互的相关操作
钱包插件ERC3525实现ERC3525协议交互的相关操作
钱包插件TRON实现波场节点交互的相关操作

创建账户

请求URL: /erc721/account

请求方式: POST

请求参数:

参数名类型说明是否必填
userIdstring用户ID

请求示例

{
    "userId": 888
}

返回示例:

{
	"msg": "success",
	"code": 0,
	"data": {
		"private": "9c6e5621e90f928fc6054bf95554d19086bd00f97064c735442cdfa0d7c3510b",
		"public": "03a02c7b45a9b244c5cd79d9a1d1061e49dca36e2c414a053fb41bae8152099435",
		"address": "0xaf93670b61eed69f81a6e5db393d1d5d13b09eea"
	}
}

获取账户列表

请求URL: /erc721/accounts

请求方式: GET

请求参数:

参数名类型说明是否必填
pageSizestring每页数量
pageNumstring页数

请求示例

/erc721/accounts?pageSize=10&pageNum=1

返回示例:

{
	"msg": "success",
	"code": 0,
	"data": {
		"records": [
			{
				"userId": 21,
				"privateKey": "",
				"publicKey": "03748ea1b350b2eeb8de409303c6d3556843ed2cabe50eabb4132b5b5188429fcf",
				"address": "0x8B665E3DF1ECBAC264cFEc3622Cb9049a62bD4e4",
				"create_time": "2024-08-04 14:12:51",
				"update_time": "2024-08-04 14:12:51"
			}
		],
		"total": 1
	}
}

发布合约

请求URL: /erc721/deploy

请求方式: POST

请求参数:

参数名类型说明是否必填
fromstring操作用户地址
namestring代币名称
symbolstring代币符号

请求示例

{
    "from": "0x9999f79a9ae77b8454b7c73c9c06532ab4f2d1d9",
    "name": "NFT 721",
    "symbol": "777"
}

返回示例:

{
    "msg": "success",
    "code": 0,
    "data": "0x1aa9f10cde8e8a812de0b82d9b6457b9d68c12b2fedb40efc60a1921d5628ba4"
}

铸造NFT

请求URL: /erc721/mint

请求方式: POST

请求参数:

参数名类型说明是否必填
fromstring发起账户地址
tostring代币合约地址
accountstring颁发给指定账户
tokenIdstringNFT ID
tokenURIstring获取NFT相关元数据的URI

请求示例

{
    "from": "0x9999f79a9ae77b8454b7c73c9c06532ab4f2d1d9",
    "to": "0x34d42f9f770bcd711862ae6d5fb18db9d171aa20",
    "tokenId": "666",
    "account": "0x9999f79a9ae77b8454b7c73c9c06532ab4f2d1d9",
    "tokenURI": "https://www.biwow.com"
}

返回示例:

{
    "msg": "success",
    "code": 0,
    "data": "0xadbc5355d5ef083f2a11199ff63c98fe2ea947902665e0da62a7cfe6d3141642"
}

销毁指定NFT

请求URL: /erc721/burn

请求方式: POST

请求参数:

参数名类型说明是否必填
fromstring发起账户地址
tostring代币合约地址
tokenIdstringNFT ID

请求示例

{
    "from": "0x9999f79a9ae77b8454b7c73c9c06532ab4f2d1d9",
    "to": "0x34d42f9f770bcd711862ae6d5fb18db9d171aa20",
    "tokenId": "666"
}

返回示例:

{
	"msg": "success",
	"code": 0,
	"data": "0xb22df0057aa71869d685bc800a2b39a2265c8a65dcb9a4dfb90ab8947a2bf6d5"
}

安全转移NFT归属

请求URL: /erc721/safeTransferFrom

请求方式: POST

请求参数:

参数名类型说明是否必填
fromstring发起账户地址
tostring代币合约地址
senderstring发送方地址
receiverstring接收方地址
tokenIdstringNFT ID

请求示例

{
    "from": "0x9999f79a9ae77b8454b7c73c9c06532ab4f2d1d9",
    "to": "0x34d42f9f770bcd711862ae6d5fb18db9d171aa20",
    "sender": "0x9999f79a9ae77b8454b7c73c9c06532ab4f2d1d9",
    "receiver": "0x8B665E3DF1ECBAC264cFEc3622Cb9049a62bD4e4",
    "tokenId": "666"
}

返回示例:

{
	"msg": "success",
	"code": 0,
	"data": "0xd07e9c9d5ca1a16e10bdd0f8fc4a3da790bc28e0ce893db1827767408e31f501"
}

转移NFT归属

请求URL: /erc721/transferFrom

请求方式: POST

请求参数:

参数名类型说明是否必填
fromstring发起账户地址
tostring代币合约地址
senderstring发送方地址
receiverstring接收方地址
tokenIdstringNFT ID

请求示例

{
    "from": "0x8B665E3DF1ECBAC264cFEc3622Cb9049a62bD4e4",
    "to": "0x34d42f9f770bcd711862ae6d5fb18db9d171aa20",
    "sender": "0x8B665E3DF1ECBAC264cFEc3622Cb9049a62bD4e4",
    "receiver": "0x9999f79a9ae77b8454b7c73c9c06532ab4f2d1d9",
    "tokenId": "666"
}

返回示例:

{
	"msg": "success",
	"code": 0,
	"data": "0x24777bb32d10d2318bf034e5e5a6bf07e7194c5aa33086841a5c44bca3a5065b"
}

授权操作人管理指定NFT

请求URL: /erc721/approve

请求方式: POST

请求参数:

参数名类型说明是否必填
fromstring发起账户地址
tostring代币合约地址
operatorstring操作人地址
tokenIdstringNFT ID

请求示例

{
    "from": "0x9999f79a9ae77b8454b7c73c9c06532ab4f2d1d9",
    "to": "0x34d42f9f770bcd711862ae6d5fb18db9d171aa20",
    "operator": "0x8B665E3DF1ECBAC264cFEc3622Cb9049a62bD4e4",
    "tokenId": "666"
}

注: 如果取消授权,只需operator参数传"0x0000000000000000000000000000000000000000"

返回示例:

{
	"msg": "success",
	"code": 0,
	"data": "0xa54e204b48c1bdb28111bee424bc45eea0d9be37b8241e5512504830d13c91ba"
}

授权/取消操作人管理自己所有NFT

请求URL: /erc721/setApprovalForAll

请求方式: POST

请求参数:

参数名类型说明是否必填
fromstring发起账户地址
tostring代币合约地址
operatorstring操作人
approvedstring全部授权(yes)全部取消(no)

请求示例

{
    "from": "0x9999f79a9ae77b8454b7c73c9c06532ab4f2d1d9",
    "to": "0x34d42f9f770bcd711862ae6d5fb18db9d171aa20",
    "operator": "0x8B665E3DF1ECBAC264cFEc3622Cb9049a62bD4e4",
    "approved": "no"
}

返回示例:

{
	"msg": "success",
	"code": 0,
	"data": "0x5ef5d23f63f0a3e0dde2f06ff6ee8be28ca004edf409ff6bae70b4c647fe10f7"
}

修改NFT的URI

请求URL: /erc721/setTokenURI

请求方式: POST

请求参数:

参数名类型说明是否必填
fromstring发起账户地址
tostring代币合约地址
tokenIdstringNFT ID
tokenURIstringNFT 新URI

请求示例

{
    "from": "0x9999f79a9ae77b8454b7c73c9c06532ab4f2d1d9",
    "to": "0x34d42f9f770bcd711862ae6d5fb18db9d171aa20",
    "tokenId": "666",
    "tokenURI": "http://www.biwow.com/new"
}

返回示例:

{
    "msg": "success",
    "code": 0,
    "data": "0x66f79e292e76073bea5d58ec877b7f628c92b935878902a254e0c53ffcb1a391"
}

查询账户下NFT数量

请求URL: /erc721/balanceOf

请求方式: POST

请求参数:

参数名类型说明是否必填
fromstring发起账户地址
tostring代币合约地址
accountstring账户地址

请求示例

{
    "from": "0x9999f79a9ae77b8454b7c73c9c06532ab4f2d1d9",
    "to": "0x34d42f9f770bcd711862ae6d5fb18db9d171aa20",
    "account": "0x9999f79a9ae77b8454b7c73c9c06532ab4f2d1d9"
}

返回示例:

{
	"msg": "success",
	"code": 0,
	"data": 1
}

查询NFT ID对应的拥有者地址

请求URL: /erc721/ownerOf

请求方式: POST

请求参数:

参数名类型说明是否必填
fromstring发起账户地址
tostring代币合约地址
tokenIdstringNFT ID

请求示例

{
    "from": "0x9999f79a9ae77b8454b7c73c9c06532ab4f2d1d9",
    "to": "0x34d42f9f770bcd711862ae6d5fb18db9d171aa20",
    "tokenId": "666"
}

返回示例:

{
	"msg": "success",
	"code": 0,
	"data": "0x9999f79A9Ae77b8454b7C73c9C06532ab4f2d1d9"
}

查询NFT ID对应的URI

请求URL: /erc721/tokenURI

请求方式: POST

请求参数:

参数名类型说明是否必填
fromstring发起账户地址
tostring代币合约地址
tokenIdstringNFT ID

请求示例

{
    "from": "0x9999f79a9ae77b8454b7c73c9c06532ab4f2d1d9",
    "to": "0x34d42f9f770bcd711862ae6d5fb18db9d171aa20",
    "tokenId": "666"
}

返回示例:

{
	"msg": "success",
	"code": 0,
	"data": "https://www.biwow.com"
}

查询NFT ID被授权操作人地址

请求URL: /erc721/getApproved

请求方式: POST

请求参数:

参数名类型说明是否必填
fromstring发起账户地址
tostring代币合约地址
tokenIdstringNFT ID

请求示例

{
    "from": "0x9999f79a9ae77b8454b7c73c9c06532ab4f2d1d9",
    "to": "0x34d42f9f770bcd711862ae6d5fb18db9d171aa20",
    "tokenId": "666"
}

注: 批量授权操作,无法用该方法查询

返回示例:

{
	"msg": "success",
	"code": 0,
	"data": "0x0000000000000000000000000000000000000000"
}

查询拥有者是否授权操作者管理所有NFT

请求URL: /erc721/isApprovedForAll

请求方式: POST

请求参数:

参数名类型说明是否必填
fromstring发起账户地址
tostring代币合约地址
ownerstringNFT拥有者
operatorstringNFT操作者

请求示例

{
    "from": "0x9999f79a9ae77b8454b7c73c9c06532ab4f2d1d9",
    "to": "0x34d42f9f770bcd711862ae6d5fb18db9d171aa20",
    "owner": "0x9999f79a9ae77b8454b7c73c9c06532ab4f2d1d9",
    "operator": "0x8B665E3DF1ECBAC264cFEc3622Cb9049a62bD4e4"
}

返回示例:

{
	"msg": "success",
	"code": 0,
	"data": true
}
  • 10
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个比较省gas费的ERC721合约示例代码: ``` pragma solidity ^0.8.0; import "@openzeppelin/contracts/token/ERC721/IERC721.sol"; import "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol"; import "@openzeppelin/contracts/utils/Address.sol"; contract MyNFT is IERC721 { using Address for address; mapping (uint256 => address) private _owners; mapping (address => uint256) private _balances; mapping (uint256 => address) private _tokenApprovals; mapping (address => mapping (address => bool)) private _operatorApprovals; function balanceOf(address owner) public view override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } function ownerOf(uint256 tokenId) public view override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } function safeTransferFrom(address from, address to, uint256 tokenId) public override { safeTransferFrom(from, to, tokenId, ""); } function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public override { require(_isApprovedOrOwner(msg.sender, tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } function transferFrom(address from, address to, uint256 tokenId) public override { require(_isApprovedOrOwner(msg.sender, tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } function approve(address to, uint256 tokenId) public override { address owner = ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require(msg.sender == owner || isApprovedForAll(owner, msg.sender), "ERC721: approve caller is not owner nor approved for all" ); _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } function setApprovalForAll(address operator, bool approved) public override { require(operator != msg.sender, "ERC721: approve to caller"); _operatorApprovals[msg.sender][operator] = approved; emit ApprovalForAll(msg.sender, operator, approved); } function isApprovedForAll(address owner, address operator) public view override returns (bool) { return _operatorApprovals[owner][operator]; } function getApproved(uint256 tokenId) public view override returns (address) { require(_owners[tokenId] != address(0), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } function _safeTransfer(address from, address to, uint256 tokenId, bytes memory _data) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } function _transfer(address from, address to, uint256 tokenId) internal virtual { require(ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _owners[tokenId] = to; _balances[from] -= 1; _balances[to] += 1; emit Transfer(from, to, tokenId); } function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_owners[tokenId] != address(0), "ERC721: operator query for nonexistent token"); address owner = ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data) private returns (bool) { if (!to.isContract()) { return true; } bytes memory returndata = to.functionCall(abi.encodeWithSelector( IERC721Receiver(to).onERC721Received.selector, msg.sender, from, tokenId, _data ), "ERC721: transfer to non ERC721Receiver implementer"); bytes4 retval = abi.decode(returndata, (bytes4)); return (retval == _ERC721_RECEIVED); } bytes4 private constant _ERC721_RECEIVED = 0x150b7a02; } ``` 这个合约代码只包含了ERC721标准规定的基本函数,没有额外的复杂逻辑,因此省去了一些不必要的计算和存储操作,从而降低了gas费用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值