重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
这篇文章主要介绍“怎么编写区块链智能合约hello”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么编写区块链智能合约hello”文章能帮助大家解决问题。
成都创新互联基于成都重庆香港及美国等地区分布式IDC机房数据中心构建的电信大带宽,联通大带宽,移动大带宽,多线BGP大带宽租用,是为众多客户提供专业服务器托管报价,主机托管价格性价比高,为金融证券行业德阳服务器托管,ai人工智能服务器托管提供bgp线路100M独享,G口带宽及机柜租用的专业成都idc公司。
在我倾听Bettina Warburg的演讲之后,我对去中心化经济(dApps)的概念着迷。传统的Web应用程序是:
前端→后端→数据库
相比之下,dApp网站是:
前端→智能合约→区块链
例如,当你进入电子银行时,网页将调用后端代码来获取你的个人数据并将其显示在页面上。后端代码在集中式服务器上运行。
与传统方式不同,dApps在去中心化的P2P网络及区块链(Blockchain)上运行后端代码智能合约(smart contract)。
区块链是支撑数字货币比特币的技术,但它具有更广泛的应用,并且正在越来越多的领域实现商业化。它引起了对科技界及其他人的浓厚兴趣,因为它在金融服务,公共部门和其他领域开辟了新的可能性。 ——THOUGHT LEADERSHIP Nov 2017
EOSIO宣传为dApp的操作系统。它是从头开始构建的,每秒执行数百万次交易(与目前最大的区块链网络相比:以太网每秒只有15次交易),这使其更适合复杂的dapp生态系统和去中心化,货币化的经济。
在本博客中,我将展示如何设置EOSIO区块链并开发智能合约。这是本系列的第1部分。下面逐步演示了EOSIO安装以及我如何设置钱包,帐户和代币。让我们开始吧。
为了避免与现有软件发生冲突,我为这个实验准备了一个干净的虚拟机。我正在使用Linux KVM虚拟化基础架构(KVM比Virtualbox快得多,它只比裸机差2%)。我为VM分配了以下配置:
8 GB RAM,4个vCPU
30 GB磁盘空间
Ubuntu 17.10 desktop
安装操作系统后,我在终端中执行以下操作:
$ 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,我输入以下命令来启动服务器:
$ 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/
目录中提供了几个demo合约,我直接用了hello合约hello.cpp
:
#include#include 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
关掉服务进程。
关于“怎么编写区块链智能合约hello”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注创新互联行业资讯频道,小编每天都会为大家更新不同的知识点。