Qtum区块链开发指南 -- Hello World!
作者:cryptominder
简介
在作者之前的⼀一篇⽂文章(steemit/qtum/@cryptominder/qtum-blockchain-development-environment-setup)中,描述了了如何利利⽤用Docker部署⼀一个3节点的Qtum区块链环境。这篇指南将会以此为基础,希望读者在阅读本⽂文之前先配置好相关环境。
作为Qtum智能合约开发系列列教程的第⼀一篇⽂文章,我们将从⼤大家熟悉的以太坊智能合约实例例“Ethereum Greeter tutorial”(参考/greeter)开始。本⽂文会该实例例中相同的Solidity智能合约,并⽤用Qtum命令⾏行行⼯工具(即qtum-cli)进⾏行行创建和运⾏行行。
希望在阅读完本教程后,读者能对Qtum区块链有⼀一个更更加深⼊入的认识,进⽽而开发出更更多有趣的去中⼼心化应⽤用(DApp)。
为何选择Qtum⽽而不不是以太坊?
Qtum结合了了⼏几个⽐比较成熟的区块链⽣生态系统的优势,并进⾏行行了了多种创新,这些区块链包括:
Bitcoin:Qtum采⽤用了了和⽐比特币相同的UTXO模型(当然也包含由此带来的安全性),同样⽀支持简单⽀支付协议(SPV);
Ethereum:Qtum⽬目前采⽤用了了以太坊运⾏行行智能合约的虚拟机(也即EVM);
Blackcoin:Qtum借鉴了了⿊黑币的权益证明共识机制(PoS),并对其进⾏行行多项改进;
Qtum实现了了账户抽象层(AAL),使得UTXO模型能够和以太坊的账户模型进⾏行行⽆无缝交互。并且除了了EVM 外,Qtum近期还宣布会⽀支持更更多不不同虚拟机。
由于⽀支持SPV,Qtum客户端可以在带宽/内存受限的设备上运⾏行行,在这些设备上下载和保存所有区块信息是不不太现实的。Qtum的SPV客户端可以在iOS(如iPhone,iPad)及Android设备上运⾏行行,甚⾄至在卫星上也可以运⾏行行Qtum。需要说明的是,虽然Qtum⽀支持移动设备,但移动端市场只是他们蓝图中的⼀一部分,Qtum关注的领域⾮非常⼴广泛。
由于Qtum采⽤用PoS共识机制,这使得在低功耗设备上挖矿成为可能 -- ⽐比如树莓派。这⽐比⽬目前⽐比特币和以太坊采⽤用的PoW机制要环保得多。
同时,为了了防⽌止分叉,Qtum推出分布式⾃自治协议(DGP)以实现区块链参数的动态调整。
基于以上的⼀一些原因(当然还有其他原因,⽐比如他们出⾊的团队组成等),作者认为Qtum区块链提供了了许多
"protocolversion": 70016,
"walletversion": 130000,
"balance": 2000000.00000000,
"stake": 0.00000000,
"blocks": 600,
"timeoffset": 0,
"connections": 2,
"proxy": "",
"difficulty": {
"proof-of-work": 4.656542373906925e-10,
"proof-of-stake": 4.656542373906925e-10
},
比特币挖矿教程"testnet": false,
"moneysupply": 12000000,
"keypoololdest": 1507588445,
"keypoolsize": 100,
"paytxfee": 0.00000000,
"relayfee": 0.00400000,
"errors": ""
}
从以上信息中我们可以看到,当前区块⾼高度为600,可⽤用余额为2000000.00000000。这些余额⾜足够我们进⾏行行本教程所有内容。
如果你通过其他节点运⾏行行getinfo命令(⽐比如qtumd node2和qtumd node3),区块⾼高度应该和上⾯面⼀一致,或者更更⾼高(取决于你等待的时间),但是余额会是0。例例如:
docker run -i --network container:qtumd_node2 -v ${PWD}/f:/home/qtu f:ro -v ${PWD}/node2_data:/data cryptominder/qtum:latest qtum-cli getinfo
将会返回:
"protocolversion": 70016,
"walletversion": 130000,
"balance": 0.00000000,
"stake": 0.00000000,
"blocks": 605,
"timeoffset": 0,
"connections": 2,
"proxy": "",
"difficulty": {
"proof-of-work": 4.656542373906925e-10,
"proof-of-stake": 4.656542373906925e-10
},
"testnet": false,
"moneysupply": 12100000,
"keypoololdest": 1507588475,
"keypoolsize": 100,
"paytxfee": 0.00000000,
"relayfee": 0.00400000,
"errors": ""
}
这是正常的,我们可以继续。
随后,我们需要验证是否有已存在的智能合约,请运⾏行行⼀一下命令:
$ docker run -i --network container:qtumd_node1 -v ${PWD}/f:/home/q f:ro -v ${PWD}/node1_data:/data cryptominder/qtum:latest qtum-cli list contracts
你应该可以看到结果列列出5个智能合约:
{
"0000000000000000000000000000000000000083": 0.00000000,
"0000000000000000000000000000000000000080": 0.00000000,
"0000000000000000000000000000000000000081": 0.00000000,
"0000000000000000000000000000000000000082": 0.00000000,
"0000000000000000000000000000000000000084": 0.00000000
}
这些合约都不不是我们⾃自⼰己部署的,在本教程中,请忽略略它们。
接下来我们都会⽤用qtumd_node1节点运⾏行行所有qtum-cli命令,但我强烈烈建议你在学习过程中可以尝试在其它节点运⾏行行,看看结果如何。
第⼆二步 -- 获取相关⼯工具:solc和ethabi
我们将采⽤用Solidity⽂文档中推荐的Docker镜像作为Solidity编译器器,可以通过以下⽅方法获取镜像:
$ docker pull ethereum/solc
请确保获取后其能够正确运⾏行行:
$ docker run --rm -v ${PWD}:/solidity ethereum/solc:stable --version
以上命令的正确返回结果为:
solc, the solidity compiler commandline interface
Version: 0.4.17+commit.bdeb9e52.Linux.g++
请注意我们⽤用到的-v ${PWD}:/solidity选项。镜像中的/sodility路路径是⼯工作路路径,因此我们需要
把当前的绝对路路径映射到那⾥里里。
你可以通过以下命令获取solc的使⽤用帮助:
$ docker run --rm -v ${PWD}:/ethabi cryptominder/ethabi:latest --help
同时我们还需要ethabi命令⾏行行⼯工具。作者创建了了⼀一个对应的镜像:
hub.docker/r/cryptominder/ethabi/。
可以通过以下命令获取镜像:
$ docker pull cryptominder/ethabi
检查是否可以正确运⾏行行:
$ docker run --rm -v ${PWD}:/ethabi cryptominder/ethabi:latest --help
以上命令返回结果如下:
Ethereum ABI coder.
Copyright 2016-2017 Parity Technologies (UK) Limited
Usage:
ethabi encode function <abi-path> <function-name> [-p <param>]... [-l | --leni ent]
ethabi encode params [-v <type> <param>]... [-l | --lenient]
ethabi decode function <abi-path> <function-name> <data>
ethabi decode params [-t <type>]... <data>
ethabi decode log <abi-path> <event-name> [-l <topic>]... <data>
ethabi -h | --help
Options:
-h, --help Display this message and exit.
-l, --lenient Allow short representation of input params.
Commands:
encode Encode ABI call.
decode Decode ABI call result.
function Load function from json ABI file.
params Specify types of input params inline.
log Decode event log.
或许你⼜又注意到,我们运⾏行行docker时添加了了-v ${PWD}:/ethabi选项。因为镜像中⼯工作路路径为/ethabi,因此我们需要对当前路路径进⾏行行映射。
好了了,现在⼀一切准备就绪,我们可以正式开始了了。
第三步 -- 编译智能合约
这⾥里里采⽤用与/greeter⼀一致的实例例进⾏行行演示:
创建如下⽂文件,命名为helloworld.sol:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论