Created
April 23, 2022 09:37
-
-
Save rootulp/eea7e97bbb7af16f02072ccb0192db53 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # SPDX-License-Identifier: MIT | |
| %lang starknet | |
| from starkware.cairo.common.cairo_builtins import HashBuiltin | |
| from starkware.cairo.common.uint256 import Uint256 | |
| from openzeppelin.token.erc721.library import ( | |
| ERC721_name, | |
| ERC721_symbol, | |
| ERC721_balanceOf, | |
| ERC721_ownerOf, | |
| ERC721_getApproved, | |
| ERC721_isApprovedForAll, | |
| ERC721_tokenURI, | |
| ERC721_approve, | |
| ERC721_setApprovalForAll, | |
| ERC721_transferFrom, | |
| ERC721_safeTransferFrom, | |
| ERC721_safeMint, | |
| ERC721_initializer, | |
| ERC721_setTokenURI, | |
| ) | |
| from openzeppelin.introspection.ERC165 import ERC165_supports_interface | |
| from openzeppelin.access.ownable import ( | |
| Ownable_initializer, | |
| Ownable_only_owner, | |
| ) | |
| @constructor | |
| func constructor{ | |
| syscall_ptr: felt*, | |
| pedersen_ptr: HashBuiltin*, | |
| range_check_ptr | |
| }(owner: felt): | |
| ERC721_initializer('gradual-dutch-auction', 'GDA') | |
| Ownable_initializer(owner) | |
| return () | |
| end | |
| # | |
| # Getters | |
| # | |
| @view | |
| func supportsInterface{ | |
| syscall_ptr: felt*, | |
| pedersen_ptr: HashBuiltin*, | |
| range_check_ptr | |
| }(interfaceId: felt) -> (success: felt): | |
| let (success) = ERC165_supports_interface(interfaceId) | |
| return (success) | |
| end | |
| @view | |
| func name{ | |
| syscall_ptr: felt*, | |
| pedersen_ptr: HashBuiltin*, | |
| range_check_ptr | |
| }() -> (name: felt): | |
| let (name) = ERC721_name() | |
| return (name) | |
| end | |
| @view | |
| func symbol{ | |
| syscall_ptr: felt*, | |
| pedersen_ptr: HashBuiltin*, | |
| range_check_ptr | |
| }() -> (symbol: felt): | |
| let (symbol) = ERC721_symbol() | |
| return (symbol) | |
| end | |
| @view | |
| func balanceOf{ | |
| syscall_ptr: felt*, | |
| pedersen_ptr: HashBuiltin*, | |
| range_check_ptr | |
| }(owner: felt) -> (balance: Uint256): | |
| let (balance) = ERC721_balanceOf(owner) | |
| return (balance) | |
| end | |
| @view | |
| func ownerOf{ | |
| syscall_ptr: felt*, | |
| pedersen_ptr: HashBuiltin*, | |
| range_check_ptr | |
| }(token_id: Uint256) -> (owner: felt): | |
| let (owner) = ERC721_ownerOf(token_id) | |
| return (owner) | |
| end | |
| @view | |
| func getApproved{ | |
| syscall_ptr: felt*, | |
| pedersen_ptr: HashBuiltin*, | |
| range_check_ptr | |
| }(token_id: Uint256) -> (approved: felt): | |
| let (approved) = ERC721_getApproved(token_id) | |
| return (approved) | |
| end | |
| @view | |
| func isApprovedForAll{ | |
| syscall_ptr: felt*, | |
| pedersen_ptr: HashBuiltin*, | |
| range_check_ptr | |
| }(owner: felt, operator: felt) -> (isApproved: felt): | |
| let (isApproved) = ERC721_isApprovedForAll(owner, operator) | |
| return (isApproved) | |
| end | |
| @view | |
| func tokenURI{ | |
| syscall_ptr: felt*, | |
| pedersen_ptr: HashBuiltin*, | |
| range_check_ptr | |
| }(tokenId: Uint256) -> (tokenURI: felt): | |
| let (tokenURI) = ERC721_tokenURI(tokenId) | |
| return (tokenURI) | |
| end | |
| # | |
| # Externals | |
| # | |
| @external | |
| func approve{ | |
| syscall_ptr: felt*, | |
| pedersen_ptr: HashBuiltin*, | |
| range_check_ptr | |
| }(to: felt, tokenId: Uint256): | |
| ERC721_approve(to, tokenId) | |
| return () | |
| end | |
| @external | |
| func setApprovalForAll{ | |
| syscall_ptr: felt*, | |
| pedersen_ptr: HashBuiltin*, | |
| range_check_ptr | |
| }(operator: felt, approved: felt): | |
| ERC721_setApprovalForAll(operator, approved) | |
| return () | |
| end | |
| @external | |
| func transferFrom{ | |
| syscall_ptr: felt*, | |
| pedersen_ptr: HashBuiltin*, | |
| range_check_ptr | |
| }(from_: felt, to: felt, tokenId: Uint256): | |
| ERC721_transferFrom(from_, to, tokenId) | |
| return () | |
| end | |
| @external | |
| func safeTransferFrom{ | |
| syscall_ptr: felt*, | |
| pedersen_ptr: HashBuiltin*, | |
| range_check_ptr | |
| }(from_: felt, to: felt, tokenId: Uint256, data_len: felt, data: felt*): | |
| ERC721_safeTransferFrom(from_, to, tokenId, data_len, data) | |
| return () | |
| end | |
| @external | |
| func safeMint{ | |
| syscall_ptr: felt*, | |
| pedersen_ptr: HashBuiltin*, | |
| range_check_ptr | |
| }(to: felt, tokenId: Uint256, data_len: felt, data: felt*, tokenURI: felt): | |
| Ownable_only_owner() | |
| ERC721_safeMint(to, tokenId, data_len, data) | |
| ERC721_setTokenURI(tokenId, tokenURI) | |
| return () | |
| end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment