3分钟漫谈以太坊The DAO事件,浅入浅出区块链(3)
2018-10-21 本文已影响8人
假装在去天使之城的路上
这片博文主要是继续的简要的介绍一下The DAO事件,以及ETH和ETC的关系。
- 3分钟漫谈以太坊The DAO事件,浅入浅出区块链(3)>> 你在这里
- 3分钟漫谈以太坊The DAO事件,浅入浅出区块链(2)
- 3分钟漫谈以太坊The DAO事件,浅入浅出区块链(1)
这是一系列关于区块链的漫谈博客。用讲故事的方法,漫聊一下区块链。其中也会穿插一些区块链相关概念,以及编程的介绍。主要目的是漫谈,每个主题之间相对独立,在阅读的时候,可以选择你有兴趣的部分阅读。
虽然目的是漫谈,但准确的信息是博文的基本,如果有不准确的地方,请留言或者发消息,我会及时订正。
复习一下DAO
DAO是Decentralized Autonomous Organization的简称。
可以理解为:去中心化自治组织。任何符合以下特征的组织,都可以被成为DAO组织。
DAO组织的操作过程:发布智能合约,发行代币(ICO),众筹资金,运营和投资众筹的资金。这整个过程也被成为DAO项目。
复习一下The DAO事件
德国一家专注“智能锁”的公司发布了一个DAO项目,黑客利用一个DAO项目的漏洞,转移了一笔巨款,然后以太坊的白帽黑客们,通过软分叉,和硬分叉的方法拿回了被盗的以太币。
复习一下Fallback Function 回调函数
contract MyContract {
//这个没有函数名,没有参数,没有返回值的函数,就叫做Fallback Function
function() payable { }
//这个函数的函数名为:buySomething,所以不是Fallback Function
function buySomething() external payable {
}
}
- Fallback函数,在两种情况下会被调用:当智能合约里,没有处理请求的相应的函数的时候;当智能合约没有其他附属数据,只是在接受以太币的时候。
- 虽然Fallback函数,没有参数,但是 msg.data 可以在函数里使用,从而得到调用者的相关信息。
- 基本上,如果向一个合约地址转账,那么合约内必须有回调函数,否则转账将会被拒绝。
msg.sender 等全局变量
在学习以太坊DApp编程的时候,我们经常会看到 msg.sender 等的使用,但是我们没有定义这些变量,这些变量是什么意思呢?
msg.sender 等这样的变量或者函数,是以太坊区块链默认提供的,其中包含了在处理请求的时候,请求方的相关信息。
- msg.sender : 返回请求发送方的地址。
- msg.data: 包含了所有请求发送方的信息。这个数据是不可变的,也不会永久性的存储到区块链里面。
- msg.gas : 请求发送方剩余的gas数量。
- msg.sig : 发送方需要的处理函数的地址的前4个bytes。(智能合约可以提供很多种功能,很多时候我们只需要使用其中的一个功能的时候,我们可以指定智能合约分配个每个功能的ID来实现。)
- msg.value : 我们发送给这个智能合约的Ether,以wei为单位。可以附带发送信息。(wei是描述Ether的最小单位,就好像一分钱是人民币最小的单位一样)
全部的函数和变量可以在下方官网查看:
Special Variables and Functions
图片来源
图片来自网络