这篇文章是为帮助EOS智能合约开发人员从初级到生产而发布的一系列帖子中的第一篇。有关本教程的完整代码,能够访问github存储库。php
随着对EOS的全部兴奋而来的,对于大多数但愿参与其中的开发人员仍然充满挑战的领域是开始使用智能合约。新开发人员一般须要克服两个障碍:获取工具和设置,并了解如何编写智能合约自己。前端
EOS智能合约是用C++编写的,并编译成Web Assembly。Dan Larimer选择C++来利用其类型和模板系统,这使得更安全的合约,并补充说,由于智能合约的运行时间很短,大多数内存问题都会消失。java
使用EOS的部分挑战是设置本地区块链。幸运的是,EOS为设置本地EOS环境提供了一些基础。对于本指南,咱们将使用EOSIO Dawn 3.0。node
该指南的摘要能够压缩为几个关键命令:python
$ git clone https://github.com/EOSIO/eos --recursive $ cd eos $ ./eosio_build.sh $ cd build && make install $ cd programs/nodeos $ ./nodeos -e -p eosio --plugin eosio::wallet_api_plugin --plugin eosio::chain_api_plugin --plugin eosio::account_history_api_plugin --access-control-allow-origin=*
安装须要一些时间,但很简单。一旦在本地启动并运行本地EOS区块链,就能够开始了工做了。在整个指南中,咱们将引用一些实用程序,如cleos
和eosiocpp
。 你能够在eos/programs
文件夹中找到这些内容。android
在本教程中,咱们将建立和部署分布式系统的“Hello World”:ping/pong。对于没有经验的人,咱们将向服务器发送一个“ping”命令,它将以“pong”响应。 智能合约由如下几个部分组成:C++代码,ABI(应用程序二进制接口)和基于C++代码的WAST(Web程序集文本文件)。这是看起来像:git
在咱们完成工具环境设置以后,让咱们进入合约!要编写ping智能合约,咱们只须要一个实现一个操做的合约:ping。全部这些方法须要作的就是打印“Pong”做为响应。程序员
在contract中建立一个名为ping的文件夹,并在ping/ping.cpp文件中建立一个文件:github
#include <eosiolib/eosio.hpp> #include <eosiolib/print.hpp> class ping_contract : public eosio::contract { public: using eosio::contract::contract; void ping(account_name receiver) { eosio::print("Pong"); } }; EOSIO_ABI( ping_contract, (ping) )
这里有一个简单的小例子,你能够测试,以便更熟悉。让咱们分解这里发生的事情:web
EOS块生成器在执行智能合约时不运行C++代码,他们指望web-assembly。EOS提供了一个名为eosiocpp
的工具,用于将C++代码转换为Web Assembly Text。咱们如今就这样作eosiocpp -o ping.wast ping.cpp
。这一步将产生一些警告,但咱们如今能够忽略这些警告。
接下来,咱们须要应用程序二进制接口。基本上,你的智能合约的ABI将描述方法及其相应的签名。因为咱们在文件的末尾添加了EOSIO_ABI宏,而不手动编写,咱们可使用如下命令生成它:eosiocpp -g ping.abi ping.cpp
。
此时,您的文件夹应以下所示:
├── ping.abi ├── ping.cpp └── ping.wast
如今咱们拥有了智能合约所需的全部资源,让咱们来部署它。确保你有一个钱包建立了cleos wallet create
并确保它经过运行cleos wallet unlock
并在提示时键入你的钱包密码来解锁。咱们将在另外一个账户下部署咱们的智能合约。
为此,咱们须要建立一个新的密钥对,让咱们经过运行:cleos create key
来实现。这将为你生成随机的公钥和私钥。在本教程的其他部分中,请务必使用你刚刚收到的值替换文中的[public_key]/[private_key]。
将私钥导入当前未锁定的账户钱包:cleos wallet import [private_key]
,使用公钥设置合约账户:cleos create account eosio ping.ctr [owner_key:public_key] [active_key:public_key]
。
将合约与新建立的账户连接,ping.ctr ../ping -p ping.ctr
。
一旦部署了新合约,就能够与它进行交互了!让咱们使用相同的密钥建立一个测试人员账户来运行交易:cleos create account eosio tester [public_key] [public_key]
如今咱们能够在命令行上测试它:
$ cleos push action ping.ctr ping '["tester"]' -p tester executed transaction: e89ebeaad8f3623e42d966f62d4d0adbf6a7412b6bb4d7be61f04a22d3cd485e 232 bytes 102400 cycles # ping.ctr <= ping.ctr::ping {"account":"tester"} >> Received ping
应该能够了!
这对咱们的程序员来讲是使人兴奋的,可是大多数用户都不会设置他们的命令行来与你的智能合约进行交互。所以,让咱们将这种互动带到他们更熟悉的界面:他们的浏览器。
要从前端与EOS交互,咱们将使用EOS.js. 因为咱们在EOS支持上使用dawn3,咱们须要确保在安装时使用dawn3
分支:npm install eosjs @ dawn3。
咱们从配置开始:
Eos = require('eosjs') eos = EOS.Localnet({ keyProvider: ['{replace_with_your_private_key}'], httpEndpoint: 'http://127.0.0.1:8888' })
配置完成后,咱们必须指定一些细节:
eos.contract('ping.ctr').then((contract) => { contract.ping("tester", { authorization: ['tester'] }).then((res) => { console.log(res) }) })
请注意ping.ctr
,它与咱们以前部署的合约的名称相匹配。一旦咱们获取了合约接口(或ABI),咱们就能够与它进行交互,就好像它是本机Javascript同样。合约返回一个promise,其中包含resolve函数中包含的交易详细信息。这是从前端与咱们的ping智能合约进行交互的核心思想。
要使用工做示例在更大的上下文中查看此内容,请查看此github存储库中的前端代码。
======================================================================
分享一个交互式的在线编程实战,EOS智能合约与DApp开发入门:
本课程帮助你快速入门EOS区块链去中心化应用的开发,内容涵盖EOS工具链、帐户与钱包、发行代币、智能合约开发与部署、使用代码与智能合约交互等核心知识点,最后综合运用各知识点完成一个便签DApp的开发。
- web3j教程,主要是针对java和android程序员进行区块链以太坊开发的web3j详解。
- 以太坊教程,主要介绍智能合约与dapp应用开发,适合入门。
- 以太坊开发,主要是介绍使用node.js、mongodb、区块链、ipfs实现去中心化电商DApp实战,适合进阶。
- python以太坊,主要是针对python工程师使用web3.py进行区块链以太坊开发的详解。
- php以太坊,主要是介绍使用php进行智能合约开发交互,进行帐号建立、交易、转帐、代币开发以及过滤器和事件等内容。
- C#以太坊,主要讲解如何使用C#开发基于.Net的以太坊应用,包括帐户管理、状态与交易、智能合约开发与交互、过滤器和事件等。
- php比特币开发教程,本课程面向初学者,内容即涵盖比特币的核心概念,例如区块链存储、去中心化共识机制、密钥与脚本、交易与UTXO等,同时也详细讲解如何在Php代码中集成比特币支持功能,例如建立地址、管理钱包、构造裸交易等,是Php工程师不可多得的比特币开发学习课程。
汇智网原创翻译,转载请标明出处。这里是原文