EOS区块链开发的第一步

2017对区块链初创公司来说真是史诗般的。由于以太坊区块链以及它为开发人员创建去中心化应用程序带来的机会,许多区块链公司诞生了。

以太坊引入了Solidity语言和智能合约——去中心化应用的构建模块,开启了区块链开发的火花。然而,以太坊才刚刚开始。区块链技术正在快速发展,现在又出现了一个新的,强大的技术:EOS Blockchain。

EOS的目标是成为第一个支持工业规模去中心化应用的分布式操作系统。它引入了一种新的区块链架构,旨在实现dApp的垂直和水平扩展。它是通过创建一个类似操作系统的构造来实现的,可以在其上构建应用程序。

EOSIO软件提供帐户,身份验证,数据库,异步通信以及跨多个CPU核心或群集的应用程序调度。由此产生的技术是一种区块链架构,最终可以扩展到每秒数百万次交易,消除用户费用,并允许在受管理的区块链的情况下快速轻松地部署和维护去中心化的应用程序。

当然,与其兄弟姐妹相比,EOS设定的水平非常高!

EOS区块链开发

为了帮助EOS区块链开发社区,Infinite X Labs的开发团队决定运行一系列专门用于EOS开发的教程。在本教程中,我们将探讨有助于您设置环境并运行第一个testnet节点的步骤。我们将创建一个帐户,我们将部署智能合约样本到EOS区块链,以便我们可以与之互动。

请注意EOSIO仍处于开发阶段,未来某些步骤可能会发生变化。但是,我们的团队将尽力保持教程始终是最新的。最近的更新是2018年11月25日,本教程使用最新版本的EOSIO v1.4.4进行了更新。

那么,让我们开始吧!

1.设置构建/开发环境

为了构建EOS dApp,我们首先需要设置我们的环境。当您在大多数情况下构建dApp时,您将使用testnet。EOS为我们提供了构建本地testnet或公共testnet的选择。在编写本教程时,公共testnet目前不可用,因此我们将使用本地testnet。

出于本教程的目的,我们将使用macOS Mojave版本10.14,由于EOSIO的自动构建脚本,设置环境非常简单。它安装所有依赖项并构建EOSIO。在运行脚本之前,作为第一步,使用以下命令以递归方式拷贝EOS repo:

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

完成此操作后,转到eos文件夹并使用以下命令运行eosio_build.sh脚本:

sh ./eosio_build.sh darwin

在安装所有依赖项然后构建之前可能需要相当长的时间。

如果你终于看到这个屏幕,那么恭喜你!您已成功安装所有依赖项并构建了EOSIO。最好验证您的安装,但我们会在一段时间内完成。在此之前,让我们检查一下安装产生了什么。

构建EOSIO时,它创建了大量文件和文件夹。我们来看看其中的一些。

程序文件夹:/eos/programs

该程序的文件夹包含一些来自EOSIO的非常有用的程序。

  • nodeos ,服务器端区块链节点组件。可以配置插件来运行节点的核心EOSIO守护程序。示例用法是块生产,专用API端点和本地开发。
  • cleos ,与区块链交互的命令行界面。
  • keosd ,一个EOSIO钱包守护程序,用于加载与钱包相关的插件,例如HTTP接口和RPC API。
  • eosio-launcher ,协助部署多节点区块链网络的应用程序。

构建文件夹:/eos/build

构建文件夹是所有构建的内容所在的位置。您可以在 eos/build/programs 中的子文件夹中找到 eos/programs 文件夹的可执行文件。

构建文件夹是我们要进行构建验证的地方。这是一组可以针对您的构建运行的测试,以执行一些基本验证。要在构建之后运行测试套件,我们需要启动mongo守护程序,然后运行 make test 命令。

/usr/local/bin/mongod -f /usr/local/etc/mongod.conf &

cd build
make test

注意:要运行该命令,您必须位于build文件夹中。

如果一切顺利,所有测试都应该通过。如果你看到超过24个测试,不要感到惊讶。EOSIO不断为每个版本添加新的测试。

现在是时候安装可执行文件了。为了便于合同开发,可以使用 make install 命令将内容安装在 /urs/local 文件夹中。此步骤从 build 文件夹运行。安装需要足够的权限。

cd build 
sudo make install

2.创建和启动单节点Testnet

最后是时候推出我们的第一个testnet节点了。

使用最新版本的EOSIO,您可以使用以下命令启动自己的单节点区块链:

# To print contract's output to console by default add:
# --contracts-console

nodeos -e -p eosio --plugin eosio::wallet_api_plugin --plugin eosio::chain_api_plugin --plugin eosio::history_api_plugin --contracts-console

如果您收到错误 “nodeos”:command not found ,则应将新的二进制文件路径添加到PATH环境变量中。在GitHub上查看有关 该问题 的更多信息。它将开始生成块。真棒!

如果终端窗口已关闭,并且您想再次启动节点,请运行上面的命令。它将开始从你最新的块生产块。

此外,当您第一次在路径 /Library/Application Support/eosio/ 上创建了几个文件夹时运行命令。在那里,您可以找到我们将在接下来的两行中讨论的一些文件。

但首先,您可能想知道命令中所有这些参数是什么,所以让我们来看看:

1.主要命令

nodeos

2.配置 eosio::producer_plugin 的选项

  • -e ,即使链状态是 stale ,也启用块生产。
  • -p <producer_name> ,此节点控制的生产者的ID。

3.应用程序配置选项

--plugin arg ,要启用的插件,可以多次指定。

使用EOSIO Dawn 4.2,您可以使用 eosio::chain_plugin 的几个命令行选项:

# recovers reversible block database if that database is in a bad state
--fix-reversible-blocks

# do not skip any checks that can be skipped while replaying irreversible blocks
--force-all-checks

# clear chain state database and replay all blocks
--replay-blockchain

# clear chain state database, recover as many blocks as possible from the block log, and then replay those blocks
--hard-replay-blockchain

# clear chain state database and block log
--delete-all-blocks

3.验证环境

你准备好做一些有趣的事吗?

EOSIO附带了示例合同,可以上传和运行以进行测试。我们将使用 eosio.token 合同验证我们的单节点设置。假设 nodeos 如上所述运行。

创建一个钱包

每个合同都需要一个关联的帐户,所以首先,您需要创建一个钱包。要创建钱包,您需要将 wallet_api_plugin 加载到nodeos进程中。这可以通过以下两种方式之一完成:

  • 通过 /Library/Application Support/eosio/nodeos/config 文件夹中的 config.ini 文件中的插件(即 plugin = eosio::wallet_api_plugin )。
  • 调用nodeos时通过插件命令行选项(即 -plugin eosio::wallet_api_plugin )。

使用 cleoswallet create 子命令创建钱包。

cd ~/eos/build/programs/cleos/ 

# Outputs a password that you need to save to be able to lock/unlock the wallet
# If you don't want to use the "default" wallet add: -n {your_wallet_name} at the end of your command
cleos wallet create

导入eosio帐户的私钥

注意:您只应将其用于测试目的。

密钥可以在 config.ini 文件中找到,该文件位于 /Library/Application Support/eosio/nodeos/config 中。

# faucet-private-key = [public key, WIF private key] for signing for faucet creator account (eosio::faucet_testnet_plugin) 
[EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV,5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3]

获得密钥后,您需要将其导入钱包:

cleos wallet import --private-key={eosio_account_private_key}

eosio.token 合同创建一个帐户名为 token 的帐户将用于 eosio.token 合同。生成两个公钥/私钥对,稍后将其分配为 public-OwnerKeypublic-ActiveKey

cleos create key # OwnerKey 
cleos create key # ActiveKey

这将输出以下形式的两对公钥和私钥:

私钥:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

公钥:EOSXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

将两个私钥导入钱包。

cleos wallet import --private-key={private-OwnerKey} 
cleos wallet import --private-key={private-ActiveKey}

注意:如果您未指定钱包的名称,则将使用“默认”名称。另外,不要忘记保存生成的密钥。

使用 cleos create account 命令创建token帐户。创建将由eosio帐户授权。上面生成的两个公钥将与帐户关联,一个作为其 OwnerKey ,另一个作为其 ActiveKey 。您应该获得一个JSON响应,其中包含一个交易ID,确认它已成功执行。

cleos create account eosio token {public-OwnerKey} {public-ActiveKey}

executed transaction: e0d7f17de1e7f1a7b73dfda511ce7714d25fceec6b43d86ddf997fb38852e0c2  200 bytes  2774 us
#         eosio <= eosio::newaccount            {"creator":"eosio","name":"token","owner":{"threshold":1,"keys":[{"key":"EOS6EhzztSvBp1K76GqF6A893bL...

如果您看到 warning: transaction executed locally, but may not be confirmed by the network yet ,意为 警告:本地执行的交易,但可能尚未被网络确认 ,请不要担心。本地执行的交易警告是正常的,适用于所有交易。成功提交交易并不能保证交易将被执行。如果块生成器当时负载很重,则可能会丢弃该交易。

使用以下命令验证是否已成功创建帐户:

cleos get account token --json

如果一切顺利,您将收到类似于以下内容的输出:

{
  "account_name": "token",
  "head_block_num": 70942,
  "head_block_time": "2018-07-29T16:53:48.000",
  "privileged": false,
  "last_code_update": "1970-01-01T00:00:00.000",
  "created": "2018-07-29T16:49:47.500",
  "ram_quota": -1,
  "net_weight": -1,
  "cpu_weight": -1,
  "net_limit": {
    "used": -1,
    "available": -1,
    "max": -1
  },
  "cpu_limit": {
    "used": -1,
    "available": -1,
    "max": -1
  },
  "ram_usage": 2724,
  "permissions": [{
      "perm_name": "active",
      "parent": "owner",
      "required_auth": {
        "threshold": 1,
        "keys": [{
            "key": "EOS5h87m6u3DppJ4eMsSP6X9As9DAtXDzxsWzRN8RsUBCjk4axnjw",
            "weight": 1
          }
        ],
        "accounts": [],
        "waits": []
      }
    },{
      "perm_name": "owner",
      "parent": "",
      "required_auth": {
        "threshold": 1,
        "keys": [{
            "key": "EOS6s2JuFtzQAnPSNu9R9w3k53d7kEDVEjTmceTsZwy4Wn235Yf5W",
            "weight": 1
          }
        ],
        "accounts": [],
        "waits": []
      }
    }
  ],
  "total_resources": null,
  "self_delegated_bandwidth": null,
  "refund_request": null,
  "voter_info": null
}

eosio.token 合同上传到区块链

使用token帐户上传合同。响应应该是带有一些JSON的 transaction_id 。这表示您的合同已成功上传:

# cleos set contract token {path_to_contract_folder} {path_to_wast_file} {path_to_abi_file}
cleos set contract token ./contracts/eosio.token/ ./contracts/eosio.token/eosio.token.wast ./contracts/eosio.token/eosio.token.abi

Reading WAST/WASM from ./contracts/eosio.token/eosio.token.wast...
Assembling WASM...
Publishing contract...
executed transaction: 82f252b7b1e71197626cf912a975562c08cd452e47b6582399b47baca22d83b5  8096 bytes  8986 us
#         eosio <= eosio::setcode               {"account":"token","vmtype":0,"vmversion":0,"code":"0061736d01000000017e1560037f7e7f0060057f7e7e7f7f...
#         eosio <= eosio::setabi                {"account":"token","abi":"0e656f73696f3a3a6162692f312e30010c6163636f756e745f6e616d65046e616d65050874...

您还可以使用以下命令验证代码是否已设置:

cleos get code token
code hash: 48a05166e9a5493b422288d137a08a7b2ccf7fb2c3473b630909440d7bbf177a

在使用 eosio.token 合同之前,您必须先创建然后发出token。

# Create
cleos push action token create '{"issuer":"token","maximum_supply":"1000000.0000 TKN","can_freeze":"0","can_recall":"0","can_whitelist":"0"}' -p token

executed transaction: 9c2ef8724134d693f60c7c68e38a25d37450944b78a7df09f9cc3cb360a9f078  120 bytes  1861 us
#         token <= token::create                {"issuer":"token","maximum_supply":"1000000.0000 TKN"}

# Issue
cleos push action token issue '{"to":"token","quantity":"1000.0000 TKN","memo":""}' -p token

executed transaction: c37952237ed5521575edb19d201841f2ac256ebe84c0957f0266963b96cc64cc  120 bytes  490 us
#         token <= token::issue                 {"to":"token","quantity":"1000.0000 TKN","memo":""}

接下来,验证初始余额:

cleos get table token token accounts

{
  "rows": [{
      "balance": "1000.0000 TKN"
    }
  ],
  "more": false
}

使用 eosio.token 合同转移资金

以下命令显示发送到 eosio.token 合同的 transfer 操作,将 20.0000 TKNtoken 帐户转移到 eosio 帐户。成功提交的交易将生成类似于以下内容的交易ID和JSON输出。

cleos push action token transfer '{"from":"token","to":"eosio","quantity":"20.0000 TKN","memo":"my first transfer"}' -p token

executed transaction: be3929724d07d796df9913d944e1ebd20ca527ec273415ecbc94cb6fc08230e1  144 bytes  6097 us
#         token <= token::transfer              {"from":"token","to":"eosio","quantity":"20.0000 TKN","memo":"my first transfer"}
#         eosio <= token::transfer              {"from":"token","to":"eosio","quantity":"20.0000 TKN","memo":"my first transfer"}

检查余额

检查上一个交易中涉及的两个帐户的状态,如下所示:

cleos get table token eosio accounts
{
  "rows": [{
      "balance": "20.0000 TKN"
    }
  ],
  "more": false
}

cleos get table token token accounts
{
  "rows": [{
      "balance": "980.0000 TKN"
    }
  ],
  "more": false
}

接收帐户 eosio 现在具有 20 TKN 的余额,并且发送帐户 token 现在比最初的问题少 20 TKN

让我们总结到目前为止的所有步骤。我们首先安装了EOSIO,然后设置了我们的开发环境。我们安装了合同开发所需的可执行文件,我们已经启动了第一个在区块链上生成块的testnet节点。我们学习了如何生成公钥/私钥并将其导入我们的钱包。我们使用我们的公钥创建了一个帐户—— OwnerKeyActiveKey ,我们部署了 eosio.token 合同。作为结局,我们使用账户之间的 eosio.token 合同转账。

想了解更多?感兴趣的同学可以试试, 深入浅出玩转EOS钱包开发 ,本课程以手机EOS钱包的完整开发过程为主线,深入学习EOS区块链应用开发,课程内容即涵盖账户、计算资源、智能合约、动作与交易等EOS区块链的核心概念,同时也讲解如何使用eosjs和eosjs-ecc开发包访问EOS区块链,以及如何在React前端应用中集成对EOS区块链的支持。课程内容深入浅出,非常适合前端工程师深入学习EOS区块链应用开发。

======================================================================

分享一些以太坊、EOS、比特币等区块链相关的交互式在线编程实战教程:

  • java以太坊开发教程,主要是针对java和android程序员进行区块链以太坊开发的web3j详解。
  • php以太坊,主要是介绍使用php进行智能合约开发交互,进行账号创建、交易、转账、代币开发以及过滤器和交易等内容。
  • python以太坊,主要是针对python工程师使用web3.py进行区块链以太坊开发的详解。
  • 以太坊入门教程,主要介绍智能合约与dapp应用开发,适合入门。
  • 以太坊开发进阶教程,主要是介绍使用node.js、mongodb、区块链、ipfs实现去中心化电商DApp实战,适合进阶。
  • ERC721以太坊通证实战,课程以一个数字艺术品创作与分享DApp的实战开发为主线,深入讲解以太坊非同质化通证的概念、标准与开发方案。内容包含ERC-721标准的自主实现,讲解OpenZeppelin合约代码库二次开发,实战项目采用Truffle,IPFS,实现了通证以及去中心化的通证交易所。
  • C#以太坊,主要讲解如何使用C#开发基于.Net的以太坊应用,包括账户管理、状态与交易、智能合约开发与交互、过滤器和交易等。
  • EOS入门教程,本课程帮助你快速入门EOS区块链去中心化应用的开发,内容涵盖EOS工具链、账户与钱包、发行代币、智能合约开发与部署、使用代码与智能合约交互等核心知识点,最后综合运用各知识点完成一个便签DApp的开发。
  • java比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在Java代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是Java工程师不可多得的比特币开发学习课程。
  • php比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在Php代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是Php工程师不可多得的比特币开发学习课程。
  • c#比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在C#代码中集成比特币支持功能,例如创建地址、管理钱包、构造裸交易等,是C#工程师不可多得的比特币开发学习课程。
  • tendermint区块链开发详解 ,本课程适合希望使用tendermint进行区块链开发的工程师,课程内容即包括tendermint应用开发模型中的核心概念,例如ABCI接口、默克尔树、多版本状态库等,也包括代币发行等丰富的实操代码,是go语言工程师快速入门区块链开发的最佳选择。

汇智网原创翻译,转载请标明出处。这里是 EOS区块链开发的第一步

我来评几句
登录后评论

已发表评论数()

相关站点

热门文章