IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 区块链 -> Solidity学习之路(1)——初识Solidity -> 正文阅读

[区块链]Solidity学习之路(1)——初识Solidity

前言

? ? ? ?区块链技术日趋成熟,公司也希望在区块链上有所发展,身为一个上进青年,当然要承担起这个重任。在前端通过使用vue、react与web3.js开发的dapp后,个人对合约的开发越发的感兴趣,既然如此,心动不如行动,那就开始学习吧。在之后的内容中,我将分享我在solidity学习的过程中的每一步,比如遇到的难题,解决的思路等等。希望可以给和我一样刚刚上手的朋友一些帮助。也希望有朋友可以将我理解错误的地方指出。大家互相讨论,共同进步。

正文

1、查找参考文档

? ? ? ? 身为中国人遇到问题第一个想到的当然是百度了,而百度也没有让我失望,直接搜索solidity,在结果列表的第一项就是Solidity的开发文档,很完美。链接地址如下:

点我跳转https://solidity-cn.readthedocs.io/zh/develop/

2、大致浏览文档

查看文档左侧的目录是我学习时的习惯,可以大概的了解一下这份文档的指导路程,方便自己去查看想要学习的部分。目录如下:

智能合约概述
? ? ? ? 简单的智能合约
? ? ? ? ? ? ? ? 存储
? ? ? ? ? ? ? ? 子货币(subcreency)例子
? ? ? ? 区块链基础
? ? ? ? ? ? ? ? 交易/事务
? ? ? ? ? ? ? ? 区块
? ? ? ? 以太坊虚拟机
? ? ? ? ? ? ? ? 概述
? ? ? ? ? ? ? ? 账户
? ? ? ? ? ? ? ? 交易
? ? ? ? ? ? ? ? Gas
? ? ? ? ? ? ? ? 存储、内存和栈
? ? ? ? ? ? ? ? 指令集
? ? ? ? ? ? ? ? 消息调用
? ? ? ? ? ? ? ? 委托调用/代码调用和库
? ? ? ? ? ? ? ? 日志
? ? ? ? ? ? ? ? 创建
? ? ? ? ? ? ? ? 自毁
安装Solidity编译器
? ? ? ? 版本
? ? ? ? Remix
? ? ? ? npm/Node.js
? ? ? ? Docker
? ? ? ? 二进制包
? ? ? ? 从源代码变异
? ? ? ? ? ? ? ? 克隆代码库
? ? ? ? ? ? ? ? 先决条件-macOS
? ? ? ? ? ? ? ? 先决条件-windows
? ? ? ? ? ? ? ? 外部依赖
? ? ? ? ? ? ? ? 命令行构建
? ? ? ? CMake参数
? ? ? ? 版本号字符串详解
? ? ? ? 版本信息详情
根据例子学习Solidity
? ? ? ? 投票
? ? ? ? ? ? ? ? 可能的优化
? ? ? ? 秘密竞价(盲拍)
? ? ? ? ? ? ? ? 简单的公开拍卖
? ? ? ? ? ? ? ? 秘密竞拍(盲拍)
????????安全的远程购买
? ? ? ? 微支付通道
深入理解Solidity
? ? ? ? Solidity源文件结构
? ? ? ? ? ? ? ? 版本杂注
? ? ? ? ? ? ? ? 导入其他源文件
? ? ? ? ? ? ? ? ? ? ? ? 语法与语义
? ? ? ? ? ? ? ? ? ? ? ? 路径
? ? ? ? ? ? ? ? ? ? ? ? 在实际的编译器中使用
? ? ? ? ? ? ? ? 注释
? ? ? ? 合约结构
? ? ? ? ? ? ? ? 状态变量
? ? ? ? ? ? ? ? 函数
? ? ? ? ? ? ? ? 函数修饰器
? ? ? ? ? ? ? ? 事件
? ? ? ? ? ? ? ? 结构类型
? ? ? ? ? ? ? ? 枚举类型
? ? ? ? 类型
? ? ? ? ? ? ? ? 值类型
? ? ? ? ? ? ? ? ? ? ? ? 布尔类型
? ? ? ? ? ? ? ? ? ? ? ? 整型
? ? ? ? ? ? ? ? ? ? ? ? 定长浮点型
? ? ? ? ? ? ? ? ? ? ? ? 地址类型
? ? ? ? ? ? ? ? ? ? ? ? 定长字节数组
? ? ? ? ? ? ? ? ? ? ? ? 变长字节数组
? ? ? ? ? ? ? ? ? ? ? ? 地址字面常数(Address Literals)
? ? ? ? ? ? ? ? ? ? ? ? 有理数和整数字面常数
? ? ? ? ? ? ? ? ? ? ? ? 字符串字面常数
? ? ? ? ? ? ? ? ? ? ? ? 十六进制字面常数
? ? ? ? ? ? ? ? ? ? ? ? 枚举类型
? ? ? ? ? ? ? ? ? ? ? ? 函数类型
? ? ? ? ? ? ? ? 引用类型
? ? ? ? ? ? ? ? ? ? ? ? 数据位置
? ? ? ? ? ? ? ? ? ? ? ? 数组
? ? ? ? ? ? ? ? ? ? ? ? 结构体
? ? ? ? ? ? ? ? 映射
? ? ? ? ? ? ? ? 涉及LValues的运算符
? ? ? ? ? ? ? ? ? ? ? ? 删除
? ? ? ? ? ? ? ? 基本类型之间的转换
? ? ? ? ? ? ? ? ? ? ? ? 隐式转换
? ? ? ? ? ? ? ? ? ? ? ? 显式转换
? ? ? ? ? ? ? ? 类型推断
? ? ? ? 单位和全局变量
? ? ? ? ? ? ? ? 以太坊单位
? ? ? ? ? ? ? ? 时间单位
? ? ? ? ? ? ? ? 特殊变量和函数
? ? ? ? ? ? ? ? ? ? ? ? 区块和交易属性
? ? ? ? ? ? ? ? ? ? ? ? ABI编码函数
? ? ? ? ? ? ? ? ? ? ? ? 错误处理
? ? ? ? ? ? ? ? ? ? ? ? 数学和密码学函数
? ? ? ? ? ? ? ? ? ? ? ? 地址相关
? ? ? ? ? ? ? ? ? ? ? ? 合约相关
? ? ? ? 表达式和控制结构
? ? ? ? ? ? ? ? 输入参数和输出参数
? ? ? ? ? ? ? ? ? ? ? ? 输入参数
? ? ? ? ? ? ? ? ? ? ? ? 输出参数
? ? ? ? ? ? ? ? 控制结构
? ? ? ? ? ? ? ? 函数调用
? ? ? ? ? ? ? ? ? ? ? ? 内部函数调用
? ? ? ? ? ? ? ? ? ? ? ? 外部函数调用
? ? ? ? ? ? ? ? ? ? ? ? 具名调用和匿名函数参数
? ? ? ? ? ? ? ? ? ? ? ? 省略函数参数名称
? ? ? ? ? ? ? ? 通过new创建合约
? ? ? ? ? ? ? ? 表达式计算顺序
? ? ? ? ? ? ? ? 赋值
? ? ? ? ? ? ? ? ? ? ? ? 解构赋值和返回多值
? ? ? ? ? ? ? ? ? ? ? ? 数组和结构体的复杂性
? ? ? ? ? ? ? ? 作用域和声明
? ? ? ? ? ? ? ? 错误处理:Assert,Require,Revert 和 Exceptions
? ? ? ? 合约
? ? ? ? ? ? ? ? 创建合约
? ? ? ? ? ? ? ? 可见性和getter函数
? ? ? ? ? ? ? ? ? ? ? ? Getter函数
? ? ? ? ? ? ? ? 函数修饰器
? ? ? ? ? ? ? ? Constant状态常量
? ? ? ? ? ? ? ? 函数
? ? ? ? ? ? ? ? ? ? ? ? View函数
? ? ? ? ? ? ? ? ? ? ? ? Pure函数
? ? ? ? ? ? ? ? ? ? ? ? Fallback函数
? ? ? ? ? ? ? ? ? ? ? ? 函数重载
? ? ? ? ? ? ? ? 事件
? ? ? ? ? ? ? ? ? ? ? ? 日志的底层接口
? ? ? ? ? ? ? ? ? ? ? ? 其他学习事件机制的资源
? ? ? ? ? ? ? ? 继承
? ? ? ? ? ? ? ? ? ? ? ? 基类构造函数的参数
? ? ? ? ? ? ? ? ? ? ? ? 多重继承与线性化
? ? ? ? ? ? ? ? ? ? ? ? 继承有相同名字的不同类型成员
? ? ? ? ? ? ? ? 抽象合约
? ? ? ? ? ? ? ? 接口
? ? ? ? ? ? ? ? 库
? ? ? ? ? ? ? ? ? ? ? ? 库的调用保护
? ? ? ? ? ? ? ? Using For
? ? ? ? Solidity汇编
? ? ? ? ? ? ? ? 内联汇编
? ? ? ? ? ? ? ? ? ? ? ? 例子
? ? ? ? ? ? ? ? ? ? ? ? 语法
? ? ? ? ? ? ? ? ? ? ? ? 操作码
? ? ? ? ? ? ? ? ? ? ? ? 字面常量
? ? ? ? ? ? ? ? ? ? ? ? 函数风格
? ? ? ? ? ? ? ? ? ? ? ? 访问外部变量和函数
? ? ? ? ? ? ? ? ? ? ? ? 标签
? ? ? ? ? ? ? ? ? ? ? ? 汇编局部变量声明
? ? ? ? ? ? ? ? ? ? ? ? 赋值
? ? ? ? ? ? ? ? ? ? ? ? if
? ? ? ? ? ? ? ? ? ? ? ? Switch
? ? ? ? ? ? ? ? ? ? ? ? 循环
? ? ? ? ? ? ? ? ? ? ? ? 函数
? ? ? ? ? ? ? ? ? ? ? ? 注意事项
? ? ? ? ? ? ? ? ? ? ? ? Solidity惯例
? ? ? ? ? ? ? ? 独立汇编
? ? ? ? ? ? ? ? ? ? ? ? 汇编语法
? ? ? ? 杂项
? ? ? ? ? ? ? ? 存储中的状态变量存储结构
? ? ? ? ? ? ? ? 内存中的存储结构
? ? ? ? ? ? ? ? 调用数据存储结构
? ? ? ? ? ? ? ? 内部机制-清理变量
? ? ? ? ? ? ? ? 内部机制-优化器
? ? ? ? ? ? ? ? 源代码映射
? ? ? ? ? ? ? ? 技巧和窍门
? ? ? ? ? ? ? ? 速查表
? ? ? ? ? ? ? ? ? ? ? ? 操作符优先级
? ? ? ? ? ? ? ? ? ? ? ? 全局变量
? ? ? ? ? ? ? ? ? ? ? ? 函数可见性说明符
? ? ? ? ? ? ? ? ? ? ? ? 修改器
? ? ? ? ? ? ? ? ? ? ? ? 保留字
? ? ? ? ? ? ? ? ? ? ? ? 语法表
安全考量
? ? ? ? 陷阱
? ? ? ? ? ? ? ? 私有信息和随机性
? ? ? ? ? ? ? ? 重入
? ? ? ? ? ? ? ? gas限制和循环
? ? ? ? ? ? ? ? 发送和接收以太币
? ? ? ? ? ? ? ? 调用栈深度
? ? ? ? ? ? ? ? tx.origin
? ? ? ? ? ? ? ? 细枝末节
? ? ? ? 推荐做法
? ? ? ? ? ? ? ? 认真对待警告
? ? ? ? ? ? ? ? 限定以太币数量
? ? ? ? ? ? ? ? 保持合约简练且模块化
? ? ? ? ? ? ? ? 使用"检测-生效-交互"(Checkes-Effects-Interactions)模式
? ? ? ? 形式化验证
合约的元数据
? ? ? ? 元数据哈希字节码的编码
? ? ? ? 自动化接口生成和以太坊标准说明格式的使用方法
? ? ? ? 源代码验证的使用方法
应用二进制接口说明
? ? ? ? 基本设计
? ? ? ? 函数选择器
? ? ? ? 参数编码
? ? ? ? 类型
? ? ? ? 编码的形式说明
? ? ? ? 函数选择器和参数编码
? ? ? ? 例子
? ? ? ? 动态类型的使用
? ? ? ? 事件
? ? ? ? JSON
? ? ? ? ? ? ? ? 处理元组类型
? ? ? ? 非标准打包模式
Yul
? ? ? ? Yul语言说明
? ? ? ? ? ? ? ? 语法层面的限制
? ? ? ? ? ? ? ? 作用域规则
? ? ? ? ? ? ? ? 形式规范
? ? ? ? ? ? ? ? 类型转换函数
? ? ? ? ? ? ? ? 低级函数
? ? ? ? ? ? ? ? 后端
? ? ? ? ? ? ? ? 后端:EVM
? ? ? ? ? ? ? ? 后端:EVM1.5
? ? ? ? ? ? ? ? 后端:eWASM
? ? ? ? Yul对象说明
风格指南
? ? ? ? 概述
? ? ? ? 代码结构
? ? ? ? ? ? ? ? 缩进
? ? ? ? ? ? ? ? 制表符或空格
? ? ? ? ? ? ? ? 空行
? ? ? ? ? ? ? ? 代码行的最大长度
? ? ? ? ? ? ? ? 源文件编码格式
? ? ? ? ? ? ? ? Imports规范
? ? ? ? ? ? ? ? 函数顺序
? ? ? ? ? ? ? ? 表达式中的空格
? ? ? ? ? ? ? ? 控制结构
? ? ? ? ? ? ? ? 函数声明
? ? ? ? ? ? ? ? 映射
? ? ? ? ? ? ? ? 变量声明
? ? ? ? ? ? ? ? 其他协议
? ? ? ? 命名规范
? ? ? ? ? ? ? ? 命名方式
? ? ? ? ? ? ? ? 应避免的名称
? ? ? ? ? ? ? ? 合约和库名称
? ? ? ? ? ? ? ? 结构体名称
? ? ? ? ? ? ? ? 事件名称
? ? ? ? ? ? ? ? 函数名称
? ? ? ? ? ? ? ? 函数参数命名
? ? ? ? ? ? ? ? 局部变量和状态变量名称
? ? ? ? ? ? ? ? 常量名称
? ? ? ? ? ? ? ? 修饰符命名
? ? ? ? ? ? ? ? 枚举变量命名
? ? ? ? ? ? ? ? 避免命名冲突
? ? ? ? ? ? ? ? 一般建议
通用模式
? ? ? ? 从合约中提款
? ? ? ? 限制访问
? ? ? ? 状态机
? ? ? ? ? ? ? ? 实例
已知bug列表
贡献方式
? ? ? ? 怎样报告问题
? ? ? ? Pull Request的工作流
? ? ? ? 运行编译器测试
? ? ? ? ? ? ? ? 编写和运行语法测试
? ? ? ? 通过AFL运行Fuzzer
????????Whiskers模版系统
常见问题
? ? ? ? 基本问题
? ? ? ? ? ? ? ? 可以在特定的区块上进行操作吗?(比如发布一个合约或执行一笔交易)
? ? ? ? ? ? ? ? 什么是交易的“有效载荷(payload)”?
? ? ? ? ? ? ? ? 存在反编译器吗?
? ? ? ? ? ? ? ? 创建一个可以被中止并退款的合约
? ? ? ? ? ? ? ? 调用Solidity方法可以返回一个数组或字符串(string)吗?
? ? ? ? ? ? ? ? 数组可以使用in-line的方式(指在声明变量的同一个语句中)来初始化吗?比如string[]myarray = ["a","b"];
? ? ? ? ? ? ? ? 合约的函数可以返回结构(struct)吗?
? ? ? ? ? ? ? ? 我从一个返回的枚举类型(enum)中,使用web3.js只得到了整数值,我该如何获取具名数值?
? ? ? ? ? ? ? ? 可以使用in-line的方式来初始化状态变量吗?
? ? ? ? ? ? ? ? 结构(structs)如何使用?
? ? ? ? ? ? ? ? 循环(for? loops)如何使用?
? ? ? ? ? ? ? ? 有没有一些简单的操作字符串的例子(substring,indexOf,chatAt等)?
? ? ? ? ? ? ? ? 我能拼接两个字符串吗?
? ? ? ? ? ? ? ? 为什么大家都选择将合约是梨花编程一个变量(ContractB b;),然后去执行变量的函数(b.doSomething();),而不是直接调用这个低级函数.call()?
? ? ? ? ? ? ? ? 没被使用的gas会被自动退回吗?
? ? ? ? ? ? ? ? 当返回一个值的时候,比如说uint类型的值,可以返回一个undefined或者类似null的值吗?
? ? ? ? ? ? ? ? 注释会被包含在已部署的合约里吗,而且会增加部署的gas吗?
? ? ? ? ? ? ? ? 如果在调用合约的函数时一起发送了以太币,将会发生什么?
? ? ? ? ? ? ? ? 合约对合约的交易可以获得交易回执吗?
? ? ? ? ? ? ? ? 关键字memory是什么?是用来做什么的?
? ? ? ? 高级问题
? ? ? ? ? ? ? ? 怎样才能在合约中获取一个随机数?(实施一份自动回款的博彩合约)
? ? ? ? ? ? ? ? 从另一份合约中的non-constant函数获取返回值
? ? ? ? ? ? ? ? 让合约在首次被挖出时就开始做些事情
????????????????怎样才能创建二维数组
? ? ? ? ? ? ? ? 当我们复制一个结构(struct)时,结构(struct)中定义的映射会被怎么处理?
? ? ? ? ? ? ? ? 我应该如何初始化一份只包含指定数量wei的合约
? ? ? ? ? ? ? ? 合约的函数可以接收二维数组吗?
? ? ? ? ? ? ? ? bytes32和string有什么关系吗?为什么bytes32 somevar = "stringliteral";可以生效,还有保存下来的那个32字节的16进制数值有什么含义吗?
? ? ? ? ? ? ? ? 一份合约可以传递一个数组(固定长度)或者一个字符串或者一个bytes(不定长度)给另一份合约吗?
? ? ? ? ? ? ? ? 有些时候,当我想用类似这样的表达式:arrayname.length = 7;来修改数组长度,却会得到一个编译错误Value must be an lvalue,这是为什么
? ? ? ? ? ? ? ? Solidity的函数可以返回一个字符串数组吗(string[])?
? ? ? ? ? ? ? ? 如果你发起了一次获取数组的调用,有可能获得整个数组吗?还是说另外需要写一个辅助函数来实现?
? ? ? ? ? ? ? ? 如果某个账户只存储了值但没有任何代码,将会发生什么?例子:http://test.ether.camp/account/5f740b3a43fbb99724ce93a879805f4dc89178b5
? ? ? ? ? ? ? ? 在定制token的合约中,下面这些奇怪的校验是做什么的?
? ? ? ? ? ? ? ? 更多问题?

? ? ? ? 以上就是该篇文档的全部目录。然后就是根据目录按照个人兴趣以及学习目的进行主次的归类,以及学习顺序的确定。本人是实用主义,喜欢由浅入深的学习。所以定制的顺序如下:

智能合约概述=>安装Solidity编译器=>根据例子学习Solidity=>深入理解Solidity=>使用编译器=>合约的元数据=>风格指南=>通用模式=>已知bug列表=>应用二进制接口说明=>贡献方式=>常见问题=>Yul

  区块链 最新文章
盘点具备盈利潜力的几大加密板块,以及潜在
阅读笔记|让区块空间成为商品,打造Web3云
区块链1.0-比特币的数据结构
Team Finance被黑分析|黑客自建Token“瞒天
区块链≠绿色?波卡或成 Web3“生态环保”标
期货从入门到高深之手动交易系列D1课
以太坊基础---区块验证
进入以太坊合并的五个数字
经典同态加密算法Paillier解读 - 原理、实现
IPFS/Filecoin学习知识科普(四)
上一篇文章      下一篇文章      查看所有文章
加:2021-07-24 11:32:37  更:2021-07-24 11:32:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 18:53:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码