你想了解如何写智能合约,但有非常有限的技术知识?你想了解如何编写智能合约来为你的ICO发布数字货币吗?这里有一个关于如何着手的完整指南。
ICO,或上线数字货币是新的热潮。区块链技术提供了一种独特的方式,鼓励早期采用者参与项目,并通过发布数字货币来获得初始资金。不必害怕在这个领域使用的新术语。下面是一个关于ICO是什么的综合指南,以及如何能够学习更多的关于这些ICO的智能合约。让我们开始吧!
ICO到底是什么?
上线数字货币,通常被称为ICO,是一种筹资机制,其中新项目出售其数字加密货币,以交换比特币和以太币。一个加密数字币,或一个代币,一般只是一个术语,表示一个项目或公司发布的价值单位。这个价值单位可以用来奖励参与项目并执行特定行动的用户,或者它可以作为在网络上获得特定服务的交易费用。例如,以太坊网络使用以太币(ETH)作为数字货币,用于在网络中执行计算。
这些数字货币可以通过美元来购买,或者兑换美元等法定货币来获得,也可以通过在网络上执行特定服务(如挖矿)赚取。这些数字货币的优点在于它们的价格也基于对这些数字货币的需求而升值和贬值。这种行为类似于公司的股票,这反映了公司的部分所有权。数字货币既反映了在网络中用于支付服务的货币,也反映了该数字货币网络中的公平性。
随着数字货币的网络效应增加,其在定价中增值。确定数字货币是否对你的项目有意义的第一步取决于你的项目的目标是什么,并且有一种方法可以“货币化”。正如上面所讨论的,数字货币不仅仅是网络中使用的货币,而且是建立在网络上的业务模型的一个单位。
数字货币对你的项目有意义吗?
如果数字货币对项目有意义,所讨论的项目应该具有以下属性:
- 网络中的令牌应该具有实用价值。例如,以太坊平台的数字货币是以太币,它是被用作支付在区块链中执行的任何计算的交易费用的货币。
- 玩家购买数字货币应该有经济上的诱因,数字货币发行机制应该以这样的方式设计,即随着数字货币的使用,它们的价值应该增加。例如,Filecoin是用于在去中心化的硬盘网络中存储文件的IPFS的数字货币。随着越来越多的用户想要以分布式的方式存储文件,他们将需要Filecoin。一般来说,这些数字货币预先定义货币供应将如何随时间演变。这些策略是这样设计的,其中令牌的价值随着网络提供的服务被更多地使用而增加。
ERC20是一个数字货币的标准,这使得我们很容易发布新的加密数字货币。它基于以太坊并描述了以太坊数字货币合约必须实现的功能和事件。但是在我们开始学习如何为自己的项目发放代币之前,我们必须理解什么是“智能合约”。这是本篇文章的主题之一。
什么是智能合约?
智能合约是计算机程序,允许基于预先指定的条件在各方之间自动转移数字资产。智能合约主要用于加密数字货币的交互。最突出的智能合约实现是以太坊区块链平台,它也将其称为去中心化应用程序,或DApp。
传统上,我们习惯于集中托管应用程序。虽然应用程序的代码可以分布在多个物理服务器上,但它们由单个实体控制。例如,facebook是一个集中式应用程序,它由一个叫做facebook公司的实体控制,而去中心化的应用程序不是由一个中心实体控制的,而是由代码和在其中设置的协议来控制的。这些代码通常是开源的,任何人都可以使用它们来创建一个自己的新DAPP。一些已经成功的基于以太坊的DApp是Golem, Augur和Melonport。这些DAPPS已经能够在市场上达到数百万美元的价值。
智能合约开发平台比较
虽然以太坊是最流行的开发智能合约的平台,但它不是唯一的一个。下面是一些用于编写智能合约的其他平台:
- 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的开始到结束的示例。
- Ethereum smart contract example
- Solidity documentation
- IBM Watson IOT smart contract Samples
- Ethereum dApp tutorial by Mahesh Murthy
自从发布数字货币成为一种越来越流行的方式,通过你的产品和产生用户参与来赚钱,智能合约变得越来越重要。了解智能合约和学习如何写一个将使你能够发出数字货币,并把你的项目带到你一直梦想的地方。祝你一切顺利!
推荐给大家我们的以太坊教程:
- 以太坊教程,主要介绍智能合约与dapp应用开发,适合入门。
- 以太坊开发,主要是介绍使用node.js、mongodb、区块链、ipfs实现去中心化电商DApp实战,适合进阶。
- web3j教程,主要是针对java和android程序员进行区块链以太坊开发的web3j详解。
- python以太坊,主要是针对python工程师使用web3.py进行区块链以太坊开发的详解。
- php以太坊,主要是介绍使用php进行智能合约开发交互,进行账号创建、交易、转账、代币开发以及过滤器和事件等内容。
- C#以太坊,主要讲解如何使用C#开发基于.Net的以太坊应用,包括账户管理、状态与交易、智能合约开发与交互、过滤器和事件等。
汇智网原创翻译,转载请标明出处。这里是原文