基于EOS的DAPP开发入门

in #sic6 years ago (edited)

SIC高级工程师:ZRM

一个公链的成功,除了本身的系统,还在于他们的系统之上的生态的丰富性。而DAPP将带区块链从博弈的炒币市场,走向了真正的应用场景,从而丰富了公链的生态体系。

一、何为DAPP
DAPP是Decentralized Application的缩写,翻译过来就是去中心化应用,也称为分布式应用。它的和我们当前所认识的APP最大的不同之处在于它的后台是区块链。DAPP是运行在分布式网络上,完全开源、自治,并且参与者的信息被加密后存储在公开的区块链上,隐私得到很好的保护,通过网络节点去中心化操作。
二、DAPP的特点
1、程序开源,数据加密保存在公开且去中心化的区块链上。
2、应用必须通过标准算法来生产代币,代币根据应用需要使用,提供贡献的用户都应该获得代币奖励。
3、根据市场反馈改进,必须由多数用户一致同意。
Dapp应该具有类似宪法章程这样的设置,公开概述区块链上的功能和运行机制。这样形成了一个去中心化组织网络,在没有人类干预的前提下,通过预先设定的业务规则自动运行。
图片1.png

三、为什么选择EOS
做为区块链3.0的代表,EOS的想象力就在于,它能提供类似操作系统级别的区块链运行环境,支持开发者可以在其上搭建有应用场景的去中心化应用(DAPP——Decentralized APP)。
以太坊是一个专门为开发和运行去中心化应用(DAPP)搭建的智能合约平台;EOS与以太坊类似,同样是基于智能合约和区块链而搭建。但是,在实际应用中,以太坊网络的交易差不多是10TPS,甚至更少,网络经常被淹没堵塞,使得只有那些交易费最高的交易能够执行,其他的都被拒绝。而EOS实现百万TPS,为大规模商业化应用提供了可能。目前在IMEOS.ONE(https://www.imeos.one/)上已经登记有100多个基于EOS的项目,相信在不久的未来,基于EOS的DAPP会爆炸式的增长。
四、基于EOS 的 DAPP开发入门
以下将将使用Javascript做为开发语言与EOS结点进行交互,请配置好本地node环境,本文以SIC团队搭建的结点为例进行说明。

1、配置
Eos = require('eosjs')
//可选配置
config = {
chainId: null, // 区块链唯一标识
keyProvider: ['PrivateKeys...'], //私钥
httpEndpoint: 'http://yourChainNodehost:8888',//结点
mockTransactions: () => 'pass', // 模拟交易成功或失败('pass' | 'fail')
transactionHeaders: (expireInSeconds, callback) => {
callback(null/error/, headers)
},
expireInSeconds: 60,
broadcast: true,
debug: false, // 是否开启debug
sign: true //是否需要签名
}
eos = Eos(config)

其中keyProvider为存放EOS账户私钥数组,在向EOS区块链提交Transaction的操作时必须要进行配置。

2、获取区块链相关信息
//打印所有API方法帮助。
eos.getBlock()
//获取第一个区块信息
eos.getBlock({block_num_or_id: 1}).then(result => console.log(result))
//获取区块边描述信息
eos.getInfo({}).then(result => {console.log(result)})

3、转账
options = {
broadcast: true,
sign: true,
authorization: null
}
eos.transfer({from: 'inita', to: 'initb', quantity: '1 SYS', memo: ''}, options)

4、发布合约
wasm = fs.readFileSync(docker/contracts/eosio.token/eosio.token.wasm)
abi = fs.readFileSync(docker/contracts/eosio.token/eosio.token.abi)

//发布合约
eos.setcode('inita', 0, 0, wasm)
eos.setabi('inita', JSON.parse(abi))

5、调用合约
eos.contract('inita').then(c => inita = c)
inita.create('inita', '1000.0000 CUR', {authorization: 'inita'})

五、其他相关
const Eos = require('eosjs');
const ecc = Eos.modules.ecc;
1、随机生成EOS账户私钥
let p1 = ecc.randomKey();

2、使用指定seed生成私钥
let private = ecc.seedPrivate("my cat name is tom");

3、从私钥导出公钥
let public = ecc.privateToPublic(private);

总结
本文做为DAPP开发系列的开篇,在后面会结合SIC团队DAPP开发,详细讲述DAPP架构和开发中遇到的坑。
目前,基于区块链技术的DAPP尚处于早期探索状态,还没有大规模实际应用价值的DAPP出现。但不可否认的是区块链技术带给了我们巨大的想象空间,DAPP开发是未来开发趋势,借助EOS这趟快车,拥抱区块链,从打造一款现象级的DAPP开始。

Coin Marketplace

STEEM 0.19
TRX 0.17
JST 0.031
BTC 81449.68
ETH 3207.32
USDT 1.00
SBD 2.82