Skip to content

Instantly share code, notes, and snippets.

@rootulp
Created April 23, 2022 09:37
Show Gist options
  • Select an option

  • Save rootulp/eea7e97bbb7af16f02072ccb0192db53 to your computer and use it in GitHub Desktop.

Select an option

Save rootulp/eea7e97bbb7af16f02072ccb0192db53 to your computer and use it in GitHub Desktop.
# 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