打字猴:1.703876441e+09
1703876441
1703876442
1703876443
1703876444 上述代码的工作原理如下:
1703876445
1703876446 1)使用contract关键字声明一个合约。
1703876447
1703876448 2)声明两个状态变量data和owner。data包含一些数据,owner包含所有者的以太坊钱包地址,即部署合约者的以太坊地址。
1703876449
1703876450 3)定义一个事件(event)。事件用于通知客户端。一旦data发生变化,将触发这个事件。所有事件都保存在区块链中。
1703876451
1703876452 4)定义一个函数修改器(function modifier)。修改器用于在执行一个函数之前自动检测条件。这里,修改器检测合约所有者是否在调用函数。如果不是,就抛出异常。
1703876453
1703876454 5)得到合约构造函数(constructor)。在部署合约时,调用构造函数。构造函数用于初始化状态变量。
1703876455
1703876456 6)定义两个方法。第一个方法用于得到data状态变量的值,第二个方法用于改变data的值。
1703876457
1703876458 在更深入地学习智能合约的函数之前,我们先来学习一些与Solidity有关的其他知识,然后再回到合约。
1703876459
1703876460
1703876461
1703876462
1703876463 区块链项目开发指南 [:1703875295]
1703876464 区块链项目开发指南 3.3 数据位置
1703876465
1703876466 截至目前,我们学过的所有编程语言可能都把变量存储在内存中。但是在Solidity中,根据情况的不同,变量可能不存储在内存和文件系统中。
1703876467
1703876468 根据情况的不同,数据总有一个默认位置。但是对于复杂数据类型,例如字符串(string)、数组(array)和结构类型(struct),可以用向类型添加storage或者memory进行重写。函数参数(包括返回参数)默认用memory,本地变量默认用storage。显然,对于状态变量来说,位置强制用storage。
1703876469
1703876470 数据位置很重要,因为它们会改变分配的行为:
1703876471
1703876472 ·storage变量和memory变量之间的分配总是创建一个独立的备份。但如果分配是从memory存储的一种复杂类型到另一种复杂类型,则不创建备份。
1703876473
1703876474 ·到一个状态变量的分配(即使是来自其他状态变量)总是创建一个独立的备份。
1703876475
1703876476 ·不能把memory中存储的复杂类型分配给本地存储变量。
1703876477
1703876478 ·在分配状态变量给本地存储变量的情况下,本地存储变量指向状态变量,也就是说,本地存储变量变为指针。
1703876479
1703876480
1703876481
1703876482
1703876483 区块链项目开发指南 [:1703875296]
1703876484 区块链项目开发指南 3.4 什么是不同的数据类型
1703876485
1703876486 Solidity是一种静态类型语言,变量存储的数据类型需要预先定义。所有变量默认值都是0。在Solidity中,变量是有函数作用范围的,也就是说,在函数中任何地方声明的变量将对整个函数存在适用范围,无论它是在哪里声明的。
1703876487
1703876488 现在让我们看看Solidity提供的不同数据类型:
1703876489
1703876490 ·最简单的数据类型是布尔值,可以是true或者false。
[ 上一页 ]  [ :1.703876441e+09 ]  [ 下一页 ]