{"content":{"title":"Solidity学习笔记（WTF:1-2）","body":"# 初见\r\nSolidity是以太坊虚拟机智能合约的语言\r\n开发工具：Remix\r\n# 1.Hello web3\r\nSolidity 源代码程序结构：{\r\n## line1：\r\n注释（代码所用软件许可（license））由//开头，不会被程序运行； 如果没有许可程序可以运行，但会有编译警告。\r\nex:\r\n![image.png](https://img.learnblockchain.cn/attachments/2024/03/Aer63gP165eda2aa64eaa.png)\r\n## line2：\r\n声明源文件所用solidity版本\r\n## line3-?：\r\n合约内容\r\nex：\r\n![image.png](https://img.learnblockchain.cn/attachments/2024/03/RNHuBMFF65eda34b05d6e.png)\r\n语法结构类似c++中的类（class）\r\n}\r\n编写完之后需要编译和部署，remix可以模拟部署编写的智能合约。\r\nRemix中文设定：左下方设置处可调节语言为简体中文（编写方便一点）\r\n\r\n![image.png](https://img.learnblockchain.cn/attachments/2024/03/pRsUFvf365edb634e0a84.png)\r\n# 2.数值类型\r\n## 布尔型（可参考c++中的bool型）\r\n布尔值有两种：true&false\r\n运算同c++中bool：{\r\n- `!` （逻辑非）\r\n- `&&` （逻辑与， \"and\" ）\r\n- `||` （逻辑或， \"or\" ）\r\n- `==` （等于）\r\n- `!=` （不等于）}\r\nex：\r\n\r\n```js    // 布尔运算\r\n    bool public _bool  = true ;\r\n    bool public _bool1 = !_bool; //取非（_boo1为false）\r\n    bool public _bool2 = _bool && _bool1; //（_bool2为false）\r\n    bool public _bool3 = _bool || _bool1; //或（_bool3为true）\r\n    bool public _bool4 = _bool == _bool1; //相等（_bool4为false）\r\n    bool public _bool5 = _bool != _bool1; //不相等（_bool5为true）\r\n```\r\n其中&&和||遵循短路运算符\r\nf(x)&&g(x)当f(x)和g(x)均为true时逻辑算式结果为true；\r\n而f(x)||g(x)f(x)和g(x)只要有一方为true该算式结果为true；\r\n## 整型\r\nint：整数（包括负数）\r\nuint：正整数\r\nuint256：256位正整数\r\n常用运算符类似c++{\r\n- 比较运算符（返回布尔值）： `<=`， `<`， `==`， `!=`， `>=`， `>`\r\n-  算数运算符： `+`， `-`， 一元运算 `-`， `+`， `*`， `/`， `%`（取余），`**`（幂）\r\n}\r\n## 地址类型\r\n地址(adress)储存一个20字节的数值(以太坊地址的大小)，一般以0x开头，在remix\r\n中调试需要交易哈希地址\r\n\r\n![image.png](https://img.learnblockchain.cn/attachments/2024/03/LKru5wJj65edb392955a8.png)\r\n地址类型也有成员变量\r\n地址有普通地址和payable修饰的地址，其中payable地址多了send和transfer两个成员\r\n其中若send执行失败不影响合约的进行，balance和transfer用于查询余额和安全转账。\r\n## 定长字节数组\r\n字节数组bytes分两种，一种定长（byte, bytes8, bytes32），另一种不定长。定长的属于数值类型，不定长的是引用类型。 定长bytes可以存一些数据，消耗gas比较少。\r\n>   <!--StartFragment-->\r\n> \r\n> ```\r\n>     // 固定长度的字节数组\r\n>     bytes32 public _byte32 = \"MiniSolidity\"; \r\n>     bytes1 public _byte = _byte32[0]; \r\n> ```\r\n> \r\n> \r\n> \r\n> `MiniSolidity`变量以字节的方式存储进变量`_byte32`，转换成`16进制`为：`0x4d696e69536f6c69646974790000000000000000000000000000000000000000`\r\n> \r\n> `_byte`变量存储`_byte32`的第一个字节，为`0x4d`。\r\n> \r\n>\r\n 题目:bytes4类型具有几个16进制位？（8个）\r\n## 枚举\r\n枚举（enum）用于为uint的分配名称，使程序易于维护和阅读。\r\n可与uint相互转换。\r\n```js// 用enum将uint 0， 1， 2表示为Buy, Hold, Sell\\\r\nenum ActionSet { Buy, Hold, Sell }\\\r\n// 创建enum变量 action\\\r\nActionSet action = ActionSet.Buy;\r\n```\r\n## 学习心得\r\n在有一定c++的基础上学习，比较轻松，对于智能合约编程有了初步的认识。\r\n## 学习内容来自：wtf.academy"},"author":{"user":"https://learnblockchain.cn/people/18908","address":"0x5F50Cbfe0f869bB24a1CdbA59b1F9Dd5D2cFD652"},"history":"bafkreihzwve3r3sytorot2qxjoemt5kkimyvz5jmrhac7glgamo7wqznbu","timestamp":1710078223,"version":1}