tx.origin 与 msg.sender
我最近一直在玩ethernaut web3/solidity 游戏,在第 4 级上,我浪费了几分钟来了解 tx.origin 和 msg.sender 之间的区别,它们在solidity 中构建全局变量。
根据solidity文档,tx.origin 保存交易发送者的地址,msg.sender 保存消息发送者的地址。那么这到底是什么意思呢?
msg.sender:指直接调用智能合约函数的账户地址或智能合约地址。
tx.origin:指调用智能合约函数的账户地址,只有账户地址可以是tx.origin。
一张图片胜过千言万语
您可能会注意到,账户地址和智能合约地址都可以是 msg.sender 但 tx.origin 将始终是账户/钱包地址。
强烈建议始终使用 msg.sender 进行授权或检查调用智能合约的地址。并且永远不要使用 tx.origin 进行授权,因为这可能会使合约容易受到网络钓鱼攻击。
THORChain最近损失了 800 万美元,是的,由于tx.origin 的滥用,在一次攻击中损失了 800 万美元,请务必仔细检查 tx.origin 是如何在智能合约中使用的,再见
msg.sender:合约的直接调用者. 由于是直接调用者,所以当处于 用户A->合约1->合约2 调用链下, 若在合约2内使用msg.sender,得到的会是合约1的地址. 如果想获取用 ... 简介 tx.origin是Solidity的一个全局变量,它遍历整个调用栈并返回最初发送调用(或事务)的帐户的地址.在智能合约中使用此变量进行身份验证会使合约容易受到类似网络钓鱼的攻击. 但针对tx. ... 发送给调用者自己,表示将该合约中的自己应有的以太坊退款到发送者自己的账户 address.transfer(amount) 转账一定数量(以wei为单位)的以太币到指定的地址,遇到任何错误都将抛出异常 ... 区块链知识系列 - 系统学习EVM(一) 特点 EVM出于所谓运算速度和效率方面考虑,采用了非主流的256bit整数. 不支持浮点数 缺乏标准库支持,例如字符串拼接.切割.查找等等都需要开发者自己实现 ... [区块链安全-Ethernaut]区块链智能合约安全实战-已完结 准备 0. Hello Ethernaut 准备工作 创建实例并分析 合约交互 总结 1. Fallback 创建实例并分析 合约交互 ... 一.前言 上回文章中我们提到了简单函数的漏洞利用情况.我们对Fallback()这个回调函数进行了安全漏洞的分析,也针对竞赛题目复现了一些漏洞利用过程. 在本篇文章中,我们继续对简单函数进行安全机制分 ... 摘要: 无论是 Fomo3D 山寨版还是正宗原版都摆脱不了"一轮就凉凉"的宿命,这与其智能合约的设计漏洞不无关系.本文从合约安全开发的角度出发,详细分析了类 Fomo3D 游戏的两 ... 一.区块链 1. 分布式去中心化 比特币设计的初衷就是要避免依赖中心化的机构,没有发行机构,也不可能操纵发行数量.既然没有中心化的信用机构,在电子货币运行的过程中,也势必需要一种机制来认可运行在区块链 ... msg.sender到底是什么? msg.sender: 当前钱包的发起方. msg是全局的,msg.sender是全局变量. from就是account,发起消息的钱包地址,永远等于msg.send ...tx.origin 与 msg.sender相关推荐
最新文章
热门文章