比特帝国

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫描二维码登录本站

比特帝国 首页 EOS EOS资讯 查看内容

最友善EOS开发教程——从如何发行「新垣结衣币」说起

2018-5-9 19:12| 发布者: admin| 查看: 343| 评论: 0|原作者: HelloEOS社区

           

HelloEOS            

构建最具底蕴社区
汇聚国内最强石墨烯开发力量
                            

               


Don't Panic不要恐慌,本系列将是你见过的最友善的EOS开发教程。

Part Ⅰ Mac/Ubuntu搭建EOS开发环境

发币之前需要先搭建EOS开发环境

1.前期准备:iTerm/Brew/Git/Boost四件套

1·1 iTerm

首先,你要在 Mac 上安装一个 iTerm 。它相对原生的 Terminal 来说最大的好处是可以分屏,这样左半屏幕开个进程挖矿,右半屏幕开个进程操作,方便简洁!

iTerm的下载地址为:https://www.iTerm2.com/downloads.html

1·2 Brew

Brew 是 Mac 上必备的命令行下的软件管理工具,Brew 怎么安装呢?

第一步,打开 iTerm 

安装好1.1说的 iTerm 以后,用「 Command +空格」快捷键打开 Spotlight ,输入 iterm 按回车就能打开 iTerm 。

第二步,安装 Brew 。

将下面这行代码复制粘贴进 iTerm ,即可安装 Brew 。如果要输入密码,输入你当前使用的账户(需要是管理员账户)的密码即可。

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

通过以上两个步骤,我们就在本机上安装好 Brew 了!


1·3 Git

Git 是现在流行的代码管理软件,通过 Brew 我们可以很容易的安装它。

brew install git


对于 EOS 的环境配置来说,我们只要掌握 Clone 命令就可以。以下这行代码的意思是从 Github 代码仓库上把 EOS 弄到本地:

git clone https://github.com/EOSIO/eos --recursive


在第一次使用 Git 时,Git 可能提示你需要配置账号和邮箱,输入以下两条命令即可。

git config --global user.name "yourname"

yourname 是你的英文名。


git config --global user.email yourname@example.com

yourname@example.com 是你的邮箱

1·4 Boost

安装 EOS 会需要一些依赖的软件,如下图所示。

大部分会自动安装。如果出现错误,提示你有些包版本不对,用 brew upgrade [软件名] 更新就是了。其中要注意的是 Boost 的安装。Boost 是 EOS 需要的 C++ 资源库。如果原本没有安装,那么直接 brew install boost 即可。如果原来已安装旧的版本,那么不要升级,直接卸载重新安装。

brew reinstall boost #ew install boost

安装完之后,用 brew info boos查看,如果 boost 是 1.66.0 版本或以上,就说明你安装成功了!


2.安装 EOS

第一步,用 cd 命令进入1.3中 git clone 下来的 eos 文件夹。

cd eos


第二步,用文件夹中的脚本安装 EOS 。

./eosio_build.sh


如果安装完以后出现以下这张图,就说明你 EOS 环境搭建成功了,恭喜恭喜!


3.跳坑

如果你在上面的过程中遇到任何的问题,可以先看看以下的方法能否解决,如果解决不了请通过文末的二维码联系我。


(1)操作系统版本不对可能会导致报错,可以先升级一下系统版本。

(2)如果在1.3的 git clone 中出现问题,可以通过以下百度网盘的链接下载(不保证是最新版本):https://pan.baidu.com/s/1qIaMA6bantqd-CgBHHvb8A


(3)如果在某个过程中遇到权限不足的问题,可以在命令前加上sudo试一下。


(4)如果是某个文件夹访问权限不足,使用chown命令添加当前用户对于该文件夹的权限。

sudo chown -R [usrname]:[group] dir

例如,当前用户是管理员小明,他发现自己对/usr/local/文件夹访问权限不足,命令就应该是这样的:

sudo chown -R 小明:admin /usr/local/


(5) 尝试重新安装与链接 gettext 。

brew reinstall gettext

brew unlink gettext && brew link gettext -force


4.总结

通过第一部分的内容,我们迈出了重要的一步,在系统上搭建了EOS开发环境,已有22名小白,顺利搭好测试环境,完成了整个社区测试网络第一次自动 BIOS BOOT 流程,并且成功运行 EOSIO Dawn3.0 , 可以看到每个出块节点的工作情况。More(IMEOS是More产品线之一) 技术团队也在 https://github.com/EOSMore 公布两个More创建的智能合约demo, 并且成功运行。


Part Ⅱ 发行「新垣结衣币」

如果你使用的是 Windows 操作系统,那么建议另外安装一个 Ubuntu 系统 。

特别提醒:安装 EOS 的时候出现问题先尝试更新 boost :brew reinstall boost ,有可能是 boost 安装不正确!


注:本文的撰写有所参考 EOS 的官方文档、「余年还做垄亩民」的学习笔记和 EOSgeek 群的分享,特此表示感谢,另感谢 IMEOS 的技术人员、运营和设计的支持!


1.更新 EOS

EOS 系统还在不断迭代中,新的内容不断上线,所以有时候需要更新 EOS 的开发环境。
进入 EOS 的目录,输入以下几行代码,即可更新。

git add .
git commit -m "update"
git pull -v origin master
git submodule update --init --recursive
./eosio_build.sh

2.构建可执行环境

更新完 EOS 后,就要构建可执行环境。

确认当前文件夹是 eos 后,进入 build 文件夹:

cd build

构建可执行环境:

sudo make install

3.运行区块链

什么是区块链?简而言之,区块链就是一个记载交易信息的「超级账本」——在下一期我们会更详细的讲解它。

现在,我们只要在 iTerm 里输入以下两个命令,就能在本机上运行EOS区块链系统了。

cd programs/nodeos #路径为eos/build/programs/nodeos

./nodeos -e -p eosio --plugin eosio::wallet_api_plugin --plugin eosio::chain_api_plugin --plugin eosio::account_history_api_plugin

执行命令后,EOS 系统会不断打包新的区块。其中,# 号后面的数字就是区块的编号。

如果想要重置区块链,进入以下文件夹:

/Users/[ 当前用户名 ]/Library/Application Support/eosio/nodeos/data

将其中所有内容清空即可。

4.钱包与账户的创建

  4.1 创建钱包

在 iTerm 上右击,点击右键菜单中的「 Split Pane Vertically 」开双屏。这时第 3 步运行的区块链系统便会在左侧跑着,我们接下来的操作则会在右侧进行。

首先要做的是,创建一个钱包。

(1)进入 cleos 文件夹:

cd programs/cleos    #路径为eos/build/programs/cleos

(2)创建钱包:

./cleos wallet create

如果成功,系统会返回给你一个钱包的私钥。

4.2 加载 bios 合约

如果我们把 EOS 看做一个操作系统,那么 bios 合约就是让我们能进行最底层的操作的合约,其它合约的运行建立在 bios 合约的基础之上,所以我们先来加载 bios 合约。

加载 bios 合约的命令如下:

./cleos set contract eosio ../../contracts/eosio.bios -p eosio

4.3 三行代码创建账户

在 EOS 中,一个钱包可以对应多个账户。在本例中,我们创建两个账户,一个是 currency 账户,用来执行「发币合约」的账户。另一个是 gakkifans 账户,用来测试转账操作的普通账户。

(1)生成密钥对。

./cleos create key

返回的结果是一个公钥和一个私钥。

(2)钱包导入私钥。

./cleos wallet import [ 生成的私钥 ]

(3)用公钥创建账户 currency 。

注意了,创建账户本来需要两个公钥:OwnerKey 与 ActiveKey 。但是在本期中从简,第一步生成的密钥对用两次。

./cleos create account eosio currency [ 生成的公钥 ] [ 生成的公钥 ]

(4)重复步骤123,创建账户 gakkifans 。

./cleos create key
./cleos wallet import [ 生成的私钥 ]
./cleos create account eosio gakkifans [ 生成的公钥 ] [ 生成的公钥 ]

(5)检查一下两个账户是否已经存在了。

./cleos get account [ 账户名 ]

如果返回的内容不是如下图所示的空值,就说明账户建好了。

5.发行「新垣结衣币」

现在有三个账户—— eosio 账户(默认)、currency 账户和 gakkifans 账户。现在我们用 currency 账户加载并执行「发币合约」,发行新垣结衣币。

5.1 加载合约

(1)我们先看一下 currency 账户的合约情况:

./cleos get code currency

返回的结果是一串为0的hash,说明合约还未创建。

(2)加载系统自带的发币合约

./cleos set contract currency ../../contracts/currency

(3)再次运行第一步,如果发现 code hash 不是 0 了,就说明发币合约加载成功!

5.2 用 currency 账户执行「发币合约」,创建新垣结衣币

执行下面命令:

./cleos push action currency create '{"issuer":"currency", "maximum_supply": "1000000000.0000 GAKKI", "can_freeze": 1, "can_recall": 1, "can_whitelist": 1}' -p currency@active

如果返回以下结果,就说明我们发币成功了!

5.3 发送新垣结衣币给 currency 账户

虽然目前新垣结衣币创建成功了,但还没有账户持有新垣结衣币。所以,我们要给账户「发币」。

(1)执行下面命令:

./cleos push action currency issue '{"to":"currency","quantity":"1000.0000 GAKKI","memo":""}' --permission currency@active

我们就给 currency 账户发了 1000 个 GAKKI 币。

(2)验证一下,通过以下命令查看 currency 账户余额。

./cleos get table currency currency accounts

返回的结果告诉我们,currency 的账户里的确有 1000 个 GAKKI 了!

5.4 测试转账操作

(1)通过如下命令,currency 账户会将 20 个 GAKKI币 转给 gakkifans 账户:

./cleos push action currency transfer '{"from":"currency","to":"gakkifans","quantity":"20.0000 GAKKI","memo":"my first transfer"}' --permission currency@active

(2)查看 currency 和 gakkifans 两个账户的余额。

./cleos get table currency gakkifans accounts
./cleos get table currency currency accounts

如图所示,20 GAKKI 币成功发给了gakkifans !

6.总结

通过第二部分内容,我们踏进了 EOS 开发的大门,创建了钱包与账户,通过默认的智能合约发行了「新垣结衣币」。如果愿意,你可以试着发行自己的偶像币:)。

Part Ⅲ「发币」背后的原理

至此,我们已经实现了在本地环境中发币这件事情,下面我们就来讲讲这波操作背后的原理——EOS 开发中的 5 个最基础的知识点:nodeos 区块链操作系统、cleos 命令行工具、钱包与账户、智能合约、默认合约。

1.nodeos 区块链操作系统

第二部分中,我们通过这个命令来在本机上运行「区块链操作系统」

./nodeos -e -p eosio --plugin eosio::wallet_api_plugin --plugin eosio::chain_api_plugin --plugin eosio::account_history_api_plugin

那么这个 nodeos 究竟是什么呢?在官方的文档中是这样定义的:nodeos 是服务器端区块链节点组件( component ),这个组件支持在运行的时候加载各种插件( plugin )。事实上,通过这行命令可以看到,我们运行时加载了钱包( wallet )、链( chain )和账户历史( account history )三个插件。

对于初学者来说,把组件替换为「操作系统」,可能更好理解一些。那么我们运行的是叫做「 nodeos 」的区块链操作系统。只有将操作系统运行起来,我们才能在上面进行开发。而操作系统上面加载了一些插件,通过这些插件,我们才能和操作系统交互。

那么,操作系统前面的「区块链」又是什么意思呢?部分读者是从事传统开发的,对区块链还不了解。因此,虽然有些啰嗦,但仍要在此处普及一下区块链的概念:

区块链:一本「大账本」,上面记载了所有与交易相关的操作。
区块:区块中记载了当前时段与交易相关的操作。所有区块串在一起,就是区块链。

知道了什么是区块链,就能理解为什么我们在上期实操时会有这样的现象:我们右侧屏幕操作时,左侧的屏幕上会跳出一些内容。


这从「区块链」的角度去看,意思是我们的操作「上链」了;从「操作系统」的角度去看,意思是我们和操作系统发生了交互。

2.cleos 命令行工具

第二部分的第四步开始,我们所有命令的最开始都是 cleos ,例如创建钱包:./cleos wallet create 

cleos 是 EOS 的命令行工具,负责在 nodeos 上 做三件事情——与区块链系统的交互、管理钱包、管理账户,因此需要在启用了 nodeos 的情况下使用。

如果说 nodeos 是一个操作系统,那么 cleos 就是相当于 Terminal 的「命令行工具」。也许,通过下面这张图,你能更好地理解这一点:

在计算机上我们通过终端 Terminal 和操作系统交互,在区块链中我们通过 cleos 命令行工具与区块链操作系统交互。

3.钱包与账户

钱包 是存储密钥对(公钥和私钥)的仓库,在区块链上执行的操作需要经过钱包的签名。

账户 是拥有相应访问权限的链上的安全主体,可以类比为我们计算机上的账户。

那么,钱包和账户的联系是什么呢?

钱包和账户相互独立( no inherent relationship )。当操作需要签名时,例如签署交易,两者才会发生关系。钱包将密钥本地存储在一个加密仓库中(仓库可加锁),能让我们以安全的方式获得签名。在实际项目中,为了更加安全,钱包和 nodeos 应该部署在不同的服务器上。但是在测试的时候从简,给 nodeos 加上 wallet-plugin 插件即可。

4.智能合约

第二部分中,我们加载了 bios 和 currency 两种智能合约。那么,什么是智能合约?

不用看二手资料,EOS 官方对此有准确清晰的定义:每个账户可以发送结构化的操作( Structured Actions ),并且可以定义代码来处理收到后的操作。EOS为每个账户提供自己的私有数据库,只能由该账户的操作处理程序(Action Handler)访问。除此之外,操作处理程序还可以发送操作到其它账户。

操作 与 自动化操作处理程序 相结合,便是 EOS 所定义的智能合约。 

5.默认合约

打开 eos 根目录下的 contract 文件夹,我们会看见其中包含一些官方提供的智能合约,这些合约可以称作默认合约。可以看到,我们上一期中使用的 bios 合约位列其中:


但是! currency 合约在新版本中已经没有了——是因为 EOS 官方已经将 currency 合约换成了 token 合约。
现在,我来给大家介绍一下 bios 合约与 token 合约是什么。
bios 合约:
bios的全称是 Basic Input/Output System 「基本输入输出系统」。EOS 官方对它的定义是,通过此合约第一我们可以直接控制其它账户的资源分配,第二可以使用其它需要权限的API调用。
出于实用主义的角度我们先对此不做过多探讨——如果把 EOS 或者说 nodeos 看做一个操作系统,我们把 bios 合约看做启动计算式时按 F8 就能进入的 bios 系统就可以了。这东西必不可少,软件的运行建立在这个基础上,但我们一般情况下不用去管它,只要保证它顺利加载就行。
token 合约:
token 合约提供了代币的发行与转账功能。所以我们才能实现一行代码发币,因为就是一个智能合约嘛!

6.总结与预告

在第三部分里面,我们通过探寻第二部分操作背后的原理,学习了 EOS 的 5 个最基础的知识点。实操与理论相结合,我们才能走得更远。所以,今后本课程也将沿用这种一期实操一期理论的形式。
在下一期。我们将往前继续跨一步,学会编写智能合约。有人可能觉得,我没有 C++ 的基础。没关系,实操中学会够用的 C++,是完全有可能的!

Part Ⅳ 教程的收费版本

为了更好的服务 EOS 开发者,本教程推出基于小密圈的收费版本。收费版本和免费版本的具体差异请看下图。

教程迭代这件事情的重要性,通过第二课我们就能体会到。第二课中的 currency 合约在 EOS 系统更新后变成了 token 合约。所以,如果坚持使用免费课程,可能需要付出更多的时间和精力。

要进小密圈请扫下方二维码:


通过扫描下方二维码答题可部分减免学费:

END =


推荐阅读

BM介绍EOSIO最新版本Dawn 4.0

HelloEOS梓岑专访:分红是最懒惰的处理节点收益的方式

交易所是否会在EOS节点候选人投票中作恶?

江湖召集令|寻找EOS去中心化生态创造者

Block.one发布EOS宪法草案,技术自治与人治需并行

中文版|EOS.IO技术白皮书第二版

如何做一个真正去中心化的EOS Blockchain?

深度思考丨EOS为无币公有链提供了可能

EOS超级节点思考:效率与去中心化的矛盾

不怕猫的EOS真的能超越以太坊吗?

EOS Dawn 3.0上线,BM中文介绍全文发布

关于BM你所不知道的事

V神回应BM:你说的没错,但我必须要提醒你

BM回怼V神:加密经济治理有局限,所以我选DPOS

EOS亿元超级节点之争,满分入围只是基本条件


收藏 分享 邀请
比特帝国区块链交易所

最新评论

返回顶部