
6. 引用类型, array, struct-Solidity入门笔记
数组 固定数组uint[3] nums;//声明时指定长度 可变数组uint[] nums;//声明时不用指定长度 //使用时,使用new并指定长度 nums = new uint[3] 数组成员 length(),push(x), pop() 数组字面常数 [1,3,4]以第一个元素的类型准,默认uint8。使用强制转换指定第一个元素的类型。 例如[(uint)1, 2, 3] 结构体//创建结构体 struct Student{ string name; uint score; } //声明变量 Student student 赋值//使用storage在函数中赋值 function setStudent() { Student storage x = student; x.name = "mark"; x.score = 90; } //直接使用点号引用赋值 student.name = "alice"; student.score = 89;

6. 引用类型, array, struct-Solidity入门笔记
数组 固定数组uint[3] nums;//声明时指定长度 可变数组uint[] nums;//声明时不用指定长度 //使用时,使用new并指定长度 nums = new uint[3] 数组成员 length(),push(x), pop() 数组字面常数 [1,3,4]以第一个元素的类型准,默认uint8。使用强制转换指定第一个元素的类型。 例如[(uint)1, 2, 3] 结构体//创建结构体 struct Student{ string name; uint score; } //声明变量 Student student 赋值//使用storage在函数中赋值 function setStudent() { Student storage x = student; x.name = "mark"; x.score = 90; } //直接使用点号引用赋值 student.name = "alice"; student.score = 89;

比特币和数字货币技术 第三周总结
比特币机制3.1 比特币交易比特币的交易的数据结构不是基于账号,而是基于账本。基于账号的交易记录基于账号的交易记录的缺点是如果要验证某一笔交易是否合法,那么需要回溯之前与这个账号相关的交易。虽然通过一些数据结构可以高效解决,但是增加了账本的大小。基于账本的交易记录基于账本的交易记录,每一笔交易有多个输入和输出。每个输入有之前的交易的的哈希,该交易其中某个输出的下标,还有之前交易的签名。输出则是输出的地址和交易金额。 地址变更,每一笔交易会将输入的金额全部转到指定的输出地址。例如艾丽丝有10个比特币,转8个给鲍勃,剩下的一般再转给自己。 高效验证:这样做的好处是每一交易的验证只需要核实之前一个交易,并且不需要额外的数据结构。 合并资金:如果想合并不同地址的资金,只要使用一个交易也就可以了。 合并输出:如果两个不同人想支付同一个人,只要使用一个交易就可以,然后附上两个不同签名。实际比特币交易数据3.2 比特币脚本比特币脚本语言支付给哈希过的地址的脚本公钥脚本和签名脚本的拼接,检查是否合法兑现先前交易的输出脚本语言的好处:基于栈,没有变量,线性执行。体积小,执行快。坏处是没有循环,图灵...

比特币和数字货币技术 第三周总结
比特币机制3.1 比特币交易比特币的交易的数据结构不是基于账号,而是基于账本。基于账号的交易记录基于账号的交易记录的缺点是如果要验证某一笔交易是否合法,那么需要回溯之前与这个账号相关的交易。虽然通过一些数据结构可以高效解决,但是增加了账本的大小。基于账本的交易记录基于账本的交易记录,每一笔交易有多个输入和输出。每个输入有之前的交易的的哈希,该交易其中某个输出的下标,还有之前交易的签名。输出则是输出的地址和交易金额。 地址变更,每一笔交易会将输入的金额全部转到指定的输出地址。例如艾丽丝有10个比特币,转8个给鲍勃,剩下的一般再转给自己。 高效验证:这样做的好处是每一交易的验证只需要核实之前一个交易,并且不需要额外的数据结构。 合并资金:如果想合并不同地址的资金,只要使用一个交易也就可以了。 合并输出:如果两个不同人想支付同一个人,只要使用一个交易就可以,然后附上两个不同签名。实际比特币交易数据3.2 比特币脚本比特币脚本语言支付给哈希过的地址的脚本公钥脚本和签名脚本的拼接,检查是否合法兑现先前交易的输出脚本语言的好处:基于栈,没有变量,线性执行。体积小,执行快。坏处是没有循环,图灵...

比特币和数字货币技术 第二周总结
比特币是如何实现去中心化? 1. 中心化和去中心化的比较 以货币为例,我们可以从五个方面来看 中心化 去中心化 谁记录交易 少数参与者 所有参与者 谁决定交易合法 少数参与者 所有参与者 谁发行新货币 少数参与者 创建合法区块的少数参与者 谁决定规格变更 少数参与者 所有参与者 谁决定货币价值 少数参与者 所有参与者的相互交易 例子:邮件的底层协议的是SMTP,所有任何电脑都可以作为邮件的服务器。但实际上少数几个邮件服务提供商提供大部分的邮件服务器供人使用。所以邮件处于完全去中心和完全中心化之间。 2.2 分布式共识 分布式共识出现的背景。一个服务一般需要多个服务器共同提供服务。由于网络延迟,中断等原因,它们之间的数据可能产生不一致,需要进行同步,例如用户的状态。因此它们需要对数据达成共识。 分布式协议的定义 有n个节点,其中一些节点可能是有问题的或恶意的。当它们接收相同的输入,分布式协议应该有的性质是 1.协议可以给出所有诚信节点都同意的值 2.所有的值都应该由诚信节点给出。Alice向点对点的网络发送交易信息。用户向网络广播自己的交易,每隔一段时间,节点收集交易信息成块,称为...

比特币和数字货币技术 第二周总结
比特币是如何实现去中心化? 1. 中心化和去中心化的比较 以货币为例,我们可以从五个方面来看 中心化 去中心化 谁记录交易 少数参与者 所有参与者 谁决定交易合法 少数参与者 所有参与者 谁发行新货币 少数参与者 创建合法区块的少数参与者 谁决定规格变更 少数参与者 所有参与者 谁决定货币价值 少数参与者 所有参与者的相互交易 例子:邮件的底层协议的是SMTP,所有任何电脑都可以作为邮件的服务器。但实际上少数几个邮件服务提供商提供大部分的邮件服务器供人使用。所以邮件处于完全去中心和完全中心化之间。 2.2 分布式共识 分布式共识出现的背景。一个服务一般需要多个服务器共同提供服务。由于网络延迟,中断等原因,它们之间的数据可能产生不一致,需要进行同步,例如用户的状态。因此它们需要对数据达成共识。 分布式协议的定义 有n个节点,其中一些节点可能是有问题的或恶意的。当它们接收相同的输入,分布式协议应该有的性质是 1.协议可以给出所有诚信节点都同意的值 2.所有的值都应该由诚信节点给出。Alice向点对点的网络发送交易信息。用户向网络广播自己的交易,每隔一段时间,节点收集交易信息成块,称为...

3. 函数类型-Solidity入门笔记
函数形式function name(<parameter types>) {public|private|internal|external} [pure|view|payable] [returns (<return types>)] 1.function,声明关键字 2.name,函数名 3.圆括号内写函数参数,可选。 4.花括号内是函数的可见性说明符 4.1public,内外部可见 4.2private 仅内部可访问,继承不可用 4.3internal 仅内部可访问,继承可用 4.4external 仅外部可访问 5.函数权限符 5.1pure 不可读不可写 5.2view 可读不可写 5.3payable 可支付 使用payable可以构造给合约支付ETH的 pure和view不消耗gas 6 返回值 返回的参数列表

3. 函数类型-Solidity入门笔记
函数形式function name(<parameter types>) {public|private|internal|external} [pure|view|payable] [returns (<return types>)] 1.function,声明关键字 2.name,函数名 3.圆括号内写函数参数,可选。 4.花括号内是函数的可见性说明符 4.1public,内外部可见 4.2private 仅内部可访问,继承不可用 4.3internal 仅内部可访问,继承可用 4.4external 仅外部可访问 5.函数权限符 5.1pure 不可读不可写 5.2view 可读不可写 5.3payable 可支付 使用payable可以构造给合约支付ETH的 pure和view不消耗gas 6 返回值 返回的参数列表

2.数值类型-Solidity入门笔记
Solidity变量类型 1.数值 2.引用 3.映射 4.函数 1.数值 1.1布尔值bool true或false 布尔运算符 && || == != 短路规则,计算a && b,如果a为假,不计算b。计算a || b,如果a为真,不计算b。 1.2整型 int 整数,uint 非负数, uint256 非负数,256位 整型运算符 比较运算符 >, < , ==, >= , <=, != 一元运算符+, -, , /, %(求余), **(幂) 1.3地址 address 普通地址,储存20字节的值 可支付地址(payable), 拥有balance()和transfer()成员变量 1.4定长字节数组bytes bytes, bytes8, bytes32 1.5 枚举enum 为uint分配名字enum action {hold, buy,sold} // 0, 1, 2

2.数值类型-Solidity入门笔记
Solidity变量类型 1.数值 2.引用 3.映射 4.函数 1.数值 1.1布尔值bool true或false 布尔运算符 && || == != 短路规则,计算a && b,如果a为假,不计算b。计算a || b,如果a为真,不计算b。 1.2整型 int 整数,uint 非负数, uint256 非负数,256位 整型运算符 比较运算符 >, < , ==, >= , <=, != 一元运算符+, -, , /, %(求余), **(幂) 1.3地址 address 普通地址,储存20字节的值 可支付地址(payable), 拥有balance()和transfer()成员变量 1.4定长字节数组bytes bytes, bytes8, bytes32 1.5 枚举enum 为uint分配名字enum action {hold, buy,sold} // 0, 1, 2