4. Soạn hợp đồng thông minh Klaystagram
Background
Contract setup
Set events and data structure
Write functions 4.1.
uploadPhoto4.2.transferOwnership4.3.getPhoto
1) Hình nền
We will make a simple contract called "Klaystagram".
PhotoDatastruct is defined to store various photo data.User can upload photo and transfer the ownership photo via
uploadPhotoandtransferOwnershipfunctions.
2) Thiết lập hợp đồng
Specify solidity version. We recommend using 0.5.6 stable version.
We will make use of ERC721 standard to build non-fungible tokens.
Import
ERC721.solandERC721Enumerable.solCheck out detailed information about ERC721 at erc721.org
pragma solidity 0.5.6;
nhập "./ERC721/ERC721.sol";
nhập "./ERC721/ERC721Enumerable.sol";
hợp đồng Klaystagram là ERC721, ERC721Enumerable {3) Đặt sự kiện và cấu trúc dữ liệu
We need to set up an event to keep track of activities on blockchain.
As for data structure, mapping _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.
4) Viết hàm
Let's write some functions that interact with the contract. In this tutorial let us only consider two functions: uploadPhoto and transferOwnership. Check out Klaystagram.sol to see the whole set of functions.
4-1) uploadPhoto
uploadPhotouploadPhoto 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.
Finally, initialize 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.
4-2) transferOwnership
transferOwnershipLet's take a look at 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.
To do this, 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.
4-3) getPhoto
getPhotoFinally, let's make a getter function that fetches data stored in the smart contract. By calling a single function, we want to fetch every information regarding a specific photo. So getPhoto function takes an index(token id) as an argument and returns every element in PhotoData struct.
This is it, now we can deploy this contract!
Last updated