当前位置:   金科网 > 区块链 > 正文

Solidity官方文档(1)

Solidity官方文档(1)



写在前面:HiBlock区块链社区成立了翻译小组(以太坊中文社区),翻译区块链相关的技术文档及资料,本文为solidity官方文档翻译的第一部分《智能合约概述》,特发布出来邀请solidity爱好者、开发者做公开的审校,您可以添加微信baobaotalk_com,验证输入“solidity”,然后将您的意见和建议发送给我们,也可以在文末“留言”区留言,有效的建议我们会采纳及合并进下一版本,同时将送一份小礼物给您以示感谢。


1

简单的智能合约


让我们先看一下最基本的例子。现在就算你都不理解也不要紧,后面我们会有更深入的讲解。


存储


pragma solidity ^0.4.0;


contract SimpleStorage {
   uint storedData;

   function set(uint x) public {
       storedData = x;
   }

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

}


第一行就是告诉大家源代码使用Solidity版本0.4.0写的,并且使用0.4.0以上版本运行也没问题(最高到0.5.0,但是不包含0.5.0)。这是为了确保合约不会在新的编译器版本中突然行为异常。关键字 pragma 的含义是,一般来说,pragmas(编译指令)是告知编译器如何处理源代码的指令的(例如, pragma once )。


Solidity中合约的含义就是一组代码(它的 函数 )和数据(它的 状态 ),它们位于以太坊区块链的一个特定地址上。 代码行 uint storedData; 声明一个类型为 uint (256位无符号整数)的状态变量,叫做 storedData 。 你可以认为它是数据库里的一个位置,可以通过调用管理数据库代码的函数进行查询和变更。对于以太坊来说,上述的合约就是拥有合约(owning contract)。在这种情况下,函数 set 和 get 可以用来变更或取出变量的值。


要访问一个状态变量,并不需要像 this. 这样的前缀,虽然这是其他语言常见的做法。


该合约能完成的事情并不多(由于以太坊构建的基础架构的原因):它能允许任何人在合约中存储一个单独的数字,并且这个数字可以被世界上任何人访问,且没有可行的办法阻止你发布这个数字。当然,任何人都可以再次调用 set ,传入不同的值,覆盖你的数字,但是这个数字仍会被存储在区块链的历史记录中。随后,我们会看到怎样施加访问限制,以确保只有你才能改变这个数字。


Solidity官方文档(1)


子货币(Subcurrency)例子


下面的合约实现了一个最简单的加密货币。这里,币确实可以无中生有地产生,但是只有创建合约的人才能做到(实现一个不同的发行计划也不难)。而且,任何人都可以给其他人转币,不需要注册用户名和密码 —— 所需要的只是以太坊密钥对。


pragma solidity ^0.4.21;


contract Coin {
   // 关键字“public”让这些变量可以从外部读取
   address public minter;
   mapping (address => uint) public balances;

   // 轻客户端可以通过事件针对变化作出高效的反应
   event Sent(address from, address to, uint amount);

   // 这是构造函数,只有当合约创建时运行
   function Coin() public {
       minter = msg.sender;
   }

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

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

}


这个合约引入了一些新的概念,让我们逐一解读。