Solidity知识点集———Address, Mapping, msg.sender, require, Inheritance

本文介绍了以太坊智能合约中的关键概念,包括账户地址、映射类型以及msg.sender的使用。通过示例展示了如何在Solidity中设置和获取用户自定义的最爱数字,以及使用require进行条件检查。此外,还探讨了合约继承的概念,以实现代码组织和重用。
摘要由CSDN通过智能技术生成

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总是存在的 Soliditymsg.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";
  }
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值