汪晓明对区块链、以太坊的思考

记录创业、生活的所思所感,探讨去中心化思想,推动区块链的发展。

蓝莲花推出VIP区块链技术视频

限时优惠说明

限时5折优惠已经结束(12/12),目前3950元,欢迎订购!


过去的一年,我发布了50+区块链文章,20+视频,得到了很多人的鼓励和支持,也给了我很多建议,我经过慎重考虑,将推出专业版区块链技术视频,当然会继续提供免费版(内容比例1:1),以满足对于更高质量视频的需求。

为什么做出这个决定?因为虽然可以依靠兴趣提供纯免费服务,但这个事情很耗精力,这样的模式是难以稳定坚持输出的,所以,我准备推出(免费+付费)的服务模式,这样可以投入更多的资源和精力,最大程度的发挥EthCast的作用,帮助更多人高效的掌握区块链开发技术。

内容:

涉及以太坊、HyperLedger等,从应用到底层、从开源到商业。

发布频率:

80~100期/年(每周2期)优质区块链技术视频内容。

目标:

除了培养应用开发人才,也会培养区块链架构师、底层源码核心开发人才。 区块链开发人才身价水涨船高,随着需求的增长,越来越稀缺,希望能为行业培养30万~100万年薪的中高级人才!

发布渠道:

EthCast.com

费用:

个人版VIP:1950元/年(12/12历史最低价,限量50人,仅此一天,之后恢复3900元原价)

企业版VIP:3万/年/20人(12/12历史最低价,限量5份,仅此一天,之后恢复6万原价)

12/12之前接受预定, 预订款500元(12号可用于抵扣VIP费用)

(曾经的咨询、书籍老客户可以直接抵扣500元)

联系方式:

微信(263305605)

EthCast.com将以开放的心态,欢迎牛人、各方合作伙伴加入,一起推动区块链技术发展。

区块链技术视频网站EthCast.com上线

今天我发布了区块链技术视频网站:http://ethcast.com/ (eth:以太坊,cast:投影、主播),请大家多多支持,也欢迎多提宝贵建议。

网站介绍:

EthCast.com由汪晓明(蓝莲花)制作发行。这套视频专注于分享区块链技术,特别是以太坊。目前区块链技术人员紧缺,希望这套视频能帮助开发人员系统的掌握区块链技术,快速的运用到项目中,推动区块链技术在各行业的落地。这套视频面向开发人员,但我相信对于没有编程经验的人或则专家都会带来启示!

往期视频回顾:

明说(01):从0开始搭建区块链开发环境

http://ethcast.com/v1

明说(02):15分钟编写第一个区块链应用

http://ethcast.com/v2

明说(03):以太坊开发框架Truffle代码结构解析

http://ethcast.com/v3

明说(04):如何开发编译部署调用智能合约?

http://ethcast.com/v4

详情请访问:http://ethcast.com/

以太坊连载(25):Dapp及相关开发工具介绍

去中心化应用

去中心化应用是可以使用户和供应商之间直接互动的服务(例如,连接某些市场上的买方和卖方,文件存储里的持有者和储存者)。以太坊去中心化应用典型地通过HTML/Javascript网络应用与用户互动,使用Javascript API与区块链通信。去中心化应用典型地在区块链上有自己的相关合约套件,用来编码商业逻辑,允许持久存储对共识要求严格的状态。记住由于以太坊网络上的运算天生冗余,执行的gas成本会比离链的私人执行成本更高。这就激励着去中心化应用开发者限制执行的代码数量和储存在区块链上的代码数量。

去中心化应用目录

使用以太坊的去中心化应用被编译到以下列表,在开发的不同阶段列出(概念,工作原型,实时/部署的)。如果你在开发去中心化应用, 考虑向这些列表添加入口:

  • Ðapps 的Ethercasts状态
  • Dappslist
  • Dappcentral – 去中心化应用的分类页面,带说明,代码验证和网络数据。
  • Dapps邮件列表 – 以太坊上的开发者邮件列表(停止使用)。

列表中提供的去中心化服务覆盖大范围的领域,包括金融,保险,预测市场,社交网络,运算和存储分配,赌博,市场,物联网,管理,合作,开发和游戏。

将来,去中心化应用可能会在去中心化应用浏览器里集成的dappstores中列出和分配。

去中心化应用浏览器

  • Mist – 由基金会开发的官方GUI去中心化应用浏览器,开发阶段。 Mist as Wallet dapp在试用中。
  • Syng – Jarrad Hope开发的移动以太坊浏览器(开发阶段) – 由DEVgrants支持
  • MetaMask – Aaron Kumavis Davis的浏览器内GUI。Github上的Epicenter Bitcoin访谈 – 由DEVgrants支持
  • AlethZero – C++ eth客户端GUI(停止使用)。
  • Supernova – (停止使用)。

开发者工具

去中心化应用开发需要理解Web3 Javascript API, the JSON RPC API和Solidity编程语言。

注意:有开发者工具帮助你开发、测试和部署去中心化应用,自动使用以下列出的资源。

  • Web3 JavaScript API – 想要和以太坊节点交互的时候,主要用到的JavaScript SDK。
  • JSON RPC API – 与节点交互的低级JSON RPC 2.0界面。这个API被Web3 JavaScript API使用。
  • Solidity Docs – Solidity是以太坊开发的智能合约语言,编译到以太坊虚拟机操作码。
  • 测试网络 – 测试网络帮助开发者开发和测试以太坊代码及网络互动,不需花费主网络上自己的以太币。测试网络选项在下面列出。
  • 去中心化应用开发资源。这会帮助你开发,排错和部署以太坊应用。

去中心化应用开发资源

示例

教程

Mix-IDE

Mix是官方以太坊IDE,它允许开发者在以太坊区块链创建和部署合约及去中心化应用。它包含一个Solidity源代码排错器。Mix

IDEs/Frameworks

下面是用于写以太坊去中心化应用的开发者框架和IDE。

  • Truffle – Truffle是以太坊的开发环境,测试框架和资产管道。
  • Dapple – Dapple是Solidity开发者工具以帮助建立和管理以太坊类似的区块链上复杂的合约体系。
  • Populus – Populus是用Python语言写的智能合约开发框架。
  • Eris-PM – Eris Package Manager部署并测试私有和公共链上的智能合约体系。
  • Embark – Embark是用JavaScript写的去中心化应用开发框架。
  • EtherScripter (已淘汰,停用)
  • 韧性原始交易广播

以太坊控制台

以太坊节点的命令行控制台。

以太坊控制台通过IPC连接到在背景运行的以太坊节点(用eth和geth测试)并提供一个交互的javascript控制台,包括web3对象和管理员附件。

这里可以找到可用管理列表 以太坊节点控制指令

要使用这个控制台,你需要启动一个本地以太坊节点和可用的ipc沟通插口(数据目录中的geth.ipc文件)。开启一个节点后,ipc插口默认位于你的以太坊本地主目录。你也可以设置—test选项来使用特定节点测试指令。

然后你可以在控制台输入

这是—test模式节点指令的释义:

关于节点配置文件的更多信息。

底层服务

Whisper

  • 什么是Whisper,用途是什么 – stackexchange问答
  • Gavin Wood: 嘘!Whisper – youtube上的DEVCON-1演讲视频
  • Whisper概览和dream API用途 –
  • ELI5

Swarm

Swarm是分布式存储平台以及内容分发服务,以太坊web 3堆栈自带的基层服务。Swarm的首要目标是提供足够去中心化和冗余的以太坊公共记录储存,尤其是储存和分配去中心化应用代码和数据,以及区块链数据。从经济观点看,它允许参与者有效集中储存和带宽资源,用以为所有参与者提供之前提到的服务。

从终端用户的观点看,Swarm和WWW并没有很大不同,除了上载并不是针对一个特定的服务商。目标是点对点存储,并提供抗DDOS、零故障、容错、抗审查的解决方案以及自我维护,这归功于一个使用点对点记账体系并允许以付款交换资源的内置激励体系。Swarm被设计为与以太坊devp2p多协议网络层次,为了域名解决方案的以太坊区块链,服务支付和内容可用性保险结合。

swarm 上的ÐΞVcon演讲

  • Viktor Trón, Daniel A. Nagy:Swarm – YouTube上的以太坊 ÐΞVcon-1演讲
  • Daniel A. Nagy:保持公共记录安全可用 – YouTube上的以太坊ÐΞVcon-0演讲

Code and status

在线和离线存储

以太坊定时器

  • 作者: Piper Merriam
  • 网站: alarm_main_website。
  • 文档: alarm_documentation。

促使安排交易稍后发生的市场。提供unix中crontab或javascript 中的setTimeout类似的角色。 •以太坊提案中的去中心化cron服务 – 作者Peter Szilagyi

Ethereum Computation Market

  • 作者: Piper Merriam
  • 网站: computation_market_main_website。
  • 文档: computation_market_main_website。

促使离线运算可验证执行的市场。允许每个昂贵的运算在以太坊虚拟机内使用,不必实际支付在链上执行它们的高额gas成本。

BTCRelay

BTCrelay

  • 更多信息 (关于ETH/BTC双向peg,不需修正比特币代码)。
  • BTCrelay 审查

RANDAO

随机数: https://www.reddit.com/r/ethereum/comments/49yld7/eli5_how_does_a_service_like_szabodice_grab_a/

The EVM

以太坊虚拟机(EVM)是以太坊智能合约的执行环境。它不仅被沙箱化,而且实际上是完全隔离的,这意味着以太坊虚拟机内部运行的代码不可以访问网络,文件系统或其他进程。智能合约甚至对其他智能合约的访问权限都是有限的。

合约存在于区块链上,区块链是以太坊特定的二进制格式(以太坊虚拟机字节代码)。然而,合约典型地是用以太坊高级语言写成,用以太坊编译器编译成字节代码,最终用以太坊客户端上传到区块链。

参考资料:

文章中的列表对应的链接可以参考《Ethereum Homestead Documentation》第94页1.7.5 Dapps

下一篇文章我们将会介绍《以太坊连载(26):深入浅出以太坊测试技术》

以太坊连载(24):集成开发环境(IDE) Mix介绍

Mix

IDE Mix旨在作为开发者帮你创建,排错和部署合约及去中心化应用(后端和前端的合约)

警告 – 有很多OS X上关于Mix的crash-at-boot 事件报告。这个事件是Heisenbug,我们已经跟踪了一两个月。我们现有的最佳变通方案是用排错配置,像这样:

1
cmake -DCMAKE_BUILD_TYPE=Debug ..

警告 – 正在研究一个Mix的替代物,叫做Remix。如果你在Mix经历了事件,在Remix更成熟之前,你最好寻找替代方案。

从创建一个新项目开始,它包括

  • 合约
  • html 文件
  • JavaScript 文件
  • style 文件
  • image 文件

项目编辑器

你可以用项目来管理去中心化应用的创建和测试。项目会包括与后端和前端相关的数据以及和你的场景(区块链互动)相关的数据,用来排错和测试。相关文件 会被创建并自动保存到项目目录中。

创建一个新项目

去中心化应用的开发始于新项目的创建。在“编辑”菜单创建一个新项目。进入项目名称,比如 “等级”,选择项目文件路径。

编辑后端合约文件

一个新项目默认包含一个合约,“Contract”用于使用Solidity语言在区块链后端开发,“index.html”用于前端。查看Solidity教程或参考。 编辑空的默认合约“Contract”,比如

1
2
3
4
5
6
contract Rating {
  function setRating(bytes32 _key, uint256 _value) {
    ratings[_key] = _value;
    mapping (bytes32 => uint256) public ratings;
  }
}

查看Solidity教程寻求帮助,以solidity编程语言开始。

保存变动

编辑前端html文件 选择默认index.html文件并输入以下代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 .... <script>
function getRating() {
  var param = document.getElementById(query).value;
  var res = contracts[Rating].contract.ratings(param);
  document.getElementById(queryres).innerText = res;
}
function setRating() {
        var key = document.getElementById("key").value;
        var value = parseInt(document.getElementById("value").value);
        var res = contracts["Rating"].contract.setRating(key, value);
}
</script>
    </head>
    <body bgcolor="#E6E6FA">
        <h1>Ratings</h1>
<div> Store:
            <input type="string" id="key">
            <input type="number" id="value">
            <button onclick="setRating()">Save</button>
</div> <div>
            Query:
            <input type="string" id="query" onkeyup='getRating()'>
            <div id="queryres"></div>
        </div>
    </body>
</html>

有可能添加很多合约文件和HTML, JavaScript, css文件

场景编辑器

场景可以用于检测合约和为合约排错。

一个场景就是一个本地区块链,区块可以在这里被挖矿而不需要工作量证明 –否则测试会很慢 ;)

一个场景包含一系列交易。通常,一个场景以去中心化应用的合约创建场景开始。 此外,进一步的交易会被添加测试并对去中心化应用排错。场景可以修正,例如,移除交易。注意如果要修正一个场景使之有效,需要进行重建。可以通过JS API用JS进行进一步测试。

万一打不开,可以点击F7或Windows > 展示右侧或主界面右上方的排错按钮来进入场景和排错器窗格。

创建和设置新场景

第一次启动Mix的时候,会创建一个空场景,比如,不包含任何交易。添加账户并命名为“MyAccount”,设置初始余额为1以太币。点击确认。将场景重命名为“Deploy”。

修正账户的初始以太币余额

实际上我们想做很多测试。编辑初始区块参数,将初始账户余额设置为1000 以太币。重建场景使它变得高效。

重建场景

每次交易被修正或账户被添加的时候,场景必须重建以修正使之高效。注意如果一个场景重建,网络前端(本地存储)可能也需要重置(Mix不会自动操作)。

创建交易

我们发送一些以太币给Bob。创建另一个名为“Bob”的账户,余额为0。在场景窗格创建一个新交易。点击“Add Tx…”,发送300以太币给Bob。添加一个区块。

改变和重新使用场景

创建一个新场景或从一个场景开始,和几个你先复制的交易

重命名场景

通过指定要被移除的交易来修正场景

重建场景

展示调用

一个合约调用就是一个功能调用。这不是交易, 因为合约调用不会改变状态。合约调用不是区块链的一部分,但是出于实用和用户体验设计的原因,在交易的同一功能层次展示调用很方便。JS图标提醒你这不是个交易而是个调用。要展示/隐藏调用,点击菜单里的场景 –> 展示调用。

状态查看器

这个面板区块在区块链面板下面,场景视图中。一旦区块链被运行,这个面板会展示区块链状态。

说到状态,我们意味着所有账户余额(包括合约和正常账户),存储(所有部署合约的全局变量)。这个面板的内容不是动态的,它取决于在区块链面板上选择的交易。这里展示的状态是执行所选择交易的状态结果。

在那种情况下,部署了2个合约,选择的(testCtr的部署)是最后一个。状态视图展示了TestCtr和BasicContract的存储。

交易浏览器

使用交易窗格

交易窗格使你能够探索交易接收,包括

  • 输入参数
  • 返回参数
  • 事件日志

要显示交易浏览器,点击每个交易右侧的倒三角图标,会扩展出交易详情:

然后你可以复制剪贴板上的交易内容,编辑当前交易(然后你要重新运行区块链), 或为交易排错。

JavaScript console

Mix将以下对象暴露在全局窗口的语境下

web3 – 以太坊JavaScript API

合约:合约对象集合。钥匙代表合约名称。值是包含以下属性的对象:

  • 合约: 合约对象实例 (像在web3.eth.contract里一样创建)
  • 地址: 上一个部署状态的合约地址(查看下面)
  • 界面: 合约ABI

查看JavaScript API 参考了解更多信息。

用JS控制台添加交易和本地调用

如果合约名字是“Sample”,功能名字是“set”,有可能进行一个交易来调用 “set”,方法是写:

1
contracts["Sample"].contract.set(14)

如果调用可以进行,可以通过写以下命令完成:

1
contracts["Sample"].contract.get.call()

也有可能用web3对象的所有属性和功能: https://github.com/以太坊/wiki/wiki/JavaScript-API

交易排错器

Mix支持Solidity和组件级别合约代码排错。你可以在两个模式中切换,检索你所需要的相关信息。

在任何执行阶段,以下信息都可用:

虚拟机堆栈 – 查看黄皮书获取虚拟机操作指南描述 调用堆栈 – 合约调用到另一个合约时会生长。双击堆栈框架来查看机器在框架里的状态。 存储 – 与合约相关的存储数据 内存 – 分配到这个执行点的机器内存 调用数据– 交易或调用参数

进入排错模式

交易详情扩展后,你可以转换到排错视图,点击“交易排错”按钮。

在排错模式和单步调试交易之间切换

这里打开了Solidity排错模式。用菜单按钮(排错 –> 显示虚拟机代码)在Solidity和以太坊虚拟机排错模式之前转换

  • 在solidity排错模式下单步调试交易
  • 在以太坊虚拟机排错模式下单步调试交易

Dapps部署

这个功能能够让用户在主区块链将当前的项目作为去中心化应用部署。

这会部署合约和登记前端资源。

部署过程包括3步:

  • 部署合约: 这一步会在主区块链部署合约。
  • 打包Dapp: 这一步用于打包和上传前端资源。
  • 注册: 要变成去中心化应用,以太坊浏览器(Mist或AlethZero)需要进入这个包裹。这一步会在资源存储的地方注册URL。

要部署去中心化应用,请遵守以下指令:

点击Deploy, Deploy to Network

这个模式对话框会显示三部分(参见以上):

  • 部署合约
  • 选择场景

“以太坊节点URL”是节点运行的位置,为了发起部署,一定会有一个节点在运行。

“选择部署场景”是强制步骤。Mix会执行选定场景里的交易(除与合约创建或合约调用不相关的所有交易)。Mix会在下面的面板上展示所有的交易和所有相关参数。

“使用的Gas”:取决于所选定的场景,Mix会展示使用的gas总量。

  • 部署场景

“部署账户”允许选择Mix会用于执行交易的账户。

“Gas价格”显示网络默认的gas价格。你也可以指定一个不同的值。

“部署成本”:取决于你想使用的以及选定场景的gas价格的值。这会显示部署所需的以太币数量。

“部署的合约”:没发生部署之前,这部分是空的。部署一完成,这部分就会被所有创建的合约地址填满。

“验证”:这会显示验证数量(在最后一个区块顶部生成的区块数量,最后一个区块包含最近的部署交易)。Mix跟踪所有的交易。如果有一个丢失(无效),它会展示在面板上。

  • 打包去中心化应用

“生成包裹”这一行为会创建一个新的文件夹并命名为“www”,这个文件夹会包含所有被映射到当前部署合约上的资源和脚本。为了发布去中心化应用,你需要把www文件夹托管在一个网络服务器(很快会被IPFS和SWARM代替)。库中默认是不存在web3.js的。如果你想要在网络浏览器使用去中心化应用,就需要把这个库加进来。

代码编辑器

这个编辑器提供代码编辑器的基本功能。

  • 在Solidity或JavaScript模式下,可以用自动补全插件(Ctrl + Space).
  • 增大/减小字体 (Ctrl +, Ctrl –)
  • 在Solidity模式下,可以显示gas预估值(工具-> 显示Gas预估值)。这会把所有需要最小量gas的所有状态都加亮显示。如果需要的gas变得很重要,颜色会变红。它也会显示最大的交易执行费用(每个功能)。

下一篇文章我们将会介绍《以太坊连载(25):Dapp及相关开发工具介绍》

感谢朝夕团队Azure, Bob参与《Ethereum Homestead Documentation》的翻译和校验。