Solidity事件,等待事件
先定义一个事件
event Log(string message,uint vall);
然后规定一个函数来调用它
function example()external { emit Log("foo",123); //触发事件: "emit 事件名(信息);",按定义好的数据类型输出括号内的信息
}
此时部署后点击合约中名为”example“的按钮时,则会将函数括号内的数值赋给事件内的变量。
如果想通过输入数值的方式来给这个事件中的变量赋值则
event Message(address indexed _from,address indexed _to,string message); //定义一个索引,最多三个有索引的 function load(address _to,string calldata message) external { emit Message(msg.sender, _to, message); }
等待事件
先定义一个结构体与数组
struct ToDo{ string text; bool completed; } ToDo[] public todos; //新增数组
然后通过函数的形式来处理所定义的变量
function create(string calldata _text)external { //输入字符串 todos.push(ToDo({ text : _text, //将输入值赋给状态值 completed : false })); }
定义完数据,处理完后就要将处理好的结果存入内存中
function get(uint _index) external view returns (string memory,bool){ //输入数字 //装到内存中的写法,gas消耗多,拷贝两次 ToDo memory todo = todos[_index]; return (todo.text,todo.completed); //将事情装入内存一次 }
存入的数据越多则消耗的gas值越多,同时也可以将事件存入储存中去
//装到存储中:将“memory”改为“storage”,拷贝一次 function updateText(uint _index,string calldata _text) external { //输入数字跟字符串 ToDo storage todo = todos[_index]; //新增变量“todo” todo.text = _text; }
其实,存入内存跟存入储存中只是将“memory”改为“storage”,其他都可以不改
存入数据后要反转结构体中的布尔值,让它显示已经存入了数据这一信息
function toggleCompleted(uint _index) external { //输入数字 todos[_index].completed = !todos[_index].completed; } //反转完成变量的数据