-
Notifications
You must be signed in to change notification settings - Fork 6
/
4-Todo.sol
91 lines (74 loc) · 2.37 KB
/
4-Todo.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;
/*Todos List
- add tasks
- fetch the tasks
- Remove on the completion*/
contract Todo1{
address public owner;
uint public taskNo ;
mapping(uint => string) public Tasks ;
mapping(uint => bool) public completedTask;
event taskAdded(string task) ;
event taskCompleted(string task);
constructor() {
owner = msg.sender ;
}
modifier onlyOwner() {
require(msg.sender==owner, "caller is not owner") ;
_;
}
// calldata instead of memory will save gas ,fetching from memory , requires more gas
function addTask(string calldata _task, uint _taskNo) public onlyOwner {
taskNo = _taskNo ;
Tasks[taskNo] = _task ;
completedTask[taskNo] = false ;
emit taskAdded(_task);
}
function completeTask(uint _taskNo ) public onlyOwner {
taskNo = _taskNo ;
completedTask[taskNo] = true ;
string memory task_ = Tasks[taskNo] ;
emit taskCompleted(task_);
}
function getTask(uint _taskNo) public view returns(string memory task){
return Tasks[_taskNo] ;
}
}
/// another similar contract
contract Todo2{
/// making a todostruct with the required dataset
struct Todo {
string task ;
bool completed ;
}
/// declaring events for good user experience
event taskAdded(string task) ;
event taskCompleted(string task);
event updateTask(uint index, string task);
/// delaring a array containing multiple TodoStruct
Todo[] public todos ;
function create(string calldata _task) external {
todos.push(Todo({
task: _task,
completed: false
})) ;
emit taskAdded(_task);
}
function complete(uint _index ) external {
/// this method might fetch more gas as we have to do 2 operation,
/// but to access multipe variable in a single todos
Todo memory todo = todos[_index] ;
todo.completed = true ;
emit taskCompleted(todo.task) ;
}
function update(uint _index, string calldata _task) external{
/// this fetch
todos[_index].task = _task ;
emit updateTask(_index, _task);
}
function get(uint _index) external view returns(string memory ,bool){
Todo memory todo = todos[_index] ;
return (todo.task , todo.completed) ;
}
}