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

全局变量Msg.sender

msg.sender

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

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

以下是使用 msg.sender 来更新 mapping 的例子:

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];
}

在这个小小的例子中,任何人都可以调用 setMyNumber 在我们的合约中存下一个 uint 并且与他们的地址相绑定。 然后,他们调用 whatIsMyNumber 就会返回他们存储的 uint。

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

pragma solidity ^0.4.19;contract ZombieFactory {event NewZombie(uint zombieId, string name, uint dna);uint dnaDigits = 16;uint dnaModulus = 10 ** dnaDigits;struct Zombie {string name;uint dna;}Zombie[] public zombies;mapping (uint => address) public zombieToOwner;mapping (address => uint) ownerZombieCount;function _createZombie(string _name, uint _dna) private {uint id = zombies.push(Zombie(_name, _dna)) - 1;// 从这里开始zombieToOwner [id] = msg.sender;ownerZombieCount[msg.sender]++; NewZombie(id, _name, _dna);}function _generateRandomDna(string _str) private view returns (uint) {uint rand = uint(keccak256(_str));return rand % dnaModulus;}function createRandomZombie(string _name) public {uint randDna = _generateRandomDna(_name);_createZombie(_name, randDna);}}
http://www.xdnf.cn/news/1634.html

相关文章:

  • PC接入deepseek
  • Anything V4/V5 模型汇总
  • PostgreSQL性能优化实用技巧‌
  • C语言教程(十六): C 语言字符串详解
  • TCP基础题:音乐播放列表管理系统
  • React-组件和props
  • 2025五一杯数学建模竞赛思路助攻预定
  • 光影编程师:Threejs Shader 基础全攻略
  • 跟着deepseek学golang--认识golang
  • 《CBOW 词向量转化实战:让自然语言处理 “读懂” 文字背后的含义》
  • 常见的 Spring Boot 注解汇总
  • LVDS系列9:Xilinx 7系可编程输入延迟(二)
  • 32单片机——外部中断
  • 阿里云99机器总是宕机,实测还是磁盘性能差
  • 儿童语义认知功能磁共振成像研究的元分析
  • 迅为RK3568开发板内核模块实现-编写 Makefile
  • MongoDB Compass可视化工具
  • [MERN 项目实战] MERN Multi-Vendor 电商平台开发笔记(v2.0 从 bug 到结构优化的工程记录)
  • 仓库体系结构风格-笔记
  • PowerBI企业运营分析——全动态帕累托分析
  • 2025年3月AGI技术月评|技术突破重构数字世界底层逻辑
  • 【AI 加持下的 Python 编程实战 2_10】DIY 拓展:从扫雷小游戏开发再探问题分解与 AI 代码调试能力(中)
  • git tag使用场景和实践
  • Excel处理控件Spire.XLS系列教程:Java设置Excel活动工作表或活动单元格
  • “平价”微智码初尝试
  • pycharm2024.3.2项目解释器选择问题
  • Hadoop基础知识
  • verilog和system verilog常用数据类型以及常量汇总
  • Netty线上如何做性能调优?
  • 远程访问服务器的Jupyter Notebook