Steem 基本概念

Steem 是一个通过提供加密货币奖励支持社区建设和社会互动的区块链项目。Steem 将社交媒体的概念以及建设加密货币与建设社区过程中汲取的经验相结合。激励人们参与社区、货币和自由市场经济的关键一环是提供一个能够反映每个人贡献的公平体系。Steem 是第一个尝试准确、透明地为对社区做出积极贡献的个人提供回报的区块链项目。

基础

Steem

Steem 区块链采用的是跟 Bitshares 一样的石墨烯(Graphene)区块链技术,其共识模式是 DPoS(Delegated Proof of Stake)。大致上说,就是由持股者按持股比例投票选出代表(Witnesses)来维护、验证区块链网路(简单对照比特币是 PoW,藉由算力来决定共识)。

Steem的源码开源托管在Github上:前往查看

石墨烯

石墨烯区块链库(Graphene blockchain library),即为 BitShares Toolkit 2.0,采用 DPoS 共识算法,石墨烯有以下特点:

  • 转账速度快
    现在的平均确认时间是 1.5 秒,出块时间是 3 秒,在石墨烯进一步进化的 EOS 上可能到了零点几秒,所有的延迟仅仅只是来源于网络,而不是处理本身,所以它的性能是非常强大的。我们对比一下:比特币是 10 分钟出块,以太坊大约是 1 分钟;确认时间上比特币是 1 小时,以太坊是十几分钟,石墨烯只需要秒级的时间。

  • 吞吐量比较高
    石墨烯的吞吐量现在实测大约是 3300 笔每秒,理论上可以到 10 万次,甚至可以扩展到百万次,比如按照 EOS 的规划就可以达到百万次。对比一下:比特币大约每秒七笔,以太坊每秒三四十笔,这完全不是一个数量级。在真正解决实际问题时,很明显每秒几笔是不符合要求的,那每秒 3000 多笔基本上已经赶上了 VISA 的处理能力,已经算一个工业级的区块链产品。

  • 稳定
    石墨烯技术开发运行了这么久,从来没有出过明显的 BUG,也没有资产被盗的情况。

  • 功能强大、完备、容易操作
    如果我们用过一些桌面端的钱包就会发现,比特股钱包的应用性是最强的。以多重签名来举例:比特币也有多重签名,但是比较复杂,而且功能特别简单,只有 M/N 这种模式,就是说如果是 5 个人做多重签名,3 个人同意就可以通过,这是一个很简单的多重签名。石墨烯上的多重签名功能是可以用作公司治理的,它可以设定两个参数:首先它可以设置百分比,每个人占多少百分比,无论多少人都可以随便设。第二个是阈值,就是超过多少个签名就可以生效。假设说现在想做一个 7 个人的理事会管理,有这样一些要求:任何 2 个人出事都不能影响资金的使用;至少 3 个人同意才可以动用资金;非核心成员至少 4 个人同意才能动用资金。这些条件设置好之后,可以很快的算出每个人的占比,这个多签就设置完成了,而且这是在 UI 上直接实现,在操作界面上的,而不是用命令行来实现的。

石墨烯的源码开源托管在Github上: 前往查看

Steemit相关

Steemit.com 是由 Steem 区块链的官方开发者建立的一个网站,在这个网站上我们可以读取到 Steem 链的内容。在 Steemit.com 上我们使用 Steem 币来奖励那些发布文章或点赞文章,以及发布图片和评论的用户。和博客、QQ空间、微信类似,用户可以发贴、评论。不一样的是 Steemit 会给你奖励,激励你发布更多更好的文章。Steemit.com 也是想最终发展成一个聚集时尚、经典、阅读、热点和流行的平台。

推荐阅读:Steemit参考手册 Steem Handbook

Steem上的代币

Steem

Steem 代币是 Steem 区块链上的基础货币,另外两种币都跟它相关。可以通过在 Steemit.com、cnsteem.com 等网站上通过写文章、评论或点赞来获得它。你可以在任何时间存入、取出或者与其它持有者交易 Steem。Steem 可以通过一个叫 Power up 的过程转化为 SP(Steem Power)。

Steem Power(SP)

SP 是 Steem 通过 Power up 的过程获得的。顾名思义,你的 SP 越多你在 Steem 社区上的影响力就越大,你的 SP 越大你的点赞就越可以得到更大的收益。具体来说,按本文编辑时的实时行情,如果你有 10000SP,那你的一个点赞最多可以产生 $2.8 左右的收益。而实际收益其实远大于显示收益,显示为 $2.8 的收益实际上大概相当于 7.7 美元(具体原因请看下面SP的介绍)。那既然 SP 这么有用,为什么不把Steem全部转为 SP 呢?这是因为 SP 缺乏流动性,不能随意取现及交易。如果我们想把 SP 卖掉,则需要进行一个 Power Down 的过程,将 SP 转化为 Steem 再进行交易。而整个 Power Down 的过程每周只能将你持有的 1/13 的 SP 转化为 Steem,所以当您有了一些 Steem 后,还是要具体情况具体分析要把自己多少比例的 Steem 转化为 SP。

Steem Dollar(SBD)

Steem Blockchain Dollar,SBD 初衷是设计来 1:1 兑换美元的,官方现在也是把 1SBD 固定视为 1 美元的。但实际上它的市场价格却是像 Steem 一样波动的,现在 1SBD 的市场价远大于 1 美元。这也造成了文章作者获得的实际收益远大于显示收益。以上文所说显示收益 $2.8 为例,实际收益为 1.4 个 SBD 和价值为 1.4 美元的 SP,而按本文编辑时的市场价格,1 个 SBD 约等于 4.5 美元,所以实际收益应为 4.5x1.4+1.4=7.7 美元。

SMTs相关

基于Steem区块链SMTs是什么

  • Smart Media Tokens (SMTs)
  • A Token Protocol for Content Websites, Applications, Online Communities and Guilds Seeking Funding, Monetization and User Growth.
  • Steem’s Smart Media Tokens (SMTs) give anyone the power to launch and sell Proof-of- Brain [1] tokens, which are tokens distributed by “upvote” and “like”-based algorithms and can be integrated with websites to align incentives and spur growth, while websites are empowered to adopt sustainable, currency-centric revenue models. This model has been tested and continues to be proven by steemit.com, busy.org, chainbb.com, dsound.audio, dtube.video and other Steem interfaces, which are monetizing content, tokens and media in a way never before seen.

这段原文是摘取自官方白皮书,大致意思是:

  • 智能媒体代币协议。
  • 一种服务内容网站、应用、在线社区和协会融资、创造货币和用户增长的代币协议。
  • Steem的智能媒体代币协议给任何人权利去发布和销售 “脑力证明” 代币,这些代币是基于 “点赞” 和 “喜欢” 的分布式算法并且能集成到网站以激励和刺激增长,网站有权采用可持续发展的、货币为中心的收入模式。这个模式已经被 steemit.com、 busy.org、chainbb.com、视频和其它前所未有的货币化内容,代币,媒体 steem 接口检验和持续的证明过了。通过SMTs白皮书简单理解,它是要做以太坊可以做的事。以太坊的最大作用就是让每个人可以发行自己的代币。并且发行自己的代币变得很简单,不需要自己创造或者管理一个区块链。我们知道的大部分代币都是基于以太坊发行的。可以把以太坊理解为一个股票发行结算系统,每个公司都可以在以太坊上发行自己的股票(把代币可以简单理解为股票),而不需要去管理这些股票如何交易结算,以及不需要担忧个交易系统的安全性。交易结算,安全性等都由以太坊区块链帮你解决。现在 SMTs 也是一样,每个公司都可以通过 SMTs 很容易的发行自己的股票(代币),而不需要自己做一个区块链,也不需要对区块链技术的管理。

SMTs的众筹

理解了什么是 SMTs,于是我们就可以来搞点事情了。比如申龙斌创建的 “区块链生存训练” 社群是一个提供区块链知识服务的内容社群,我们想搞一个公司发行自己的社群股票,代码 SBS。但是我们没有钱只有内容和技术,怎么办?
img

上图是在 SMTs 中进行 FASHN 代币发行操作。

1)在正规的证劵交易所去发行股票筹集资金?想也不用想。

2)自己创造一个区块链,通过ICO来筹集资金?技术要求太高,没戏。

3)在 SMTs 上发行代币 SBS 筹集资金?这个可以有。

在 SMTs 上发行社群代币(股票)SBS,筹集 steem 代币来解决资金问题,代币(股票)的流通交易结算都是运行在 steem 区块链技术上,我们不需要管理它。我们发行的 SBS 可以自己定义 “区块链生存训练” 社群的股份分配方案,利润分配方案等等。

认可公司价值的个人和团队可以通过 steem 来参与众筹,持有 SBS 成为社群股东,成为股东的你可以享受到社群的服务参与社区的发展。社群不断壮大,价值也就不断增大,SBS 代币的价值也就增大。

SMTs生态

SMTs 的提出旨在构建内容生态。SMTs 不是重新创造一个区块链,是基于 steem 区块链。所以 SMTs 的 ICO 也必然会用 steem,就像很多基于以太区块链的发行代币众筹都是以太坊一样。

Steem 代币是 steem 区块链的燃料,通过 SMTs 在 steem 区块链上构建新的内容公司(发行自己的股票)需要 steem 来保证整个系统的运行。

所以 SMTs 发展出更多的内容生态,会增加 steem 的流通性和价值。

SMTs与ETH的智能合约的不同

如果都是筹集资金,发行自己的代币(股票),为什么不用以太坊的智能合约,要用 SMTs。要回答这个问题,你需要了解 steem 区块链和 ETH 区块链背后的技术的不同。

最大的不同点是,steem 是基于石墨烯区块链技术,处理信息比以太坊更快,快到可以用在一些内容相关的应用上。我们在 Steemit 网站上的每一个操作(发文、点赞、评论等)都是产生信息,如果 steemit 运行在以太坊上,速度肯定很慢,用户体验差,这样的内容网站是没有竞争力的。

如果纯粹用作发行公司股票(代币),以太坊还是有它存在的价值–每个公司发行自己的股票变得很容易。处理的信息也主要就是代币间交易,目前以太坊的处理速度还是可以接受的。况且,在以太坊上的这种代币发行机制,相比真正意义的股票,很好的解决流通性(全球流通),发行难度(股票要求很高审查很严),结算系统,安全性等问题。

综上,内容相关的公司鉴于本身需要更快信息处理速度,以满足良好的应用体验,通过 SMTs 来发行自己的代币是目前为数不多的选择(未来的 EOS 上线后也是一个选择)。

注意

进阶

Steem共识

  • 受限于工作量证明(PoW),许多区块链不能扩展超过每秒三笔交易,⽽这只是世界金融流量的一小部分。 Steem 需要有比 PoW 能提供的更⼤规模和更快速度,所以一个鲜为人知的称为委托权益证明(Delegated Proof of Stake,DPoS)的算法,⽤来成为适合数十亿用户的区块链基础。

  • 因为 DPoS,Steem 区块链以最⼩的计算量每隔3秒⽣成一个新区块。这意味着,区块链可以处理更多的交易和存储更多内容。

  • 通过设计硬分叉发生时的规则,在 DPoS 框架内当选的见证⼈可以快速有效地决定是否进行一个被提议的硬分叉,以允许 Steem 区块链框架可以⽐其它技术更快发展。Steem 区块链已经成功进行了 18 次硬分叉,每次硬分叉之后只有一条链可以被保留下来。

Steem见证人

Steem 见证人是 Steem 区块链委托权益证明共识机制(DPOS)的产物。在 Steem 中,区块生成是在环链中完成的。每一个环链包括 21 名推选出来负责建立和标志交易区块的证人。这些证人中有 19 名是通过赞成票推选出来的,1 名通过计算机操作取证选定,最后一名由前 19 名证人与总投票成比例的每个证人分时负责。21 名有效证人在每个环链中打乱顺序,防止任何一名证人时常急略其之前生成的区块。

这一过程专门设计用于提供最佳可靠性,同时确保每个人拥有参与区块生成的可能。人们拥有通过前19名当选证人执行审查制度的三个选择:与不在前 19 名的每个人一起耐心排队等待,购买足够的计算能力以比其他人更快的速度解决工作证明,或购买更多 SP 提高投票权。一般而言,应用审查制度是当选证人减少工作量的一个好方法,因此,这不太可能成为 Steem 网络上的一个实际问题。

因为有效的证人是事先已知的,Steem 能够安排证人每隔 3 秒钟生成一次区块。证人通过 NTP 协议同步区块生成。这一算法的变型已应用于 BitShares 网络一年多的时间,已被证实是可靠的。

简单理解:

1、负责创建与签核交易区块见证人由社区投票产生,共 21 位。
2、21 位见证人由投票产生的前 20 名加 1 位未达到前 20 名的见证人分时担当。
3、21 位见证人创建和签核区块的排序是变化的。
4、没有履行好见证人职责的会丧失资格。

因为负责创建与签核交易区块的见证人的数量有限,见证人实际上会互相竞争来获得记账的工作。获得记账工作的见证人每完成一次记账都可以获得系统的代币奖励。

分层密钥结构

Steem 使用一种分层密钥系统来方便低安全性和⾼全性的交易。低安全性交易往往是社交性的,如发帖或评论。高全性交易往往是代币发送和密钥更改。这允许用户取决于密钥允许的访问权限,为密钥实现不同级别的安全性。

这些私钥分 发帖活跃所有者

  • 发帖密钥允许账户发帖、评论、编辑、投票、转发、关注、屏蔽其它账户。
  • 活跃账户是更敏感的权限,如转移资金、启动/关闭交易,转化 Steem 货币,投票见证人,交易市场下单,以及重置发帖私钥。
  • 所有者私钥意味着仅必要时使用。它是最强大的密钥,因为它可以更改帐户的任何私钥,包括所有者密钥,并在帐户恢复期间证明所有权。理想情况下,它是脱机存储的,仅在帐户的密钥需更改或恢复受损害的帐户时使用。

Steem 也⽅便使⽤主密码来加密这三个私钥的使用。Webservices 可以使⽤主密码解密并提供必要的私钥签名。主密码可以允许⽤户信任某些服务,以防止不正确的密钥在任何服务器上传输,从而在维护安全的客户端签名环境,同时增加用户体验。

多重签名权限

Steem 区块链允许一个权限可以拆分给多个实体,这样多个用户可以共享相同的权限,或需要多个实体的授权才能使一个交易生效。这是和 Bitshares 比特股同样的⽅式,即每个公钥/私钥密钥对都分配一个权重,以及给权限定义了门槛阈值。为了使交易⽣效,必须有足够多的实体签名,以便它们的权重之和达到或超过权限所需的⻔槛阈值。

被盗账号恢复

如果⽤户的帐户受到损害,他们可以使用他们的所有者私钥来更改密钥。在这次事件中,攻击者可以危及所有者私钥和更改帐户密码,用户有 30 天的时间通过 Steem 在区块链行业里第⼀个账号被盗恢复功能提交以前功能的私钥,并恢复他们的帐户控制。这可能是由一个人或一个公司的人提供注册服务给 Steem。注册者不须向其用户提供这项服务,但可增加注册者的⽤户体验。

源码相关

目录结构

Steem 源码目录中(Steem的源码开源托管在Github上),核心代码在 libraries 目录中,libraries 中的结构组织也是比较清晰的,包括 plugins 目录下的 apis 目录,这里提供很多操作相关 api:

点击前往github查看 /steem/libraries

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
.
├── CMakeLists.txt
├── appbase
├── chain
├── chainbase
├── fc
├── jsonball
├── legacy_plugins
├── manifest
├── net
├── plugins
├── protocol
├── schema
├── utilities
├── vendor
└── wallet

点击前往github查看 /steem/libraries/plugins

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
.
├── CMakeLists.txt
├── account_by_key
├── account_history
├── account_history_rocksdb
├── apis
├── block_data_export
├── block_log_info
├── chain
├── debug_node
├── follow
├── json_rpc
├── market_history
├── p2p
├── smt_test
├── stats_export
├── tags
├── webserver
└── witness

点击前往github查看 /steem/libraries/plugins/apis

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
.
├── CMakeLists.txt
├── account_by_key_api
├── account_history_api
├── block_api
├── chain_api
├── condenser_api
├── database_api
├── debug_node_api
├── follow_api
├── market_history_api
├── network_broadcast_api
├── tags_api
├── test_api
└── witness_api

钱包相关

wallet目录,提供了钱包相关功能的一些 api:

/steem/libraries/wallet/include/steem/wallet/wallet.hpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
FC_API( steem::wallet::wallet_api,
/// wallet api
(help)(gethelp)
(about)(is_new)(is_locked)(lock)(unlock)(set_password)
(load_wallet_file)(save_wallet_file)

/// key api
(import_key)
(suggest_brain_key)
(list_keys)
(get_private_key)
(get_private_key_from_password)
(normalize_brain_key)

/// query api
(info)
(list_my_accounts)
(list_accounts)
(list_witnesses)
(get_witness)
(get_account)
(get_block)
(get_ops_in_block)
(get_feed_history)
(get_conversion_requests)
(get_account_history)
(get_state)
(get_withdraw_routes)

/// transaction api
(create_account)
(create_account_with_keys)
(create_account_delegated)
(create_account_with_keys_delegated)
(update_account)
(update_account_auth_key)
(update_account_auth_account)
(update_account_auth_threshold)
(update_account_meta)
(update_account_memo_key)
(delegate_vesting_shares)
(update_witness)
(set_voting_proxy)
(vote_for_witness)
(follow)
(transfer)
(escrow_transfer)
(escrow_approve)
(escrow_dispute)
(escrow_release)
(transfer_to_vesting)
(withdraw_vesting)
(set_withdraw_vesting_route)
(convert_sbd)
(publish_feed)
(get_order_book)
(get_open_orders)
(create_order)
(cancel_order)
(post_comment)
(vote)
(set_transaction_expiration)
(request_account_recovery)
(recover_account)
(change_recovery_account)
(get_owner_history)
(transfer_to_savings)
(transfer_from_savings)
(cancel_transfer_from_savings)
(get_encrypted_memo)
(decrypt_memo)
(decline_voting_rights)
(claim_reward_balance)

/// helper api
(get_prototype_operation)
(serialize_transaction)
(sign_transaction)

(get_active_witnesses)
(get_transaction)
)

/steem/libraries/wallet/include/steem/wallet/remote_node_api.hpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
FC_API( steem::wallet::remote_node_api,
(get_version)
(get_trending_tags)
(get_state)
(get_active_witnesses)
(get_block_header)
(get_block)
(get_ops_in_block)
(get_config)
(get_dynamic_global_properties)
(get_chain_properties)
(get_current_median_history_price)
(get_feed_history)
(get_witness_schedule)
(get_hardfork_version)
(get_next_scheduled_hardfork)
(get_reward_fund)
(get_key_references)
(get_accounts)
(get_account_references)
(lookup_account_names)
(lookup_accounts)
(get_account_count)
(get_owner_history)
(get_recovery_request)
(get_escrow)
(get_withdraw_routes)
(get_account_bandwidth)
(get_savings_withdraw_from)
(get_savings_withdraw_to)
(get_vesting_delegations)
(get_expiring_vesting_delegations)
(get_witnesses)
(get_conversion_requests)
(get_witness_by_account)
(get_witnesses_by_vote)
(lookup_witness_accounts)
(get_witness_count)
(get_open_orders)
(get_transaction_hex)
(get_transaction)
(get_required_signatures)
(get_potential_signatures)
(verify_authority)
(verify_account_authority)
(get_active_votes)
(get_account_votes)
(get_content)
(get_content_replies)
(get_tags_used_by_author)
(get_discussions_by_payout)
(get_post_discussions_by_payout)
(get_comment_discussions_by_payout)
(get_discussions_by_trending)
(get_discussions_by_created)
(get_discussions_by_active)
(get_discussions_by_cashout)
(get_discussions_by_votes)
(get_discussions_by_children)
(get_discussions_by_hot)
(get_discussions_by_feed)
(get_discussions_by_blog)
(get_discussions_by_comments)
(get_discussions_by_promoted)
(get_replies_by_last_update)
(get_discussions_by_author_before_date)
(get_account_history)
(broadcast_transaction)
(broadcast_transaction_synchronous)
(broadcast_block)
(get_followers)
(get_following)
(get_follow_count)
(get_feed_entries)
(get_feed)
(get_blog_entries)
(get_blog)
(get_account_reputations)
(get_reblogged_by)
(get_blog_authors)
(get_ticker)
(get_volume)
(get_order_book)
(get_trade_history)
(get_recent_trades)
(get_market_history)
(get_market_history_buckets)
)

其它的众多api这里不再列举了。

账号创建

账号创建根据参数差异化提供了多个 api,不过主要的是create_account_with_keys这里就简单列举这个 api 作为例子,其它的参见源码。

方法声明:create_account_with_keys

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/**
* This method is used by faucets to create new accounts for other users which must
* provide their desired keys. The resulting account may not be controllable by this
* wallet. There is a fee associated with account creation that is paid by the creator.
* The current account creation fee can be found with the 'info' wallet command.
*
* @param creator The account creating the new account
* @param newname The name of the new account
* @param json_meta JSON Metadata associated with the new account
* @param owner public owner key of the new account
* @param active public active key of the new account
* @param posting public posting key of the new account
* @param memo public memo key of the new account
* @param broadcast true if you wish to broadcast the transaction
*/
annotated_signed_transaction create_account_with_keys( string creator,
string newname,
string json_meta,
public_key_type owner,
public_key_type active,
public_key_type posting,
public_key_type memo,
bool broadcast )const;

方法实现:create_account_with_keys

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
/**
* This method is used by faucets to create new accounts for other users which must
* provide their desired keys. The resulting account may not be controllable by this
* wallet.
*/
annotated_signed_transaction wallet_api::create_account_with_keys( string creator,
string new_account_name,
string json_meta,
public_key_type owner,
public_key_type active,
public_key_type posting,
public_key_type memo,
bool broadcast )const
{ try {
FC_ASSERT( !is_locked() );
account_create_operation op;
op.creator = creator;
op.new_account_name = new_account_name;
op.owner = authority( 1, owner, 1 );
op.active = authority( 1, active, 1 );
op.posting = authority( 1, posting, 1 );
op.memo_key = memo;
op.json_metadata = json_meta;
op.fee = my->_remote_api->get_chain_properties().account_creation_fee * asset( STEEM_CREATE_ACCOUNT_WITH_STEEM_MODIFIER, STEEM_SYMBOL );

signed_transaction tx;
tx.operations.push_back(op);
tx.validate();

return my->sign_transaction( tx, broadcast );
} FC_CAPTURE_AND_RETHROW( (creator)(new_account_name)(json_meta)(owner)(active)(memo)(broadcast) ) }

其它

其它的就自行阅读源码,这里只是列举一个例子

创世配置

还有一个比较重要的文件,config.hpp 文件中提供很多基础参数信息,包括创世信息、区块生成时间、单个区块包含最大交易数等等

https://github.com/steemit/steem/blob/master/libraries/protocol/include/steem/protocol/config.hpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// config.hpp

#define STEEMIT_BLOCK_INTERVAL 3
#define STEEMIT_MIN_TRANSACTION_EXPIRATION_LIMIT (STEEMIT_BLOCK_INTERVAL * 5) // 5 transactions per block
#define STEEMIT_MIN_TRANSACTION_SIZE_LIMIT 1024
#define STEEMIT_MAX_TRANSACTION_SIZE (1024*64)
#define STEEMIT_MIN_BLOCK_SIZE_LIMIT (STEEMIT_MAX_TRANSACTION_SIZE)
#define STEEMIT_MAX_BLOCK_SIZE (STEEMIT_MAX_TRANSACTION_SIZE*STEEMIT_BLOCK_INTERVAL*2000)
#define STEEMIT_SOFT_MAX_BLOCK_SIZE (2*1024*1024)
#define STEEMIT_MIN_BLOCK_SIZE 115

...
此处省略众多
...

推荐阅读

0%