编辑: 迷音桑 2017-09-10

4 简介 Solidity是一种语法类似JavaScript的高级语言.它被设计成以编译的方式生成以太坊虚拟机代 码.在后续内容中你将会发现,使用它很容易创建用于投票、众筹、封闭拍卖、多重签名钱 包等等的合约. 注意 目前尝试Solidity的最好方式是使用基于浏览器的编译器(需要一点时间加载,请耐心等 待). 有用链接 Ethereum Browser-Based CompilerChangelog Story Backlog Source Code Gitter Chat Solidity 文档 在下一章中,我们先看一个用Solidity写的简单的智能合约,然后介绍一下区块链和以太坊虚 拟机的基础知识. 后续章节会通过一些实用的合约例子,来探索Solidity的一系列特性.记住,你可以在浏览器 中尝试这些合约. 最后以及更多扩展章节的内容,会深入到Solidity 的各个方面. 如有任何关于Solidiy,或者本文档的问题及改进建议,请在gitter频道提出来. 简介

5 智能合约介绍 一个简单的智能合约 先从一个非常基础的例子开始,不用担心你现在还一点都不了解,我们将逐步了解到更多的 细节. Storage contract SimpleStorage { uint storedData;

function set(uint x) { storedData = x;

} function get() constant returns (uint retVal) { return storedData;

} } 在Solidity中,一个合约由一组代码(合约的函数)和数据(合约的状态)组成.合约位于以 太坊区块链上的一个特殊地址.uint storedData**;

这行代码声明了一个状态变量,变量名 为storedData,类型为 uint (256bits无符号整数).你可以认为它就像数据库里面的一个存 储单元,跟管理数据库一样,可以通过调用函数查询和修改它.在以太坊中,通常只有合约 的拥有者才能这样做.在这个例子中,函数 set 和 get 分别用于修改和查询变量的值. 跟很多其他语言一样,访问状态变量时,不需要在前面增加 this. 这样的前缀. 这个合约还无法做很多事情(受限于以太坊的基础设施),仅仅是允许任何人储存一个数 字.而且世界上任何一个人都可以来存取这个数字,缺少一个(可靠的)方式来保护你发布 的数字.任何人都可以调用set方法设置一个不同的数字覆盖你发布的数字.但是你的数字将 会留存在区块链的历史上.稍后我们会学习如何增加一个存取限制,使得只有你才能修改这 个数字. 代币的例子 接下来的合约将实现一个形式最简单的加密货币.空中取币不再是一个魔术,当然只有创建 合约的人才能做这件事情(想用其他货币发行模式也很简单,只是实现细节上的差异).而 且任何人都可以发送货币给其他人,不需要注册用户名和密码,只要有一对以太坊的公私钥 即可. Note 智能合约介绍

6 对于在线solidity环境来说,这不是一个好的例子.如果你使用在线solidity环境 来尝试这个例 子.调用函数时,将无法改变from的地址.所以你只能扮演铸币者的角色,可以铸造货币并 发送给其他人,而无法扮演其他人的角色.这点在线solidity环境将来会做改进. contract Coin { //关键字 public 使变量能从合约外部访问. 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;

下载(注:源文件不在本站服务器,都将跳转到源网站下载)
备用下载
发帖评论
相关话题
发布一个新话题