智能合约语言 Solidity 教程系列4 - 数据存储位置分析
Solidity教程系列第4篇 - Solidity数据位置分析。Solidity 系列完整的文章列表请查看分类-Solidity。
写在前面Solidity是以太坊智能合约编程语言,阅读本文前,你应该对以太坊、智能合约有所了解,如果你还不了解,建议你先看以太坊是什么
本文前半部分是参考Solidity官方文档(当前最新版本:0.4.20)进行翻译,后半部分是结合实际合约代码实例说明类型的使用(仅针对专栏订阅用户)。
数据位置(Data location)在系列第一篇,我们提到 Solidity 类型分为两类:值类型(Value Type) 及 引用类型(Reference Types),前面我们已经介绍完了值类型,接下来会介绍引用类型。
引用类型是一个复杂类型,占用的空间通常超过256位, 拷贝时开销很大,因此我们需要考虑将它们存储在什么位置,是memory(内存中,数据不是永久存在)还是storage(永久存储在区块链中)所有的复杂类型如数组(arrays)和结构体(struct)有一个额外的属性:数据的存储位置(data location)。可为memory和storage。
根 ...
实现一个可管理、增发、兑换、冻结等高级功能的代币
本文主要介绍代币高级功能的实现: 代币管理、代币增发、代币兑换、资产冻结、Gas自动补充。
写在前面在上一篇:一步步教你创建自己的数字货币(代币)进行ICO中我们实现一个最基本功能的代币,本文将在上一遍文章的基础上,讲解如果添加更多的高级功能。
实现代币的管理者虽然区块链是去中心化的,但是实现对代币(合约)的管理,也在许多应用中有需求,为了对代币进行管理,首先需要给合约添加一个管理者。
我们来看看如果实现,先创建一个_owned_ 合约。
1234567891011121314151617contract owned { address public owner; function owned() { owner = msg.sender; } modifier onlyOwner { require(msg.sender == owner); _; } // 实现所有权转移 function transferOwnership(address newO ...
智能合约语言 Solidity 教程系列3 - 类型介绍
Solidity 教程系列第三篇 - Solidity 函数类型介绍。Solidity 系列完整的文章列表请查看分类-Solidity。
写在前面Solidity是以太坊智能合约编程语言,阅读本文前,你应该对以太坊、智能合约有所了解,如果你还不了解,建议你先看以太坊是什么
本文前半部分是参考Solidity官方文档(当前最新版本:0.4.20)进行翻译,后半部分是结合实际合约代码实例说明类型的使用(仅针对专栏订阅用户)。
函数类型(Function Types)函数也是一种类型,且属于值类型。可以将一个函数赋值给一个函数类型的变量。还可以将一个函数作为参数进行传递。也可以在函数调用中返回一个函数。函数类型有两类:内部(internal)和外部(external)函数
内部(internal) 函数只能在当前合约内被调用(在当前的代码块内,包括内部库函数,和继承的函数中)。外部(external) 函数由地址和函数方法签名两部分组成,可作为外部函数调用的参数,或返回值。
函数类型定义如下:
1function (<parameter types>) {interna ...
一步步教你创建自己的数字货币(代币)进行ICO
本文从技术角度详细介绍如何基于以太坊ERC20创建代币的流程.
写在前面本文所讲的代币是使用以太坊智能合约创建,阅读本文前,你应该对以太坊、智能合约有所了解,如果你还不了解,建议你先看以太坊是什么
代币Token如果不那么追求精确的定义,代币就是数字货币,比特币、以太币就是一个代币。利用以太坊的智能合约可以轻松编写出属于自己的代币,代币可以代表任何可以交易的东西,如:积分、财产、证书等等。因此不管是出于商业,还是学习很多人想创建一个自己的代币,先贴一个图看看创建的代币是什么样子。
今天我们就来详细讲一讲怎样创建一个这样的代币。
ERC20 Token也许你经常看到ERC20和代币一同出现, ERC20是以太坊定义的一个代币标准。要求我们在实现代币的时候必须要遵守的协议,如指定代币名称、总量、实现代币交易函数等,只有支持了协议才能被以太坊钱包支持。其接口如下:
12345678910111213141516contract ERC20Interface { string public constant name = "Token Name"; ...
startService 和 bindService的区别
Service的简介Service是Android系统中的四大组件之一,它是一种长生命周期的,没有可视化界面,运行于后台的一种服务程序。比如我们播放音乐的时候,有可能想边听音乐边干些其他事情,当退出播放音乐的应用,如果不用Service,我 们就听不到歌了,所以这时候就得用到Service了。
Service生命周期Service的生命周期并不像Activity那么复杂,它只继承了onCreate(),onStart(),onDestroy()三个方法,当第一次启动Service时,先后调用了onCreate(),onStart()这两个方法,当停止Service时,则执行onDestroy()方法,这里需要注意的是,如果Service已经启动了,当我们再次启动Service时,不会在执行onCreate()方法,而是直接执行onStart()方法。
Service的启动方式Service的有两种启动方式:Context.startService()和Context.bindService(),这两种方式对Service生命周期的影响是不同的。
Context.startService ...
智能合约语言 Solidity 教程系列2 - 类型介绍
Solidity教程系列第二篇 - Solidity地址类型介绍.Solidity 系列完整的文章列表请查看分类-Solidity。
写在前面Solidity是以太坊智能合约编程语言,阅读本文前,你应该对以太坊、智能合约有所了解,如果你还不了解,建议你先看以太坊是什么
本文前半部分是参考Solidity官方文档(当前最新版本:0.4.20)进行翻译,后半部分是结合实际合约代码实例说明类型的使用(仅针对专栏订阅用户)。
地址类型(Address)地址类型address是一个值类型,
地址 : 20字节(一个以太坊地址的长度),地址类型也有成员,地址是所有合约的基础支持的运算符:
<=, <, ==, !=, >= 和 >
> 注意:从0.5.0开始,合约不再继承自地址类型,但仍然可以显式转换为地址。
地址类型的成员
balance 属性及transfer() 函数这里是地址类型相关成员的快速索引balance用来查询账户余额,transfer()用来发送以太币(以wei为单位)。如:
123address x = 0x123;address myAddre ...
比特币如何达成共识 - 最长链的选择
比特币没有中心机构,几乎所有的完整节点都有一份公共总帐本,那么大家如何达成共识:确认哪一份才是公认权威的总账本呢?
为什么要遵守协议这其实是一个经济问题,在经济活动中的每个人都是自私自利的,追求的是利益的最大化,一个节点工作量只有在其他的节点认同其是有效的(打包的新区块,其他的节点只有验证通过才会加入到区块链中,并在网络上传播),才能够过得收益,而只有遵守规则才会得到其他的节点认同。因此,基于逐利,节点就会自发的遵守协议。共识就是数以万计的独立节点遵守了简单的规则(通过异步交互)自发形成的。
共识:共同遵守的协议规范
去中心化共识在工作量证明一篇,我们了解通过工作量证明来竞争记账,权威的总帐本是怎么达到共识的,没有完全说清楚,今天补上,实际上,比特币的共识由所有节点的4个__独立过程__ 相互作用而产生:
每个节点(挖矿节点)依据标准对每个交易进行独立验证
挖矿节点通过完成工作量证明,将交易记录独立打包进新区块
每个节点独立的对新区块进行校验并组装进区块链
每个节点对区块链进行独立选择,在工作量证明机制下选择累计工作量最大的区块链
共识最终目的是保证比特币不停的在工作量最大的区 ...
智能合约语言 Solidity 教程系列1 - 类型介绍
写在前面Solidity是以太坊智能合约编程语言,阅读本文前,你应该对以太坊、智能合约有所了解,如果你还不了解,建议你先看以太坊是什么Solidity教程会是一系列文章,本文是第一篇:介绍Solidity的变量类型。Solidity 系列完整的文章列表请查看分类-Solidity。
本文前半部分是参考Solidity官方文档(当前最新版本:0.4.20)进行翻译,后半部分是结合实际合约代码实例说明类型的使用(仅针对专栏订阅用户)。
类型Solidity是一种静态类型语言,意味着每个变量(本地或状态变量)需要在编译时指定变量的类型(或至少可以推倒出类型)。Solidity提供了一些基本类型可以用来组合成复杂类型。
Solidity类型分为两类:
值类型(Value Type) - 变量在赋值或传参时,总是进行值拷贝。
引用类型(Reference Types)
值类型(Value Type)值类型包含:
布尔类型(Booleans)
整型(Integers)
定长浮点型(Fixed Point Numbers)
定长字节数组(Fixed-size byte arrays)
有理数和 ...
一步步教你开发、部署第一个去中心化应用(Dapp) - 宠物商店
今天我们来编写一个完整的去中心化(区块链)应用(Dapps), 本文可以和编写智能合约结合起来看。
写在前面阅读本文前,你应该对以太坊、智能合约有所了解,如果你还不了解,建议你先看以太坊是什么除此之外,你最好还了解一些HTML及JavaScript知识。
本文通过实例教大家来开发去中心化应用,应用效果如图:
从本文,你可以学习到:
搭建智能合约开发环境
创建Truffle项目
编写智能合约
编译和部署智能合约到区块链
如何通过Web3和智能合约交互
MetaMask的使用
项目背景Pete有一个宠物店,有16只宠物,他想开发一个去中心化应用,让大家来领养宠物。在truffle box中,已经提供了pet-shop的网站部分代码,我们只需要编写合约及交互部分。
环境搭建
安装Node
安装Truffle: npm install -g truffle
安装Ganache
Ganache(或Ganache CLI) 已经取代了testrpc
创建项目
创建项目目录并进入
12> mkdir pet-shop-tutorial> cd pet-shop-tutori ...
Geth 控制台使用及 Web3.js 使用实战
在开发以太坊去中心化应用,免不了和以太坊进行交互,那就离不开Web3。Geth 控制台(REPL)实现了所有的web3 API及Admin API,使用好 Geth 就是必修课。结合Geth命令用法阅读效果更佳。
写在前面阅读本文之前,你需要对以太坊(区块链)有初步的了解,如果你不知道以太坊是什么,请先阅读以太坊是什么。如果你在我的小专栏之外的地方阅读到本文,你可能只能阅读本文的节选,阅读完整全文请订阅小专栏区块链技术
geth控制带初探-启动、退出安装参考智能合约开发环境搭建最简单启动方式如下:
1$ geth console
geth控制台启动成功之后,可以看到>提示符。退出输入exit
geth日志控制重定向日志到文件使用geth console启动时,会在当前交互界面下时不时出现日志。可以使用以下方式把日志输出到文件。
1$ geth console 2>>geth.log
可以新开一个命令行终端输入以下命令查看日志:
1$ tail -f geth.log
重定向另一个终端也可以把日志重定向到另一个终端,先在想要看日志的终端输入
1$ tty
就可以 ...