经过以太坊实现本身的ICO

你想了解如何写智能合约,但有很是有限的技术知识?你想了解如何编写智能合约来为你的ICO发布数字货币吗?这里有一个关于如何着手的完整指南。php

ICO,或上线数字货币是新的热潮。区块链技术提供了一种独特的方式,鼓励早期采用者参与项目,并经过发布数字货币来得到初始资金。没必要惧怕在这个领域使用的新术语。下面是一个关于ICO是什么的综合指南,以及如何可以学习更多的关于这些ICO的智能合约。让咱们开始吧!html

ICO究竟是什么?

上线数字货币,一般被称为ICO,是一种筹资机制,其中新项目出售其数字加密货币,以交换比特币和以太币。一个加密数字币,或一个代币,通常只是一个术语,表示一个项目或公司发布的价值单位。这个价值单位能够用来奖励参与项目并执行特定行动的用户,或者它能够做为在网络上得到特定服务的交易费用。例如,以太坊网络使用以太币(ETH)做为数字货币,用于在网络中执行计算。java

这些数字货币能够经过美圆来购买,或者兑换美圆等法订货币来得到,也能够经过在网络上执行特定服务(如挖矿)赚取。这些数字货币的优势在于它们的价格也基于对这些数字货币的需求而升值和贬值。这种行为相似于公司的股票,这反映了公司的部分全部权。数字货币既反映了在网络中用于支付服务的货币,也反映了该数字货币网络中的公平性。node

随着数字货币的网络效应增长,其在订价中增值。肯定数字货币是否对你的项目有意义的第一步取决于你的项目的目标是什么,而且有一种方法能够“货币化”。正如上面所讨论的,数字货币不只仅是网络中使用的货币,并且是创建在网络上的业务模型的一个单位。python

数字货币对你的项目有意义吗?

若是数字货币对项目有意义,所讨论的项目应该具备如下属性:android

  • 网络中的令牌应该具备实用价值。例如,以太坊平台的数字货币是以太币,它是被用做支付在区块链中执行的任何计算的交易费用的货币。
  • 玩家购买数字货币应该有经济上的诱因,数字货币发行机制应该以这样的方式设计,即随着数字货币的使用,它们的价值应该增长。例如,Filecoin是用于在去中心化的硬盘网络中存储文件的IPFS的数字货币。随着愈来愈多的用户想要以分布式的方式存储文件,他们将须要Filecoin。通常来讲,这些数字货币预先定义货币供应将如何随时间演变。这些策略是这样设计的,其中令牌的价值随着网络提供的服务被更多地使用而增长。

ERC20是一个数字货币的标准,这使得咱们很容易发布新的加密数字货币。它基于以太坊并描述了以太坊数字货币合约必须实现的功能和事件。可是在咱们开始学习如何为本身的项目发放代币以前,咱们必须理解什么是“智能合约”。这是本篇文章的主题之一。git

什么是智能合约?

智能合约是计算机程序,容许基于预先指定的条件在各方之间自动转移数字资产。智能合约主要用于加密数字货币的交互。最突出的智能合约实现是以太坊区块链平台,它也将其称为去中心化应用程序,或DApp。程序员

传统上,咱们习惯于集中托管应用程序。虽然应用程序的代码能够分布在多个物理服务器上,但它们由单个实体控制。例如,facebook是一个集中式应用程序,它由一个叫作facebook公司的实体控制,而去中心化的应用程序不是由一个中心实体控制的,而是由代码和在其中设置的协议来控制的。这些代码一般是开源的,任何人均可以使用它们来建立一个本身的新DAPP。一些已经成功的基于以太坊的DApp是Golem, Augur和Melonport。这些DAPPS已经可以在市场上达到数百万美圆的价值。github

智能合约开发平台比较

虽然以太坊是最流行的开发智能合约的平台,但它不是惟一的一个。下面是一些用于编写智能合约的其余平台:web

  • Script in Bitcoin,脚本处理文档的能力有限。Bitcoin具备非图灵完备的脚本语言,容许在指定条件下能够兑换。脚本语言是至关有限的,由于它只具备一些基本的算术、逻辑和密码操做(例如hash和验证数字签名)。
  • Automated Transactions是另外一个图灵完备的智能合约语言,用于像Burstcoin和Qora之类的加密数字货币。它的一个应用例子是原子交叉链交易。原子交叉链交易使交易双方拥有不一样的数字加密货币,直接进行交换而不须要第三个受信任方。
  • NXT:NXT是一个公共的区块链平台,包含智能合约的模板选择有限。你必须使用给定的模版,你不能编写你本身的代码。
  • Chain使用Java、Ruby和Node.js提供了带有SDK的企业级区块链基础设施。

智能合约的局限性

智能合约仍处于发展阶段,不能彻底取代全部形式的合约。它们对于可以客观定义并彻底在数字领域中的术语更有效。更具体地说:

  • 智能合约不该该对外部Web服务、API或外部数据库进行调用。这可能致使相同智能合约代码的多个独立执行产生不一样结果。这可能破坏区块链的共识。Oracles,将现实世界中的数据更新到区块链,是解决这个问题的一种方法。
  • 智能合约只能解决事实上能够客观决定的问题。这种约束使得智能合约对法律合约的价值较低,在没有客观事实的状况下靠双方当事人的主观判断容易出现纠纷。
  • 智能合约的最重要的限制是,(目前)它被用于基于if a, then b或相似变化模式的简单合约模型。在我国现行的法律用语中,“无不当延误”和“超出合理怀疑”等合约中的主观方面的考虑是很难的。

虽然这些限制目前存在,但团队正在努力使这些智能合约更加智能化。随着物联网的出现,更容易传递实时、真实世界的数据,这些数据能够经过oracles保存在区块链上。许多像Oraclize这样的区块链服务已经启动,将真实世界的数据推到了区块链链中。即便是简单的if a, then b的智能合约,也有不少状况下会被破坏。

编写和部署智能合约的工具

  • Infura:Infura提供了可扩展的区块链基础架构,能够知足运行完整的以太坊节点的需求,并容许开发者专一于它们的代码。它受到开发者社区的欢迎。
  • Mist Browser:它是浏览和使用DAPPS的工具。它是一个单独的浏览器,能够用来浏览DAPPS并与它们进行交互。
  • Truffle Framework:Truffle是一种流行的以太坊开发框架。它具备内置的智能合约编译、连接、部署和二进制管理,极大地简化了区块链开发人员的工做。
  • Metamask:是一个容许人们在浏览器中访问去中心化网络的桥梁。它容许用户在浏览器中运行以太坊DApp,而不须要运行完整的以太坊节点。它是一个浏览器插件,容许用户经过正规网站进行以太坊交易。截至2017年9月,Metamask只能做为一个插件在Chrome浏览器中使用。
  • Remix:是一个基于Web浏览器的IDE,它容许用户编写Solidity的智能合约,而后部署和运行智能合约。

编写智能合约的语言

两个主要用来写智能合约的语言是Serpent和Solidity。Serpent是一种古老的语言,它在2017年9月就已通过时了。Solidity,它是一种基于JavaScript的语言,如今已经成为编写智能合约的推荐语言。近年来,Serpent也发现了安全漏洞,目前这基本是一个没有吸引力的开发平台了。这些语言的一些关键特征是:

  • solidity:是一种面向合约的高级语言,其语法相似于JavaScript,它的设计目的是完成以太虚拟机(EVM)开发。
  • Serpent:是一种高级语言,用来写合约。它与Python很是类似,但到了2017年9月,solidity是以太坊开发者的首选语言。

即将到来的智能合约语言

solidity是目前最流行的智能合约语言。有一些即将到来的智能合约语言可能在将来变得重要:

  • Viper:侧重于安全性、语言和编译器的简单性。它有一个相似Python的缩进方案。
  • Lisk:使用JavaScript做为一种智能合约语言。
  • Chain:提供了企业级区块链基础设施,并采用了流行的语言,如Ruby、Java和Nodejs。

智能合约实例

让咱们来看看一个在Solidity写的例子。solidity是发展智能合约最流行的语言。下面的合约是一个关于如何建立新的数字货币的例子。新数字货币能够凭空挖掘出来,但只能由建立合约的用户使用。这个合约也能够用来进行数字货币的转帐即从一个地址发送到另外一个地址。

pragma solidity ^0.4.0;
 
contract Coin {
 address public minter;
 mapping (address => uint) public balances;
 
 event Sent(address from, address to, uint amount);

 function Coin() {
 minter = msg.sender;
 }
 
 function mint(address receiver, uint amount) {
 if (msg.sender != minter) return;
 balances[receiver] += amount;
 }
 
 function send(address receiver, uint amount) {
 if (balances[msg.sender] < amount) return;
 balances[msg.sender] -= amount;
 balances[receiver] += amount;
 Sent(msg.sender, receiver, amount);
 }
}

上面的智能合约显示了它如何被用来铸币并将其转入特定的地址。咱们来分析下这段代码。

address public minter;

定义公共可访问的地址变量。地址类型是一个160位变量,用于存储在以太网网络上的地址。

mapping (address => uint) public balances;

建立地址和单位类型之间的映射,存储每一个地址中的数字货币余额。你能够把它看做是记录每一个地址有多少数字货币的分类账。

function Coin() {
minter = msg.sender;
}

这个函数是一个构造函数,它一旦部署就被执行。这将minter的值设置为已部署合约的地址。这确保了只能合约的全部者铸造新的数字货币,而其余人不行。这能够经过如下功能来保证:

function mint(address receiver, uint amount)

只有当minter调用该函数时,才会执行该函数。该功能将数字货币值等于接收地址。若是它是由minter之外的人调用的,那么这个函数什么也不作。

function send(address receiver, uint amount)

这个函数从调用函数的地址向接收方的地址发送一个数字货币。例如,若是Bob用Alice的地址调用这个函数,而且金额是1000,那么1000个硬币将从Bob的账户转移到Alice的账户。

在以太坊区块链中部署智能合约

一旦编写了一个合约,就须要经过实际部署它来测试它,并测试它是否像预期同样运行。这就是须要testnets的缘由。

什么是测试网?

testnets模拟以太坊网络和EVM。它们使开发人员可以在不支付gas成本的状况下上传和与智能合约进行交互。

智能合约必须为他们的计算支付在以太网络的gas。若是你想在以太坊网络上运行一个智能合约,你须要支付“gas”来完成交易。然而,testnets为开发者提供了测试他们的合约而不支付任何费用的环境。testnets的gas可从许多公共区域免费提供。

什么是Etherscan和我如何浏览智能合约?

Etherscan是区块链的资源管理器。区块链浏览器基本上是一种搜索引擎,容许用户轻松查找、确认和验证在以太坊区块链上发生的交易。使用这个连接能够在Etherscan中验证智能合约。

使用智能合约的不多模板开始

为了让你开始使用智能合约,你能够在查看下面的模板。以太坊和solidity文档有简单的合约让你开始。一旦实现了这些,就能够查看IBM提供的更高级的模板。IBM智能合约模板展现了如何使用IoT设备的输出来控制智能合约。Mahesh的以太坊DAPP教程给出了一个关于如何在以太坊上实现和部署投票DAPP的开始到结束的示例。

自从发布数字货币成为一种愈来愈流行的方式,经过你的产品和产生用户参与来赚钱,智能合约变得愈来愈重要。了解智能合约和学习如何写一个将使你可以发出数字货币,并把你的项目带到你一直梦想的地方。祝你一切顺利!

推荐给你们咱们的以太坊教程:

  • 以太坊教程,主要介绍智能合约与dapp应用开发,适合入门。
  • 以太坊开发,主要是介绍使用node.js、mongodb、区块链、ipfs实现去中心化电商DApp实战,适合进阶。
  • web3j教程,主要是针对java和android程序员进行区块链以太坊开发的web3j详解。
  • python以太坊,主要是针对python工程师使用web3.py进行区块链以太坊开发的详解。
  • php以太坊,主要是介绍使用php进行智能合约开发交互,进行帐号建立、交易、转帐、代币开发以及过滤器和事件等内容。
  • C#以太坊,主要讲解如何使用C#开发基于.Net的以太坊应用,包括帐户管理、状态与交易、智能合约开发与交互、过滤器和事件等。

这里是原文

相关文章
相关标签/搜索