(四)类型
区块链基础(一)初步理解智能合约(二)代码结构和合约特性(三)控制结构(四)类型(五)字面量和内置单位、函数(六)应用二进制接口(七)特殊函数(八)合约的高级特性(完) Solidity 的值传递和引用传递有自己的规则,通过不同的存储域决定,后面详述。 默认值:Solidity 中不存在undefined或null,每种变量都有自己的默认值,一般是“零状态”。 运算符优先级 布尔类型 bool:常量值为true和false 整型 int / uint :分别表示有符号和无符号的不同位数的整型变量。 支持关键字 uint8 到 uint256 (无符号,从 8 位到 256 位)以及 int8 到 int256,以 8 位为步长递增。 uint 和 int 分别是 uint256 和 int256 的别名。 可以用type(x).min type(x).max来获取这个类型地最小值和最大值。 位运算 在二进制地补码上操作,特别的 ~int256(0)==...
(三)控制结构
区块链基础(一)初步理解智能合约(二)代码结构和合约特性(三)控制结构(四)类型(五)字面量和内置单位、函数(六)应用二进制接口(七)特殊函数(八)合约的高级特性(完) 表达式和控制结构 Solidity 支持 if, else, while, do, for, break, continue, return这些和 C 语言一样的关键字。 Solidity 还支持 try/catch 语句形式的异常处理, 但仅用于 外部函数调用 和 合约创建调用. 由于不支持非布尔类型值转换成布尔类型,因此if(1){}是不合法的。 函数调用 内部调用 内部调用再 EVM 中只是简单的跳转(不会产生实际的消息调用),传递当前的内存的引用,效率很高。但是仍然要避免过多的递归,因为每次进入内部函数都会占用一个堆栈槽,而最多只有 1024 个堆栈槽。 外部调用 只有external或者public的函数才可以通过消息调用而不是单纯的跳转调用,外部函数的参数会暂时复制在内存中。 this不可以出现在构造函数里,因为此时合约还没有完成。 调用时可以指定 value 和...
(二)代码结构和合约特性
区块链基础(一)初步理解智能合约(二)代码结构和合约特性(三)控制结构(四)类型(五)字面量和内置单位、函数(六)应用二进制接口(七)特殊函数(八)合约的高级特性(完) 代码结构 直观理解代码结构,下面是铸造,生成代币的代码。 123456789101112131415161718192021222324252627pragma solidity ^0.4;contract Coin{ //set the "address" type variable minter address public minter; mapping (address =>uint) public balances; // set an event so as to be seen publicly event Sent(address from,address to,uint amount); //constructor only run once when creating contract,unable to...
(一)初步理解智能合约
区块链基础(一)初步理解智能合约(二)代码结构和合约特性(三)控制结构(四)类型(五)字面量和内置单位、函数(六)应用二进制接口(七)特殊函数(八)合约的高级特性(完) 前言 这是我学习区块链入门时做的笔记(基于 0.8.7 版本),基本涵盖了编写合约所需常用知识,由于做智能合约安全方面的研究需要精通 Solidity 和 以太坊原理,因此做的笔记比较详实。 这些笔记基于阅读英文文档,参考中文文档和 stack overflow 以及相关教程,我根据学习者的接受新知识的顺序,对文章结构做了适当优化。 这篇文章既可以作为新手入门(因为啃英文文档并且搜索信息并不是容易的事情),也可以作为快捷的检索帮助文档(官方文档的翻译某些部分比较难以理解)。建议使用电脑端阅读。 初稿完成时,都还没学 C 语言,只是一知半解的边学边记。在大二上学期的寒假,我重新整理了一遍,修正了部分错误,将拗口的表述转化成习惯表述,补充了文档中缺少的范例,根据经验突出需要强调的注意事项,使得读者可以跟容易的学习。 本文共计接近 7...
区块链基础
区块链基础(一)初步理解智能合约(二)代码结构和合约特性(三)控制结构(四)类型(五)字面量和内置单位、函数(六)应用二进制接口(七)特殊函数(八)合约的高级特性(完) 区块链 1.0(基于比特币的说明) 内容基本来自这个网站: https://learnmeabitcoin.com/ ,本人大一初学时一边啃一遍记录笔记,于是形成了这一篇文章。 指的是一个不可篡改的,分布式,去中心化账本,没有谁是中央登记员,因为大家都是中央登记员,大家的账本写的东西都一模一样,记着大家所有人的资产信息。(这大概是我们对它的基本认知) 区块链记账,会把上一次交易的账页信息(交易序号,记账(交易)时间,交易记录)作为原始信息,hash 之后的值与本次的账页信息结合在一起,就成了一个区块;(这个数据结构类似于链表——简单地说,既能够存储来自上一个节点的数据,也能够连接下一个节点) 继续推导,下一个区块也会包含本次交易的账页信息 hash 值,和下一次交易的账页信息,这样一来,每一个区块都包含着上一次的账页信息,根据 hash...
Linux 基础
Linux 的基本特点 Linux 严格区分大小写 Linux 中所有内容以文件形式保存,包括硬件设备 Linux 不靠扩展名区分文件类型(虽然有部分文件有后缀,但是并不是给电脑看的) Linux 中所有的存储设备都必须在挂载之后才能使用 目录命令 ls(list) -a 显示隐藏文件 -d 显示目录信息 -h 人性化显示文件大小 -i 显示 inode 号(相当于地址) root 模式下才有不同颜色高亮,以后看能不能调。 查看目录的隐藏文件: 12la# 等同于ls -a 查看目录详细信息(常用来看看权限): 1ls -dl 查看文件详细信息(常用来看看权限): 12ll# 等同于 ls -l cd(change directory) ~ home -上次所在目录 . 代指当前目录 … 代指上级目录 mkdir(make directories) -p 一级一级创建新目录 1mkdir -p 目录路径 rmdir(remove empty directories) 一般不用这个。 只能删除空目录 -p 一级一级删除目录 tree(list contents...
C语言基础
C语言基础乘法逆元信息安全算法基础操作系统基础x86汇编基础信息论与编码 变量存储 全局变量与局部变量 全局变量的特点: 程序块之外的算全局变量(常常放在 main 函数之前),但是有先后识别顺序。 全局变量适合给函数直接传参,但是程序运行的时候都占内存,而且每一部分具有依赖性,迁移性差。 大量的全局变量使得牵扯太多,可读性差。 extern 标识符: 标识着这个变量或者函数要在其他的文件中寻找,即在别处定义,此处需要引用,在 gcc 编译中跨文件变量的使用很有用。 extern 外部变量声明(要区分定义和声明),忽视读取先后顺序。 12extern int a,b;//这里不分配内存,是标志着后面会定义,定义的时候分内存。 extern 在局部中声明,只对这一部分的代码块有效。 如果和代码块的局部变量重名,那么这个代码块不影响这个全局变量,按照里面的局部变量处理。 全局变量跨文件引用,默认是不支持的,但是可以在本文件里声明了 extern...