Solidity入门学习(二)

映射(Mapping)和地址(Address

以太坊区块链是由_account_(账户)组成的,每个账户都有自己唯一的地址,也是账户唯一的标识符。

0x6689b8FDe10b6585E79EAd893c151Fe001D26eb8

这是笔者自己的以太坊钱包地址,如果我的文章对你有所帮助,不妨打赏我一些以太:)

除了结构体和数组之外,映射是另一种在Solidity中存储有组织数据的方法。

文本

描述已自动生成

映射的定义

 

msg.sender

Solidity中,有一些全局变量可以被所有函数调用,其中一个就是msg.sender,它指的是当前调用者(或智能合约)的address

Tips:在 Solidity 中,功能执行始终需要从外部调用者开始。
一个合约只会在区块链上什么也不做,除非有人调用其中的函数。所以 msg.sender总是存在的。

文本

描述已自动生成

使用msg.sender更新mapping

Solidity中使用msg.sender是安全的,它具有以太坊区块链的安全保障,除非窃取与以太坊地址相关联的私钥,否则没有办法修改其他人的数据。

 

require

require能够使函数在执行过程中当不满足某些条件时抛出错误并停止执行,所以在调用函数前用require验证前置条件是非常有必要的

 

继承(Inheritance

当代码过于冗长时,可以通过将代码和逻辑分拆到多个不同的合约中便于管理。合约inheritance(继承)就能够让Solidity的代码易于管理。

手机屏幕的截图

描述已自动生成

合约inheritance(继承)示例

如图所示,BabyDogeDoge继承,也就意味着BabyDoge被编译和部署后可以访问在Doge中定义的公共函数。

 

引入(Import

当代码被分成多个文件管理时,我们可以通过import将一个文件导入另一个文件。

文本

描述已自动生成

 

StorageMemory

Solidity中,有两个地方可以存储变量——storagememoryStorage变量指永久存储在区块链中的变量,memory则是临时的,可以联想存储在电脑的硬盘或RAM中数据的关系。默认情况下Solidity会自动处理它们。

状态变量(在函数之外声明的变量)默认存储为“storage”,并永久写入区块链;而在函数内部声明的变量则是“memory”,会在它们的函数调用结束后消失。

Tips:在处理函数内的结构体和数组时也许会需要手动声明存储类型。

 

internalexternal

除了publicprivate属性之外,Solidity还使用了另外两个描述函数可见性的修饰词:internalexternal

internalprivate类似,不过如果某个合约继承自其父合约,这个合约即可以访问父合约中定义的“internal”函数。

externalpublic类似,只不过这些函数只能在合约之外调用,它们不能被合约内的其他函数调用。

文本

描述已自动生成

声明internalexternal类型的函数

 

通过interface(接口)与其他合约交互

接口与函数类似,但是接口并没有用大括号({})定义函数体,而是用分号(;)结束了函数声明,编译器通过这些特征辨别接口。通过使用接口,合约就能知道其他合约的函数是什么样的,应该怎样调用,以及可以获得什么类型的返回值。

 

 

 

 

Leave a Reply

Your email address will not be published.