Toàn bộ smart contract như sau
pragma solidity ^0.4.17;
contract PartTime {
struct Job {
uint256 id;
address creator;
uint256 salary;
bytes title;
bytes description;
}
uint256 totalJob;
mapping (uint256 => Job) public jobData;
function createJob(uint256 salary, bytes title, bytes description)
returns(uint256 jobId)
{
// Saving a little gas by create a temporary object
Job memory newJob;
// Assign jobId
jobId = totalJob;
newJob.id = jobId;
newJob.title = title;
newJob.description = description;
newJob.salary = salary;
newJob.creator = msg.sender;
// Append newJob to jobData
jobData[totalJob++] = newJob;
}
}Struct job
Mình define struct Job chứa thông tin của một công việc part time, bao gồm các thông tin như id, title, description, salary, creator:
struct Job {
uint256 id;
address creator;
uint256 salary;
bytes title;
bytes description;
}Mapping dữ liệu
Mình muốn có thể chứa nhiều công việc trong smart contract, nên mình khai báo một mapping để chứa được nhiều jobs hơn, đoạn code này làm nhiệm vụ mapping một unsigned integer 256 bits vào một struct job:
mapping (uint256 => Job) public jobData;Mapping thế này cho phép bạn truy cập lại dữ liệu cũ khi bạn có được index của dữ liệu, thông qua sử dụng toán tử [] (khá giống với array, nhưng dùng mapping tiết kiệm gas hơn).
Thêm một record vào bảng mapping
function createJob(uint256 salary, bytes title, bytes description)
returns(uint256 jobId)
{
// Saving a little gas by create a temporary object
Job memory newJob;
// Assign jobId
jobId = totalJob;
newJob.id = jobId;
newJob.title = title;
newJob.description = description;
newJob.salary = salary;
newJob.creator = msg.sender;
// Append newJob to jobData
jobData[totalJob++] = newJob;
}Function này sẽ thêm một job vào phía cuối mapping table chứa rất nhiều struct job mà chúng ta lưu trong jobData.