Address(地址)
以太坊区块链由 account (账户)组成,你可以把它想象成银行账户。一个帐户的余额是 以太币 eth
每个帐户都有一个“地址”,你可以把它想象成银行账号。这是账户唯一的标识符。地址属于特定用户(或智能合约)的。
映射(Mapping)
msg.sender
在 Solidity 中,有一些全局变量可以被所有函数调用。 其中一个就是 msg.sender。它指的是当前调用者(或智能合约)的 address。
注
意
:
在
S
o
l
i
d
i
t
y
中
,
功
能
执
行
始
终
需
要
从
外
部
调
用
者
开
始
。
一
个
合
约
只
会
在
区
块
链
上
什
么
也
不
做
,
除
非
有
人
调
用
其
中
的
函
数
。
所
以
m
s
g
.
s
e
n
d
e
r
总
是
存
在
的
注意:在 Solidity 中,功能执行始终需要从外部调用者开始。 一个合约只会在区块链上什么也不做,除非有人调用其中的函数。所以 msg.sender总是存在的
注意:在Solidity中,功能执行始终需要从外部调用者开始。一个合约只会在区块链上什么也不做,除非有人调用其中的函数。所以msg.sender总是存在的
mapping (address => uint) favoriteNumber;
function setMyNumber(uint _myNumber) public {
// 更新我们的 `favoriteNumber` 映射来将 `_myNumber`存储在 `msg.sender`名下
favoriteNumber[msg.sender] = _myNumber;
// 存储数据至映射的方法和将数据存储在数组相似
}
function whatIsMyNumber() public view returns (uint) {
// 拿到存储在调用者地址名下的值
// 若调用者还没调用 setMyNumber, 则值为 `0`
return favoriteNumber[msg.sender];
}
Require
require使得函数在执行过程中,当不满足某些条件时抛出错误,并停止执行。
function sayHiToVitalik(string _name) public returns (string) {
// 比较 _name 是否等于 "Vitalik". 如果不成立,抛出异常并终止程序
// (敲黑板: Solidity 并不支持原生的字符串比较, 我们只能通过比较
// 两字符串的 keccak256 哈希值来进行判断)
require(keccak256(_name) == keccak256("Vitalik"));
// 如果返回 true, 运行如下语句
return "Hi!";
}
继承(Inheritance)
当代码过于冗长的时候,最好将代码和逻辑分拆到多个不同的合约中,以便于管理。合约继承用is
关键字。
contract Doge {
function catchphrase() public returns (string) {
return "So Wow CryptoDoge";
}
}
contract BabyDoge is Doge {
function anotherCatchphrase() public returns (string) {
return "Such Moon BabyDoge";
}
}