当前位置: 首页 > news >正文

作品集怎么做网站百度网盘下载官网

作品集怎么做网站,百度网盘下载官网,wordpress主题去除授权,学校网页设计说明在区块链的智能合约开发领域,Solidity 作为以太坊上最主流的编程语言之一,拥有诸多强大特性助力开发者构建复杂且高效的去中心化应用。其中,映射(Mapping)是一个极为关键的数据结构,它为合约中的数据存储与…

       在区块链的智能合约开发领域,Solidity 作为以太坊上最主流的编程语言之一,拥有诸多强大特性助力开发者构建复杂且高效的去中心化应用。其中,映射(Mapping)是一个极为关键的数据结构,它为合约中的数据存储与检索提供了便捷、高效的方式。

        本篇代码为自己结合资料总结,如有错误还请各位随时指出并进行修改~感恩包容理解!

        另所有本篇以及以前出现的代码均可以在本人GitHub GitHub - solidity学习代码 上找到

一、映射的基础概念

       在 Solidity 中,映射如同一个神奇的 “账本”,能够以键值对的形式存储数据。以代码中的 mapping(address => uint ) public balances; 为例,它创建了一个从以太坊地址(address 类型)到无符号整数(uint 类型)的映射关系,通俗来讲,就是可以针对不同的以太坊地址记录对应的余额数值。这就像是现实世界银行给每个客户设立账户并记录存款余额,只不过这里的 “账户” 是以太坊地址,“余额” 是合约中所关心的各种数值信息。

       映射是一种键值对的数据结构,类似于传统编程语言中的哈希表或字典。在Solidity中,映射用于将一个值(键)映射到另一个值(值)。其基本语法如下:

mapping(_KeyType => _ValueType) _mappingName;
  • _KeyType:键的类型,可以是任何基本类型,如addressuintbytes32等,但不能是复杂类型如结构体或数组.
  • _ValueType:值的类型,可以是任何类型,包括基本类型、复杂类型、甚至是另一个映射.
  • _mappingName:映射的名称,用于在合约中引用该映射.

         例如,在上面的代码中,mapping(address => uint) public balances;定义了一个名为balances的映射,它将address类型的键映射到uint类型的值.这意味着我们可以用一个地址作为键,来存储和检索与该地址相关的余额信息.

映射的操作

设置值

要为映射设置值,可以直接使用赋值操作符=.例如:

balances[msg.sender] = 123;

这行代码将调用者(msg.sender)的地址作为键,将值123存储到balances映射中.这意味着调用者的余额被设置为123.

获取值

获取映射中的值也非常简单,只需通过键来访问:

uint bal = balances[msg.sender];

这里,我们通过调用者的地址作为键,从balances映射中获取其余额,并将其存储在变量bal中.

删除值

如果需要删除映射中的某个键值对,可以使用delete关键字:

delete balances[msg.sender];

这将删除调用者地址对应的键值对,并将值恢复为其类型的默认值.对于uint类型,其默认值是0,所以删除后,调用者的余额会变成0.

嵌套映射

Solidity中的映射可以嵌套,即值类型可以是另一个映射.这为存储更复杂的数据关系提供了可能.例如:

mapping(address => mapping(address => bool)) public isFriend;

这里定义了一个名为isFriend的嵌套映射,它将两个address类型的键映射到一个bool类型的值.这可以用来表示两个地址之间的朋友关系.例如:

isFriend[msg.sender][address(this)] = true;

二、写在介绍后

总结下本篇出现的全部代码

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;contract Mapping {mapping(address => uint ) public balances;mapping(address => mapping (address => bool )) public isFriend;function examples() external {balances[msg.sender] = 123;uint bal = balances[msg.sender];uint bal2 = balances[address(1)];balances[msg.sender] = 456;balances[msg.sender] += 456; //默认值 + 546delete balances[msg.sender];//删除会恢复到默认值,而不是说真的删除isFriend[msg.sender][address(this)] = true;}
}

如果你在Remix上运行 那么就会发现有橙色提醒

这段代码是一个 Solidity 合约,展示了以太坊智能合约中的映射数据结构。
以下是每个部分的作用:
`mapping(address => uint) public balances;` 这行代码创建了一个映射(一种键值对数据库),其中地址作为键,对应的值为无符号整数,用于表示账户余额。
同样的概念也适用于 isFriend,它将地址对与表示友谊状态的布尔值进行映射。
该合同有一个名为 examples() 的外部函数,其功能为:
将调用者(msg.sender)的余额设置为 123,使用 balances[msg.sender] = 123; 语句。
通过映射访问该值并将其存储在名为 bal 的新变量中:uint bal = balances[msg.sender];。
然而,当尝试通过 uint bal2 = balances[address(1)]; 获取另一个地址(address(1))的余额时,Solidity 提示声明了一个未使用的局部变量。

错误发生

是因为您声明了一个新变量(bal2),但在代码中任何地方都没有使用它。您可以这样解决:要么删除声明并赋值给 bal2 的那行代码,要么在合约的其他地方实际使用它的值,例如:
无符号整数型变量 bal 被赋值为 balances 中 msg.sender 所对应的值。//...
如果 balances[address(1)] 的值为 0 ,则执行以下操作(即如果地址 1 的余额为零,则执行以下操作)}
这样一来,变量 bal2 就不会再被视为未使用了。

三、映射的注意事项

  • 映射中的键值对数量是无限的,但实际存储的键值对数量取决于合约的使用情况.
  • 映射中的键是唯一的,但值可以重复.
  • 由于区块链的不可变性,映射中的数据一旦写入,就无法被修改或删除,只能通过覆盖或使用delete关键字将其恢复为默认值.
  • 映射的使用会消耗Gas,因此在设计合约时,应尽量优化映射的使用,避免不必要的操作。

四、实际应用

映射在智能合约中有着广泛的应用,例如:

  • 代币合约:用于存储每个地址持有的代币数量.
  • 去中心化金融(DeFi)合约:用于记录用户的存款、借款等信息.
  • 投票合约:用于记录每个地址的投票结果.
  • 游戏合约:用于存储玩家的游戏数据,如分数、等级等.

通过合理地使用映射,我们可以构建出高效、可靠的智能合约。

本篇代码为自己结合资料总结,如有错误还请各位随时指出并进行修改~感恩包容理解!

http://www.hkea.cn/news/741050/

相关文章:

  • 可信赖的南昌网站制作站长工具网站
  • 济南建站公司电话成都关键词自然排名
  • 门户网站开发公司推广网页
  • 如何做网站认证实时军事热点
  • 上海的网站建设公司哪家好企业网站建设
  • 专业b2c电商网站制作网站推广要点
  • 现在的网站用什么程序做百度云官网登录入口
  • vs做网站怎样加数据库新闻小学生摘抄
  • 广州做网站mxszpt小说排行榜
  • 有什么网站是python做的网站营销策划公司
  • 长春有什么好的网站制作公司链接购买
  • 毕设网站佛山网站建设十年乐云seo
  • 北京做网站建设的公司哪家好手机怎么创建网站
  • winforms做网站注册百度账号
  • 玉泉路网站建设营销培训课程有哪些
  • 渭南做网站费用搜索引擎排名优化是什么意思
  • 做网站开发需要学什么软件微信公众平台开发
  • 网站整体营销方案网络营销的特点是什么?
  • 国内知名的网站建设公司有哪些百度指数专业版app
  • 画画外包网站如何推广一个网站
  • 互联网公司响应式网站深圳google推广
  • 深圳网站设计哪好什么推广平台比较好
  • 打开英文网站字体不对教程seo推广排名网站
  • 昭通市建设局网站太原百度关键词优化
  • 个人建网站允许吗seo职位要求
  • 环保网站设计网络营销优化推广
  • 网页设计网站制作公司冯耀宗seo视频教程
  • 怎么用路由器做网站百度指数平台官网
  • 济南做网站互联网公司有哪些seo是什么公司
  • 辛集seo网站优化价格许昌网站seo