forked from WTFAcademy/WTF-Solidity
-
Notifications
You must be signed in to change notification settings - Fork 0
/
IERC721.sol
143 lines (129 loc) · 4.87 KB
/
IERC721.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
// SPDX-License-Identifier: MIT
// OpenZeppelin Contratos v4.4.1 (token/ERC721/IERC721.sol)
pragma solidity ^0.8.0;
import "./IERC165.sol";
/**
* @dev Interface necessária de um contrato compatível com ERC721.
*/
interface IERC721 is IERC165 {
/**
* @dev Emitido quando o token `tokenId` é transferido de `from` para `to`.
*/
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
/**
* @dev Emitido quando `owner` permite que `approved` gerencie o token `tokenId`.
*/
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
/**
* @dev Emitido quando `owner` habilita ou desabilita (`approved`) `operator` para gerenciar todos os seus ativos.
*/
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
/**
* @dev Retorna o número de tokens na conta do ``owner``.
*/
function balanceOf(address owner) external view returns (uint256 balance);
/**
* @dev Retorna o proprietário do token `tokenId`.
*
* Requisitos:
*
* - `tokenId` deve existir.
*/
function ownerOf(uint256 tokenId) external view returns (address owner);
/**
* @dev Transfere com segurança o token `tokenId` de `from` para `to`, verificando primeiro se os destinatários do contrato
* estão cientes do protocolo ERC721 para evitar que os tokens fiquem bloqueados para sempre.
*
* Requisitos:
*
* - `from` não pode ser o endereço zero.
* - `to` não pode ser o endereço zero.
* - O token `tokenId` deve existir e ser de propriedade de `from`.
* - Se o chamador não for `from`, ele deve ter sido autorizado a mover este token por meio de {approve} ou {setApprovalForAll}.
* - Se `to` se referir a um contrato inteligente, ele deve implementar {IERC721Receiver-onERC721Received}, que é chamado durante uma transferência segura.
*
* Emite um evento {Transfer}.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Transfere o token `tokenId` de `from` para `to`.
*
* AVISO: O uso deste método é desencorajado, use {safeTransferFrom} sempre que possível.
*
* Requisitos:
*
* - `from` não pode ser o endereço zero.
* - `to` não pode ser o endereço zero.
* - O token `tokenId` deve ser de propriedade de `from`.
* - Se o chamador não for `from`, ele deve ser aprovado para mover este token por meio de {approve} ou {setApprovalForAll}.
*
* Emite um evento {Transfer}.
*/
function transferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Concede permissão para `to` transferir o token `tokenId` para outra conta.
* A aprovação é removida quando o token é transferido.
*
* Apenas uma única conta pode ser aprovada por vez, portanto, aprovar o endereço zero remove aprovações anteriores.
*
* Requisitos:
*
* - O chamador deve ser o proprietário do token ou um operador aprovado.
* - `tokenId` deve existir.
*
* Emite um evento {Approval}.
*/
function approve(address to, uint256 tokenId) external;
/**
* @dev Retorna a conta aprovada para o token `tokenId`.
*
* Requisitos:
*
* - `tokenId` deve existir.
*/
function getApproved(uint256 tokenId) external view returns (address operator);
/**
* @dev Aprova ou remove `operador` como um operador para o chamador.
* Operadores podem chamar {transferFrom} ou {safeTransferFrom} para qualquer token de propriedade do chamador.
*
* Requisitos:
*
* - O `operador` não pode ser o chamador.
*
* Emite um evento {ApprovalForAll}.
*/
function setApprovalForAll(address operator, bool _approved) external;
/**
* @dev Retorna se o `operador` está autorizado a gerenciar todos os ativos do `proprietário`.
*
* Veja {setApprovalForAll}
*/
function isApprovedForAll(address owner, address operator) external view returns (bool);
/**
* @dev Transfere com segurança o token `tokenId` de `from` para `to`.
*
* Requisitos:
*
* - `from` não pode ser o endereço zero.
* - `to` não pode ser o endereço zero.
* - O token `tokenId` deve existir e ser de propriedade de `from`.
* - Se o chamador não for `from`, ele deve ser aprovado para mover este token por meio de {approve} ou {setApprovalForAll}.
* - Se `to` se referir a um contrato inteligente, ele deve implementar {IERC721Receiver-onERC721Received}, que é chamado durante uma transferência segura.
*
* Emite um evento {Transfer}.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes calldata data
) external;
}