谈谈fisco bcos智能合约中tx.origin和msg.sender的作用及使用场景
这篇文章主要介绍了谈谈fisco bcos智能合约中tx.origin和msg.sender的作用及使用场景 ,文中通过代码以及文档配合进行讲解,很详细,它对在座的每个人的研究和工作具有很经典的参考价值。 如果需要,让我们与区块链资料网一起学习。
https://www.interchains.cc/17941.html
谈谈fisco bcos智能合约中tx.origin和msg.sender的作用及使用场景是很好的区块链资料,他说明了区块链当中的经典原理,可以给我们提供资料,谈谈fisco bcos智能合约中tx.origin和msg.sender的作用及使用场景学习起来其实是很简单的,
不多的几个较为抽象的概念也很容易理解,之所以很多人感觉谈谈fisco bcos智能合约中tx.origin和msg.sender的作用及使用场景比较复杂,一方面是因为大多数的文档没有做到由浅入深地讲解,概念上没有注意先后顺序,给读者的理解带来困难
谈谈fisco bcos智能合约中tx.origin和msg.sender的作用及使用场景
- FISCO BCOS
tx.origin (address):交易发送方(完整调用链上的原始发送方)由于是直接调用者,所以当处于 用户A->合约1->合约2 调用链下,若在合约2内使用msg.sender,得到的会是合约1的地址。如果想获取用户A,可以用tx.origin:交易的”始作俑者”,整个调用链的起点。
来来来看照:
有认识的吗?
官方解释:
msg.sender (address):消息发送方(当前调用)
tx.origin (address):交易发送方(完整调用链上的原始发送方)由于是直接调用者,所以当处于 用户A->合约1->合约2 调用链下,若在合约2内使用msg.sender,得到的会是合约1的地址。如果想获取用户A,可以用tx.origin:交易的”始作俑者”,整个调用链的起点。
[]()[]()实践:
在下面的2个合约中,T4中去调用T3中的函数,当处于 用户A->合约1->合约2 调用链下,若在合约2内使用msg.sender,得到的会是合约1的地址。如果想获取用户A,可以用tx.origin:交易的”始作俑者”,整个调用链的起点。
把官方的解释带入实际的案例如下:
用户A:小米
合约1:T4
合约2:T3
[]()[]()T3合约代码如下:
pragma solidity >=0.4.0
contract T3 {
// 为了演示去掉view,方便传入用户的address
function select() public returns(address){
return tx.origin;
}
// 为了演示去掉view方便传入用户的address
function select2() public returns(address){
return msg.sender;
}
}
[]()[]()T4合约代码如下:
pragma solidity >=0.4.0
import "./T3.sol";
contract T4 {
// 为了演示去掉view,方便传入用户的address
function select() public returns(address){
T3 t3=new T3();
return t3.select();
}
// 为了演示去掉view,方便传入用户的address
function select2() public returns(address){
T3 t3=new T3();
return t3.select2();
}
}
[]()[]()测试结果:
先调用T4的select函数(tx.origin),如下图所示:
得到的是小米用户的公钥地址信息
先调用T4的select2函数(msg.sender),如下图所示:
得到是T4的合约的地址
[]()[]()总结:
所以在有用户A->合约1->合约2 这种类似的调用链场景下做权限判断的时候一定要注意合理的选择使用tx.origin还是msg.sender。以防对合约的业务的逻辑造成影响。
部分转自网络,侵权联系删除www.interchains.cchttps://www.interchains.cc/17941.html
区块链知识分享网, 以太坊dapp资源网, 区块链教程, fabric教程下载, 区块链书籍下载, 区块链资料下载, 区块链视频教程下载, 区块链基础教程, 区块链入门教程, 区块链资源 » 谈谈fisco bcos智能合约中tx.origin和msg.sender的作用及使用场景