EOS测试网先睹为快
EOS作为币村的希望,主网还有两个月多才会上线。上线时间大概是六月初,也就是差不多在高考的时候。
现阶段,我们只有测试网可以玩。 现在的测试网部署的是EOS DAWN2.0版本。
具可靠消息,官方将在近期上线EOS DAWN 3.0的测试网。
并停用现有EOS DAWN2.0的测试网。
4月6号,EOS的运营团队block.one将在香港举行发布会。所以3.0近在眼前了。
为了迎驾这新Dapp开发平台,本文罗列出EOS的一些基本要素以及和以太坊做一个比较:
- key pair
- wallet
- account
- smart contract
- DPOS
准备工作
- clone EOS源码进行编译:https://github.com/EOSIO/eos
- 编译成功后,生成了build目录,到build目录下的install/bin 可以看到编译出来的可执行文件:
➜ bin git:(bcb5bf75) ✗ pwd
/Users/joe/Workspace/eos/build/install/bin
➜ bin git:(bcb5bf75) ✗ ls
abi_gen codegen embed_genesis eos-walletd eosc eoscpp eosd launcher
- 为了方便调用,把这个路径加入到环境变量了:
export PATH=$PATH:/Users/joe/Workspace/eos/build/install/bin
- 这些就是EOS的主要执行文件了:
- eosd: 节点启动程序
- eosc: 和eos节点的交互程序
- eos-walletd: 钱包启动程序
- eoscpp: 智能合约的编译命令,可以把c++文件编译成wasm文件和abi
- launcher: 快捷模拟程序。在本地创建多个节点。
由于要演示的是基于测试网,所以只需要用到eosc
和 eoscpp
即可。
eosc
通过指定 -H testnet1.eos.io -p 80
可以与测试网节点通讯。
- 运行 /path_to_eos/scripts/start_npnode.sh, 创建节点进程以及钱包后台进程。(节点程序会不断的和测试网进行区块同步,这是一个漫长的过程,所以我们后面玩到智能合约和account的时候,通过指定
-H testnet1.eos.io -p 80
直接和测试网节点通讯,不经过本地节点。)
wallet
钱包是EOS中第一个重要的元素。
EOS本身就已经实现了钱包。
调用 eosc wallet create 创建钱包
不指定参数 则创建名为default的钱包
$ eosc wallet create
Creating wallet: default
Save password to use in the future to unlock this wallet.
Without password imported keys will not be retrievable.
"A MASTER PASSWORD"
创建成功会返回给你一串密码,需要好好保存。
指定-n 参数, 可以给钱包起一个名字:
$ eosc wallet create -n periwinkle
Creating wallet: periwinkle
Save password to use in the future to unlock this wallet.
Without password imported keys will not be retrievable.
"A MASTER PASSWORD"
查看已创建的钱包:
$ eosc wallet list
Wallets:
[
"default *",
"periwinkle *"
]
注意到钱包后有个*号,那表示钱包是已解锁的状态。
锁定第二个钱包,通过lock命令以及-n指定钱包名字
$ eosc wallet lock -n periwinkle
Locked: 'periwinkle'
锁定之后,再看第二个钱包的*号已经不见了,此时表示是锁定状态。
$ eosc wallet list
Wallets:
[
"default *",
"periwinkle"
]
解锁:
$ eosc wallet unlock -n periwinkle
输入创建钱包时返回的密码。就能成功解锁。
解锁之后,*号回来了。
$ eosc wallet list
Wallets:
[
"default *",
"periwinkle *"
]
当重启钱包后台进程之后,在查看钱包:
$ eosc wallet list
Wallets:
[]
会发现钱包列表空了。不见了么?
使用钱包首先需要打开钱包,由于重启了,所以钱包默认是关闭的,开启钱包:
$ eosc wallet open
$ eosc wallet list
Wallets:
[
"default"
]
$ eosc wallet open -nperiwinkle
$ eosc wallet list
Wallets:
[
"default",
"periwinkle"
]
打开之后的钱包,是锁定状态的,要使用的话,别忘了解锁:
$ eosc wallet unlock
$ eosc wallet unlock -n periwinkle
key pair, 生成并向钱包导入私钥
和所有区块链钱包的概念一样,钱包不是放钱不是存放资产,而是管理私钥。
有了钱包,我们可以开始向钱包当中倒入私钥了。
首先生成EOS key pair, 一对key pair包含公钥和私钥。
$ eosc create key
Private key: 5JpWt1ZcqCLFaxnXgJz3xuHpD4qCQg1SmZymxAikibg2xmju6bq
Public key: EOS7Fu52r9NKLB37Tzjm4Sdde8kWr3b8PwsPMXr4MwQPKRS6oHipQ
$ eosc create key
Private key: 5J8DwCjUykgWvZ2VpfCwx1VSUrLHDX3TfmesnRSNprhSRDhcCWj
Public key: EOS6r7SrFUNRSmeuhpComoaWH8ZAcfYWyYHLY9RLBcDeG8aGsTkrx
现在我们有两对EOS key pair了。现在它们只是两对平凡普通的公私钥对,没有任何权限控制。
于是,我们将它们导入到钱包中,这样钱包的密码机制就能提供一层保护。
$ eosc wallet import 5JpWt1ZcqCLFaxnXgJz3xuHpD4qCQg1SmZymxAikibg2xmju6bq
imported private key for: EOS7Fu52r9NKLB37Tzjm4Sdde8kWr3b8PwsPMXr4MwQPKRS6oHipQ
$ eosc wallet import 5J8DwCjUykgWvZ2VpfCwx1VSUrLHDX3TfmesnRSNprhSRDhcCWj
imported private key for: EOS6r7SrFUNRSmeuhpComoaWH8ZAcfYWyYHLY9RLBcDeG8aGsTkrx
利用eosc wallet import
导入私钥,记住是私钥噢,根据私钥能推导出公钥,所以导入成功,会提示打印出对应的公钥。
列出解锁状态的钱包 管理的所有key pair
$ eosc wallet keys
[[
"EOS6....",
"5KQwr..."
],
[
"EOS3....",
"5Ks0e..."
]
]
备份钱包
钱包保存着我们的私钥和公钥。所以备份钱包文件是个好习惯。以防不可避免的钱包丢失,比如硬盘损坏。
钱包文件是高强度加密的,没有密码的话,钱包里面的keys几乎不可能被破解(或许几十年之后,量子计算机研发成功了,可能可以暴力破解)。
钱包可以在以下目录中找到:后缀为.wallet 就是钱包文件。将它们拷贝到你认为安全的地方。
$ cd /path_to_eos/build/programs/nodeos && ls
blockchain blocks config.ini default.wallet periwinkle.wallet
创建 Account
Account,在EOS中,有了账户的概念,这样的设计,对于区块链应用的普及和推广是个好事,如果像比特币和以太坊那样,转账交易都基于一串超长难以记忆的公钥的话,也太不方便了,让不熟悉技术的人情以何堪。 有了账户,就可以方便很多了。
根据白皮书描述,账户具有以下特点:
- 一个人类可读的、存储在区块链的名字
- 最多12个字符
- 由账户创建者自己选择命名。(不像公钥,想生成一个靓号,全看脸)
EOS在账户这一层级,还提供了更多的权限控制,让账户安全。
账户的创建命令,4个参数,
- creator: 父级账户名。(目前的设定,一个账户需要由另一个账户来帮忙创建)
- name: 要创建的账户的账户名
- OwnerKey: 公钥,账户主,拥有此账户全部权限
- ActiveKey: 公钥,拥有平时使用该账户的操作权限
$ eosc create account
Create a new account on the blockchain
Usage: eosc create account [OPTIONS] creator name OwnerKey ActiveKey
如果还没有账户,目前2.0测试网的账户,需要到这里申请:https://docs.google.com/forms/d/e/1FAIpQLSel3HVFb22zYaAJfUtu_IzFgIJ4OATb0jQ3H2FV-HbwnJ090g/viewform
填写申请表,申请成功后,会邮箱通知。申请到的developer测试账户,里面有不少EOS可以用于测试。
有了自己的账户号后,也可以随意的创建账号了。
一个账号是什么样的结构呢?
让我们来看一下,比如我申请的测试账号叫: ayana1joe,
通过 eosc get account
可以查看账户信息, 需要连接测试网,所以别忘了加 -H testnet1.eos.io -p 80
因为本地节点很可能还没有同步下来。
$ eosc -H testnet1.eos.io -p 80 get account ayana1joe
{
"account_name": "ayana1joe",
"eos_balance": "100.0000 EOS",
"staked_balance": "0.0001 EOS",
"unstaking_balance": "0.0000 EOS",
"last_unstaking_time": "1969-12-31T23:59:59",
"permissions": [{
"perm_name": "active",
"parent": "owner",
"required_auth": {
"threshold": 1,
"keys": [{
"key": "EOS7BNvtNAAGjKmzfcyJ64M2cwRmQDtZGbCnZyofXpcKeNez2Cheg",
"weight": 1
}
],
"accounts": []
}
},{
"perm_name": "owner",
"parent": "",
"required_auth": {
"threshold": 1,
"keys": [{
"key": "EOS7BNvtNAAGjKmzfcyJ64M2cwRmQDtZGbCnZyofXpcKeNez2Cheg",
"weight": 1
}
],
"accounts": []
}
}
]
}
但从结构上来看,有账户余额等信息,以及最重要的权限信息,目前有active,owner两种权限,分别指向了创建时候给的参数: OwnerKey和ActiveKey 。 也就是说,只有持有OwnerKey、ActiveKey对应私钥的人,才有权限对这个账户进行操作。 而私钥又是由钱包管理的,钱包可以解锁和锁定,钱包管理者我们的私钥,只有解锁才可以使用,解锁时需要密码。
所以总结并整理下:这些元素之间的关系:
- 钱包密码(创建钱包时系统给你的,需妥善保存)
- 钱包: 可以管理多对私钥、公钥。当需要使用私钥进行签名时,首先需要先用钱包密码解锁钱包。
- 账户:人类可读的存在于区块链当中的唯一识别名,可以在创建的时候,赋予active,owner权限。持有OwnerKey、ActiveKey对应私钥的人,可以操作这个账户。
继续创建子账户
当我申请了ayana1joe 这个测试账户后,之后再创建账户就不需要在去官网申请了,自己也能创建了,当然,这样创建出来的账户里面是没有余额的。
$ eosc -H testnet1.eos.io -p 80 create account ayana1joe joeswallet EOS7f5rRAswgqr2fff5EVRWpenpUKCoGZQqHck55WqqRMF7dnoh5u EOS7BNvtNAAGjKmzfcyJ64M2cwRmQDtZGbCnZyofXpcKeNez2Cheg
{
"transaction_id": "1211dd50d9d1e1c7c7397f8da2675a53eb510a601899ed098fd86ac156f0f2a0",
"processed": {
"ref_block_num": 38715,
"ref_block_prefix": 1571712708,
"expiration": "2018-03-27T17:03:28",
"scope": [
"ayana1joe",
"eos"
],
"signatures": [
"201e02063785ac51da63bc6246c2c8938d63ebdc3fa56049d80d9127f88467a5536a51f04e11f3574b1bb0ecfe446910a25448a36484177694516098e0c34a965e"
],
"messages": [{
"code": "eos",
"type": "newaccount",
"authorization": [{
"account": "ayana1joe",
"permission": "active"
}
],
"data": {
"creator": "ayana1joe",
"name": "joeswallet",
"owner": {
"threshold": 1,
"keys": [{
"key": "EOS7f5rRAswgqr2fff5EVRWpenpUKCoGZQqHck55WqqRMF7dnoh5u",
"weight": 1
}
],
"accounts": []
},
"active": {
"threshold": 1,
"keys": [{
"key": "EOS7BNvtNAAGjKmzfcyJ64M2cwRmQDtZGbCnZyofXpcKeNez2Cheg",
"weight": 1
}
],
"accounts": []
},
"recovery": {
"threshold": 1,
"keys": [],
"accounts": [{
"permission": {
"account": "ayana1joe",
"permission": "active"
},
"weight": 1
}
]
},
"deposit": "0.0001 EOS"
},
"hex_data": "000050f405338d37004056311a8e157d0100000001036ca671905f004097bf266c7173ee9443797667198b01f2d70c68bde8766da7880100000100000001032dbdc517aed5ab66f8e558b4a80f79d574f5e3d7f64e81816e40f958d4ffaeb5010000010000000001000050f405338d3700000000a8ed32320100010000000000000004454f5300000000"
}
],
"output": [{
"notify": [],
"deferred_trxs": []
}
]
}
}
进行账户之间的转账:
$ eosc -H testnet1.eos.io -p 80 transfer ayana1joe joeswallet 1
{
"transaction_id": "345adb2ef93c9165bdee655d20a242c5a509074213726e698fb2a8fb431811b9",
"processed": {
"ref_block_num": 38715,
"ref_block_prefix": 1571712708,
"expiration": "2018-03-27T17:03:28",
"scope": [
"ayana1joe",
"joeswallet"
],
"signatures": [
"1f6995a7545d762cc0d815813eb22840765720c37272a5a69589f16682c19062b26d152e48535b6dbb1f8789aee11f5bcb1296778928a22103497f548de4104cdc"
],
"messages": [{
"code": "eos",
"type": "transfer",
"authorization": [{
"account": "ayana1joe",
"permission": "active"
}
],
"data": {
"from": "ayana1joe",
"to": "joeswallet",
"amount": 1,
"memo": ""
},
"hex_data": "000050f405338d37004056311a8e157d010000000000000000"
}
],
"output": [{
"notify": [{
"name": "joeswallet",
"output": {
"notify": [],
"deferred_trxs": []
}
},{
"name": "ayana1joe",
"output": {
"notify": [],
"deferred_trxs": []
}
}
],
"deferred_trxs": []
}
]
}
}
智能合约
这是重头戏。大家对EOS的期望来自于,它号称的百万级TPS性能。
接下来我们看看EOS的智能合约以及和以太坊智能合约的不同之处。
目前EOS支持c++语言写的的智能合约,最终编译出wast文件
创建合约:
调用 eoscpp 生成合约模版。
$ eoscpp -n hello
$ cd hello
$ ls
hello.abi hello.hpp hello.cpp
看看hello.cpp内容:
$ cat hello.cpp
#include <hello.hpp>
/**
* The init() and apply() methods must have C calling convention so that the blockchain can lookup and
* call these methods.
*/
extern "C" {
/**
* This method is called once when the contract is published or updated.
*/
void init() {
eosio::print( "Init World!\n" );
}
/// The apply method implements the dispatch of events to this contract
void apply( uint64_t code, uint64_t action ) {
eosio::print( "Hello World: ", eosio::name(code), "->", eosio::name(action), "\n" );
}
} // extern "C"
init: 可以理解过初始化函数
apply: 相当于分发器函数,可以根据外部传进来的action参数类型,进行程序逻辑上的无限扩展。
编译合约
➜ $ eoscpp -o hello.wast hello.cpp
/usr/local/wasm/bin/clang -emit-llvm -O3 --std=c++14 --target=wasm32 -ffreestanding -nostdlib -fno-threadsafe-statics -fno-rtti -fno-exceptions -I /Users/joe/Workspace/eos/build/install/include -I . -c hello.cpp -o /var/folders/80/m80ty1ms59n4gv257121dbn40000gn/T/tmp.mCLl7zio/built/hello.cpp
➜ $ ls
hello.abi hello.cpp hello.hpp hello.wast
部署合约
部署合约需要指定一个账户,需要私钥签名,所以要确保把钱包打开并解锁。才能部署成功。
➜ $ eosc -H testnet1.eos.io -p 80 set contract ayana1joe hello.wast hello.abi
Reading WAST...
Assembling WASM...
Publishing contract...
{
"transaction_id": "6b141c4ff3701986c4b91c79d5f586d94bd2d0f7b8942fe9994e5c7b5a3863e4",
"processed": {
"ref_block_num": 38715,
"ref_block_prefix": 1571712708,
"expiration": "2018-03-27T17:03:28",
"scope": [
"ayana1joe",
"eos"
],
"signatures": [
"2011f5dfc69a1602c36a449712d86f6f3112a8f9fb53a90f115d1638aca79245e8506994ab6a77df795fe6018b09ae72e791be71d71d4edffbe75629f242483d3d"
],
"messages": [{
"code": "eos",
"type": "setcode",
"authorization": [{
"account": "ayana1joe",
"permission": "active"
}
],
"data": {
"account": "ayana1joe",
"vm_type": 0,
"vm_version": 0,
"code": "0061736d0100000001110460017f0060017e0060000060027e7e00021b0203656e76067072696e746e000103656e76067072696e7473000003030202030404017000000503010001071903066d656d6f7279020004696e69740002056170706c7900030a21020600411010010b1800413010012000100041d00010012001100041e00010010b0b54050041040b04704000000041100b114a6f6520496e697420576f726c64210a000041300b1e48656c6c6f20576f726c642046726f6d204a6f652773204d5042203a20000041d0000b032d3e000041e0000b020a000029046e616d6504067072696e746e0100067072696e7473010004696e697400056170706c790201300131",
"code_abi": {
"types": [{
"new_type_name": "account_name",
"type": "name"
}
],
"structs": [{
"name": "transfer",
"base": "",
"fields": {
"from": "account_name",
"to": "account_name",
"amount": "uint64"
}
},{
"name": "account",
"base": "",
"fields": {
"account": "name",
"balance": "uint64"
}
}
],
"actions": [{
"action_name": "transfer",
"type": "transfer"
}
],
"tables": [{
"table_name": "account",
"index_type": "i64",
"key_names": [
"account"
],
"key_types": [
"name"
],
"type": "account"
}
]
}
},
"hex_data": "000050f405338d37000087020061736d0100000001110460017f0060017e0060000060027e7e00021b0203656e76067072696e746e000103656e76067072696e7473000003030202030404017000000503010001071903066d656d6f7279020004696e69740002056170706c7900030a21020600411010010b1800413010012000100041d00010012001100041e00010010b0b54050041040b04704000000041100b114a6f6520496e697420576f726c64210a000041300b1e48656c6c6f20576f726c642046726f6d204a6f652773204d5042203a20000041d0000b032d3e000041e0000b020a000029046e616d6504067072696e746e0100067072696e7473010004696e697400056170706c790201300131010c6163636f756e745f6e616d65046e616d6502087472616e7366657200030466726f6d0c6163636f756e745f6e616d6502746f0c6163636f756e745f6e616d6506616d6f756e740675696e743634076163636f756e740002076163636f756e74046e616d650762616c616e63650675696e74363401000000572d3ccdcd087472616e7366657201000000204f4d11320369363401076163636f756e7401046e616d65076163636f756e74"
}
],
"output": [{
"notify": [],
"deferred_trxs": []
}
]
}
}
部署成功的话,在eosd进程的log中可以看到以下输出:执行的是合约代码中init方法:
912018ms wasm_interface.cpp:1023 load ] wasm_interface::load name = ayana1joe times llvm:7 ms, init:0 ms, abi:0 ms
Init World!
向合约中发送消息:
➜ $ eosc -H testnet1.eos.io -p 80 push message ayana1joe hello '"abcd"' --scope ayana1joe
552337ms main.cpp:1128 operator() ] Converting argument to binary...
{
"transaction_id": "c15d281cc278ea15b448decae0e47cf7962a760b7c7dc599977bbfe99b7788da",
"processed": {
"ref_block_num": 10430,
"ref_block_prefix": 921642592,
"expiration": "2018-03-30T02:09:42",
"scope": [
"ayana1joe"
],
"signatures": [],
"messages": [{
"code": "ayana1joe",
"type": "hello",
"authorization": [],
"data": "abcd"
}
],
"output": [{
"notify": [],
"deferred_trxs": []
}
]
}
}
后台可以看到以下输入:执行的是apply方法:并且
Hello World: ayana1joe->hello
一开始这种方式有点难理解,毕竟和以太坊太不一样了。
不妨先看看EOS白皮书里对智能合约的描述:
每个账户都可以将结构化的操作发送给其他账户,并可以定义脚本来处理接收到的操作。EOS为每个账户提供了专用数据库,只能由自己的操作处理程序访问。动作处理脚本还可以将操作发送到其他账户。
操作(action,apply方法里的参数)和自动操作处理程序(apply方法中的代码)的组合正式EOS定义智能合约的方式。
那什么是结构化操作呢? 修改下上面的hello.cpp : 加入transfer结构体(struct, c++里的自定义类型)
#include <hello.hpp>
/**
* The init() and apply() methods must have C calling convention so that the blockchain can lookup and
* call these methods.
*/
extern "C" {
/**
* This method is called once when the contract is published or updated.
*/
void init() {
eosio::print( "Init World!\n" );
}
struct transfer {
uint64_t from;
uint64_t to;
uint64_t quantity;
};
/// The apply method implements the dispatch of events to this contract
void apply( uint64_t code, uint64_t action ) {
eosio::print( "Hello World: ", eosio::name(code), "->", eosio::name(action), "\n" );
if( action == N(transfer) ) {
eosio::print( "Hello World: ", eosio::name(code), "->", eosio::name(action), "\n" );
if( action == N(transfer) ) {
auto message = eosio::current_message<transfer>();
eosio::require_auth( message.from );
eosio::print( "Transfer ", message.quantity, " from ", message.from, " to ", message.to, "\n" );
}
}
} // extern "C"
然后重新编译和部署:
eoscpp -o hello.wast hello.cpp
eosc -H testnet1.eos.io -p 80 set contract ayana1joe hello.wast hello.abi
这里发现,EOS中的智能合约是支持重新部署的,这是和以太坊不一样的。以太坊,一旦部署,就不可修改,有bug的话只能废弃掉。而EOS支持改下代码,重新编译,重新部署,替换掉有问题的代码。这种机制好不好呢? 暂不讨论,毕竟“一旦部署就不可修改” 是当初ICO浪潮中经常被拿出来“讲道理”的一个特点。现在却完全被废弃了。
接下来调用下新部署的hello合约,
$ eosc push action ayana1joe transfer '{"from":"ayana1joe","to":"joeswallet","quantity":50}' --scope ayana1joe
{
"transaction_id": "a777539b7d5f752fb40e6f2d019b65b5401be8bf91c8036440661506875ba1c0",
"processed": {
"ref_block_num": 20,
"ref_block_prefix": 463381070,
"expiration": "2017-09-14T01:05:49",
"scope": [
"ayana1joe"
],
"signatures": [],
"messages": [{
"code": "ayana1joe",
"type": "transfer",
"authorization": [],
"data": {
"from": "ayana1joe",
"to": "joeswallet",
"quantity": 50
},
"hex_data": "00000079b822651d000000008040934b3200000000000000"
}
],
"output": [{
"notify": [],
"deferred_transactions": []
}
]
}
}
后台可以看到以下输出:
Hello World: ayana1joe->transfer
Transfer 50 from currency to joeswallet
这次调用,传入的是一个“结构体”, 也就是:
'{"from":"ayana1joe","to":"joeswallet","quantity":50}'
这是代码中定义的结构体的json格式。
所以可以理解为什么说 “每个账户都可以将结构化的操作发送给其他账户” 了,其实就是传入一段合约中定义好的数据类型。apply函数中,根据参数action名称进行分发,用不同的逻辑代码处理接收到的数据。
总结下,EOS智能合约的几个点:
- EOS智能合约是和账户绑定的,每个账户可以定义一份智能合约。创建合约的账户拥有对该合约的归属权。需要权限的地方可以使用:eosio::require_auth( message.from ); 来判断。
- 智能合约支持修改并重新部署
- 调用智能合约的方式,可以理解为,向一个账户发送消息。账户收到之后,根据其自定义的脚本进行处理。
DPOS
共识算法可以说是区块链的灵魂,它决定了区块链是否安全,是否公正,是否效率。
EOS采用了DPOS (Delegate Proof of Stake)
关于DPOS,EOS白皮书里一笑而过,没提到很多,有兴趣的可以看下这篇官文补充:
https://steemit.com/dpos/@dantheman/dpos-consensus-algorithm-this-missing-white-paper
或者译文:
http://me.tryblockchain.org/blockchain-dpos-bm-eos.html
常见共识算法:
PoW(Proof Of Work)
优点:简单,安全
缺点:浪费资源。算力集中导致过于中心化。
代表:比特币、以太坊(以太坊将在今年或明年改为新的共识算法Casper )
PoS(Proof of Stake)
优点:节约电能,不需要消耗大量的算力。
缺点:规模和安全性不足。
DPoS(Delegate Proof of Stake) PoS的改进版
优点:节约电能,满足规模要求。
缺点:安全性不足。
代表:Steemit , BitShare , EOS
简单说说区块链1~4,
区块链1.0: 以比特币为首的区块链项目,实现了分布式账本、去除了第三方
开创了区块链先河。但是转账速度缓慢、交易手续费高、功能单一。
区块链2.0: 以太坊为首的区块链2.0项目,除了实现了比特币货币功能之外。还引入了智能合约,为世人打开了Dapp世界的大门。但是随着使用人数的增多。生态系统的日益臃肿,以太坊的问题也越来越明显。落后的共识算法Pow,拥堵的网络。缓慢的交易确认和相对封闭的生态系统。
区块链3.0: 以EOS为首的区块链项目3.0提供了更优化的共识算法DPos,更好的并发性,目标达到百万级/和对大规模商业应用更好的支持。尽管这些区块链3.0项目还未正式落地。
区块链4.0: 区块链3.0都还没落地呢 又来区块链4.0? 还真有这样一个项目,大家路过就了解一下 http://seele.pro/ , 元一,采用神经网络共识算法和异构森林网络的区块链。 逼格很高的概念,建议有兴趣自行到官网了解。
持续了一年的ICO,当前EOS无疑是值得期待的项目,是币王还是币妖,很快就能知道了。
总结
目前官方给出的智能合约开发资料还很少,Dapp开发示例则没有。EOS号称是以太坊杀手,未来的Dapp平台。离交卷还有两个多月。到底最终如何出招呢,让我们拭目以待。
想要在EOS DAWN3.0 测试网上线的第一时间,就对它进行测试和验证的,可以加我微信。 或telegram群 : https://t.me/joinchat/GgxZkQy_seHdGk5MP3-scg
测试内容:
- 部署智能合约
- 高频并发调用合约,简单测下TPS
- 构建私服
- 等等。。
Congratulations @jc1991! You received a personal award!
You can view your badges on your Steem Board and compare to others on the Steem Ranking
Do not miss the last post from @steemitboard:
Vote for @Steemitboard as a witness to get one more award and increased upvotes!
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit