在我倾听Bettina Warburg的演讲以后,我对去中心化经济(dApps)的概念着迷。传统的Web应用程序是:前端
相比之下,dApp网站是:node
例如,当你进入电子银行时,网页将调用后端代码来获取你的我的数据并将其显示在页面上。后端代码在集中式服务器上运行。git
与传统方式不一样,dApps在去中心化的P2P网络及区块链(Blockchain)上运行后端代码智能合约(smart contract)。github
区块链是支撑数字货币比特币的技术,但它具备更普遍的应用,而且正在愈来愈多的领域实现商业化。它引发了对科技界及其余人的浓厚兴趣,由于它在金融服务,公共部门和其余领域开辟了新的可能性。 ——THOUGHT LEADERSHIP Nov 2017mongodb
EOSIO宣传为dApp的操做系统。它是从头开始构建的,每秒执行数百万次交易(与目前最大的区块链网络相比:以太网每秒只有15次交易),这使其更适合复杂的dapp生态系统和去中心化,货币化的经济。数据库
在本博客中,我将展现如何设置EOSIO区块链并开发智能合约。这是本系列的第1部分。下面逐步演示了EOSIO安装以及我如何设置钱包,账户和代币。让咱们开始吧。编程
为了不与现有软件发生冲突,我为这个实验准备了一个干净的虚拟机。我正在使用Linux KVM虚拟化基础架构(KVM比Virtualbox快得多,它只比裸机差2%)。我为VM分配了如下配置:后端
安装操做系统后,我在终端中执行如下操做:api
$ sudo apt install git-core
$ git clone https://github.com/EOSIO/eos --recursive
$ cd eos
$ git submodule update --init --recursive
$ ./eosio_build.sh
$ export PATH=${HOME}/opt/mongodb/bin:$PATH
$ ~/opt/mongodb/bin/mongod -f ~/opt/mongodb/mongod.conf &
$ cd ~/eos/build: make test
$ sudo make install
复制代码
此时安装了EOSIO,我输入如下命令来启动服务器:bash
$ cd ~/eos/build/programs/keosd
$ keosd --http-server-address=localhost:8899
复制代码
打开一个新的命令行客户端:
$ cd ~/eos/build/programs/nodeos
$ nodeos -e -p eosio --contracts-console --plugin eosio::chain_api_plugin --plugin eosio::history_api_plugin --plugin eosio::wallet_api_plugin
复制代码
再打开一个新的命令行客户端:
$ alias cleos='~/eos/build/programs/cleos/cleos --wallet-url=http://localhost:8899'
复制代码
要在区块链中存储信息,咱们须要一个用于标识数据和钱包的账户来保护用于签署交易的密钥。请参阅此处了解EOSIO账户和钱包概念概述
我执行了如下操做:
$ cd ~/eos
$ cleos wallet create
复制代码
将屏幕中的密码记录下来备用。
$ cleos wallet key
复制代码
将屏幕中private1和public2的密钥对值记录下来备用。
$ cleos wallet key
复制代码
再来一组private2和public2的密钥对值记录下来备用。
$ cleos wallet import ${private_key_1}
$ cleos wallet import ${private_key_2}
$ cleos wallet keys
复制代码
经过私钥private1和private2将密钥导入钱包后你应该能够在屏幕中看到钱包中显示2个公钥的值。
$ cleos create account eosio myaccount ${public_key_1} ${public_key_2}
复制代码
执行上面的命令,你应该发现有错误信息。意思是说你的钱包没有解锁。
$ find ~ -name config.ini
$ nano ~/.local/share/eosio/nodes/config/config.ini
复制代码
config.ini
可能位于其余平台的另外一个目录中,在config.ini
中看到配置项signature-provider =*******
,将该值的私钥导入钱包中:
$ cleos wallet import ${private_key_signature-provider}
$ cleos wallet keys
复制代码
这时你应该能够在钱包里看到3个公钥。
$ cleos create account eosio myaccount ${public_key_1} ${public_key_2}
复制代码
帐号会被成功创建,咱们再来建几个帐号。
$ cleos create account eosio user ${public_key_1} ${public_key_2}
$ cleos create account eosio tester ${public_key_1} ${public_key_2}
$ cleos create account eosio eosio.token ${public_key_1} ${public_key_2}
复制代码
在eosio.token
帐号上建立合约。
$ cleos set contract eosio.token ~/eos/build/contracts/eosio.token -p eosio.token
复制代码
将合约推送到区块链:
$ cleos push action eosio.token create '{"issuer":"eosio", "maximum_supply":"1000000000.0000 SYS"}' -p eosio.token
复制代码
作些单一操做测试,建立帐号,发代币,转帐:
$ cleos create account eosio user ${public_key_1} ${public_key_2}
$ cleos push action eosio.token issue '[ "user", "100.0000 SYS", "memo" ]' -p eosio
$ cleos push action eosio.token transfer '[ "user", "tester", "1.0000 SYS", "m" ]' -p user
复制代码
建一个exchange
帐号,并建个exchange
合约,合约代码在contracts/
下,主要是建立和交易货币的功能:
$ cleos create account eosio exchange ${public_key_1} ${public_key_2}
$ cleos set contract exchange ~/eos/build/contracts/exchange -p exchange
复制代码
建一个eosio.msig
,建一个eosio.msig
合约,合约代码在contracts/
下,主要是容许多方异步签署单个交易:
$ cleos create account eosio eosio.msig ${public_key_1} ${public_key_2}
$ cleos set contract eosio.msig ~/eos/build/contracts/eosio.msig -p eosio.msig
复制代码
备份钱包:
$ mkdir backup-my-wallet
$ cp -R ~/eosio-wallet ./backup-my-wallet/
复制代码
EOSIO Smart Contract是一个在区块链中执行的C ++程序。 请参阅文档此处了解。
EOSIO在contracts/
目录中提供了几个样本合约,我直接用了hello合约hello.cpp
:
#include <eosiolib/eosio.hpp>
#include <eosiolib/print.hpp>
using namespace eosio;
class hello : public eosio::contract {
public:
using contract::contract;
/// @abi action
void hi( account_name user ) {
print( "Hello, ", name{user} );
}
};
EOSIO_ABI( hello, (hi) )
复制代码
进行测试以下:
$ cd ~/eos/contracts/hello
$ eosiocpp -o hello.wast hello.cpp
$ eosiocpp -g hello.abi hello.cpp
复制代码
建立帐号:
$ cleos create account eosio hello.code ${public_key_1} ${public_key_2}
复制代码
建立合约:
$ cleos set contract hello.code ../hello -p hello.code
复制代码
推送合约:
$ cleos push action hello.code hi '["user"]' -p user
复制代码
修改hello.cpp,在print( "Hello, ", name{user} );
上面加上一句require_auth(user)
。
编译合约,更新合约,推送合约:
$ eosiocpp -o hello.wast hello.cpp
$ cleos set contract hello.code ../hello -p hello.code
$ cleos push action hello.code hi '["tester"]' -p user
复制代码
应该有个错误信息,咱们把推送命令修改一下:
$ cleos push action hello.code hi '["tester"]' -p tester
复制代码
这回应该没问题了。
$ pkill keosd && pkill nodeos
复制代码
关掉服务进程。
安利个EOS智能合约与DApp开发入门交互式在线编程实战:
本课程帮助你快速入门EOS区块链去中心化应用的开发,内容涵盖EOS工具链、帐户与钱包、发行代币、智能合约开发与部署、使用代码与智能合约交互等核心知识点,最后综合运用各知识点完成一个便签DApp的开发。
这里是原文