uploadPhoto
transferOwnership
getPhoto
PhotoData
struct is defined to store various photo data.uploadPhoto
and transferOwnership
functions.ERC721.sol
and ERC721Enumerable.sol
_photoList
takes a uint256 tokenId
to map a specific PhotoData
struct. By defining PhotoUploaded event, transaction receipt will log this event whenever function containing this is called.uploadPhoto
and transferOwnership
. Check out Klaystagram.sol to see the whole set of functions.uploadPhoto
uploadPhoto
function takes 4 arguments including photo's image source. To keep things simple, tokenId
will start from 1 and will increase by 1._mint
function is from ERC721 contract. It creates a new token and assign it to a specific address, which in this case, msg.sender
. In this application, logged in user will create transaction with their own private key. So msg.sender
will be the user's public address.PhotoData
struct, locate it inside _photoList
mapping, and push the owner address into ownerHistory
array. And don't forget to emit the event we just created. As mentioned above, this event will be included in transaction receipt.transferOwnership
transferOwnership
function. When transferring photo ownership, we need to do two things. First, we have to reassign the owner, and then we have to push new owner address into ownerHistory
array.transferOwnership
first calls safeTransferFrom
function from ERC721 standard, which eventually calls transferFrom
function. As mentioned above, right after token transfer is successfully done, we have to push new owner information into ownerHistory
array, and that is exactly why transferFrom
is overridden as below.getPhoto
getPhoto
function takes an index(token id) as an argument and returns every element in PhotoData struct.