VOTING POWER100.00%
DOWNVOTE POWER100.00%
RESOURCE CREDITS100.00%
REPUTATION PROGRESS78.03%
Net Worth
3.190USD
STEEM
0.001STEEM
SBD
1.149SBD
Own SP
45.486SP
Detailed Balance
| STEEM | ||
| balance | 0.001STEEM | STEEM |
| market_balance | 0.000STEEM | STEEM |
| savings_balance | 0.000STEEM | STEEM |
| reward_steem_balance | 0.000STEEM | STEEM |
| STEEM POWER | ||
| Own SP | 45.486SP | SP |
| Delegated Out | 0.000SP | SP |
| Delegation In | 0.000SP | SP |
| Effective Power | 45.486SP | SP |
| Reward SP (pending) | 0.000SP | SP |
| SBD | ||
| sbd_balance | 1.149SBD | SBD |
| sbd_conversions | 0.000SBD | SBD |
| sbd_market_balance | 0.000SBD | SBD |
| savings_sbd_balance | 0.000SBD | SBD |
| reward_sbd_balance | 0.000SBD | SBD |
{
"balance": "0.001 STEEM",
"savings_balance": "0.000 STEEM",
"reward_steem_balance": "0.000 STEEM",
"vesting_shares": "73980.050051 VESTS",
"delegated_vesting_shares": "0.000000 VESTS",
"received_vesting_shares": "0.000000 VESTS",
"sbd_balance": "1.149 SBD",
"savings_sbd_balance": "0.000 SBD",
"reward_sbd_balance": "0.000 SBD",
"conversions": []
}Account Info
| name | heha37 |
| id | 139034 |
| rank | 43,474 |
| reputation | 3397389988 |
| created | 2017-03-18T00:43:00 |
| recovery_account | steem |
| proxy | None |
| post_count | 14 |
| comment_count | 0 |
| lifetime_vote_count | 0 |
| witnesses_voted_for | 0 |
| last_post | 2017-10-19T03:32:27 |
| last_root_post | 2017-10-19T03:12:15 |
| last_vote_time | 2018-05-08T09:03:33 |
| proxied_vsf_votes | 0, 0, 0, 0 |
| can_vote | 1 |
| voting_power | 9,800 |
| delayed_votes | 0 |
| balance | 0.001 STEEM |
| savings_balance | 0.000 STEEM |
| sbd_balance | 1.149 SBD |
| savings_sbd_balance | 0.000 SBD |
| vesting_shares | 73980.050051 VESTS |
| delegated_vesting_shares | 0.000000 VESTS |
| received_vesting_shares | 0.000000 VESTS |
| reward_vesting_balance | 0.000000 VESTS |
| vesting_balance | 0.000 STEEM |
| vesting_withdraw_rate | 0.000000 VESTS |
| next_vesting_withdrawal | 1969-12-31T23:59:59 |
| withdrawn | 0 |
| to_withdraw | 0 |
| withdraw_routes | 0 |
| savings_withdraw_requests | 0 |
| last_account_recovery | 1970-01-01T00:00:00 |
| reset_account | null |
| last_owner_update | 2017-10-17T03:34:21 |
| last_account_update | 2017-10-19T03:23:03 |
| mined | No |
| sbd_seconds | 0 |
| sbd_last_interest_payment | 2017-11-27T06:52:57 |
| savings_sbd_last_interest_payment | 1970-01-01T00:00:00 |
{
"active": {
"account_auths": [],
"key_auths": [
[
"STM5wgyLj55Ldcn1x7FqPmfeR1tJUzg6WEjCcpTE7n67m8HnrQzoE",
1
]
],
"weight_threshold": 1
},
"balance": "0.001 STEEM",
"can_vote": true,
"comment_count": 0,
"created": "2017-03-18T00:43:00",
"curation_rewards": 0,
"delegated_vesting_shares": "0.000000 VESTS",
"downvote_manabar": {
"current_mana": 0,
"last_update_time": 1489797780
},
"guest_bloggers": [],
"id": 139034,
"json_metadata": "{\"profile\":{\"name\":\"heha3737\",\"profile_image\":\"https://pbs.twimg.com/profile_images/619890136025698308/Cc1CFtsh_400x400.jpg\"}}",
"last_account_recovery": "1970-01-01T00:00:00",
"last_account_update": "2017-10-19T03:23:03",
"last_owner_update": "2017-10-17T03:34:21",
"last_post": "2017-10-19T03:32:27",
"last_root_post": "2017-10-19T03:12:15",
"last_vote_time": "2018-05-08T09:03:33",
"lifetime_vote_count": 0,
"market_history": [],
"memo_key": "STM6uRcF83nvHha6WbpuUhPd2yDsAA6ubcNbzCbZnbPrhkDpMB7FG",
"mined": false,
"name": "heha37",
"next_vesting_withdrawal": "1969-12-31T23:59:59",
"other_history": [],
"owner": {
"account_auths": [],
"key_auths": [
[
"STM59uk43E3VyJ2NuebNRh6As8SvxBDqEHj2pTD9xGYszVb6E83zn",
1
]
],
"weight_threshold": 1
},
"pending_claimed_accounts": 0,
"post_bandwidth": 0,
"post_count": 14,
"post_history": [],
"posting": {
"account_auths": [],
"key_auths": [
[
"STM8QNX8cccFMra8pAQCPQSjKjZeDtjZXbbKTr8EJNsjvvKgEBfsu",
1
]
],
"weight_threshold": 1
},
"posting_json_metadata": "{\"profile\":{\"name\":\"heha3737\",\"profile_image\":\"https://pbs.twimg.com/profile_images/619890136025698308/Cc1CFtsh_400x400.jpg\"}}",
"posting_rewards": 1131,
"proxied_vsf_votes": [
0,
0,
0,
0
],
"proxy": "",
"received_vesting_shares": "0.000000 VESTS",
"recovery_account": "steem",
"reputation": 3397389988,
"reset_account": "null",
"reward_sbd_balance": "0.000 SBD",
"reward_steem_balance": "0.000 STEEM",
"reward_vesting_balance": "0.000000 VESTS",
"reward_vesting_steem": "0.000 STEEM",
"savings_balance": "0.000 STEEM",
"savings_sbd_balance": "0.000 SBD",
"savings_sbd_last_interest_payment": "1970-01-01T00:00:00",
"savings_sbd_seconds": "0",
"savings_sbd_seconds_last_update": "1970-01-01T00:00:00",
"savings_withdraw_requests": 0,
"sbd_balance": "1.149 SBD",
"sbd_last_interest_payment": "2017-11-27T06:52:57",
"sbd_seconds": "0",
"sbd_seconds_last_update": "2017-11-27T06:52:57",
"tags_usage": [],
"to_withdraw": 0,
"transfer_history": [],
"vesting_balance": "0.000 STEEM",
"vesting_shares": "73980.050051 VESTS",
"vesting_withdraw_rate": "0.000000 VESTS",
"vote_history": [],
"voting_manabar": {
"current_mana": 9800,
"last_update_time": 1525770213
},
"voting_power": 9800,
"withdraw_routes": 0,
"withdrawn": 0,
"witness_votes": [],
"witnesses_voted_for": 0,
"rank": 43474
}Withdraw Routes
| Incoming | Outgoing |
|---|---|
Empty | Empty |
{
"incoming": [],
"outgoing": []
}From Date
To Date
2019/03/18 02:08:12
2019/03/18 02:08:12
| author | steemitboard |
| body | Congratulations @heha37! You received a personal award! <table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@heha37/birthday2.png</td><td>Happy Birthday! - You are on the Steem blockchain for 2 years!</td></tr></table> <sub>_You can view [your badges on your Steem Board](https://steemitboard.com/@heha37) and compare to others on the [Steem Ranking](http://steemitboard.com/ranking/index.php?name=heha37)_</sub> **Do not miss the last post from @steemitboard:** <table><tr><td><a href="https://steemit.com/drugwars/@steemitboard/drugwars-early-adopter"><img src="https://steemitimages.com/64x128/https://cdn.steemitimages.com/DQmYGN7R653u4hDFyq1hM7iuhr2bdAP1v2ApACDNtecJAZ5/image.png"></a></td><td><a href="https://steemit.com/drugwars/@steemitboard/drugwars-early-adopter">Are you a DrugWars early adopter? Benvenuto in famiglia!</a></td></tr></table> ###### [Vote for @Steemitboard as a witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1) to get one more award and increased upvotes! |
| json metadata | {"image":["https://steemitboard.com/img/notify.png"]} |
| parent author | heha37 |
| parent permlink | 6pgo9m-python |
| permlink | steemitboard-notify-heha37-20190318t020811000z |
| title | |
| Transaction Info | Block #31248666/Trx cd4707adcdf0f7943d7d04bea9af623995807b27 |
View Raw JSON Data
{
"block": 31248666,
"op": [
"comment",
{
"author": "steemitboard",
"body": "Congratulations @heha37! You received a personal award!\n\n<table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@heha37/birthday2.png</td><td>Happy Birthday! - You are on the Steem blockchain for 2 years!</td></tr></table>\n\n<sub>_You can view [your badges on your Steem Board](https://steemitboard.com/@heha37) and compare to others on the [Steem Ranking](http://steemitboard.com/ranking/index.php?name=heha37)_</sub>\n\n\n**Do not miss the last post from @steemitboard:**\n<table><tr><td><a href=\"https://steemit.com/drugwars/@steemitboard/drugwars-early-adopter\"><img src=\"https://steemitimages.com/64x128/https://cdn.steemitimages.com/DQmYGN7R653u4hDFyq1hM7iuhr2bdAP1v2ApACDNtecJAZ5/image.png\"></a></td><td><a href=\"https://steemit.com/drugwars/@steemitboard/drugwars-early-adopter\">Are you a DrugWars early adopter? Benvenuto in famiglia!</a></td></tr></table>\n\n###### [Vote for @Steemitboard as a witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1) to get one more award and increased upvotes!",
"json_metadata": "{\"image\":[\"https://steemitboard.com/img/notify.png\"]}",
"parent_author": "heha37",
"parent_permlink": "6pgo9m-python",
"permlink": "steemitboard-notify-heha37-20190318t020811000z",
"title": ""
}
],
"op_in_trx": 0,
"timestamp": "2019-03-18T02:08:12",
"trx_id": "cd4707adcdf0f7943d7d04bea9af623995807b27",
"trx_in_block": 13,
"virtual_op": 0
}heha37upvoted (100.00%) @oflyhigh / vector-cny2018/05/08 09:03:33
heha37upvoted (100.00%) @oflyhigh / vector-cny
2018/05/08 09:03:33
| author | oflyhigh |
| permlink | vector-cny |
| voter | heha37 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #22246000/Trx 66d65fc41c73655f0c28f04e424acb1274f2d90c |
View Raw JSON Data
{
"block": 22246000,
"op": [
"vote",
{
"author": "oflyhigh",
"permlink": "vector-cny",
"voter": "heha37",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2018-05-08T09:03:33",
"trx_id": "66d65fc41c73655f0c28f04e424acb1274f2d90c",
"trx_in_block": 6,
"virtual_op": 0
}heha37upvoted (100.00%) @oflyhigh / 46cawn-steem2018/04/08 06:52:33
heha37upvoted (100.00%) @oflyhigh / 46cawn-steem
2018/04/08 06:52:33
| author | oflyhigh |
| permlink | 46cawn-steem |
| voter | heha37 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #21380199/Trx 1ea63783f527de9b65124b85b04dcb63df1d8c92 |
View Raw JSON Data
{
"block": 21380199,
"op": [
"vote",
{
"author": "oflyhigh",
"permlink": "46cawn-steem",
"voter": "heha37",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2018-04-08T06:52:33",
"trx_id": "1ea63783f527de9b65124b85b04dcb63df1d8c92",
"trx_in_block": 30,
"virtual_op": 0
}2018/01/02 05:18:48
2018/01/02 05:18:48
| id | follow |
| json | ["follow",{"follower":"heha37","following":"mreko","what":["blog"]}] |
| required auths | [] |
| required posting auths | ["heha37"] |
| Transaction Info | Block #18616529/Trx c208148fba49c950504da5a28766193cb936c1d0 |
View Raw JSON Data
{
"block": 18616529,
"op": [
"custom_json",
{
"id": "follow",
"json": "[\"follow\",{\"follower\":\"heha37\",\"following\":\"mreko\",\"what\":[\"blog\"]}]",
"required_auths": [],
"required_posting_auths": [
"heha37"
]
}
],
"op_in_trx": 0,
"timestamp": "2018-01-02T05:18:48",
"trx_id": "c208148fba49c950504da5a28766193cb936c1d0",
"trx_in_block": 33,
"virtual_op": 0
}heha37upvoted (100.00%) @dhiki / have-a-nice-day-20171211t75212868z2017/12/11 08:29:00
heha37upvoted (100.00%) @dhiki / have-a-nice-day-20171211t75212868z
2017/12/11 08:29:00
| author | dhiki |
| permlink | have-a-nice-day-20171211t75212868z |
| voter | heha37 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #17987179/Trx c3190a945aa291347d3dba7d3982b4bacd17daff |
View Raw JSON Data
{
"block": 17987179,
"op": [
"vote",
{
"author": "dhiki",
"permlink": "have-a-nice-day-20171211t75212868z",
"voter": "heha37",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2017-12-11T08:29:00",
"trx_id": "c3190a945aa291347d3dba7d3982b4bacd17daff",
"trx_in_block": 13,
"virtual_op": 0
}heha37claimed reward balance: 0.015 SBD, 0.020 SP2017/11/27 06:52:57
heha37claimed reward balance: 0.015 SBD, 0.020 SP
2017/11/27 06:52:57
| account | heha37 |
| reward sbd | 0.015 SBD |
| reward steem | 0.000 STEEM |
| reward vests | 32.898387 VESTS |
| Transaction Info | Block #17582273/Trx a11c6ddcfcd3a58ba4cc578d356cdc2b576d6bb3 |
View Raw JSON Data
{
"block": 17582273,
"op": [
"claim_reward_balance",
{
"account": "heha37",
"reward_sbd": "0.015 SBD",
"reward_steem": "0.000 STEEM",
"reward_vests": "32.898387 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2017-11-27T06:52:57",
"trx_id": "a11c6ddcfcd3a58ba4cc578d356cdc2b576d6bb3",
"trx_in_block": 11,
"virtual_op": 0
}heha37received 0.015 SBD, 0.020 SP author reward for @heha37 / 6pgo9m-python2017/10/26 03:12:15
heha37received 0.015 SBD, 0.020 SP author reward for @heha37 / 6pgo9m-python
2017/10/26 03:12:15
| author | heha37 |
| permlink | 6pgo9m-python |
| sbd payout | 0.015 SBD |
| steem payout | 0.000 STEEM |
| vesting payout | 32.898387 VESTS |
| Transaction Info | Block #16656690/Virtual Operation #5 |
View Raw JSON Data
{
"block": 16656690,
"op": [
"author_reward",
{
"author": "heha37",
"permlink": "6pgo9m-python",
"sbd_payout": "0.015 SBD",
"steem_payout": "0.000 STEEM",
"vesting_payout": "32.898387 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2017-10-26T03:12:15",
"trx_id": "0000000000000000000000000000000000000000",
"trx_in_block": 4294967295,
"virtual_op": 5
}heha37followed @tracemayer2017/10/24 07:00:33
heha37followed @tracemayer
2017/10/24 07:00:33
| id | follow |
| json | ["follow",{"follower":"heha37","following":"tracemayer","what":["blog"]}] |
| required auths | [] |
| required posting auths | ["heha37"] |
| Transaction Info | Block #16603670/Trx 0a6d1a1b34d7eb96f25da4b68c4ce33577ecc9e2 |
View Raw JSON Data
{
"block": 16603670,
"op": [
"custom_json",
{
"id": "follow",
"json": "[\"follow\",{\"follower\":\"heha37\",\"following\":\"tracemayer\",\"what\":[\"blog\"]}]",
"required_auths": [],
"required_posting_auths": [
"heha37"
]
}
],
"op_in_trx": 0,
"timestamp": "2017-10-24T07:00:33",
"trx_id": "0a6d1a1b34d7eb96f25da4b68c4ce33577ecc9e2",
"trx_in_block": 9,
"virtual_op": 0
}nepalipahadupvoted (35.00%) @heha37 / 6pgo9m-python2017/10/19 03:57:15
nepalipahadupvoted (35.00%) @heha37 / 6pgo9m-python
2017/10/19 03:57:15
| author | heha37 |
| permlink | 6pgo9m-python |
| voter | nepalipahad |
| weight | 3500 (35.00%) |
| Transaction Info | Block #16456086/Trx f16b9e45b86312c11a2862f5133a4fcb6359ce30 |
View Raw JSON Data
{
"block": 16456086,
"op": [
"vote",
{
"author": "heha37",
"permlink": "6pgo9m-python",
"voter": "nepalipahad",
"weight": 3500
}
],
"op_in_trx": 0,
"timestamp": "2017-10-19T03:57:15",
"trx_id": "f16b9e45b86312c11a2862f5133a4fcb6359ce30",
"trx_in_block": 0,
"virtual_op": 0
}tvbupvoted (25.00%) @heha37 / 6pgo9m-python2017/10/19 03:40:36
tvbupvoted (25.00%) @heha37 / 6pgo9m-python
2017/10/19 03:40:36
| author | heha37 |
| permlink | 6pgo9m-python |
| voter | tvb |
| weight | 2500 (25.00%) |
| Transaction Info | Block #16455753/Trx 770b03ad095ee7e368e1b16e0108091c20249a21 |
View Raw JSON Data
{
"block": 16455753,
"op": [
"vote",
{
"author": "heha37",
"permlink": "6pgo9m-python",
"voter": "tvb",
"weight": 2500
}
],
"op_in_trx": 0,
"timestamp": "2017-10-19T03:40:36",
"trx_id": "770b03ad095ee7e368e1b16e0108091c20249a21",
"trx_in_block": 20,
"virtual_op": 0
}daydayupupvoted (100.00%) @heha37 / 6pgo9m-python2017/10/19 03:39:21
daydayupupvoted (100.00%) @heha37 / 6pgo9m-python
2017/10/19 03:39:21
| author | heha37 |
| permlink | 6pgo9m-python |
| voter | daydayup |
| weight | 10000 (100.00%) |
| Transaction Info | Block #16455728/Trx 4fda106addbab1d273de35c830d2e406da857352 |
View Raw JSON Data
{
"block": 16455728,
"op": [
"vote",
{
"author": "heha37",
"permlink": "6pgo9m-python",
"voter": "daydayup",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2017-10-19T03:39:21",
"trx_id": "4fda106addbab1d273de35c830d2e406da857352",
"trx_in_block": 13,
"virtual_op": 0
}2017/10/19 03:32:27
2017/10/19 03:32:27
| author | heha37 |
| body | nice |
| json metadata | {"tags":["cn"],"app":"steemit/0.1"} |
| parent author | oflyhigh |
| parent permlink | let-s-play-the-internal-market |
| permlink | re-oflyhigh-let-s-play-the-internal-market-20171019t033226773z |
| title | |
| Transaction Info | Block #16455590/Trx 13c21a78937fdc0fcd049b211a06b784019da3a3 |
View Raw JSON Data
{
"block": 16455590,
"op": [
"comment",
{
"author": "heha37",
"body": "nice",
"json_metadata": "{\"tags\":[\"cn\"],\"app\":\"steemit/0.1\"}",
"parent_author": "oflyhigh",
"parent_permlink": "let-s-play-the-internal-market",
"permlink": "re-oflyhigh-let-s-play-the-internal-market-20171019t033226773z",
"title": ""
}
],
"op_in_trx": 0,
"timestamp": "2017-10-19T03:32:27",
"trx_id": "13c21a78937fdc0fcd049b211a06b784019da3a3",
"trx_in_block": 23,
"virtual_op": 0
}heha37followed @steemitboard2017/10/19 03:29:39
heha37followed @steemitboard
2017/10/19 03:29:39
| id | follow |
| json | ["follow",{"follower":"heha37","following":"steemitboard","what":["blog"]}] |
| required auths | [] |
| required posting auths | ["heha37"] |
| Transaction Info | Block #16455534/Trx 30c06be5ac8122581098eb6ae6e87a6c00c50288 |
View Raw JSON Data
{
"block": 16455534,
"op": [
"custom_json",
{
"id": "follow",
"json": "[\"follow\",{\"follower\":\"heha37\",\"following\":\"steemitboard\",\"what\":[\"blog\"]}]",
"required_auths": [],
"required_posting_auths": [
"heha37"
]
}
],
"op_in_trx": 0,
"timestamp": "2017-10-19T03:29:39",
"trx_id": "30c06be5ac8122581098eb6ae6e87a6c00c50288",
"trx_in_block": 9,
"virtual_op": 0
}heha37published a new post: 6pgo9m-python2017/10/19 03:28:00
heha37published a new post: 6pgo9m-python
2017/10/19 03:28:00
| author | heha37 |
| body | ### 简介 说到区块链,大家不免会想到比特币、加密货币、智能合约、交易、支付,但是这些都是区块链解决的问题,不是其本身,并且这些把理解区块链变得复杂,下面配合Python代码理解区块链结构。 先总结一下区块链的定义,区块链本质上是一个能够保证系统诚实可信的分布式数据库,是由多种技术整合而成,该数据库由使用密码学技术产生的数据区块有序链接而成,每个区块包含一定时间内产生的不可篡改信息。 下面使用Python语言一步步打造一个简单的区块链原型。 ### 区块结构 学习区块链,就要先从区块的结构开始说起,因为价值信息就存在区块中,比如比特币的区块存储的是交易记录。除此以外,区块还含有一些技术信息,来维持区块的结构,抽取其中最关键的5个技术信息,分别是下标(Index),时间戳(Timestamp),前一个区块的哈希值(Previous Hash)和当前区块的哈希值(Current Hash),下面用类来封装这些信息,Python代码如下: ```python import hashlib class Block(object): def __init__(self, index, data, prev_hash, timestamp): self.index = index self.data = data self.prev_hash = prev_hash self.timestamp = timestamp self.cur_hash = self.do_hash(index, data, prev_hash, timestamp) def do_hash(self, *args): sha256 = hashlib.sha256() for arg in args: sha256.update(str(arg).encode('utf-8')) return sha256.hexdigest() ``` index、timestamp、prev_hash和cur_hash这四个技术信息构成了区块的头部数据,这是一个独立的数据结构;data参数储存价值信息,比如交易记录,也是一个单独的数据结构,但是在这里为了使其简单、便于理解,就混合在一个结构中。 上面代码的do_hash方法,是用来对区块进行哈希加密的,跟「挖矿」无关,没有解决工作量证明(POW)的问题,计算哈希是区块链中的重要环节。这里把区块里的字段数据关联起来后,使用SHA256算法进行哈希计算,得出当前哈希值cur_hash。 ### 区块链结构 区块链本质上就是一个拥有特定结构的数据库,是一个有序且反向链接的列表,在这个列表里,区块按照插入的顺序排列,通过prev_hash这个字段找到上一个区块的哈希值,把每一个区块都链接到上一个区块上,如下图所示:  下面我创建了一个Manager类,用来封装区块链的一些操作,达到维护区块链结构的目的: ```python import datetime class Manager(object): """Blockchain manager""" blockchain = [] def __init__(self): self.origin_index = 0 self.origin_prev_hash = '0' self.origin_data = 'origin block' self.origin_timestamp = datetime.datetime(2016, 4, 1, 0, 0).timestamp() Manager.blockchain.append(self.get_origin_block()) ``` 比特币使用LevelDB来存储区块链,为了简化,在上面代码上使用Python的列表(List)把区块链直接存储在内存中。刚刚初始化的时候区块链中没有区块,为了能够不断添加新的区块,我们需要区块链中至少有一个区块,这第一个区块被称为「创始块(Genesis Block)」,下面给出创建「创始块」的方法: ```python class Manager(object): ... def get_origin_block(self): return Block(self.origin_index, self.origin_data, self.origin_prev_hash, self.origin_timestamp) ... ``` 有了「创始块」之后,就可以根据当前最新的区块生成下一个区块,代码如下: ```python class Manager(object): ... def get_latest_block(self): return Manager.blockchain[-1] def generate_next_block(self, new_data): prev_block = self.get_latest_block() next_index = prev_block.index + 1 next_timestamp = datetime.datetime.now().timestamp() return Block(next_index, new_data, prev_block.cur_hash, next_timestamp) ... ``` ### 结论 以上创建了一个简单的区块链原型,只是一个区块列表,真正的区块链在添加区块的时候需要经历大量的计算,这个过程就是传说中的「工作量证明」(POW,Proof-Of-Work),并且还需要全网「共识机制」的认可。 |
| json metadata | {"tags":["cn","python","blockchain"],"image":["https://shootertt.github.io/uploads/block_structure.jpg"],"app":"steemit/0.1","format":"markdown"} |
| parent author | |
| parent permlink | python |
| permlink | 6pgo9m-python |
| title | 块说链语:用Python撸一串区块链 |
| Transaction Info | Block #16455501/Trx b16539928987a3cd5a03214c0d6d0a431330d8f2 |
View Raw JSON Data
{
"block": 16455501,
"op": [
"comment",
{
"author": "heha37",
"body": "### 简介\n\n说到区块链,大家不免会想到比特币、加密货币、智能合约、交易、支付,但是这些都是区块链解决的问题,不是其本身,并且这些把理解区块链变得复杂,下面配合Python代码理解区块链结构。\n\n先总结一下区块链的定义,区块链本质上是一个能够保证系统诚实可信的分布式数据库,是由多种技术整合而成,该数据库由使用密码学技术产生的数据区块有序链接而成,每个区块包含一定时间内产生的不可篡改信息。\n\n下面使用Python语言一步步打造一个简单的区块链原型。\n\n\n### 区块结构\n\n学习区块链,就要先从区块的结构开始说起,因为价值信息就存在区块中,比如比特币的区块存储的是交易记录。除此以外,区块还含有一些技术信息,来维持区块的结构,抽取其中最关键的5个技术信息,分别是下标(Index),时间戳(Timestamp),前一个区块的哈希值(Previous Hash)和当前区块的哈希值(Current Hash),下面用类来封装这些信息,Python代码如下:\n```python\nimport hashlib\n\nclass Block(object):\n def __init__(self, index, data, prev_hash, timestamp):\n self.index = index\n self.data = data\n self.prev_hash = prev_hash\n self.timestamp = timestamp\n self.cur_hash = self.do_hash(index, data, prev_hash, timestamp) \n def do_hash(self, *args):\n sha256 = hashlib.sha256() \n for arg in args:\n sha256.update(str(arg).encode('utf-8')) \n return sha256.hexdigest()\n```\n\nindex、timestamp、prev_hash和cur_hash这四个技术信息构成了区块的头部数据,这是一个独立的数据结构;data参数储存价值信息,比如交易记录,也是一个单独的数据结构,但是在这里为了使其简单、便于理解,就混合在一个结构中。\n\n上面代码的do_hash方法,是用来对区块进行哈希加密的,跟「挖矿」无关,没有解决工作量证明(POW)的问题,计算哈希是区块链中的重要环节。这里把区块里的字段数据关联起来后,使用SHA256算法进行哈希计算,得出当前哈希值cur_hash。\n\n### 区块链结构\n\n区块链本质上就是一个拥有特定结构的数据库,是一个有序且反向链接的列表,在这个列表里,区块按照插入的顺序排列,通过prev_hash这个字段找到上一个区块的哈希值,把每一个区块都链接到上一个区块上,如下图所示:\n\n\n\n\n下面我创建了一个Manager类,用来封装区块链的一些操作,达到维护区块链结构的目的:\n\n```python\nimport datetime\nclass Manager(object): \n \"\"\"Blockchain manager\"\"\"\n\n blockchain = []\n\n def __init__(self):\n self.origin_index = 0\n self.origin_prev_hash = '0'\n self.origin_data = 'origin block'\n self.origin_timestamp = datetime.datetime(2016, 4, 1, 0, 0).timestamp()\n Manager.blockchain.append(self.get_origin_block())\n```\n\n比特币使用LevelDB来存储区块链,为了简化,在上面代码上使用Python的列表(List)把区块链直接存储在内存中。刚刚初始化的时候区块链中没有区块,为了能够不断添加新的区块,我们需要区块链中至少有一个区块,这第一个区块被称为「创始块(Genesis Block)」,下面给出创建「创始块」的方法:\n\n```python\nclass Manager(object):\n ...\n def get_origin_block(self):\n return Block(self.origin_index, self.origin_data, self.origin_prev_hash,\n self.origin_timestamp)\n ...\n```\n\n有了「创始块」之后,就可以根据当前最新的区块生成下一个区块,代码如下:\n\n```python\nclass Manager(object):\n ...\n def get_latest_block(self):\n return Manager.blockchain[-1]\n\n def generate_next_block(self, new_data):\n prev_block = self.get_latest_block()\n next_index = prev_block.index + 1\n\n next_timestamp = datetime.datetime.now().timestamp()\n return Block(next_index, new_data, prev_block.cur_hash, next_timestamp)\n ...\n```\n\n### 结论\n\n以上创建了一个简单的区块链原型,只是一个区块列表,真正的区块链在添加区块的时候需要经历大量的计算,这个过程就是传说中的「工作量证明」(POW,Proof-Of-Work),并且还需要全网「共识机制」的认可。",
"json_metadata": "{\"tags\":[\"cn\",\"python\",\"blockchain\"],\"image\":[\"https://shootertt.github.io/uploads/block_structure.jpg\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
"parent_author": "",
"parent_permlink": "python",
"permlink": "6pgo9m-python",
"title": "块说链语:用Python撸一串区块链"
}
],
"op_in_trx": 0,
"timestamp": "2017-10-19T03:28:00",
"trx_id": "b16539928987a3cd5a03214c0d6d0a431330d8f2",
"trx_in_block": 8,
"virtual_op": 0
}heha37published a new post: 6pgo9m-python2017/10/19 03:27:33
heha37published a new post: 6pgo9m-python
2017/10/19 03:27:33
| author | heha37 |
| body | ### 简介 说到区块链,大家不免会想到比特币、加密货币、智能合约、交易、支付,但是这些都是区块链解决的问题,不是其本身,并且这些把理解区块链变得复杂,下面配合Python代码理解区块链结构。 先总结一下区块链的定义,区块链本质上是一个能够保证系统诚实可信的分布式数据库,是由多种技术整合而成,该数据库由使用密码学技术产生的数据区块有序链接而成,每个区块包含一定时间内产生的不可篡改信息。 下面使用Python语言一步步打造一个简单的区块链原型。 ### 区块结构 学习区块链,就要先从区块的结构开始说起,因为价值信息就存在区块中,比如比特币的区块存储的是交易记录。除此以外,区块还含有一些技术信息,来维持区块的结构,抽取其中最关键的5个技术信息,分别是下标(Index),时间戳(Timestamp),前一个区块的哈希值(Previous Hash)和当前区块的哈希值(Current Hash),下面用类来封装这些信息,Python代码如下: ```python import hashlib class Block(object): def __init__(self, index, data, prev_hash, timestamp): self.index = index self.data = data self.prev_hash = prev_hash self.timestamp = timestamp self.cur_hash = self.do_hash(index, data, prev_hash, timestamp) def do_hash(self, *args): sha256 = hashlib.sha256() for arg in args: sha256.update(str(arg).encode('utf-8')) return sha256.hexdigest() ``` index、timestamp、prev_hash和cur_hash这四个技术信息构成了区块的头部数据,这是一个独立的数据结构;data参数储存价值信息,比如交易记录,也是一个单独的数据结构,但是在这里为了使其简单、便于理解,就混合在一个结构中。 上面代码的do_hash方法,是用来对区块进行哈希加密的,跟「挖矿」无关,没有解决工作量证明(POW)的问题,计算哈希是区块链中的重要环节。这里把区块里的字段数据关联起来后,使用SHA256算法进行哈希计算,得出当前哈希值cur_hash。 ### 区块链结构 区块链本质上就是一个拥有特定结构的数据库,是一个有序且反向链接的列表,在这个列表里,区块按照插入的顺序排列,通过prev_hash这个字段找到上一个区块的哈希值,把每一个区块都链接到上一个区块上,如下图所示:  下面我创建了一个Manager类,用来封装区块链的一些操作,达到维护区块链结构的目的: ```python import datetime class Manager(object): """Blockchain manager""" blockchain = [] def __init__(self): self.origin_index = 0 self.origin_prev_hash = '0' self.origin_data = 'origin block' self.origin_timestamp = datetime.datetime(2016, 4, 1, 0, 0).timestamp() Manager.blockchain.append(self.get_origin_block()) ``` 比特币使用LevelDB来存储区块链,为了简化,在上面代码上使用Python的列表(List)把区块链直接存储在内存中。刚刚初始化的时候区块链中没有区块,为了能够不断添加新的区块,我们需要区块链中至少有一个区块,这第一个区块被称为「创始块(Genesis Block)」,下面给出创建「创始块」的方法: ```python class Manager(object): ... def get_origin_block(self): return Block(self.origin_index, self.origin_data, self.origin_prev_hash, self.origin_timestamp) ... ``` 有了「创始块」之后,就可以根据当前最新的区块生成下一个区块,代码如下: ```python class Manager(object): ... def get_latest_block(self): return Manager.blockchain[-1] def generate_next_block(self, new_data): prev_block = self.get_latest_block() next_index = prev_block.index + 1 next_timestamp = datetime.datetime.now().timestamp() return Block(next_index, new_data, prev_block.cur_hash, next_timestamp) ... ``` ### 结论 以上创建了一个简单的区块链原型,只是一个区块列表,真正的区块链在添加区块的时候需要经历大量的计算,这个过程就是传说中的「工作量证明」(POW,Proof-Of-Work),并且还需要全网「共识机制」的认可。 |
| json metadata | {"tags":["cn","python","blockchain"],"image":["https://shootertt.github.io/uploads/block_structure.jpg"],"app":"steemit/0.1","format":"markdown"} |
| parent author | |
| parent permlink | python |
| permlink | 6pgo9m-python |
| title | 块说链语:用Python撸一串区块链 |
| Transaction Info | Block #16455492/Trx 63c64b961e1c7ae4849a49dec64cdcee91a0c31b |
View Raw JSON Data
{
"block": 16455492,
"op": [
"comment",
{
"author": "heha37",
"body": "### 简介\n\n说到区块链,大家不免会想到比特币、加密货币、智能合约、交易、支付,但是这些都是区块链解决的问题,不是其本身,并且这些把理解区块链变得复杂,下面配合Python代码理解区块链结构。\n\n先总结一下区块链的定义,区块链本质上是一个能够保证系统诚实可信的分布式数据库,是由多种技术整合而成,该数据库由使用密码学技术产生的数据区块有序链接而成,每个区块包含一定时间内产生的不可篡改信息。\n\n下面使用Python语言一步步打造一个简单的区块链原型。\n\n\n### 区块结构\n\n学习区块链,就要先从区块的结构开始说起,因为价值信息就存在区块中,比如比特币的区块存储的是交易记录。除此以外,区块还含有一些技术信息,来维持区块的结构,抽取其中最关键的5个技术信息,分别是下标(Index),时间戳(Timestamp),前一个区块的哈希值(Previous Hash)和当前区块的哈希值(Current Hash),下面用类来封装这些信息,Python代码如下:\n```python\nimport hashlib\n\nclass Block(object):\n def __init__(self, index, data, prev_hash, timestamp):\n self.index = index\n self.data = data\n self.prev_hash = prev_hash\n self.timestamp = timestamp\n self.cur_hash = self.do_hash(index, data, prev_hash, timestamp) \n def do_hash(self, *args):\n sha256 = hashlib.sha256() \n for arg in args:\n sha256.update(str(arg).encode('utf-8')) \n return sha256.hexdigest()\n```\n\nindex、timestamp、prev_hash和cur_hash这四个技术信息构成了区块的头部数据,这是一个独立的数据结构;data参数储存价值信息,比如交易记录,也是一个单独的数据结构,但是在这里为了使其简单、便于理解,就混合在一个结构中。\n\n上面代码的do_hash方法,是用来对区块进行哈希加密的,跟「挖矿」无关,没有解决工作量证明(POW)的问题,计算哈希是区块链中的重要环节。这里把区块里的字段数据关联起来后,使用SHA256算法进行哈希计算,得出当前哈希值cur_hash。\n\n### 区块链结构\n\n区块链本质上就是一个拥有特定结构的数据库,是一个有序且反向链接的列表,在这个列表里,区块按照插入的顺序排列,通过prev_hash这个字段找到上一个区块的哈希值,把每一个区块都链接到上一个区块上,如下图所示:\n\n\n\n\n下面我创建了一个Manager类,用来封装区块链的一些操作,达到维护区块链结构的目的:\n\n```python\nimport datetime\nclass Manager(object): \n \"\"\"Blockchain manager\"\"\"\n\n blockchain = []\n\n def __init__(self):\n self.origin_index = 0\n self.origin_prev_hash = '0'\n self.origin_data = 'origin block'\n self.origin_timestamp = datetime.datetime(2016, 4, 1, 0, 0).timestamp()\n Manager.blockchain.append(self.get_origin_block())\n```\n\n比特币使用LevelDB来存储区块链,为了简化,在上面代码上使用Python的列表(List)把区块链直接存储在内存中。刚刚初始化的时候区块链中没有区块,为了能够不断添加新的区块,我们需要区块链中至少有一个区块,这第一个区块被称为「创始块(Genesis Block)」,下面给出创建「创始块」的方法:\n\n```python\nclass Manager(object):\n ...\n def get_origin_block(self):\n return Block(self.origin_index, self.origin_data, self.origin_prev_hash,\n self.origin_timestamp)\n ...\n```\n\n有了「创始块」之后,就可以根据当前最新的区块生成下一个区块,代码如下:\n\n```python\nclass Manager(object):\n ...\n def get_latest_block(self):\n return Manager.blockchain[-1]\n\n def generate_next_block(self, new_data):\n prev_block = self.get_latest_block()\n next_index = prev_block.index + 1\n\n next_timestamp = datetime.datetime.now().timestamp()\n return Block(next_index, new_data, prev_block.cur_hash, next_timestamp)\n ...\n```\n\n### 结论\n\n以上创建了一个简单的区块链原型,只是一个区块列表,真正的区块链在添加区块的时候需要经历大量的计算,这个过程就是传说中的「工作量证明」(POW,Proof-Of-Work),并且还需要全网「共识机制」的认可。",
"json_metadata": "{\"tags\":[\"cn\",\"python\",\"blockchain\"],\"image\":[\"https://shootertt.github.io/uploads/block_structure.jpg\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
"parent_author": "",
"parent_permlink": "python",
"permlink": "6pgo9m-python",
"title": "块说链语:用Python撸一串区块链"
}
],
"op_in_trx": 0,
"timestamp": "2017-10-19T03:27:33",
"trx_id": "63c64b961e1c7ae4849a49dec64cdcee91a0c31b",
"trx_in_block": 17,
"virtual_op": 0
}heha37updated their account properties2017/10/19 03:23:03
heha37updated their account properties
2017/10/19 03:23:03
| account | heha37 |
| json metadata | {"profile":{"name":"heha3737","profile_image":"https://pbs.twimg.com/profile_images/619890136025698308/Cc1CFtsh_400x400.jpg"}} |
| memo key | STM6uRcF83nvHha6WbpuUhPd2yDsAA6ubcNbzCbZnbPrhkDpMB7FG |
| Transaction Info | Block #16455402/Trx a8602a14a03b1a55d3e1a1aa8822901433f538ae |
View Raw JSON Data
{
"block": 16455402,
"op": [
"account_update",
{
"account": "heha37",
"json_metadata": "{\"profile\":{\"name\":\"heha3737\",\"profile_image\":\"https://pbs.twimg.com/profile_images/619890136025698308/Cc1CFtsh_400x400.jpg\"}}",
"memo_key": "STM6uRcF83nvHha6WbpuUhPd2yDsAA6ubcNbzCbZnbPrhkDpMB7FG"
}
],
"op_in_trx": 0,
"timestamp": "2017-10-19T03:23:03",
"trx_id": "a8602a14a03b1a55d3e1a1aa8822901433f538ae",
"trx_in_block": 0,
"virtual_op": 0
}heha37updated their account properties2017/10/19 03:22:36
heha37updated their account properties
2017/10/19 03:22:36
| account | heha37 |
| json metadata | {"profile":{"name":"heha3737","cover_image":"https://pbs.twimg.com/profile_images/619890136025698308/Cc1CFtsh_400x400.jpg"}} |
| memo key | STM6uRcF83nvHha6WbpuUhPd2yDsAA6ubcNbzCbZnbPrhkDpMB7FG |
| Transaction Info | Block #16455393/Trx 0271b093f9ec60a4aad0279b04a7eb7847892355 |
View Raw JSON Data
{
"block": 16455393,
"op": [
"account_update",
{
"account": "heha37",
"json_metadata": "{\"profile\":{\"name\":\"heha3737\",\"cover_image\":\"https://pbs.twimg.com/profile_images/619890136025698308/Cc1CFtsh_400x400.jpg\"}}",
"memo_key": "STM6uRcF83nvHha6WbpuUhPd2yDsAA6ubcNbzCbZnbPrhkDpMB7FG"
}
],
"op_in_trx": 0,
"timestamp": "2017-10-19T03:22:36",
"trx_id": "0271b093f9ec60a4aad0279b04a7eb7847892355",
"trx_in_block": 4,
"virtual_op": 0
}heha37replied to @dhiki / re-dhiki-re-heha37-20171019t032042184z2017/10/19 03:20:42
heha37replied to @dhiki / re-dhiki-re-heha37-20171019t032042184z
2017/10/19 03:20:42
| author | heha37 |
| body | No sweat |
| json metadata | {"tags":["python"],"app":"steemit/0.1"} |
| parent author | dhiki |
| parent permlink | re-heha37-20171019t101257440z |
| permlink | re-dhiki-re-heha37-20171019t032042184z |
| title | |
| Transaction Info | Block #16455355/Trx b953df799834db356d7ecbeaa5a6e1a4c4b195ac |
View Raw JSON Data
{
"block": 16455355,
"op": [
"comment",
{
"author": "heha37",
"body": "No sweat",
"json_metadata": "{\"tags\":[\"python\"],\"app\":\"steemit/0.1\"}",
"parent_author": "dhiki",
"parent_permlink": "re-heha37-20171019t101257440z",
"permlink": "re-dhiki-re-heha37-20171019t032042184z",
"title": ""
}
],
"op_in_trx": 0,
"timestamp": "2017-10-19T03:20:42",
"trx_id": "b953df799834db356d7ecbeaa5a6e1a4c4b195ac",
"trx_in_block": 25,
"virtual_op": 0
}2017/10/19 03:15:33
2017/10/19 03:15:33
| id | follow |
| json | ["follow",{"follower":"heha37","following":"dhiki","what":["blog"]}] |
| required auths | [] |
| required posting auths | ["heha37"] |
| Transaction Info | Block #16455252/Trx 098a4c4a5ed89e755d59c20660729ae9ff0f877b |
View Raw JSON Data
{
"block": 16455252,
"op": [
"custom_json",
{
"id": "follow",
"json": "[\"follow\",{\"follower\":\"heha37\",\"following\":\"dhiki\",\"what\":[\"blog\"]}]",
"required_auths": [],
"required_posting_auths": [
"heha37"
]
}
],
"op_in_trx": 0,
"timestamp": "2017-10-19T03:15:33",
"trx_id": "098a4c4a5ed89e755d59c20660729ae9ff0f877b",
"trx_in_block": 19,
"virtual_op": 0
}heha37published a new post: 6pgo9m-python2017/10/19 03:15:15
heha37published a new post: 6pgo9m-python
2017/10/19 03:15:15
| author | heha37 |
| body | @@ -225,16 +225,17 @@ %E5%9E%8B%E3%80%82%0A%0A%0A### + %E5%8C%BA%E5%9D%97%E7%BB%93%E6%9E%84%0A%0A%E5%AD%A6%E4%B9%A0 @@ -1310,16 +1310,43 @@ re.jpg%5D( +https://shootertt.github.io /uploads |
| json metadata | {"tags":["python","blockchain"],"image":["https://shootertt.github.io/uploads/block_structure.jpg"],"app":"steemit/0.1","format":"markdown"} |
| parent author | |
| parent permlink | python |
| permlink | 6pgo9m-python |
| title | 块说链语:用Python撸一串区块链 |
| Transaction Info | Block #16455246/Trx 81b93d83c7a227f4c9a3d713b4f0e2f51793693c |
View Raw JSON Data
{
"block": 16455246,
"op": [
"comment",
{
"author": "heha37",
"body": "@@ -225,16 +225,17 @@\n %E5%9E%8B%E3%80%82%0A%0A%0A###\n+ \n %E5%8C%BA%E5%9D%97%E7%BB%93%E6%9E%84%0A%0A%E5%AD%A6%E4%B9%A0\n@@ -1310,16 +1310,43 @@\n re.jpg%5D(\n+https://shootertt.github.io\n /uploads\n",
"json_metadata": "{\"tags\":[\"python\",\"blockchain\"],\"image\":[\"https://shootertt.github.io/uploads/block_structure.jpg\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
"parent_author": "",
"parent_permlink": "python",
"permlink": "6pgo9m-python",
"title": "块说链语:用Python撸一串区块链"
}
],
"op_in_trx": 0,
"timestamp": "2017-10-19T03:15:15",
"trx_id": "81b93d83c7a227f4c9a3d713b4f0e2f51793693c",
"trx_in_block": 19,
"virtual_op": 0
}dhikireplied to @heha37 / re-heha37-20171019t101257440z2017/10/19 03:13:12
dhikireplied to @heha37 / re-heha37-20171019t101257440z
2017/10/19 03:13:12
| author | dhiki |
| body | Thanks u informa |
| json metadata | {"tags":"python","app":"esteem/1.4.6","format":"markdown+html","community":"esteem"} |
| parent author | heha37 |
| parent permlink | 6pgo9m-python |
| permlink | re-heha37-20171019t101257440z |
| title | |
| Transaction Info | Block #16455205/Trx e54bb2d96d9a36acd82272726fc9eecf05f1adbe |
View Raw JSON Data
{
"block": 16455205,
"op": [
"comment",
{
"author": "dhiki",
"body": "Thanks u informa",
"json_metadata": "{\"tags\":\"python\",\"app\":\"esteem/1.4.6\",\"format\":\"markdown+html\",\"community\":\"esteem\"}",
"parent_author": "heha37",
"parent_permlink": "6pgo9m-python",
"permlink": "re-heha37-20171019t101257440z",
"title": ""
}
],
"op_in_trx": 0,
"timestamp": "2017-10-19T03:13:12",
"trx_id": "e54bb2d96d9a36acd82272726fc9eecf05f1adbe",
"trx_in_block": 18,
"virtual_op": 0
}heha37published a new post: 6pgo9m-python2017/10/19 03:12:15
heha37published a new post: 6pgo9m-python
2017/10/19 03:12:15
| author | heha37 |
| body | ### 简介 说到区块链,大家不免会想到比特币、加密货币、智能合约、交易、支付,但是这些都是区块链解决的问题,不是其本身,并且这些把理解区块链变得复杂,下面配合Python代码理解区块链结构。 先总结一下区块链的定义,区块链本质上是一个能够保证系统诚实可信的分布式数据库,是由多种技术整合而成,该数据库由使用密码学技术产生的数据区块有序链接而成,每个区块包含一定时间内产生的不可篡改信息。 下面使用Python语言一步步打造一个简单的区块链原型。 ###区块结构 学习区块链,就要先从区块的结构开始说起,因为价值信息就存在区块中,比如比特币的区块存储的是交易记录。除此以外,区块还含有一些技术信息,来维持区块的结构,抽取其中最关键的5个技术信息,分别是下标(Index),时间戳(Timestamp),前一个区块的哈希值(Previous Hash)和当前区块的哈希值(Current Hash),下面用类来封装这些信息,Python代码如下: ```python import hashlib class Block(object): def __init__(self, index, data, prev_hash, timestamp): self.index = index self.data = data self.prev_hash = prev_hash self.timestamp = timestamp self.cur_hash = self.do_hash(index, data, prev_hash, timestamp) def do_hash(self, *args): sha256 = hashlib.sha256() for arg in args: sha256.update(str(arg).encode('utf-8')) return sha256.hexdigest() ``` index、timestamp、prev_hash和cur_hash这四个技术信息构成了区块的头部数据,这是一个独立的数据结构;data参数储存价值信息,比如交易记录,也是一个单独的数据结构,但是在这里为了使其简单、便于理解,就混合在一个结构中。 上面代码的do_hash方法,是用来对区块进行哈希加密的,跟「挖矿」无关,没有解决工作量证明(POW)的问题,计算哈希是区块链中的重要环节。这里把区块里的字段数据关联起来后,使用SHA256算法进行哈希计算,得出当前哈希值cur_hash。 ### 区块链结构 区块链本质上就是一个拥有特定结构的数据库,是一个有序且反向链接的列表,在这个列表里,区块按照插入的顺序排列,通过prev_hash这个字段找到上一个区块的哈希值,把每一个区块都链接到上一个区块上,如下图所示:  下面我创建了一个Manager类,用来封装区块链的一些操作,达到维护区块链结构的目的: ```python import datetime class Manager(object): """Blockchain manager""" blockchain = [] def __init__(self): self.origin_index = 0 self.origin_prev_hash = '0' self.origin_data = 'origin block' self.origin_timestamp = datetime.datetime(2016, 4, 1, 0, 0).timestamp() Manager.blockchain.append(self.get_origin_block()) ``` 比特币使用LevelDB来存储区块链,为了简化,在上面代码上使用Python的列表(List)把区块链直接存储在内存中。刚刚初始化的时候区块链中没有区块,为了能够不断添加新的区块,我们需要区块链中至少有一个区块,这第一个区块被称为「创始块(Genesis Block)」,下面给出创建「创始块」的方法: ```python class Manager(object): ... def get_origin_block(self): return Block(self.origin_index, self.origin_data, self.origin_prev_hash, self.origin_timestamp) ... ``` 有了「创始块」之后,就可以根据当前最新的区块生成下一个区块,代码如下: ```python class Manager(object): ... def get_latest_block(self): return Manager.blockchain[-1] def generate_next_block(self, new_data): prev_block = self.get_latest_block() next_index = prev_block.index + 1 next_timestamp = datetime.datetime.now().timestamp() return Block(next_index, new_data, prev_block.cur_hash, next_timestamp) ... ``` ### 结论 以上创建了一个简单的区块链原型,只是一个区块列表,真正的区块链在添加区块的时候需要经历大量的计算,这个过程就是传说中的「工作量证明」(POW,Proof-Of-Work),并且还需要全网「共识机制」的认可。 |
| json metadata | {"tags":["python","blockchain"],"image":["/uploads/block_structure.jpg"],"app":"steemit/0.1","format":"markdown"} |
| parent author | |
| parent permlink | python |
| permlink | 6pgo9m-python |
| title | 块说链语:用Python撸一串区块链 |
| Transaction Info | Block #16455186/Trx de20bfa1f417c0faae14bbb8d2add35db1a6bf41 |
View Raw JSON Data
{
"block": 16455186,
"op": [
"comment",
{
"author": "heha37",
"body": "### 简介\n\n说到区块链,大家不免会想到比特币、加密货币、智能合约、交易、支付,但是这些都是区块链解决的问题,不是其本身,并且这些把理解区块链变得复杂,下面配合Python代码理解区块链结构。\n\n先总结一下区块链的定义,区块链本质上是一个能够保证系统诚实可信的分布式数据库,是由多种技术整合而成,该数据库由使用密码学技术产生的数据区块有序链接而成,每个区块包含一定时间内产生的不可篡改信息。\n\n下面使用Python语言一步步打造一个简单的区块链原型。\n\n\n###区块结构\n\n学习区块链,就要先从区块的结构开始说起,因为价值信息就存在区块中,比如比特币的区块存储的是交易记录。除此以外,区块还含有一些技术信息,来维持区块的结构,抽取其中最关键的5个技术信息,分别是下标(Index),时间戳(Timestamp),前一个区块的哈希值(Previous Hash)和当前区块的哈希值(Current Hash),下面用类来封装这些信息,Python代码如下:\n```python\nimport hashlib\n\nclass Block(object):\n def __init__(self, index, data, prev_hash, timestamp):\n self.index = index\n self.data = data\n self.prev_hash = prev_hash\n self.timestamp = timestamp\n self.cur_hash = self.do_hash(index, data, prev_hash, timestamp) \n def do_hash(self, *args):\n sha256 = hashlib.sha256() \n for arg in args:\n sha256.update(str(arg).encode('utf-8')) \n return sha256.hexdigest()\n```\n\nindex、timestamp、prev_hash和cur_hash这四个技术信息构成了区块的头部数据,这是一个独立的数据结构;data参数储存价值信息,比如交易记录,也是一个单独的数据结构,但是在这里为了使其简单、便于理解,就混合在一个结构中。\n\n上面代码的do_hash方法,是用来对区块进行哈希加密的,跟「挖矿」无关,没有解决工作量证明(POW)的问题,计算哈希是区块链中的重要环节。这里把区块里的字段数据关联起来后,使用SHA256算法进行哈希计算,得出当前哈希值cur_hash。\n\n### 区块链结构\n\n区块链本质上就是一个拥有特定结构的数据库,是一个有序且反向链接的列表,在这个列表里,区块按照插入的顺序排列,通过prev_hash这个字段找到上一个区块的哈希值,把每一个区块都链接到上一个区块上,如下图所示:\n\n\n\n\n下面我创建了一个Manager类,用来封装区块链的一些操作,达到维护区块链结构的目的:\n\n```python\nimport datetime\nclass Manager(object): \n \"\"\"Blockchain manager\"\"\"\n\n blockchain = []\n\n def __init__(self):\n self.origin_index = 0\n self.origin_prev_hash = '0'\n self.origin_data = 'origin block'\n self.origin_timestamp = datetime.datetime(2016, 4, 1, 0, 0).timestamp()\n Manager.blockchain.append(self.get_origin_block())\n```\n\n比特币使用LevelDB来存储区块链,为了简化,在上面代码上使用Python的列表(List)把区块链直接存储在内存中。刚刚初始化的时候区块链中没有区块,为了能够不断添加新的区块,我们需要区块链中至少有一个区块,这第一个区块被称为「创始块(Genesis Block)」,下面给出创建「创始块」的方法:\n\n```python\nclass Manager(object):\n ...\n def get_origin_block(self):\n return Block(self.origin_index, self.origin_data, self.origin_prev_hash,\n self.origin_timestamp)\n ...\n```\n\n有了「创始块」之后,就可以根据当前最新的区块生成下一个区块,代码如下:\n\n```python\nclass Manager(object):\n ...\n def get_latest_block(self):\n return Manager.blockchain[-1]\n\n def generate_next_block(self, new_data):\n prev_block = self.get_latest_block()\n next_index = prev_block.index + 1\n\n next_timestamp = datetime.datetime.now().timestamp()\n return Block(next_index, new_data, prev_block.cur_hash, next_timestamp)\n ...\n```\n\n### 结论\n\n以上创建了一个简单的区块链原型,只是一个区块列表,真正的区块链在添加区块的时候需要经历大量的计算,这个过程就是传说中的「工作量证明」(POW,Proof-Of-Work),并且还需要全网「共识机制」的认可。",
"json_metadata": "{\"tags\":[\"python\",\"blockchain\"],\"image\":[\"/uploads/block_structure.jpg\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
"parent_author": "",
"parent_permlink": "python",
"permlink": "6pgo9m-python",
"title": "块说链语:用Python撸一串区块链"
}
],
"op_in_trx": 0,
"timestamp": "2017-10-19T03:12:15",
"trx_id": "de20bfa1f417c0faae14bbb8d2add35db1a6bf41",
"trx_in_block": 1,
"virtual_op": 0
}heha37updated their account properties2017/10/17 03:34:21
heha37updated their account properties
2017/10/17 03:34:21
| account | heha37 |
| active | {"account_auths":[],"key_auths":[["STM5wgyLj55Ldcn1x7FqPmfeR1tJUzg6WEjCcpTE7n67m8HnrQzoE",1]],"weight_threshold":1} |
| json metadata | {"profile":{"name":"heha3737"}} |
| memo key | STM6uRcF83nvHha6WbpuUhPd2yDsAA6ubcNbzCbZnbPrhkDpMB7FG |
| owner | {"account_auths":[],"key_auths":[["STM59uk43E3VyJ2NuebNRh6As8SvxBDqEHj2pTD9xGYszVb6E83zn",1]],"weight_threshold":1} |
| posting | {"account_auths":[],"key_auths":[["STM8QNX8cccFMra8pAQCPQSjKjZeDtjZXbbKTr8EJNsjvvKgEBfsu",1]],"weight_threshold":1} |
| Transaction Info | Block #16398042/Trx 51f6d372a72eee33bcbba43a6d5ed15db4fb07df |
View Raw JSON Data
{
"block": 16398042,
"op": [
"account_update",
{
"account": "heha37",
"active": {
"account_auths": [],
"key_auths": [
[
"STM5wgyLj55Ldcn1x7FqPmfeR1tJUzg6WEjCcpTE7n67m8HnrQzoE",
1
]
],
"weight_threshold": 1
},
"json_metadata": "{\"profile\":{\"name\":\"heha3737\"}}",
"memo_key": "STM6uRcF83nvHha6WbpuUhPd2yDsAA6ubcNbzCbZnbPrhkDpMB7FG",
"owner": {
"account_auths": [],
"key_auths": [
[
"STM59uk43E3VyJ2NuebNRh6As8SvxBDqEHj2pTD9xGYszVb6E83zn",
1
]
],
"weight_threshold": 1
},
"posting": {
"account_auths": [],
"key_auths": [
[
"STM8QNX8cccFMra8pAQCPQSjKjZeDtjZXbbKTr8EJNsjvvKgEBfsu",
1
]
],
"weight_threshold": 1
}
}
],
"op_in_trx": 0,
"timestamp": "2017-10-17T03:34:21",
"trx_id": "51f6d372a72eee33bcbba43a6d5ed15db4fb07df",
"trx_in_block": 17,
"virtual_op": 0
}heha37updated their account properties2017/10/17 03:10:33
heha37updated their account properties
2017/10/17 03:10:33
| account | heha37 |
| json metadata | {"profile":{"name":"heha3737"}} |
| memo key | STM8Uxqj2bF7dHriCBuNV3x38K5K7GqhcuANsYrmoQabKLPa1bbVb |
| Transaction Info | Block #16397566/Trx e2be07cec3fc3a75f8765dd15ddc5c16899f6fa6 |
View Raw JSON Data
{
"block": 16397566,
"op": [
"account_update",
{
"account": "heha37",
"json_metadata": "{\"profile\":{\"name\":\"heha3737\"}}",
"memo_key": "STM8Uxqj2bF7dHriCBuNV3x38K5K7GqhcuANsYrmoQabKLPa1bbVb"
}
],
"op_in_trx": 0,
"timestamp": "2017-10-17T03:10:33",
"trx_id": "e2be07cec3fc3a75f8765dd15ddc5c16899f6fa6",
"trx_in_block": 22,
"virtual_op": 0
}2017/10/16 06:20:15
2017/10/16 06:20:15
| author | heha37 |
| permlink | 4dqlkh |
| voter | mario6 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #16372563/Trx f63199046f9cc8dbb36ec34995362f40665eba0d |
View Raw JSON Data
{
"block": 16372563,
"op": [
"vote",
{
"author": "heha37",
"permlink": "4dqlkh",
"voter": "mario6",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2017-10-16T06:20:15",
"trx_id": "f63199046f9cc8dbb36ec34995362f40665eba0d",
"trx_in_block": 3,
"virtual_op": 0
}2017/08/10 08:05:03
2017/08/10 08:05:03
| author | heha37 |
| body | @@ -1,8 +1,63 @@ +!%5Bleaf%5D(https://shootertt.github.io/uploads/leaf.jpg)%0A%0A %E4%B8%80%E4%B8%AA%E4%BA%BA%E5%9C%A8%E7%B2%BE%E5%8A%9B%E3%80%81%E8%83%BD |
| json metadata | {"tags":["cn"],"app":"steemit/0.1","format":"markdown","image":["https://shootertt.github.io/uploads/leaf.jpg"]} |
| parent author | |
| parent permlink | cn |
| permlink | 6pug2z |
| title | 请把你嘴里的先嚼烂了 |
| Transaction Info | Block #14447228/Trx 2e8d4644630ae9092b402ce9b67b5dfedf1edb38 |
View Raw JSON Data
{
"block": 14447228,
"op": [
"comment",
{
"author": "heha37",
"body": "@@ -1,8 +1,63 @@\n+!%5Bleaf%5D(https://shootertt.github.io/uploads/leaf.jpg)%0A%0A\n %E4%B8%80%E4%B8%AA%E4%BA%BA%E5%9C%A8%E7%B2%BE%E5%8A%9B%E3%80%81%E8%83%BD\n",
"json_metadata": "{\"tags\":[\"cn\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\",\"image\":[\"https://shootertt.github.io/uploads/leaf.jpg\"]}",
"parent_author": "",
"parent_permlink": "cn",
"permlink": "6pug2z",
"title": "请把你嘴里的先嚼烂了"
}
],
"op_in_trx": 0,
"timestamp": "2017-08-10T08:05:03",
"trx_id": "2e8d4644630ae9092b402ce9b67b5dfedf1edb38",
"trx_in_block": 10,
"virtual_op": 0
}2017/08/10 08:03:54
2017/08/10 08:03:54
| author | heha37 |
| body | 一个人在精力、能量有限的情况下,一定要专注。 最近,自己参与了多个项目,并且脑子中不断蹦出新的想法,也想去进行落地实现,产生了「无所不能」的错觉。最后搞得自己忙东忙西,哪一个都没有搞透,而且还觉得非常的疲倦,没有成就感。 「什么都去做」其实是一种不太好的做事策略,是行动上的勤奋,浮躁只是其表象,贪婪和害怕才是其本质。害怕变化、害怕自己因为没抓住某个神秘的机会,而失去了对未来的掌控力 ,就像是现在加密货币的ICO风潮一样,要么某个品种的ICO没有跟上,就会后悔万分(其实并没有对品种进行什么研究,不知道自己在后悔什么);要么时时刻刻打听风声,紧盯「ICO变动」,生怕失去了什么神秘大奖,把自己忙得够呛。对于贪婪,我觉得它是一种收藏癖,思想上没有确定什么对自己来说是重要的,就是想去单纯地囤积,又由于精力和能量是有限的,所以每一件事都做得并不理想,造成了「贪多嚼不烂」的情形。 其实自己专注做好一两件事情就可以了,何必忙忙碌碌无所为,有一句古话「鹰立如睡,虎行似病」,把精力和能量集中在自己真正的「猎物」上。 |
| json metadata | {"tags":["cn"],"app":"steemit/0.1","format":"markdown"} |
| parent author | |
| parent permlink | cn |
| permlink | 6pug2z |
| title | 请把你嘴里的先嚼烂了 |
| Transaction Info | Block #14447205/Trx ddceeb63cce1fa6f5125b8664791df50820e5deb |
View Raw JSON Data
{
"block": 14447205,
"op": [
"comment",
{
"author": "heha37",
"body": "一个人在精力、能量有限的情况下,一定要专注。\n\n最近,自己参与了多个项目,并且脑子中不断蹦出新的想法,也想去进行落地实现,产生了「无所不能」的错觉。最后搞得自己忙东忙西,哪一个都没有搞透,而且还觉得非常的疲倦,没有成就感。\n\n「什么都去做」其实是一种不太好的做事策略,是行动上的勤奋,浮躁只是其表象,贪婪和害怕才是其本质。害怕变化、害怕自己因为没抓住某个神秘的机会,而失去了对未来的掌控力 ,就像是现在加密货币的ICO风潮一样,要么某个品种的ICO没有跟上,就会后悔万分(其实并没有对品种进行什么研究,不知道自己在后悔什么);要么时时刻刻打听风声,紧盯「ICO变动」,生怕失去了什么神秘大奖,把自己忙得够呛。对于贪婪,我觉得它是一种收藏癖,思想上没有确定什么对自己来说是重要的,就是想去单纯地囤积,又由于精力和能量是有限的,所以每一件事都做得并不理想,造成了「贪多嚼不烂」的情形。\n\n其实自己专注做好一两件事情就可以了,何必忙忙碌碌无所为,有一句古话「鹰立如睡,虎行似病」,把精力和能量集中在自己真正的「猎物」上。",
"json_metadata": "{\"tags\":[\"cn\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
"parent_author": "",
"parent_permlink": "cn",
"permlink": "6pug2z",
"title": "请把你嘴里的先嚼烂了"
}
],
"op_in_trx": 0,
"timestamp": "2017-08-10T08:03:54",
"trx_id": "ddceeb63cce1fa6f5125b8664791df50820e5deb",
"trx_in_block": 17,
"virtual_op": 0
}2017/08/10 07:58:15
2017/08/10 07:58:15
| author | heha37 |
| body | 一个人在精力、能量有限的情况下,一定要专注。 最近,自己参与了多个项目,并且脑子中不断蹦出新的想法,也想去进行落地实现,产生了「无所不能」的错觉。最后搞得自己忙东忙西,哪一个都没有搞透,而且还觉得非常的疲倦,没有成就感。 「什么都去做」其实是一种不太好的做事策略,是行动上的勤奋,浮躁只是其表象,贪婪和害怕才是其本质。害怕变化、害怕自己因为没抓住某个神秘的机会,而失去了对未来的掌控力 ,就像是现在加密货币的ICO风潮一样,要么某个品种的ICO没有跟上,就会后悔万分(其实并没有对品种进行什么研究,不知道自己在后悔什么);要么时时刻刻打听风声,紧盯「ICO变动」,生怕失去了什么神秘大奖,把自己忙得够呛。对于贪婪,我觉得它是一种收藏癖,思想上没有确定什么对自己来说是重要的,就是想去单纯地囤积,又由于精力和能量是有限的,所以每一件事都做得并不理想,造成了「贪多嚼不烂」的情形。 其实自己专注做好一两件事情就可以了,何必忙忙碌碌无所为,有一句古话「鹰立如睡,虎行似病」,把精力和能量集中在自己真正的「猎物」上。 |
| json metadata | {"tags":["cn"],"app":"steemit/0.1","format":"markdown"} |
| parent author | |
| parent permlink | cn |
| permlink | 6pug2z |
| title | 请把你嘴里的先嚼烂了 |
| Transaction Info | Block #14447092/Trx 21b97392f608f8e4281df6eee424c86cb972530d |
View Raw JSON Data
{
"block": 14447092,
"op": [
"comment",
{
"author": "heha37",
"body": "一个人在精力、能量有限的情况下,一定要专注。\n\n最近,自己参与了多个项目,并且脑子中不断蹦出新的想法,也想去进行落地实现,产生了「无所不能」的错觉。最后搞得自己忙东忙西,哪一个都没有搞透,而且还觉得非常的疲倦,没有成就感。\n\n「什么都去做」其实是一种不太好的做事策略,是行动上的勤奋,浮躁只是其表象,贪婪和害怕才是其本质。害怕变化、害怕自己因为没抓住某个神秘的机会,而失去了对未来的掌控力 ,就像是现在加密货币的ICO风潮一样,要么某个品种的ICO没有跟上,就会后悔万分(其实并没有对品种进行什么研究,不知道自己在后悔什么);要么时时刻刻打听风声,紧盯「ICO变动」,生怕失去了什么神秘大奖,把自己忙得够呛。对于贪婪,我觉得它是一种收藏癖,思想上没有确定什么对自己来说是重要的,就是想去单纯地囤积,又由于精力和能量是有限的,所以每一件事都做得并不理想,造成了「贪多嚼不烂」的情形。\n\n其实自己专注做好一两件事情就可以了,何必忙忙碌碌无所为,有一句古话「鹰立如睡,虎行似病」,把精力和能量集中在自己真正的「猎物」上。",
"json_metadata": "{\"tags\":[\"cn\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
"parent_author": "",
"parent_permlink": "cn",
"permlink": "6pug2z",
"title": "请把你嘴里的先嚼烂了"
}
],
"op_in_trx": 0,
"timestamp": "2017-08-10T07:58:15",
"trx_id": "21b97392f608f8e4281df6eee424c86cb972530d",
"trx_in_block": 9,
"virtual_op": 0
}maxtill94replied to @heha37 / re-heha37-5e2gjy-20170724t090531901z2017/07/24 09:05:33
maxtill94replied to @heha37 / re-heha37-5e2gjy-20170724t090531901z
2017/07/24 09:05:33
| author | maxtill94 |
| body | 分析2队长 : -NEVERDIE 最后7天所有参与众筹的参与者给予20%的NDC币做赏赐。 最少参与额为 5以太坊,只有在NEVERDIE 中国链接上可参与。 https://neverdie.io/ch.html |
| json metadata | {"tags":["cn"],"links":["https://neverdie.io/ch.html"],"app":"steemit/0.1"} |
| parent author | heha37 |
| parent permlink | 5e2gjy |
| permlink | re-heha37-5e2gjy-20170724t090531901z |
| title | |
| Transaction Info | Block #13959369/Trx c88f2b45f96886dcb0cebce5dcf37f0f44a11699 |
View Raw JSON Data
{
"block": 13959369,
"op": [
"comment",
{
"author": "maxtill94",
"body": "分析2队长 : -NEVERDIE 最后7天所有参与众筹的参与者给予20%的NDC币做赏赐。\n最少参与额为 5以太坊,只有在NEVERDIE 中国链接上可参与。\nhttps://neverdie.io/ch.html",
"json_metadata": "{\"tags\":[\"cn\"],\"links\":[\"https://neverdie.io/ch.html\"],\"app\":\"steemit/0.1\"}",
"parent_author": "heha37",
"parent_permlink": "5e2gjy",
"permlink": "re-heha37-5e2gjy-20170724t090531901z",
"title": ""
}
],
"op_in_trx": 0,
"timestamp": "2017-07-24T09:05:33",
"trx_id": "c88f2b45f96886dcb0cebce5dcf37f0f44a11699",
"trx_in_block": 7,
"virtual_op": 0
}maxtill94replied to @heha37 / re-heha37-4dqlkh-20170721t062743235z2017/07/21 06:27:45
maxtill94replied to @heha37 / re-heha37-4dqlkh-20170721t062743235z
2017/07/21 06:27:45
| author | maxtill94 |
| body | 你的文已看完,我已申请关注了,我也写了第一篇文,有空请阅下~ 个人认为NEVERDIE ICO 也不错,在我个人热帖里,Neverdie.com https://steemit.com/cn/@maxtill94/neverdie-ico-erc20-ico |
| json metadata | {"tags":["cn"],"links":["https://steemit.com/cn/@maxtill94/neverdie-ico-erc20-ico"],"app":"steemit/0.1"} |
| parent author | heha37 |
| parent permlink | 4dqlkh |
| permlink | re-heha37-4dqlkh-20170721t062743235z |
| title | |
| Transaction Info | Block #13869926/Trx bd0fb0b4bb2139a39a4566d8b29644205c4c09dc |
View Raw JSON Data
{
"block": 13869926,
"op": [
"comment",
{
"author": "maxtill94",
"body": "你的文已看完,我已申请关注了,我也写了第一篇文,有空请阅下~\n个人认为NEVERDIE ICO 也不错,在我个人热帖里,Neverdie.com\nhttps://steemit.com/cn/@maxtill94/neverdie-ico-erc20-ico",
"json_metadata": "{\"tags\":[\"cn\"],\"links\":[\"https://steemit.com/cn/@maxtill94/neverdie-ico-erc20-ico\"],\"app\":\"steemit/0.1\"}",
"parent_author": "heha37",
"parent_permlink": "4dqlkh",
"permlink": "re-heha37-4dqlkh-20170721t062743235z",
"title": ""
}
],
"op_in_trx": 0,
"timestamp": "2017-07-21T06:27:45",
"trx_id": "bd0fb0b4bb2139a39a4566d8b29644205c4c09dc",
"trx_in_block": 1,
"virtual_op": 0
}maxtill94replied to @heha37 / re-heha37-4dqlkh-20170721t061541224z2017/07/21 06:15:42
maxtill94replied to @heha37 / re-heha37-4dqlkh-20170721t061541224z
2017/07/21 06:15:42
| author | maxtill94 |
| body | 你的文已看完,我已申请关注了,我也写了第一篇文,有空请阅下~ 个人认为NEVERDIE ICO 也不错,在我个人热帖里,Neverdie.com https://steemit.com/cn/@maxtill94/neverdie-ico-erc20-ico |
| json metadata | {"tags":["cn"],"links":["https://steemit.com/cn/@maxtill94/neverdie-ico-erc20-ico"],"app":"steemit/0.1"} |
| parent author | heha37 |
| parent permlink | 4dqlkh |
| permlink | re-heha37-4dqlkh-20170721t061541224z |
| title | |
| Transaction Info | Block #13869685/Trx 6c430232b74bcbe83e5e8cd4fc764510d3a4c418 |
View Raw JSON Data
{
"block": 13869685,
"op": [
"comment",
{
"author": "maxtill94",
"body": "你的文已看完,我已申请关注了,我也写了第一篇文,有空请阅下~\n个人认为NEVERDIE ICO 也不错,在我个人热帖里,Neverdie.com\nhttps://steemit.com/cn/@maxtill94/neverdie-ico-erc20-ico",
"json_metadata": "{\"tags\":[\"cn\"],\"links\":[\"https://steemit.com/cn/@maxtill94/neverdie-ico-erc20-ico\"],\"app\":\"steemit/0.1\"}",
"parent_author": "heha37",
"parent_permlink": "4dqlkh",
"permlink": "re-heha37-4dqlkh-20170721t061541224z",
"title": ""
}
],
"op_in_trx": 0,
"timestamp": "2017-07-21T06:15:42",
"trx_id": "6c430232b74bcbe83e5e8cd4fc764510d3a4c418",
"trx_in_block": 2,
"virtual_op": 0
}heha37followed @cryptoctopus2017/07/20 10:16:39
heha37followed @cryptoctopus
2017/07/20 10:16:39
| id | follow |
| json | ["follow",{"follower":"heha37","following":"cryptoctopus","what":["blog"]}] |
| required auths | [] |
| required posting auths | ["heha37"] |
| Transaction Info | Block #13845743/Trx 4fedfe3712122cf379a8d733d85686486e950fe2 |
View Raw JSON Data
{
"block": 13845743,
"op": [
"custom_json",
{
"id": "follow",
"json": "[\"follow\",{\"follower\":\"heha37\",\"following\":\"cryptoctopus\",\"what\":[\"blog\"]}]",
"required_auths": [],
"required_posting_auths": [
"heha37"
]
}
],
"op_in_trx": 0,
"timestamp": "2017-07-20T10:16:39",
"trx_id": "4fedfe3712122cf379a8d733d85686486e950fe2",
"trx_in_block": 7,
"virtual_op": 0
}2017/07/15 15:17:48
2017/07/15 15:17:48
| id | follow |
| json | ["follow",{"follower":"heha37","following":"joseph","what":["blog"]}] |
| required auths | [] |
| required posting auths | ["heha37"] |
| Transaction Info | Block #13707816/Trx ddbb6eb115d4a68d7518ab86371e2cc1d90e27df |
View Raw JSON Data
{
"block": 13707816,
"op": [
"custom_json",
{
"id": "follow",
"json": "[\"follow\",{\"follower\":\"heha37\",\"following\":\"joseph\",\"what\":[\"blog\"]}]",
"required_auths": [],
"required_posting_auths": [
"heha37"
]
}
],
"op_in_trx": 0,
"timestamp": "2017-07-15T15:17:48",
"trx_id": "ddbb6eb115d4a68d7518ab86371e2cc1d90e27df",
"trx_in_block": 18,
"virtual_op": 0
}2017/07/12 11:38:03
2017/07/12 11:38:03
| id | follow |
| json | ["follow",{"follower":"heha37","following":"trueflip","what":["blog"]}] |
| required auths | [] |
| required posting auths | ["heha37"] |
| Transaction Info | Block #13617170/Trx f2c296fa450bf77eb4820f30f3313d4e9b73272c |
View Raw JSON Data
{
"block": 13617170,
"op": [
"custom_json",
{
"id": "follow",
"json": "[\"follow\",{\"follower\":\"heha37\",\"following\":\"trueflip\",\"what\":[\"blog\"]}]",
"required_auths": [],
"required_posting_auths": [
"heha37"
]
}
],
"op_in_trx": 0,
"timestamp": "2017-07-12T11:38:03",
"trx_id": "f2c296fa450bf77eb4820f30f3313d4e9b73272c",
"trx_in_block": 3,
"virtual_op": 0
}emrekaykusuzupvoted (100.00%) @heha37 / 79uhs42017/07/05 08:40:06
emrekaykusuzupvoted (100.00%) @heha37 / 79uhs4
2017/07/05 08:40:06
| author | heha37 |
| permlink | 79uhs4 |
| voter | emrekaykusuz |
| weight | 10000 (100.00%) |
| Transaction Info | Block #13412643/Trx 5330faa4179985bd3ddd9aab87481eb77bba6b53 |
View Raw JSON Data
{
"block": 13412643,
"op": [
"vote",
{
"author": "heha37",
"permlink": "79uhs4",
"voter": "emrekaykusuz",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2017-07-05T08:40:06",
"trx_id": "5330faa4179985bd3ddd9aab87481eb77bba6b53",
"trx_in_block": 29,
"virtual_op": 0
}2017/07/05 08:37:24
2017/07/05 08:37:24
| author | heha37 |
| permlink | 79uhs4 |
| voter | heha37 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #13412589/Trx 5163f224f6af3d195ad467312918d32d409f1e3c |
View Raw JSON Data
{
"block": 13412589,
"op": [
"vote",
{
"author": "heha37",
"permlink": "79uhs4",
"voter": "heha37",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2017-07-05T08:37:24",
"trx_id": "5163f224f6af3d195ad467312918d32d409f1e3c",
"trx_in_block": 7,
"virtual_op": 0
}2017/07/05 08:37:24
2017/07/05 08:37:24
| author | heha37 |
| body | 今天在公司参加研发的内部交流会,大家张口一个脚手架,闭口一个脚手架,我此时的内心是崩溃的,脚手架是什么鬼,写程序还需要爬架子摸高吗?交流会上不好意思问,只好私下去给自己科普一下,经过一阵忙活,爬上了脚手架,站在脚手架上略有感悟。 ------- 从Wikipedia上摘录一段解释: > Scaffolding is a meta-programming method of building database-backed software applications. It is a technique supported by some model-view-controller frameworks, in which the programmer may write a specification that describes how the application database may be used. The compiler uses this specification to generate code that the application can use to create, read, update and delete database entries, effectively treating the template as a "scaffold" on which to build a more powerful application. 中文翻译意思是: > “脚手架”是一种用于构建以数据库为基础的应用的元编程方法。一些MVC框架就支持这种技术,程序员只需要写出一份配置模版,或者说是规格说明书,来描述应用的数据库会被怎样应用。之后编译器用这份配置来生成能够进行相应增删改查数据库的程序。这种模版就被我们叫做“脚手架”,在“脚手架”的基础上可以更方便地构建更加强有力的应用。 通过上面的解释可以明白,脚手架其实就是在做事之前先搭个初始骨架,或者直接用一个现成的框架。也就是工程师不再单纯通过手写代码来完成业务,还会通过代码去生成代码来完成一些事情。 上面所说的“通过代码生成代码”其实就是元编程。元是什么,英文是“meta”,可以这样理解这个词,一个名词加上了“meta”之后就拥有了自我意识,可以跳出自我,类似置身事外、上帝视角地审视自己,在自己的思考之上进行思考。比如元小说,就是小说之上的小说,也就是小说中的主人公去创作小说,或者小说中的人物自我意识觉醒,知道自己身在故事的情节中。 那么很自然地去理解元编程,就是编写出代码之上的代码,能够操控代码的代码。想象一下,你的代码拥有了自我意识,他能够思考自身的想法和行为,然后通过思考结果再去动态地改变自己的动机、行为,也就是拥有自我的检查和控制能力。是不是对你来说就省去很多事情,并且代码对你来说也不是黑盒子了,你能掌握他自身的信息,还能动态地去改变一些事情。 其实这种所谓的自我意识,就是很多编程语言中提供的自省(introspection)、反射(reflect)特性,像Python、Ruby、Lisp就有,Lisp支持元编程更纯粹,理念就是代码也是数据。 很多事情都是相通的,对人来说也有元这个概念,人本身就有元能力,也就是自我意识,你能够思考自己的思考, 可以置身事外冷静地看自己的经历,能够检查自己的情绪、行为,然后控制自己的情绪和行为。 说个元能力应用的情景,到了该去跑步的时间,你的大脑中就会有个声音,“你还可以休息一会儿哦”: * 元能力强的人:“滚开,我要去跑步” * 元能力弱的人:“好的” 其实说到这里,我不知道怎么突然想起了一句话:“好生意顺人性,卓越者逆人性”。 好了,以上这些就是我爬上脚手架之后的所思所想。 |
| json metadata | {"tags":["cn","meta","scaffolding"],"app":"steemit/0.1","format":"markdown"} |
| parent author | |
| parent permlink | cn |
| permlink | 79uhs4 |
| title | 写在爬上脚手架之后 |
| Transaction Info | Block #13412589/Trx 5163f224f6af3d195ad467312918d32d409f1e3c |
View Raw JSON Data
{
"block": 13412589,
"op": [
"comment",
{
"author": "heha37",
"body": "今天在公司参加研发的内部交流会,大家张口一个脚手架,闭口一个脚手架,我此时的内心是崩溃的,脚手架是什么鬼,写程序还需要爬架子摸高吗?交流会上不好意思问,只好私下去给自己科普一下,经过一阵忙活,爬上了脚手架,站在脚手架上略有感悟。\n\n-------\n\n从Wikipedia上摘录一段解释:\n> Scaffolding is a meta-programming method of building database-backed software applications. It is a technique supported by some model-view-controller frameworks, in which the programmer may write a specification that describes how the application database may be used. The compiler uses this specification to generate code that the application can use to create, read, update and delete database entries, effectively treating the template as a \"scaffold\" on which to build a more powerful application.\n\n中文翻译意思是:\n\n> “脚手架”是一种用于构建以数据库为基础的应用的元编程方法。一些MVC框架就支持这种技术,程序员只需要写出一份配置模版,或者说是规格说明书,来描述应用的数据库会被怎样应用。之后编译器用这份配置来生成能够进行相应增删改查数据库的程序。这种模版就被我们叫做“脚手架”,在“脚手架”的基础上可以更方便地构建更加强有力的应用。\n\n通过上面的解释可以明白,脚手架其实就是在做事之前先搭个初始骨架,或者直接用一个现成的框架。也就是工程师不再单纯通过手写代码来完成业务,还会通过代码去生成代码来完成一些事情。\n\n上面所说的“通过代码生成代码”其实就是元编程。元是什么,英文是“meta”,可以这样理解这个词,一个名词加上了“meta”之后就拥有了自我意识,可以跳出自我,类似置身事外、上帝视角地审视自己,在自己的思考之上进行思考。比如元小说,就是小说之上的小说,也就是小说中的主人公去创作小说,或者小说中的人物自我意识觉醒,知道自己身在故事的情节中。\n\n那么很自然地去理解元编程,就是编写出代码之上的代码,能够操控代码的代码。想象一下,你的代码拥有了自我意识,他能够思考自身的想法和行为,然后通过思考结果再去动态地改变自己的动机、行为,也就是拥有自我的检查和控制能力。是不是对你来说就省去很多事情,并且代码对你来说也不是黑盒子了,你能掌握他自身的信息,还能动态地去改变一些事情。\n\n其实这种所谓的自我意识,就是很多编程语言中提供的自省(introspection)、反射(reflect)特性,像Python、Ruby、Lisp就有,Lisp支持元编程更纯粹,理念就是代码也是数据。\n\n很多事情都是相通的,对人来说也有元这个概念,人本身就有元能力,也就是自我意识,你能够思考自己的思考, 可以置身事外冷静地看自己的经历,能够检查自己的情绪、行为,然后控制自己的情绪和行为。\n\n说个元能力应用的情景,到了该去跑步的时间,你的大脑中就会有个声音,“你还可以休息一会儿哦”:\n* 元能力强的人:“滚开,我要去跑步”\n* 元能力弱的人:“好的”\n\n其实说到这里,我不知道怎么突然想起了一句话:“好生意顺人性,卓越者逆人性”。\n\n好了,以上这些就是我爬上脚手架之后的所思所想。",
"json_metadata": "{\"tags\":[\"cn\",\"meta\",\"scaffolding\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
"parent_author": "",
"parent_permlink": "cn",
"permlink": "79uhs4",
"title": "写在爬上脚手架之后"
}
],
"op_in_trx": 0,
"timestamp": "2017-07-05T08:37:24",
"trx_id": "5163f224f6af3d195ad467312918d32d409f1e3c",
"trx_in_block": 7,
"virtual_op": 0
}cheetahreplied to @heha37 / cheetah-re-heha372krm8h2017/07/03 07:26:57
cheetahreplied to @heha37 / cheetah-re-heha372krm8h
2017/07/03 07:26:57
| author | cheetah |
| body | Hi! I am a robot. I just upvoted you! I found similar content that readers might be interested in: http://www.67.com/ |
| json metadata | |
| parent author | heha37 |
| parent permlink | 2krm8h |
| permlink | cheetah-re-heha372krm8h |
| title | |
| Transaction Info | Block #13353632/Trx 539977fb0577869889127c8db5f1bf2c9062c65f |
View Raw JSON Data
{
"block": 13353632,
"op": [
"comment",
{
"author": "cheetah",
"body": "Hi! I am a robot. I just upvoted you! I found similar content that readers might be interested in:\nhttp://www.67.com/",
"json_metadata": "",
"parent_author": "heha37",
"parent_permlink": "2krm8h",
"permlink": "cheetah-re-heha372krm8h",
"title": ""
}
],
"op_in_trx": 0,
"timestamp": "2017-07-03T07:26:57",
"trx_id": "539977fb0577869889127c8db5f1bf2c9062c65f",
"trx_in_block": 10,
"virtual_op": 0
}2017/07/03 07:26:51
2017/07/03 07:26:51
| author | heha37 |
| permlink | 2krm8h |
| voter | cheetah |
| weight | 100 (1.00%) |
| Transaction Info | Block #13353630/Trx 6f1a44441b77863ed90d4bbcb736f82466a52561 |
View Raw JSON Data
{
"block": 13353630,
"op": [
"vote",
{
"author": "heha37",
"permlink": "2krm8h",
"voter": "cheetah",
"weight": 100
}
],
"op_in_trx": 0,
"timestamp": "2017-07-03T07:26:51",
"trx_id": "6f1a44441b77863ed90d4bbcb736f82466a52561",
"trx_in_block": 14,
"virtual_op": 0
}2017/07/03 07:25:45
2017/07/03 07:25:45
| author | heha37 |
| body | @@ -389,11 +389,8 @@ %E4%B8%8B%E4%B8%8B%E9%9D%A2%E7%9A%84 -%E7%AC%AC%E5%9B%9B%E4%B8%AA %E5%9B%BE%E7%89%87%EF%BC%8C%E8%BF%99 @@ -478,16 +478,90 @@ %E4%BA%86%E4%B8%80%E4%BA%9B%E5%85%B1%E9%B8%A3%E3%80%82%0A%0A +!%5Bboatphoto%5D(https://shootertt.github.io/uploads/boat_photo-e64c05.jpeg)%0A%0A %E6%97%A2%E7%84%B6%E5%AF%B9%E6%AF%94%E7%85%A7%E7%89%87%EF%BC%8C%E4%B8%BA |
| json metadata | {"tags":["cn","painting"],"image":["https://shootertt.github.io/uploads/Screen%20Shot%202017-06-30%20at%209.05.35%20AM.png","https://shootertt.github.io/uploads/boat1.jpeg","https://shootertt.github.io/uploads/boat_photo-e64c05.jpeg","https://shootertt.github.io/uploads/real.jpg","https://shootertt.github.io/uploads/art.png","https://shootertt.github.io/uploads/tree1.jpeg","https://shootertt.github.io/uploads/tree2.jpeg","https://shootertt.github.io/uploads/house1.jpeg","https://shootertt.github.io/uploads/house2.jpeg"],"app":"steemit/0.1","format":"markdown"} |
| parent author | |
| parent permlink | cn |
| permlink | 2krm8h |
| title | 彼得·多伊格的真实和幻象 |
| Transaction Info | Block #13353608/Trx eb538b6655ae1c6a0aba0844b24f0d581945ebdb |
View Raw JSON Data
{
"block": 13353608,
"op": [
"comment",
{
"author": "heha37",
"body": "@@ -389,11 +389,8 @@\n %E4%B8%8B%E4%B8%8B%E9%9D%A2%E7%9A%84\n-%E7%AC%AC%E5%9B%9B%E4%B8%AA\n %E5%9B%BE%E7%89%87%EF%BC%8C%E8%BF%99\n@@ -478,16 +478,90 @@\n %E4%BA%86%E4%B8%80%E4%BA%9B%E5%85%B1%E9%B8%A3%E3%80%82%0A%0A\n+!%5Bboatphoto%5D(https://shootertt.github.io/uploads/boat_photo-e64c05.jpeg)%0A%0A\n %E6%97%A2%E7%84%B6%E5%AF%B9%E6%AF%94%E7%85%A7%E7%89%87%EF%BC%8C%E4%B8%BA\n",
"json_metadata": "{\"tags\":[\"cn\",\"painting\"],\"image\":[\"https://shootertt.github.io/uploads/Screen%20Shot%202017-06-30%20at%209.05.35%20AM.png\",\"https://shootertt.github.io/uploads/boat1.jpeg\",\"https://shootertt.github.io/uploads/boat_photo-e64c05.jpeg\",\"https://shootertt.github.io/uploads/real.jpg\",\"https://shootertt.github.io/uploads/art.png\",\"https://shootertt.github.io/uploads/tree1.jpeg\",\"https://shootertt.github.io/uploads/tree2.jpeg\",\"https://shootertt.github.io/uploads/house1.jpeg\",\"https://shootertt.github.io/uploads/house2.jpeg\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
"parent_author": "",
"parent_permlink": "cn",
"permlink": "2krm8h",
"title": "彼得·多伊格的真实和幻象"
}
],
"op_in_trx": 0,
"timestamp": "2017-07-03T07:25:45",
"trx_id": "eb538b6655ae1c6a0aba0844b24f0d581945ebdb",
"trx_in_block": 16,
"virtual_op": 0
}2017/07/03 05:46:54
2017/07/03 05:46:54
| id | follow |
| json | ["follow",{"follower":"heha37","following":"julee","what":["blog"]}] |
| required auths | [] |
| required posting auths | ["heha37"] |
| Transaction Info | Block #13351633/Trx 2a26d438e1fccacade7b76de11444aa7916d7384 |
View Raw JSON Data
{
"block": 13351633,
"op": [
"custom_json",
{
"id": "follow",
"json": "[\"follow\",{\"follower\":\"heha37\",\"following\":\"julee\",\"what\":[\"blog\"]}]",
"required_auths": [],
"required_posting_auths": [
"heha37"
]
}
],
"op_in_trx": 0,
"timestamp": "2017-07-03T05:46:54",
"trx_id": "2a26d438e1fccacade7b76de11444aa7916d7384",
"trx_in_block": 14,
"virtual_op": 0
}2017/07/03 05:46:48
2017/07/03 05:46:48
| id | follow |
| json | ["follow",{"follower":"heha37","following":"crypto-p","what":["blog"]}] |
| required auths | [] |
| required posting auths | ["heha37"] |
| Transaction Info | Block #13351631/Trx 54a0a9dc1eba5d6dfc7ba2be47756c1d762c983d |
View Raw JSON Data
{
"block": 13351631,
"op": [
"custom_json",
{
"id": "follow",
"json": "[\"follow\",{\"follower\":\"heha37\",\"following\":\"crypto-p\",\"what\":[\"blog\"]}]",
"required_auths": [],
"required_posting_auths": [
"heha37"
]
}
],
"op_in_trx": 0,
"timestamp": "2017-07-03T05:46:48",
"trx_id": "54a0a9dc1eba5d6dfc7ba2be47756c1d762c983d",
"trx_in_block": 21,
"virtual_op": 0
}2017/06/30 06:07:09
2017/06/30 06:07:09
| author | heha37 |
| permlink | 2krm8h |
| voter | heha37 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #13265666/Trx faa8f467ee3d8ee5d35ed403adb27304c6dfea3a |
View Raw JSON Data
{
"block": 13265666,
"op": [
"vote",
{
"author": "heha37",
"permlink": "2krm8h",
"voter": "heha37",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2017-06-30T06:07:09",
"trx_id": "faa8f467ee3d8ee5d35ed403adb27304c6dfea3a",
"trx_in_block": 14,
"virtual_op": 0
}2017/06/30 06:07:09
2017/06/30 06:07:09
| author | heha37 |
| body | 上周末去和我家亲爱的去看了彼得·多伊格的画展,有了一些想法,和大家分享交流一下。 先贴出两幅画作:   上面两幅画作,第一眼看过去其实并不太讨人喜欢,感觉乱七八糟的,不知道画家在表达什么意思。这个时候我会问自己几个问题: 1. what:画的是什么 2. why:为什么这么画 3. how:怎么去理解啊(我TMD看不懂) 要想看明白需要先了解一下彼得的创作方式:他画的东西是他见过的照片或者是他拍摄下来的照片,也就是他在创作的时候,眼前会放着一幅照片。所以看一下下面的第四个图片,这就是那个对比的照片,再回头去看前面三个画作,是不是就有了一点儿沉下去的感觉,那个舟慢慢地漂浮上来。这个时候你可能就会理解画家的用意,可能就会有了自己的一点理解,有了一些共鸣。 既然对比照片,为什么要这么画呢,为什么不画得更像一点儿呢。其实有一种流派叫超写实主义(Hyperrealism),下面这幅画就是其代表画作,跟照片一样真实,甚至超越照片,但是我觉得这只是技法上的东西,就是人可以画出跟机器媲美的画作,纯粹的炫技。人之所以为人,肯定有跟机器不一样的东西。  每个人看到的世界都是不同的,我看到的太阳,和你看到的太阳,我们无法去验证它们是一致的,可能它们就不是完美一致的,你我心中的太阳可能会有那么一点点不同。 但是当你说太阳的时候,我是知道你在说什么的。就像是在一幅画了很多动物的画作中找猴子,你我会很轻松地挑出其中的猴子,既然你我对猴子的认知不同,那我们是怎样分辨猴子的呢?希腊哲学中有个理论叫共相(universal),就是普遍共识,类似程序中的类的概念。就是存在一个完美的猴子,它有任何猴子的特点,但是没有任何一个单个猴子的缺点,然后其他猴子都是无限接近于这个完美的猴子,我们认知里有一个完美的猴子,所以我们能就猴子的问题达成共识。 所以那个完美的猴子便是真实,其他猴子都是其模仿品,都是幻象,可能好的画作都是在接近真实,脱离幻象,我觉得彼得就是在接近认知的真实,下面我画了个图来表达一下这个想法:  彼得的画作对比鲜明,突出那些给他带来强烈刺激的、使他记忆深刻难以释怀的元素和感觉。就比如前面画作中白色的舟;下面这个画作绿意安然,浓绿充盈整个画面,以至于深色皮肤的人也融入其中,变得透明。   下面这个画作是透过密林看到一栋建筑物,给我的感觉是画家对这栋建筑物在森林中突然出现感到突兀,感觉不自然,有一种静静的偷窥感。   也许彼得就是在画那些印象深刻的记忆,突出重要的细节,把那时的状态、情景描绘出来,所以很多人才会对彼得的画作产生共鸣,感觉被带入了当时的情景,因为产生刺激的不是单纯的视觉效果,而是根植与大脑中的记忆、情景。 当你我回忆过去,不会留意每一个细节,而是在意那些最鲜明的东西和场景,一抹云,一道闪电或是一块亮闪闪的表。 后记:看完画展,我家亲爱的话也多了起来,她说这个人的画给人静静的、有一种置身事外的感觉,并且开始谈起对她来说记忆深刻的情景...(这些情景就不告诉各位了) |
| json metadata | {"tags":["cn","painting"],"image":["https://shootertt.github.io/uploads/Screen%20Shot%202017-06-30%20at%209.05.35%20AM.png","https://shootertt.github.io/uploads/boat1.jpeg","https://shootertt.github.io/uploads/real.jpg","https://shootertt.github.io/uploads/art.png","https://shootertt.github.io/uploads/tree1.jpeg","https://shootertt.github.io/uploads/tree2.jpeg","https://shootertt.github.io/uploads/house1.jpeg","https://shootertt.github.io/uploads/house2.jpeg"],"app":"steemit/0.1","format":"markdown"} |
| parent author | |
| parent permlink | cn |
| permlink | 2krm8h |
| title | 彼得·多伊格的真实和幻象 |
| Transaction Info | Block #13265666/Trx faa8f467ee3d8ee5d35ed403adb27304c6dfea3a |
View Raw JSON Data
{
"block": 13265666,
"op": [
"comment",
{
"author": "heha37",
"body": "上周末去和我家亲爱的去看了彼得·多伊格的画展,有了一些想法,和大家分享交流一下。\n\n先贴出两幅画作:\n\n\n\n\n\n上面两幅画作,第一眼看过去其实并不太讨人喜欢,感觉乱七八糟的,不知道画家在表达什么意思。这个时候我会问自己几个问题:\n1. what:画的是什么\n2. why:为什么这么画\n3. how:怎么去理解啊(我TMD看不懂)\n\n要想看明白需要先了解一下彼得的创作方式:他画的东西是他见过的照片或者是他拍摄下来的照片,也就是他在创作的时候,眼前会放着一幅照片。所以看一下下面的第四个图片,这就是那个对比的照片,再回头去看前面三个画作,是不是就有了一点儿沉下去的感觉,那个舟慢慢地漂浮上来。这个时候你可能就会理解画家的用意,可能就会有了自己的一点理解,有了一些共鸣。\n\n既然对比照片,为什么要这么画呢,为什么不画得更像一点儿呢。其实有一种流派叫超写实主义(Hyperrealism),下面这幅画就是其代表画作,跟照片一样真实,甚至超越照片,但是我觉得这只是技法上的东西,就是人可以画出跟机器媲美的画作,纯粹的炫技。人之所以为人,肯定有跟机器不一样的东西。\n\n\n\n\n每个人看到的世界都是不同的,我看到的太阳,和你看到的太阳,我们无法去验证它们是一致的,可能它们就不是完美一致的,你我心中的太阳可能会有那么一点点不同。\n\n但是当你说太阳的时候,我是知道你在说什么的。就像是在一幅画了很多动物的画作中找猴子,你我会很轻松地挑出其中的猴子,既然你我对猴子的认知不同,那我们是怎样分辨猴子的呢?希腊哲学中有个理论叫共相(universal),就是普遍共识,类似程序中的类的概念。就是存在一个完美的猴子,它有任何猴子的特点,但是没有任何一个单个猴子的缺点,然后其他猴子都是无限接近于这个完美的猴子,我们认知里有一个完美的猴子,所以我们能就猴子的问题达成共识。\n\n所以那个完美的猴子便是真实,其他猴子都是其模仿品,都是幻象,可能好的画作都是在接近真实,脱离幻象,我觉得彼得就是在接近认知的真实,下面我画了个图来表达一下这个想法:\n\n\n\n彼得的画作对比鲜明,突出那些给他带来强烈刺激的、使他记忆深刻难以释怀的元素和感觉。就比如前面画作中白色的舟;下面这个画作绿意安然,浓绿充盈整个画面,以至于深色皮肤的人也融入其中,变得透明。\n\n\n\n\n\n下面这个画作是透过密林看到一栋建筑物,给我的感觉是画家对这栋建筑物在森林中突然出现感到突兀,感觉不自然,有一种静静的偷窥感。\n\n\n\n\n\n也许彼得就是在画那些印象深刻的记忆,突出重要的细节,把那时的状态、情景描绘出来,所以很多人才会对彼得的画作产生共鸣,感觉被带入了当时的情景,因为产生刺激的不是单纯的视觉效果,而是根植与大脑中的记忆、情景。\n\n\n当你我回忆过去,不会留意每一个细节,而是在意那些最鲜明的东西和场景,一抹云,一道闪电或是一块亮闪闪的表。\n\n后记:看完画展,我家亲爱的话也多了起来,她说这个人的画给人静静的、有一种置身事外的感觉,并且开始谈起对她来说记忆深刻的情景...(这些情景就不告诉各位了)",
"json_metadata": "{\"tags\":[\"cn\",\"painting\"],\"image\":[\"https://shootertt.github.io/uploads/Screen%20Shot%202017-06-30%20at%209.05.35%20AM.png\",\"https://shootertt.github.io/uploads/boat1.jpeg\",\"https://shootertt.github.io/uploads/real.jpg\",\"https://shootertt.github.io/uploads/art.png\",\"https://shootertt.github.io/uploads/tree1.jpeg\",\"https://shootertt.github.io/uploads/tree2.jpeg\",\"https://shootertt.github.io/uploads/house1.jpeg\",\"https://shootertt.github.io/uploads/house2.jpeg\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
"parent_author": "",
"parent_permlink": "cn",
"permlink": "2krm8h",
"title": "彼得·多伊格的真实和幻象"
}
],
"op_in_trx": 0,
"timestamp": "2017-06-30T06:07:09",
"trx_id": "faa8f467ee3d8ee5d35ed403adb27304c6dfea3a",
"trx_in_block": 14,
"virtual_op": 0
}heha37published a new post: select-for-update2017/06/29 10:39:39
heha37published a new post: select-for-update
2017/06/29 10:39:39
| author | heha37 |
| body | @@ -1712,23 +1712,25 @@ %E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95%E5%A6%82%E4%B8%8B:%0A - %60%60%60 +%60%60%60python %0Afrom os @@ -1906,20 +1906,16 @@ ...%0A - %60%60%60%0A%0A%E7%84%B6%E5%90%8E%E5%9C%A8 @@ -2227,23 +2227,25 @@ DB%E6%93%8D%E4%BD%9C%E6%BA%90%E7%A0%81:%0A - %60%60%60 +%60%60%60python %0A@oslo_d @@ -3265,20 +3265,16 @@ ccount)%0A - %60%60%60%0A%0A## |
| json metadata | {"tags":["cn","python","mysql"],"image":["https://shootertt.github.io/uploads/galera.png"],"links":["https://github.com/ShooterTT/gringotts","https://www.percona.com/blog/2015/06/08/maxscale-a-new-tool-to-solve-your-mysql-scalability-problems/","http://lists.openstack.org/pipermail/openstack-dev/2015-February/056007.html","http://www.joinfu.com/2015/01/understanding-reservations-concurrency-locking-in-nova/#footnote-3","https://www.percona.com/blog/2013/03/03/investigating-replication-latency-in-percona-xtradb-cluster/","https://www.percona.com/blog/2012/11/20/understanding-multi-node-writing-conflict-metrics-in-percona-xtradb-cluster-and-galera/","http://preshing.com/20120612/an-introduction-to-lock-free-programming/","http://www.sebastien-han.fr/blog/2012/04/01/mysql-multi-master-replication-with-galera/"],"app":"steemit/0.1","format":"markdown"} |
| parent author | |
| parent permlink | cn |
| permlink | select-for-update |
| title | 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案 |
| Transaction Info | Block #13242333/Trx 797a36f51b70a2c3737da90fb7bafee11f2d2008 |
View Raw JSON Data
{
"block": 13242333,
"op": [
"comment",
{
"author": "heha37",
"body": "@@ -1712,23 +1712,25 @@\n %E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95%E5%A6%82%E4%B8%8B:%0A\n- %60%60%60\n+%60%60%60python\n %0Afrom os\n@@ -1906,20 +1906,16 @@\n ...%0A\n- \n %60%60%60%0A%0A%E7%84%B6%E5%90%8E%E5%9C%A8\n@@ -2227,23 +2227,25 @@\n DB%E6%93%8D%E4%BD%9C%E6%BA%90%E7%A0%81:%0A\n- %60%60%60\n+%60%60%60python\n %0A@oslo_d\n@@ -3265,20 +3265,16 @@\n ccount)%0A\n- \n %60%60%60%0A%0A## \n",
"json_metadata": "{\"tags\":[\"cn\",\"python\",\"mysql\"],\"image\":[\"https://shootertt.github.io/uploads/galera.png\"],\"links\":[\"https://github.com/ShooterTT/gringotts\",\"https://www.percona.com/blog/2015/06/08/maxscale-a-new-tool-to-solve-your-mysql-scalability-problems/\",\"http://lists.openstack.org/pipermail/openstack-dev/2015-February/056007.html\",\"http://www.joinfu.com/2015/01/understanding-reservations-concurrency-locking-in-nova/#footnote-3\",\"https://www.percona.com/blog/2013/03/03/investigating-replication-latency-in-percona-xtradb-cluster/\",\"https://www.percona.com/blog/2012/11/20/understanding-multi-node-writing-conflict-metrics-in-percona-xtradb-cluster-and-galera/\",\"http://preshing.com/20120612/an-introduction-to-lock-free-programming/\",\"http://www.sebastien-han.fr/blog/2012/04/01/mysql-multi-master-replication-with-galera/\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
"parent_author": "",
"parent_permlink": "cn",
"permlink": "select-for-update",
"title": "数据库写操作弃用“SELECT ... FOR UPDATE”解决方案"
}
],
"op_in_trx": 0,
"timestamp": "2017-06-29T10:39:39",
"trx_id": "797a36f51b70a2c3737da90fb7bafee11f2d2008",
"trx_in_block": 14,
"virtual_op": 0
}heha37upvoted (100.00%) @heha37 / select-for-update2017/06/29 10:36:42
heha37upvoted (100.00%) @heha37 / select-for-update
2017/06/29 10:36:42
| author | heha37 |
| permlink | select-for-update |
| voter | heha37 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #13242274/Trx 224083ee5863041751c6df22f3899fffe638e19f |
View Raw JSON Data
{
"block": 13242274,
"op": [
"vote",
{
"author": "heha37",
"permlink": "select-for-update",
"voter": "heha37",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2017-06-29T10:36:42",
"trx_id": "224083ee5863041751c6df22f3899fffe638e19f",
"trx_in_block": 5,
"virtual_op": 0
}heha37published a new post: select-for-update2017/06/29 10:36:42
heha37published a new post: select-for-update
2017/06/29 10:36:42
| author | heha37 |
| body | ## 问题阐述 Mysql Galera集群是迄今OpenStack服务最流行的Mysql部署方案,它基于Mysql/InnoDB,我的OpenStack部署方式从原来的主从复制转换到Galera的多主模式。 Galera虽然有很多好处,如任何时刻任何节点都可读可写,无复制延迟,同步复制,行级复制,但是Galera存在一个问题,也可以说是在实现 真正的多主可写上的折衷权衡,也就是这个问题导致在代码的数据库层的操作需要弃用写锁,下面我说一下这个问题。 这个问题是Mysql Galera集群不支持跨节点对表加锁,也就是当OpenStack一个组件有两个会话分布在两个Mysql节点上同时写入一条数据,其中一个会话会遇到 死锁的情况,也就是得到deadlock的错误,并且该情况在高并发的时候发生概率很高,在社区Nova,Neutron该情况的报告有很多。 这个行为其实是Galera预期的结果,它是由乐观锁并发控制机制引起的,当发生多个事务进行写操作的时候,乐观锁机制假设所有的修改都能 没有冲突地完成。如果两个事务同时修改同一个数据,先commit的事务会成功,另一个会被拒绝,并重新开始运行整个事务。 在事务发生的起始节点,它可以获取到所有它需要的锁,但是它不知道其他节点的情况,所以它采用乐观锁机制把事务(在Galera中叫writes et)广播到所有其他节点上,看在其他节点上是否能提交成功。这个writeset会在每个节点上进行验证测试,来决定该writeset是否被接受, 如果检验失败,这个writeset就会被抛弃,然后最开始的事务也会被回滚;如果检验成功,事务就被提交,writeset也被应用到其他节点上。 这个过程如下图所示:  在Python的SQLAlchemy库中,有一个“with_lockmode('update')”语句,这个代表SQL语句中的“SELECT ... FOR UPDATE”,在我参与过的[计费项目][2]和社区的一些项目的代码中有大量的该结构,由于写锁不能在集群中同步,所以这个语句在Mysql集群中就没有得到它应有的效果,也就是在语义上有问题,但是最后Galera会通过报deadlock错误,只让一个commit成功,来保证Mysql集群的ACID性。 ## 一些解决方法 * 把请求发往一个节点,这个在HAProxy中就可以配置,只设定一个节点为master,其余节点为backup,HAProxy会在master失效的时候 自动切换到某一个backup上,这个也 是很多解决方案目前使用的方法,HAProxy配置如下: ``` server xxx.xxx.xxx.xxx xxx.xxx.xxx.xxx:3306 check server xxx.xxx.xxx.xxx xxx.xxx.xxx.xxx:3306 check backup server xxx.xxx.xxx.xxx xxx.xxx.xxx.xxx:3306 check backup ``` * 对OpenStack的所有Mysql操作做读写分离,写操作只在master节点上,读操作在所有节点上做负载均衡。OpenStack没有原生支持,但 是有一个开源软件可以使用,[maxscale][3]。 ## 终极解决方法 上面的解决方法只是一些workaround,目前情况下最终极的解决方法是使用lock-free的方法来对数据库进行操作,也就是无锁的方式,这就 需要对代码进行修改,现在Nova,Neutron,Gnocchi等项目已经对其进行了修改。 首先得有一个retry机制,也就是让操作执行在一个循环中,一旦捕获到deadlock的error就将操作重新进行,这个在OpenStack的oslo.db中已 经提供了相应的方法叫wrap_db_retry,是一个Python装饰器,使用方法如下: ``` from oslo_db import api as oslo_db_api @oslo_db_api.wrap_db_retry(max_retries=5, retry_on_deadlock=True, retry_on_request=True) def db_operations(): ... ``` 然后在这个循环之中我们使用叫做"Compare And Swap(CAS)"的无锁方法来完成update操作,CAS是最先在CPU中使用的,CAS说白了就是先比较,再修改,在进行UPDATE操作之前,我们先SELEC T出来一些数据,我们叫做期望数据,在UPDATE的时候要去比对这些期望数据,如果期望数据有变化,说明有另一个会话对该行进行了修改, 那么我们就不能继续进行修改操作了,只能报错,然后retry;如果没变化,我们就可以将修改操作执行下去。该行为体现在SQL语句中就是在 UPDATE的时候加上WHERE语句,如"UPDATE ... WHERE ..."。 给出一个[计费项目][4]中修改用户等级的DB操作源码: ``` @oslo_db_api.wrap_db_retry(max_retries=5, retry_on_deadlock=True, retry_on_request=True) def change_account_level(self, context, user_id, level, project_id=None): session = get_session() with session.begin(): # 在会话刚开始的时候,需要先SELECT出来该account的数据,也就是期望数据 account = session.query(sa_models.Account).\ filter_by(user_id=user_id).\ one()] # 在执行UPDATE操作的时候需要比对期望数据,user_id和level,如果它们变化了,那么rows_update就会被赋值为0 ,就会走入retry的逻辑 params = {'level': level} rows_update = session.query(sa_models.Account).\ filter_by(user_id=user_id).\ filter_by(level=account.level).\ update(params, synchronize_session='evaluate') # 修改失败,报出RetryRequest的错误,使上面的装饰器抓获该错误,然后重新运行逻辑 if not rows_update: LOG.debug('The row was updated in a concurrent transaction, ' 'we will fetch another one') raise db_exc.RetryRequest(exception.AccountLevelUpdateFailed()) return self._row_to_db_account_model(account) ``` ## 数据的一致性问题 该问题在[OpenStack邮件列表][5]中有说过,虽然Galera是生成同步的,也就是写入数据同步到整个集群非常快,用时非常短,但既然是分布式系 统,本质上还是需要一些时间的,尤其是在负载很大的时候,同步不及时会很严重。 所以Galera只是虚拟同步,不是直接同步,也就是会存在一些gap时间段,无法读到写入的数据,Galera提供了一个配置项,叫做wsrep_sync_ wait,它的默认值是0,如果赋值为1,就能够保证读写的一致性,但是会带来延迟问题。 ## Appendix 1. [understanding reservations concurrency locking in nova][6] 2. [investigating replication latency in percona xtradb cluster][7] 3. [understanding multi node writing conflict metrics in percona xtradb cluster and galera][8] 4. [an introduction to lock-free programming][9] 5. [mysql multi master replication with galera][10] [1]: /img/bVP3zo [2]: https://github.com/ShooterTT/gringotts [3]: https://www.percona.com/blog/2015/06/08/maxscale-a-new-tool-to-solve-your-mysql-scalability-problems/ [4]: https://github.com/ShooterTT/gringotts [5]: http://lists.openstack.org/pipermail/openstack-dev/2015-February/056007.html [6]: http://www.joinfu.com/2015/01/understanding-reservations-concurrency-locking-in-nova/#footnote-3 [7]: https://www.percona.com/blog/2013/03/03/investigating-replication-latency-in-percona-xtradb-cluster/ [8]: https://www.percona.com/blog/2012/11/20/understanding-multi-node-writing-conflict-metrics-in-percona-xtradb-cluster-and-galera/ [9]: http://preshing.com/20120612/an-introduction-to-lock-free-programming/ [10]: http://www.sebastien-han.fr/blog/2012/04/01/mysql-multi-master-replication-with-galera/ |
| json metadata | {"tags":["cn","python","mysql"],"users":["oslo"],"image":["https://shootertt.github.io/uploads/galera.png"],"links":["https://github.com/ShooterTT/gringotts","https://www.percona.com/blog/2015/06/08/maxscale-a-new-tool-to-solve-your-mysql-scalability-problems/","http://lists.openstack.org/pipermail/openstack-dev/2015-February/056007.html","http://www.joinfu.com/2015/01/understanding-reservations-concurrency-locking-in-nova/#footnote-3","https://www.percona.com/blog/2013/03/03/investigating-replication-latency-in-percona-xtradb-cluster/","https://www.percona.com/blog/2012/11/20/understanding-multi-node-writing-conflict-metrics-in-percona-xtradb-cluster-and-galera/","http://preshing.com/20120612/an-introduction-to-lock-free-programming/","http://www.sebastien-han.fr/blog/2012/04/01/mysql-multi-master-replication-with-galera/"],"app":"steemit/0.1","format":"markdown"} |
| parent author | |
| parent permlink | cn |
| permlink | select-for-update |
| title | 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案 |
| Transaction Info | Block #13242274/Trx 224083ee5863041751c6df22f3899fffe638e19f |
View Raw JSON Data
{
"block": 13242274,
"op": [
"comment",
{
"author": "heha37",
"body": "## 问题阐述\nMysql Galera集群是迄今OpenStack服务最流行的Mysql部署方案,它基于Mysql/InnoDB,我的OpenStack部署方式从原来的主从复制转换到Galera的多主模式。\n\nGalera虽然有很多好处,如任何时刻任何节点都可读可写,无复制延迟,同步复制,行级复制,但是Galera存在一个问题,也可以说是在实现 真正的多主可写上的折衷权衡,也就是这个问题导致在代码的数据库层的操作需要弃用写锁,下面我说一下这个问题。\n\n这个问题是Mysql Galera集群不支持跨节点对表加锁,也就是当OpenStack一个组件有两个会话分布在两个Mysql节点上同时写入一条数据,其中一个会话会遇到 死锁的情况,也就是得到deadlock的错误,并且该情况在高并发的时候发生概率很高,在社区Nova,Neutron该情况的报告有很多。\n\n这个行为其实是Galera预期的结果,它是由乐观锁并发控制机制引起的,当发生多个事务进行写操作的时候,乐观锁机制假设所有的修改都能 没有冲突地完成。如果两个事务同时修改同一个数据,先commit的事务会成功,另一个会被拒绝,并重新开始运行整个事务。 在事务发生的起始节点,它可以获取到所有它需要的锁,但是它不知道其他节点的情况,所以它采用乐观锁机制把事务(在Galera中叫writes et)广播到所有其他节点上,看在其他节点上是否能提交成功。这个writeset会在每个节点上进行验证测试,来决定该writeset是否被接受, 如果检验失败,这个writeset就会被抛弃,然后最开始的事务也会被回滚;如果检验成功,事务就被提交,writeset也被应用到其他节点上。 这个过程如下图所示:\n\n\n\n在Python的SQLAlchemy库中,有一个“with_lockmode('update')”语句,这个代表SQL语句中的“SELECT ... FOR UPDATE”,在我参与过的[计费项目][2]和社区的一些项目的代码中有大量的该结构,由于写锁不能在集群中同步,所以这个语句在Mysql集群中就没有得到它应有的效果,也就是在语义上有问题,但是最后Galera会通过报deadlock错误,只让一个commit成功,来保证Mysql集群的ACID性。\n\n## 一些解决方法\n* 把请求发往一个节点,这个在HAProxy中就可以配置,只设定一个节点为master,其余节点为backup,HAProxy会在master失效的时候 自动切换到某一个backup上,这个也\n是很多解决方案目前使用的方法,HAProxy配置如下:\n ```\n server xxx.xxx.xxx.xxx xxx.xxx.xxx.xxx:3306 check\n server xxx.xxx.xxx.xxx xxx.xxx.xxx.xxx:3306 check backup\n server xxx.xxx.xxx.xxx xxx.xxx.xxx.xxx:3306 check backup\n ```\n\n* 对OpenStack的所有Mysql操作做读写分离,写操作只在master节点上,读操作在所有节点上做负载均衡。OpenStack没有原生支持,但 是有一个开源软件可以使用,[maxscale][3]。\n\n## 终极解决方法\n上面的解决方法只是一些workaround,目前情况下最终极的解决方法是使用lock-free的方法来对数据库进行操作,也就是无锁的方式,这就 需要对代码进行修改,现在Nova,Neutron,Gnocchi等项目已经对其进行了修改。\n\n首先得有一个retry机制,也就是让操作执行在一个循环中,一旦捕获到deadlock的error就将操作重新进行,这个在OpenStack的oslo.db中已 经提供了相应的方法叫wrap_db_retry,是一个Python装饰器,使用方法如下:\n ```\nfrom oslo_db import api as oslo_db_api\n@oslo_db_api.wrap_db_retry(max_retries=5, retry_on_deadlock=True,\n retry_on_request=True)\ndef db_operations():\n ...\n ```\n\n然后在这个循环之中我们使用叫做\"Compare And Swap(CAS)\"的无锁方法来完成update操作,CAS是最先在CPU中使用的,CAS说白了就是先比较,再修改,在进行UPDATE操作之前,我们先SELEC T出来一些数据,我们叫做期望数据,在UPDATE的时候要去比对这些期望数据,如果期望数据有变化,说明有另一个会话对该行进行了修改, 那么我们就不能继续进行修改操作了,只能报错,然后retry;如果没变化,我们就可以将修改操作执行下去。该行为体现在SQL语句中就是在 UPDATE的时候加上WHERE语句,如\"UPDATE ... WHERE ...\"。\n\n给出一个[计费项目][4]中修改用户等级的DB操作源码:\n ```\n@oslo_db_api.wrap_db_retry(max_retries=5, retry_on_deadlock=True,\n retry_on_request=True)\ndef change_account_level(self, context, user_id, level, project_id=None):\n session = get_session()\n with session.begin():\n# 在会话刚开始的时候,需要先SELECT出来该account的数据,也就是期望数据 account = session.query(sa_models.Account).\\\n filter_by(user_id=user_id).\\\n one()]\n# 在执行UPDATE操作的时候需要比对期望数据,user_id和level,如果它们变化了,那么rows_update就会被赋值为0 ,就会走入retry的逻辑\n params = {'level': level}\n rows_update = session.query(sa_models.Account).\\\n filter_by(user_id=user_id).\\\n filter_by(level=account.level).\\\n update(params, synchronize_session='evaluate')\n# 修改失败,报出RetryRequest的错误,使上面的装饰器抓获该错误,然后重新运行逻辑 if not rows_update:\n LOG.debug('The row was updated in a concurrent transaction, '\n 'we will fetch another one')\n raise db_exc.RetryRequest(exception.AccountLevelUpdateFailed())\n return self._row_to_db_account_model(account)\n ```\n\n## 数据的一致性问题\n该问题在[OpenStack邮件列表][5]中有说过,虽然Galera是生成同步的,也就是写入数据同步到整个集群非常快,用时非常短,但既然是分布式系 统,本质上还是需要一些时间的,尤其是在负载很大的时候,同步不及时会很严重。\n\n所以Galera只是虚拟同步,不是直接同步,也就是会存在一些gap时间段,无法读到写入的数据,Galera提供了一个配置项,叫做wsrep_sync_ wait,它的默认值是0,如果赋值为1,就能够保证读写的一致性,但是会带来延迟问题。\n\n## Appendix\n\n1. [understanding reservations concurrency locking in nova][6]\n2. [investigating replication latency in percona xtradb cluster][7]\n3. [understanding multi node writing conflict metrics in percona xtradb cluster and galera][8]\n4. [an introduction to lock-free programming][9]\n5. [mysql multi master replication with galera][10]\n\n\n [1]: /img/bVP3zo\n [2]: https://github.com/ShooterTT/gringotts\n [3]: https://www.percona.com/blog/2015/06/08/maxscale-a-new-tool-to-solve-your-mysql-scalability-problems/\n [4]: https://github.com/ShooterTT/gringotts\n [5]: http://lists.openstack.org/pipermail/openstack-dev/2015-February/056007.html\n [6]: http://www.joinfu.com/2015/01/understanding-reservations-concurrency-locking-in-nova/#footnote-3\n [7]: https://www.percona.com/blog/2013/03/03/investigating-replication-latency-in-percona-xtradb-cluster/\n [8]: https://www.percona.com/blog/2012/11/20/understanding-multi-node-writing-conflict-metrics-in-percona-xtradb-cluster-and-galera/\n [9]: http://preshing.com/20120612/an-introduction-to-lock-free-programming/\n [10]: http://www.sebastien-han.fr/blog/2012/04/01/mysql-multi-master-replication-with-galera/",
"json_metadata": "{\"tags\":[\"cn\",\"python\",\"mysql\"],\"users\":[\"oslo\"],\"image\":[\"https://shootertt.github.io/uploads/galera.png\"],\"links\":[\"https://github.com/ShooterTT/gringotts\",\"https://www.percona.com/blog/2015/06/08/maxscale-a-new-tool-to-solve-your-mysql-scalability-problems/\",\"http://lists.openstack.org/pipermail/openstack-dev/2015-February/056007.html\",\"http://www.joinfu.com/2015/01/understanding-reservations-concurrency-locking-in-nova/#footnote-3\",\"https://www.percona.com/blog/2013/03/03/investigating-replication-latency-in-percona-xtradb-cluster/\",\"https://www.percona.com/blog/2012/11/20/understanding-multi-node-writing-conflict-metrics-in-percona-xtradb-cluster-and-galera/\",\"http://preshing.com/20120612/an-introduction-to-lock-free-programming/\",\"http://www.sebastien-han.fr/blog/2012/04/01/mysql-multi-master-replication-with-galera/\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
"parent_author": "",
"parent_permlink": "cn",
"permlink": "select-for-update",
"title": "数据库写操作弃用“SELECT ... FOR UPDATE”解决方案"
}
],
"op_in_trx": 0,
"timestamp": "2017-06-29T10:36:42",
"trx_id": "224083ee5863041751c6df22f3899fffe638e19f",
"trx_in_block": 5,
"virtual_op": 0
}heha37claimed reward balance: 1.110 SBD, 0.667 SP2017/06/27 10:24:12
heha37claimed reward balance: 1.110 SBD, 0.667 SP
2017/06/27 10:24:12
| account | heha37 |
| reward sbd | 1.110 SBD |
| reward steem | 0.000 STEEM |
| reward vests | 1084.387839 VESTS |
| Transaction Info | Block #13184730/Trx f234b3d39e9294cc25e57635d35821880a1f7827 |
View Raw JSON Data
{
"block": 13184730,
"op": [
"claim_reward_balance",
{
"account": "heha37",
"reward_sbd": "1.110 SBD",
"reward_steem": "0.000 STEEM",
"reward_vests": "1084.387839 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2017-06-27T10:24:12",
"trx_id": "f234b3d39e9294cc25e57635d35821880a1f7827",
"trx_in_block": 13,
"virtual_op": 0
}2017/06/25 14:27:27
2017/06/25 14:27:27
| author | heha37 |
| permlink | 5e2gjy |
| sbd payout | 1.110 SBD |
| steem payout | 0.000 STEEM |
| vesting payout | 1084.387839 VESTS |
| Transaction Info | Block #13132039/Virtual Operation #32 |
View Raw JSON Data
{
"block": 13132039,
"op": [
"author_reward",
{
"author": "heha37",
"permlink": "5e2gjy",
"sbd_payout": "1.110 SBD",
"steem_payout": "0.000 STEEM",
"vesting_payout": "1084.387839 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2017-06-25T14:27:27",
"trx_id": "0000000000000000000000000000000000000000",
"trx_in_block": 4294967295,
"virtual_op": 32
}2017/06/21 18:39:57
2017/06/21 18:39:57
| author | steemitboard |
| body | Congratulations @heha37! You have completed some achievement on Steemit and have been rewarded with new badge(s) : [](http://steemitboard.com/@heha37) You made your First Comment Click on any badge to view your own Board of Honnor on SteemitBoard. For more information about SteemitBoard, click [here](https://steemit.com/@steemitboard) If you no longer want to receive notifications, reply to this comment with the word `STOP` By upvoting this notification, you can help all Steemit users. Learn how [here](https://steemit.com/steemitboard/@steemitboard/http-i-cubeupload-com-7ciqeo-png)! |
| json metadata | {"image":["https://steemitboard.com/img/notifications.png"]} |
| parent author | heha37 |
| parent permlink | 5e2gjy |
| permlink | steemitboard-notify-heha37-20170621t203958000z |
| title | |
| Transaction Info | Block #13021922/Trx 2c58d581091f6d1ff4809b106e4007373f93ca94 |
View Raw JSON Data
{
"block": 13021922,
"op": [
"comment",
{
"author": "steemitboard",
"body": "Congratulations @heha37! You have completed some achievement on Steemit and have been rewarded with new badge(s) :\n\n[](http://steemitboard.com/@heha37) You made your First Comment\n\nClick on any badge to view your own Board of Honnor on SteemitBoard.\nFor more information about SteemitBoard, click [here](https://steemit.com/@steemitboard)\n\nIf you no longer want to receive notifications, reply to this comment with the word `STOP`\n\nBy upvoting this notification, you can help all Steemit users. Learn how [here](https://steemit.com/steemitboard/@steemitboard/http-i-cubeupload-com-7ciqeo-png)!",
"json_metadata": "{\"image\":[\"https://steemitboard.com/img/notifications.png\"]}",
"parent_author": "heha37",
"parent_permlink": "5e2gjy",
"permlink": "steemitboard-notify-heha37-20170621t203958000z",
"title": ""
}
],
"op_in_trx": 0,
"timestamp": "2017-06-21T18:39:57",
"trx_id": "2c58d581091f6d1ff4809b106e4007373f93ca94",
"trx_in_block": 19,
"virtual_op": 0
}2017/06/21 05:27:30
2017/06/21 05:27:30
| id | follow |
| json | ["follow",{"follower":"heha37","following":"oflyhigh","what":["blog"]}] |
| required auths | [] |
| required posting auths | ["heha37"] |
| Transaction Info | Block #13006128/Trx 8c14a66dc33c2c99cf3252dc5b31d6cfbdf122b9 |
View Raw JSON Data
{
"block": 13006128,
"op": [
"custom_json",
{
"id": "follow",
"json": "[\"follow\",{\"follower\":\"heha37\",\"following\":\"oflyhigh\",\"what\":[\"blog\"]}]",
"required_auths": [],
"required_posting_auths": [
"heha37"
]
}
],
"op_in_trx": 0,
"timestamp": "2017-06-21T05:27:30",
"trx_id": "8c14a66dc33c2c99cf3252dc5b31d6cfbdf122b9",
"trx_in_block": 10,
"virtual_op": 0
}2017/06/21 05:27:12
2017/06/21 05:27:12
| author | heha37 |
| body | 谢谢 |
| json metadata | {"tags":["cn"],"app":"steemit/0.1"} |
| parent author | oflyhigh |
| parent permlink | re-heha37-5e2gjy-20170618t145424792z |
| permlink | re-oflyhigh-re-heha37-5e2gjy-20170621t052711756z |
| title | |
| Transaction Info | Block #13006122/Trx 5c6fffed5a1f4c862e6ba7f8e02140898d9f12e3 |
View Raw JSON Data
{
"block": 13006122,
"op": [
"comment",
{
"author": "heha37",
"body": "谢谢",
"json_metadata": "{\"tags\":[\"cn\"],\"app\":\"steemit/0.1\"}",
"parent_author": "oflyhigh",
"parent_permlink": "re-heha37-5e2gjy-20170618t145424792z",
"permlink": "re-oflyhigh-re-heha37-5e2gjy-20170621t052711756z",
"title": ""
}
],
"op_in_trx": 0,
"timestamp": "2017-06-21T05:27:12",
"trx_id": "5c6fffed5a1f4c862e6ba7f8e02140898d9f12e3",
"trx_in_block": 17,
"virtual_op": 0
}2017/06/19 17:04:39
2017/06/19 17:04:39
| author | heha37 |
| permlink | 5e2gjy |
| voter | azazqwe |
| weight | 10000 (100.00%) |
| Transaction Info | Block #12962686/Trx a99a04aaca35a58d54d013174df6bced772f37f6 |
View Raw JSON Data
{
"block": 12962686,
"op": [
"vote",
{
"author": "heha37",
"permlink": "5e2gjy",
"voter": "azazqwe",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2017-06-19T17:04:39",
"trx_id": "a99a04aaca35a58d54d013174df6bced772f37f6",
"trx_in_block": 5,
"virtual_op": 0
}2017/06/18 17:32:27
2017/06/18 17:32:27
| author | heha37 |
| permlink | 5e2gjy |
| voter | ashwim |
| weight | 10000 (100.00%) |
| Transaction Info | Block #12934478/Trx 5d5508623eb9198caaeced782e58afc69e70d818 |
View Raw JSON Data
{
"block": 12934478,
"op": [
"vote",
{
"author": "heha37",
"permlink": "5e2gjy",
"voter": "ashwim",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2017-06-18T17:32:27",
"trx_id": "5d5508623eb9198caaeced782e58afc69e70d818",
"trx_in_block": 1,
"virtual_op": 0
}oflyhighreplied to @heha37 / re-heha37-5e2gjy-20170618t145424792z2017/06/18 14:54:27
oflyhighreplied to @heha37 / re-heha37-5e2gjy-20170618t145424792z
2017/06/18 14:54:27
| author | oflyhigh |
| body | 不错,感谢分享 |
| json metadata | {"tags":["cn"],"app":"steemit/0.1"} |
| parent author | heha37 |
| parent permlink | 5e2gjy |
| permlink | re-heha37-5e2gjy-20170618t145424792z |
| title | |
| Transaction Info | Block #12931321/Trx 98173da0c8e05b9ce6ac82e9e7e8ea14e3c77cba |
View Raw JSON Data
{
"block": 12931321,
"op": [
"comment",
{
"author": "oflyhigh",
"body": "不错,感谢分享",
"json_metadata": "{\"tags\":[\"cn\"],\"app\":\"steemit/0.1\"}",
"parent_author": "heha37",
"parent_permlink": "5e2gjy",
"permlink": "re-heha37-5e2gjy-20170618t145424792z",
"title": ""
}
],
"op_in_trx": 0,
"timestamp": "2017-06-18T14:54:27",
"trx_id": "98173da0c8e05b9ce6ac82e9e7e8ea14e3c77cba",
"trx_in_block": 7,
"virtual_op": 0
}2017/06/18 14:54:06
2017/06/18 14:54:06
| author | heha37 |
| permlink | 5e2gjy |
| voter | oflyhigh |
| weight | 3500 (35.00%) |
| Transaction Info | Block #12931314/Trx a94c33f653b44ef4dc61968331e096d8186323be |
View Raw JSON Data
{
"block": 12931314,
"op": [
"vote",
{
"author": "heha37",
"permlink": "5e2gjy",
"voter": "oflyhigh",
"weight": 3500
}
],
"op_in_trx": 0,
"timestamp": "2017-06-18T14:54:06",
"trx_id": "a94c33f653b44ef4dc61968331e096d8186323be",
"trx_in_block": 13,
"virtual_op": 0
}juleereplied to @heha37 / re-heha37-2017618t102937493z2017/06/18 14:29:39
juleereplied to @heha37 / re-heha37-2017618t102937493z
2017/06/18 14:29:39
| author | julee |
| body | Beautiful art picture👍🏻 |
| json metadata | {"tags":"cn","app":"esteem/1.4.5","format":"markdown+html","community":"esteem"} |
| parent author | heha37 |
| parent permlink | 5e2gjy |
| permlink | re-heha37-2017618t102937493z |
| title | |
| Transaction Info | Block #12930825/Trx 0265ce60216ebfd82e67dd40f9a96bc555549ee8 |
View Raw JSON Data
{
"block": 12930825,
"op": [
"comment",
{
"author": "julee",
"body": "Beautiful art picture👍🏻",
"json_metadata": "{\"tags\":\"cn\",\"app\":\"esteem/1.4.5\",\"format\":\"markdown+html\",\"community\":\"esteem\"}",
"parent_author": "heha37",
"parent_permlink": "5e2gjy",
"permlink": "re-heha37-2017618t102937493z",
"title": ""
}
],
"op_in_trx": 0,
"timestamp": "2017-06-18T14:29:39",
"trx_id": "0265ce60216ebfd82e67dd40f9a96bc555549ee8",
"trx_in_block": 13,
"virtual_op": 0
}2017/06/18 14:29:12
2017/06/18 14:29:12
| author | heha37 |
| permlink | 5e2gjy |
| voter | julee |
| weight | 10000 (100.00%) |
| Transaction Info | Block #12930816/Trx 3585e870c9479847613fc467179c199b3bad07ed |
View Raw JSON Data
{
"block": 12930816,
"op": [
"vote",
{
"author": "heha37",
"permlink": "5e2gjy",
"voter": "julee",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2017-06-18T14:29:12",
"trx_id": "3585e870c9479847613fc467179c199b3bad07ed",
"trx_in_block": 0,
"virtual_op": 0
}crypto-preplied to @heha37 / re-heha37-5e2gjy-20170618t142821067z2017/06/18 14:28:21
crypto-preplied to @heha37 / re-heha37-5e2gjy-20170618t142821067z
2017/06/18 14:28:21
| author | crypto-p |
| body | Thank you for sharing this, following you |
| json metadata | {"tags":["cn"],"app":"steemit/0.1"} |
| parent author | heha37 |
| parent permlink | 5e2gjy |
| permlink | re-heha37-5e2gjy-20170618t142821067z |
| title | |
| Transaction Info | Block #12930799/Trx 426ef7c85c774ec34fda77b03be80b089f07cd19 |
View Raw JSON Data
{
"block": 12930799,
"op": [
"comment",
{
"author": "crypto-p",
"body": "Thank you for sharing this, following you",
"json_metadata": "{\"tags\":[\"cn\"],\"app\":\"steemit/0.1\"}",
"parent_author": "heha37",
"parent_permlink": "5e2gjy",
"permlink": "re-heha37-5e2gjy-20170618t142821067z",
"title": ""
}
],
"op_in_trx": 0,
"timestamp": "2017-06-18T14:28:21",
"trx_id": "426ef7c85c774ec34fda77b03be80b089f07cd19",
"trx_in_block": 27,
"virtual_op": 0
}2017/06/18 14:27:27
2017/06/18 14:27:27
| author | heha37 |
| permlink | 5e2gjy |
| voter | heha37 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #12930781/Trx 9fcf7b80e7368573548d37e845a4630e0e1079f4 |
View Raw JSON Data
{
"block": 12930781,
"op": [
"vote",
{
"author": "heha37",
"permlink": "5e2gjy",
"voter": "heha37",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2017-06-18T14:27:27",
"trx_id": "9fcf7b80e7368573548d37e845a4630e0e1079f4",
"trx_in_block": 31,
"virtual_op": 0
}2017/06/18 14:27:27
2017/06/18 14:27:27
| author | heha37 |
| body |  当我听说一些老师和学生由于基础题提分显著,而把本应该用来学习阅读和写作的时间也分配给了基础题的讲解,阅读和写作被边缘化,我想到了当初功利心极强的自己。 曾几何时,我一心去做我认为有用的事情,能看到显著效果的事情。我功利心极强,读书就要读能让我成功的书,因此拜读了很多成功学书籍啊,喝了一肚子的鸡汤。干什么事情一定要有个明确的目的性和计划性,生活就像在打卡,坚信一个一个地做一定能成功。打着打着,好像卡丢了,自己越来越焦虑,感觉越活越没意思,就好像你自己顺着一条路认认真真地走,然后心里催眠自己前面就是传说中的宝藏,结果你走了好长时间前面路断了,出现个悬崖,你顿时觉得信念的大厦一下子坍塌,不知道该干什么。 后来我领悟到,功利心和有趣是成反比的,功利心有时候是一种负担。其实读书应该是一种精神上的享受,通过引发自己的好奇心来触发思考,后来我读书就不先问自己读这东西有什么用,而是读很方面的书,让兴趣行使它的权利。 写作和写代码也是如此,有了创作分享的冲动就去写作,有了想实现一个逻辑的灵感就去写代码,然后去享受这个创作的过程,然后从无到有,自己在这个过程中成长。 我觉得这些老师和学生有些急功近利了,导致短视。阅读和写作占的分数比例不低,并且它有带动其他项目分数提高的功用,因为很多学生分数差是因为阅读理解能力低,导致读不懂题、理解不对题目的逻辑。阅读和写作,一个输入,一个输出,正好还能提高一个人的学习能力,我觉得不如分配多一点儿时间给这对组合。 |
| json metadata | {"tags":["cn","essay"],"image":["https://shootertt.github.io/uploads/reading.jpg"],"app":"steemit/0.1","format":"markdown"} |
| parent author | |
| parent permlink | cn |
| permlink | 5e2gjy |
| title | 功利心和有趣 |
| Transaction Info | Block #12930781/Trx 9fcf7b80e7368573548d37e845a4630e0e1079f4 |
View Raw JSON Data
{
"block": 12930781,
"op": [
"comment",
{
"author": "heha37",
"body": "\n\n当我听说一些老师和学生由于基础题提分显著,而把本应该用来学习阅读和写作的时间也分配给了基础题的讲解,阅读和写作被边缘化,我想到了当初功利心极强的自己。\n\n\n曾几何时,我一心去做我认为有用的事情,能看到显著效果的事情。我功利心极强,读书就要读能让我成功的书,因此拜读了很多成功学书籍啊,喝了一肚子的鸡汤。干什么事情一定要有个明确的目的性和计划性,生活就像在打卡,坚信一个一个地做一定能成功。打着打着,好像卡丢了,自己越来越焦虑,感觉越活越没意思,就好像你自己顺着一条路认认真真地走,然后心里催眠自己前面就是传说中的宝藏,结果你走了好长时间前面路断了,出现个悬崖,你顿时觉得信念的大厦一下子坍塌,不知道该干什么。\n\n\n后来我领悟到,功利心和有趣是成反比的,功利心有时候是一种负担。其实读书应该是一种精神上的享受,通过引发自己的好奇心来触发思考,后来我读书就不先问自己读这东西有什么用,而是读很方面的书,让兴趣行使它的权利。\n\n\n写作和写代码也是如此,有了创作分享的冲动就去写作,有了想实现一个逻辑的灵感就去写代码,然后去享受这个创作的过程,然后从无到有,自己在这个过程中成长。\n\n\n我觉得这些老师和学生有些急功近利了,导致短视。阅读和写作占的分数比例不低,并且它有带动其他项目分数提高的功用,因为很多学生分数差是因为阅读理解能力低,导致读不懂题、理解不对题目的逻辑。阅读和写作,一个输入,一个输出,正好还能提高一个人的学习能力,我觉得不如分配多一点儿时间给这对组合。",
"json_metadata": "{\"tags\":[\"cn\",\"essay\"],\"image\":[\"https://shootertt.github.io/uploads/reading.jpg\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
"parent_author": "",
"parent_permlink": "cn",
"permlink": "5e2gjy",
"title": "功利心和有趣"
}
],
"op_in_trx": 0,
"timestamp": "2017-06-18T14:27:27",
"trx_id": "9fcf7b80e7368573548d37e845a4630e0e1079f4",
"trx_in_block": 31,
"virtual_op": 0
}2017/06/16 10:04:12
2017/06/16 10:04:12
| author | heha37 |
| body | @@ -1,8 +1,66 @@ +!%5Brisk%5D(https://shootertt.github.io/uploads/panic7.jpg)%0A%0A%0A %E4%BD%9C%E6%AD%BB%E7%9A%84%E4%BA%BA%EF%BC%8C%E6%AC%A2%E8%BF%8E%E6%9D%A5 |
| json metadata | {"tags":["cn","blockchain","bitcoin"],"links":["http://sia.tech/","https://zeronet.io/"],"app":"steemit/0.1","format":"markdown","image":["https://shootertt.github.io/uploads/panic7.jpg"]} |
| parent author | |
| parent permlink | cn |
| permlink | 4dqlkh |
| title | 投资区块链初体验 |
| Transaction Info | Block #12867965/Trx 19a5a7be2b42ef90a9b0da31c0bd05cb81356794 |
View Raw JSON Data
{
"block": 12867965,
"op": [
"comment",
{
"author": "heha37",
"body": "@@ -1,8 +1,66 @@\n+!%5Brisk%5D(https://shootertt.github.io/uploads/panic7.jpg)%0A%0A%0A\n %E4%BD%9C%E6%AD%BB%E7%9A%84%E4%BA%BA%EF%BC%8C%E6%AC%A2%E8%BF%8E%E6%9D%A5\n",
"json_metadata": "{\"tags\":[\"cn\",\"blockchain\",\"bitcoin\"],\"links\":[\"http://sia.tech/\",\"https://zeronet.io/\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\",\"image\":[\"https://shootertt.github.io/uploads/panic7.jpg\"]}",
"parent_author": "",
"parent_permlink": "cn",
"permlink": "4dqlkh",
"title": "投资区块链初体验"
}
],
"op_in_trx": 0,
"timestamp": "2017-06-16T10:04:12",
"trx_id": "19a5a7be2b42ef90a9b0da31c0bd05cb81356794",
"trx_in_block": 24,
"virtual_op": 0
}2017/06/16 09:28:48
2017/06/16 09:28:48
| author | heha37 |
| body | @@ -602,16 +602,17 @@ %0A* %E8%AE%A4%E7%9F%A5%E5%B7%AE%E5%BC%82%0A +%0A %E8%87%AA%E5%B7%B1%E7%9A%84%E8%AE%A4%E7%9F%A5%E4%B8%8D%E8%B6%B3%EF%BC%8C @@ -756,16 +756,17 @@ %0A* %E5%85%88%E8%A1%8C%E5%90%8E%E7%9F%A5%0A +%0A %E8%A1%8C%E5%8A%A8%E5%BE%88%E9%87%8D%E8%A6%81%EF%BC%8C%E6%AF%94%E5%A6%82 @@ -855,16 +855,17 @@ %E5%8C%BA%E5%9D%97%E9%93%BE%E8%BF%99%E4%B8%AA%E6%8A%80%E6%9C%AF%0A +%0A %E6%88%91%E5%85%B6%E5%AE%9E%E5%AF%B9%E7%82%92%E5%B8%81%E8%BF%99%E7%A7%8D |
| json metadata | {"tags":["cn","blockchain","bitcoin"],"links":["http://sia.tech/","https://zeronet.io/"],"app":"steemit/0.1","format":"markdown"} |
| parent author | |
| parent permlink | cn |
| permlink | 4dqlkh |
| title | 投资区块链初体验 |
| Transaction Info | Block #12867257/Trx 6f1d43c92bab7cb8ac820346bde4e10cd23ecad0 |
View Raw JSON Data
{
"block": 12867257,
"op": [
"comment",
{
"author": "heha37",
"body": "@@ -602,16 +602,17 @@\n %0A* %E8%AE%A4%E7%9F%A5%E5%B7%AE%E5%BC%82%0A\n+%0A\n %E8%87%AA%E5%B7%B1%E7%9A%84%E8%AE%A4%E7%9F%A5%E4%B8%8D%E8%B6%B3%EF%BC%8C\n@@ -756,16 +756,17 @@\n %0A* %E5%85%88%E8%A1%8C%E5%90%8E%E7%9F%A5%0A\n+%0A\n %E8%A1%8C%E5%8A%A8%E5%BE%88%E9%87%8D%E8%A6%81%EF%BC%8C%E6%AF%94%E5%A6%82\n@@ -855,16 +855,17 @@\n %E5%8C%BA%E5%9D%97%E9%93%BE%E8%BF%99%E4%B8%AA%E6%8A%80%E6%9C%AF%0A\n+%0A\n %E6%88%91%E5%85%B6%E5%AE%9E%E5%AF%B9%E7%82%92%E5%B8%81%E8%BF%99%E7%A7%8D\n",
"json_metadata": "{\"tags\":[\"cn\",\"blockchain\",\"bitcoin\"],\"links\":[\"http://sia.tech/\",\"https://zeronet.io/\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
"parent_author": "",
"parent_permlink": "cn",
"permlink": "4dqlkh",
"title": "投资区块链初体验"
}
],
"op_in_trx": 0,
"timestamp": "2017-06-16T09:28:48",
"trx_id": "6f1d43c92bab7cb8ac820346bde4e10cd23ecad0",
"trx_in_block": 9,
"virtual_op": 0
}2017/06/16 09:28:15
2017/06/16 09:28:15
| author | heha37 |
| body | @@ -374,16 +374,17 @@ %E5%88%AB%E4%BA%BA%E7%9A%84%E8%BF%99%E4%B9%88%E5%A5%BD%EF%BC%9F%0A +%0A %E6%88%91%E5%87%BA%E7%8E%B0%E7%9A%84%E9%97%AA%E5%BF%B5%E6%98%AF%E5%9B%A0 |
| json metadata | {"tags":["cn","blockchain","bitcoin"],"links":["http://sia.tech/","https://zeronet.io/"],"app":"steemit/0.1","format":"markdown"} |
| parent author | |
| parent permlink | cn |
| permlink | 4dqlkh |
| title | 投资区块链初体验 |
| Transaction Info | Block #12867246/Trx 20e3e387981032db6df61fa46ab1989e182e8af5 |
View Raw JSON Data
{
"block": 12867246,
"op": [
"comment",
{
"author": "heha37",
"body": "@@ -374,16 +374,17 @@\n %E5%88%AB%E4%BA%BA%E7%9A%84%E8%BF%99%E4%B9%88%E5%A5%BD%EF%BC%9F%0A\n+%0A\n %E6%88%91%E5%87%BA%E7%8E%B0%E7%9A%84%E9%97%AA%E5%BF%B5%E6%98%AF%E5%9B%A0\n",
"json_metadata": "{\"tags\":[\"cn\",\"blockchain\",\"bitcoin\"],\"links\":[\"http://sia.tech/\",\"https://zeronet.io/\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
"parent_author": "",
"parent_permlink": "cn",
"permlink": "4dqlkh",
"title": "投资区块链初体验"
}
],
"op_in_trx": 0,
"timestamp": "2017-06-16T09:28:15",
"trx_id": "20e3e387981032db6df61fa46ab1989e182e8af5",
"trx_in_block": 1,
"virtual_op": 0
}2017/06/16 09:27:51
2017/06/16 09:27:51
| author | heha37 |
| body | @@ -374,18 +374,16 @@ %E5%88%AB%E4%BA%BA%E7%9A%84%E8%BF%99%E4%B9%88%E5%A5%BD%EF%BC%9F%0A -%0A%0A %E6%88%91%E5%87%BA%E7%8E%B0%E7%9A%84%E9%97%AA%E5%BF%B5%E6%98%AF%E5%9B%A0 |
| json metadata | {"tags":["cn","blockchain","bitcoin"],"links":["http://sia.tech/","https://zeronet.io/"],"app":"steemit/0.1","format":"markdown"} |
| parent author | |
| parent permlink | cn |
| permlink | 4dqlkh |
| title | 投资区块链初体验 |
| Transaction Info | Block #12867238/Trx 32637766c79325f791b04cca8c196339bf32c46f |
View Raw JSON Data
{
"block": 12867238,
"op": [
"comment",
{
"author": "heha37",
"body": "@@ -374,18 +374,16 @@\n %E5%88%AB%E4%BA%BA%E7%9A%84%E8%BF%99%E4%B9%88%E5%A5%BD%EF%BC%9F%0A\n-%0A%0A\n %E6%88%91%E5%87%BA%E7%8E%B0%E7%9A%84%E9%97%AA%E5%BF%B5%E6%98%AF%E5%9B%A0\n",
"json_metadata": "{\"tags\":[\"cn\",\"blockchain\",\"bitcoin\"],\"links\":[\"http://sia.tech/\",\"https://zeronet.io/\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
"parent_author": "",
"parent_permlink": "cn",
"permlink": "4dqlkh",
"title": "投资区块链初体验"
}
],
"op_in_trx": 0,
"timestamp": "2017-06-16T09:27:51",
"trx_id": "32637766c79325f791b04cca8c196339bf32c46f",
"trx_in_block": 4,
"virtual_op": 0
}2017/06/16 09:27:15
2017/06/16 09:27:15
| author | heha37 |
| body | @@ -376,17 +376,16 @@ %E7%9A%84%E8%BF%99%E4%B9%88%E5%A5%BD%EF%BC%9F%0A%0A%0A -%0A %E6%88%91%E5%87%BA%E7%8E%B0%E7%9A%84%E9%97%AA%E5%BF%B5%E6%98%AF%E5%9B%A0 @@ -599,16 +599,16 @@ %E7%82%BC%E3%80%82%0A%0A +%0A * %E8%AE%A4%E7%9F%A5%E5%B7%AE%E5%BC%82%0A -%0A %E8%87%AA%E5%B7%B1%E7%9A%84%E8%AE%A4 @@ -752,16 +752,16 @@ %E5%BF%83%E3%80%82%0A%0A +%0A * %E5%85%88%E8%A1%8C%E5%90%8E%E7%9F%A5%0A -%0A %E8%A1%8C%E5%8A%A8%E5%BE%88%E9%87%8D @@ -841,16 +841,17 @@ %E7%9B%B8%E5%85%B3%E7%9A%84%E7%9F%A5%E8%AF%86%E3%80%82%0A%0A +%0A * %E7%9C%8B%E5%A5%BD%E5%8C%BA%E5%9D%97%E9%93%BE%E8%BF%99 @@ -854,17 +854,16 @@ %E5%8C%BA%E5%9D%97%E9%93%BE%E8%BF%99%E4%B8%AA%E6%8A%80%E6%9C%AF%0A -%0A %E6%88%91%E5%85%B6%E5%AE%9E%E5%AF%B9%E7%82%92%E5%B8%81%E8%BF%99%E7%A7%8D |
| json metadata | {"tags":["cn","blockchain","bitcoin"],"links":["http://sia.tech/","https://zeronet.io/"],"app":"steemit/0.1","format":"markdown"} |
| parent author | |
| parent permlink | cn |
| permlink | 4dqlkh |
| title | 投资区块链初体验 |
| Transaction Info | Block #12867226/Trx 8dc757deefa84e721279de73af667cbbcb17fc3f |
View Raw JSON Data
{
"block": 12867226,
"op": [
"comment",
{
"author": "heha37",
"body": "@@ -376,17 +376,16 @@\n %E7%9A%84%E8%BF%99%E4%B9%88%E5%A5%BD%EF%BC%9F%0A%0A%0A\n-%0A\n %E6%88%91%E5%87%BA%E7%8E%B0%E7%9A%84%E9%97%AA%E5%BF%B5%E6%98%AF%E5%9B%A0\n@@ -599,16 +599,16 @@\n %E7%82%BC%E3%80%82%0A%0A\n+%0A\n * %E8%AE%A4%E7%9F%A5%E5%B7%AE%E5%BC%82%0A\n-%0A\n %E8%87%AA%E5%B7%B1%E7%9A%84%E8%AE%A4\n@@ -752,16 +752,16 @@\n %E5%BF%83%E3%80%82%0A%0A\n+%0A\n * %E5%85%88%E8%A1%8C%E5%90%8E%E7%9F%A5%0A\n-%0A\n %E8%A1%8C%E5%8A%A8%E5%BE%88%E9%87%8D\n@@ -841,16 +841,17 @@\n %E7%9B%B8%E5%85%B3%E7%9A%84%E7%9F%A5%E8%AF%86%E3%80%82%0A%0A\n+%0A\n * %E7%9C%8B%E5%A5%BD%E5%8C%BA%E5%9D%97%E9%93%BE%E8%BF%99\n@@ -854,17 +854,16 @@\n %E5%8C%BA%E5%9D%97%E9%93%BE%E8%BF%99%E4%B8%AA%E6%8A%80%E6%9C%AF%0A\n-%0A\n %E6%88%91%E5%85%B6%E5%AE%9E%E5%AF%B9%E7%82%92%E5%B8%81%E8%BF%99%E7%A7%8D\n",
"json_metadata": "{\"tags\":[\"cn\",\"blockchain\",\"bitcoin\"],\"links\":[\"http://sia.tech/\",\"https://zeronet.io/\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
"parent_author": "",
"parent_permlink": "cn",
"permlink": "4dqlkh",
"title": "投资区块链初体验"
}
],
"op_in_trx": 0,
"timestamp": "2017-06-16T09:27:15",
"trx_id": "8dc757deefa84e721279de73af667cbbcb17fc3f",
"trx_in_block": 3,
"virtual_op": 0
}2017/06/16 09:26:48
2017/06/16 09:26:48
| author | heha37 |
| permlink | 4dqlkh |
| voter | ubg |
| weight | 100 (1.00%) |
| Transaction Info | Block #12867217/Trx b09aadfeae6f0f8b5854bb1fa74f4c65a7391d70 |
View Raw JSON Data
{
"block": 12867217,
"op": [
"vote",
{
"author": "heha37",
"permlink": "4dqlkh",
"voter": "ubg",
"weight": 100
}
],
"op_in_trx": 0,
"timestamp": "2017-06-16T09:26:48",
"trx_id": "b09aadfeae6f0f8b5854bb1fa74f4c65a7391d70",
"trx_in_block": 9,
"virtual_op": 0
}2017/06/16 09:26:18
2017/06/16 09:26:18
| author | heha37 |
| body | @@ -275,17 +275,16 @@ %E4%B8%80%E4%BA%9B%E4%B8%8D%E5%A5%BD%E7%9A%84%E9%97%AA%E5%BF%B5%0A -%0A %3E %E6%80%8E%E4%B9%88%E5%9B%9E%E4%BA%8B%EF%BC%8C%E4%B8%80 |
| json metadata | {"tags":["cn","blockchain","bitcoin"],"links":["http://sia.tech/","https://zeronet.io/"],"app":"steemit/0.1","format":"markdown"} |
| parent author | |
| parent permlink | cn |
| permlink | 4dqlkh |
| title | 投资区块链初体验 |
| Transaction Info | Block #12867207/Trx a223da4b5f97e78e6336398eea5f9b9106305bb1 |
View Raw JSON Data
{
"block": 12867207,
"op": [
"comment",
{
"author": "heha37",
"body": "@@ -275,17 +275,16 @@\n %E4%B8%80%E4%BA%9B%E4%B8%8D%E5%A5%BD%E7%9A%84%E9%97%AA%E5%BF%B5%0A\n-%0A\n %3E %E6%80%8E%E4%B9%88%E5%9B%9E%E4%BA%8B%EF%BC%8C%E4%B8%80\n",
"json_metadata": "{\"tags\":[\"cn\",\"blockchain\",\"bitcoin\"],\"links\":[\"http://sia.tech/\",\"https://zeronet.io/\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
"parent_author": "",
"parent_permlink": "cn",
"permlink": "4dqlkh",
"title": "投资区块链初体验"
}
],
"op_in_trx": 0,
"timestamp": "2017-06-16T09:26:18",
"trx_id": "a223da4b5f97e78e6336398eea5f9b9106305bb1",
"trx_in_block": 10,
"virtual_op": 0
}aluhut.lifeupvoted (100.00%) @heha37 / 4dqlkh2017/06/16 09:26:09
aluhut.lifeupvoted (100.00%) @heha37 / 4dqlkh
2017/06/16 09:26:09
| author | heha37 |
| permlink | 4dqlkh |
| voter | aluhut.life |
| weight | 10000 (100.00%) |
| Transaction Info | Block #12867204/Trx 6a917cc18ef3d1436013950bdc576af074ac3f90 |
View Raw JSON Data
{
"block": 12867204,
"op": [
"vote",
{
"author": "heha37",
"permlink": "4dqlkh",
"voter": "aluhut.life",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2017-06-16T09:26:09",
"trx_id": "6a917cc18ef3d1436013950bdc576af074ac3f90",
"trx_in_block": 1,
"virtual_op": 0
}2017/06/16 09:25:39
2017/06/16 09:25:39
| author | heha37 |
| body | @@ -294,17 +294,16 @@ %E8%B7%8C%EF%BC%8C%E4%B8%80%E5%8D%96%E5%B0%B1%E6%B6%A8%EF%BC%9F%0A -%0A %3E %E8%BF%99%E4%B8%AA%E5%B8%81%E6%80%8E%E4%B9%88%E6%A0%B7 @@ -310,17 +310,16 @@ %EF%BC%8C%E5%88%AB%E4%BA%BA%E6%80%8E%E4%B9%88%E7%9C%8B%EF%BC%9F%0A -%0A %3E %E6%B6%A8%E5%BE%97%E8%BF%99%E4%B9%88%E5%87%B6%EF%BC%8C @@ -323,17 +323,16 @@ %E4%B9%88%E5%87%B6%EF%BC%8C%E5%8F%91%E8%B4%A2%E4%BA%86%EF%BC%81%0A -%0A %3E %E8%B7%8C%E5%BE%97%E8%BF%99%E4%B9%88%E7%8B%A0%EF%BC%8C @@ -336,17 +336,16 @@ %E4%B9%88%E7%8B%A0%EF%BC%8C%E5%AE%8C%E8%9B%8B%E4%BA%86%EF%BC%81%0A -%0A %3E %E5%88%9A%E6%89%8D%E5%8F%91%E7%94%9F%E4%BA%86%E4%BB%80 @@ -354,17 +354,16 @@ %E6%88%91%E9%94%99%E8%BF%87%E4%BA%86%E4%BB%80%E4%B9%88%EF%BC%9F%0A -%0A %3E %E6%88%91%E7%9A%84%E8%BF%90%E6%B0%94%E8%BF%99%E4%B9%88 |
| json metadata | {"tags":["cn","blockchain","bitcoin"],"links":["http://sia.tech/","https://zeronet.io/"],"app":"steemit/0.1","format":"markdown"} |
| parent author | |
| parent permlink | cn |
| permlink | 4dqlkh |
| title | 投资区块链初体验 |
| Transaction Info | Block #12867194/Trx 7c1dc8803c3f7297b6cfbf22fecbfc5f25edfdb0 |
View Raw JSON Data
{
"block": 12867194,
"op": [
"comment",
{
"author": "heha37",
"body": "@@ -294,17 +294,16 @@\n %E8%B7%8C%EF%BC%8C%E4%B8%80%E5%8D%96%E5%B0%B1%E6%B6%A8%EF%BC%9F%0A\n-%0A\n %3E %E8%BF%99%E4%B8%AA%E5%B8%81%E6%80%8E%E4%B9%88%E6%A0%B7\n@@ -310,17 +310,16 @@\n %EF%BC%8C%E5%88%AB%E4%BA%BA%E6%80%8E%E4%B9%88%E7%9C%8B%EF%BC%9F%0A\n-%0A\n %3E %E6%B6%A8%E5%BE%97%E8%BF%99%E4%B9%88%E5%87%B6%EF%BC%8C\n@@ -323,17 +323,16 @@\n %E4%B9%88%E5%87%B6%EF%BC%8C%E5%8F%91%E8%B4%A2%E4%BA%86%EF%BC%81%0A\n-%0A\n %3E %E8%B7%8C%E5%BE%97%E8%BF%99%E4%B9%88%E7%8B%A0%EF%BC%8C\n@@ -336,17 +336,16 @@\n %E4%B9%88%E7%8B%A0%EF%BC%8C%E5%AE%8C%E8%9B%8B%E4%BA%86%EF%BC%81%0A\n-%0A\n %3E %E5%88%9A%E6%89%8D%E5%8F%91%E7%94%9F%E4%BA%86%E4%BB%80\n@@ -354,17 +354,16 @@\n %E6%88%91%E9%94%99%E8%BF%87%E4%BA%86%E4%BB%80%E4%B9%88%EF%BC%9F%0A\n-%0A\n %3E %E6%88%91%E7%9A%84%E8%BF%90%E6%B0%94%E8%BF%99%E4%B9%88\n",
"json_metadata": "{\"tags\":[\"cn\",\"blockchain\",\"bitcoin\"],\"links\":[\"http://sia.tech/\",\"https://zeronet.io/\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
"parent_author": "",
"parent_permlink": "cn",
"permlink": "4dqlkh",
"title": "投资区块链初体验"
}
],
"op_in_trx": 0,
"timestamp": "2017-06-16T09:25:39",
"trx_id": "7c1dc8803c3f7297b6cfbf22fecbfc5f25edfdb0",
"trx_in_block": 12,
"virtual_op": 0
}heha37removed vote from (0.00%) @richguy / newbie-initiative-upvoting-every-newbie-with-my-usd0-01-vote2017/06/16 09:20:33
heha37removed vote from (0.00%) @richguy / newbie-initiative-upvoting-every-newbie-with-my-usd0-01-vote
2017/06/16 09:20:33
| author | richguy |
| permlink | newbie-initiative-upvoting-every-newbie-with-my-usd0-01-vote |
| voter | heha37 |
| weight | 0 (0.00%) |
| Transaction Info | Block #12867093/Trx 3ae85abe1c4547d630a41d452a8ffbec7acf8a6d |
View Raw JSON Data
{
"block": 12867093,
"op": [
"vote",
{
"author": "richguy",
"permlink": "newbie-initiative-upvoting-every-newbie-with-my-usd0-01-vote",
"voter": "heha37",
"weight": 0
}
],
"op_in_trx": 0,
"timestamp": "2017-06-16T09:20:33",
"trx_id": "3ae85abe1c4547d630a41d452a8ffbec7acf8a6d",
"trx_in_block": 5,
"virtual_op": 0
}heha37upvoted (100.00%) @richguy / newbie-initiative-upvoting-every-newbie-with-my-usd0-01-vote2017/06/16 09:20:21
heha37upvoted (100.00%) @richguy / newbie-initiative-upvoting-every-newbie-with-my-usd0-01-vote
2017/06/16 09:20:21
| author | richguy |
| permlink | newbie-initiative-upvoting-every-newbie-with-my-usd0-01-vote |
| voter | heha37 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #12867089/Trx a75195b56b56e00f32a9fa3d64a7e4d417f1ab0f |
View Raw JSON Data
{
"block": 12867089,
"op": [
"vote",
{
"author": "richguy",
"permlink": "newbie-initiative-upvoting-every-newbie-with-my-usd0-01-vote",
"voter": "heha37",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2017-06-16T09:20:21",
"trx_id": "a75195b56b56e00f32a9fa3d64a7e4d417f1ab0f",
"trx_in_block": 18,
"virtual_op": 0
}2017/06/15 14:39:42
2017/06/15 14:39:42
| author | heha37 |
| body | @@ -433,17 +433,17 @@ %E5%8A%9B%E9%83%BD%E6%94%BE%E5%9C%A8 -%E7%9A%84 +%E4%BA%86 %E4%BB%B7%E6%A0%BC%E7%9A%84%E6%B3%A2%E5%8A%A8%E4%B8%8A%EF%BC%8C -%E5%8F%8A +%E6%9E%81 %E5%85%B6%E7%9F%AD%E8%A7%86%E5%9C%B0 @@ -572,9 +572,9 @@ %E9%92%A5%E5%8C%99%E3%80%82%E6%88%91 -%E5%8F%88 +%E6%9C%89 %E8%BF%99%E4%BA%9B%E7%94%B5%E5%85%89 @@ -757,17 +757,17 @@ %E7%9A%84%E4%B8%AD%E5%BF%83%E3%80%82%0A%0A* -%E7%8E%B0 +%E5%85%88 %E8%A1%8C%E5%90%8E%E7%9F%A5%0A%0A%E8%A1%8C%E5%8A%A8%E5%BE%88 |
| json metadata | {"tags":["cn","blockchain","bitcoin"],"links":["http://sia.tech/","https://zeronet.io/"],"app":"steemit/0.1","format":"markdown"} |
| parent author | |
| parent permlink | cn |
| permlink | 4dqlkh |
| title | 投资区块链初体验 |
| Transaction Info | Block #12844699/Trx a078809c0d3929d70e44be3f5dce473c71fa441e |
View Raw JSON Data
{
"block": 12844699,
"op": [
"comment",
{
"author": "heha37",
"body": "@@ -433,17 +433,17 @@\n %E5%8A%9B%E9%83%BD%E6%94%BE%E5%9C%A8\n-%E7%9A%84\n+%E4%BA%86\n %E4%BB%B7%E6%A0%BC%E7%9A%84%E6%B3%A2%E5%8A%A8%E4%B8%8A%EF%BC%8C\n-%E5%8F%8A\n+%E6%9E%81\n %E5%85%B6%E7%9F%AD%E8%A7%86%E5%9C%B0\n@@ -572,9 +572,9 @@\n %E9%92%A5%E5%8C%99%E3%80%82%E6%88%91\n-%E5%8F%88\n+%E6%9C%89\n %E8%BF%99%E4%BA%9B%E7%94%B5%E5%85%89\n@@ -757,17 +757,17 @@\n %E7%9A%84%E4%B8%AD%E5%BF%83%E3%80%82%0A%0A* \n-%E7%8E%B0\n+%E5%85%88\n %E8%A1%8C%E5%90%8E%E7%9F%A5%0A%0A%E8%A1%8C%E5%8A%A8%E5%BE%88\n",
"json_metadata": "{\"tags\":[\"cn\",\"blockchain\",\"bitcoin\"],\"links\":[\"http://sia.tech/\",\"https://zeronet.io/\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
"parent_author": "",
"parent_permlink": "cn",
"permlink": "4dqlkh",
"title": "投资区块链初体验"
}
],
"op_in_trx": 0,
"timestamp": "2017-06-15T14:39:42",
"trx_id": "a078809c0d3929d70e44be3f5dce473c71fa441e",
"trx_in_block": 11,
"virtual_op": 0
}2017/06/11 15:51:45
2017/06/11 15:51:45
| author | heha37 |
| permlink | 4dqlkh |
| voter | heha37 |
| weight | 10000 (100.00%) |
| Transaction Info | Block #12731007/Trx f510ae1bccc42eaa4f749353296326aa973ec58a |
View Raw JSON Data
{
"block": 12731007,
"op": [
"vote",
{
"author": "heha37",
"permlink": "4dqlkh",
"voter": "heha37",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2017-06-11T15:51:45",
"trx_id": "f510ae1bccc42eaa4f749353296326aa973ec58a",
"trx_in_block": 0,
"virtual_op": 0
}2017/06/11 15:51:45
2017/06/11 15:51:45
| author | heha37 |
| body | 作死的人,欢迎来到区块链的世界。 几个月之前,看了中本聪的比特币论文,然后就决定进入区块链世界闯一闯。试水的第一件事情是参加了一个币种的ICO,投入了一小部分资金进行尝试,之后该币在一些区块链交易所上市,价格一路疯涨,此时的我很兴奋,对价格的波动很敏感,一直在盯盘,这期间还到一些所谓的“币圈”中看消息、看大家的议论,做了几笔短线交易(事后看都很不理智),最后以卖掉一些币提现、留下一些币期待长期价值为结局。 这一次经历体验让我领悟颇多,也见识到了自己人性中的弱点,所以我对自己的这一次行为进行一下复盘,总结之后以励再战。 * 一些不好的闪念 > 怎么回事,一买就跌,一卖就涨? > 这个币怎么样,别人怎么看? > 涨得这么凶,发财了! > 跌得这么狠,完蛋了! > 刚才发生了什么,我错过了什么? > 我的运气这么差,为什么别人的这么好? 我出现的闪念是因为我过于追求短期利益,并且对区块链货币的认识也不够深刻,所以我把注意力都放在的价格的波动上,及其短视地做出了一些错误的交易,导致自己的损失成为别人的短期收益,俗话说就是被人当韭菜割了。其实真正有用的东西不在盘内,而在盘外,不断去深化对区块链技术的理解,看到这一理财产品的长期价值,打一个比方,就像开门锁,注意力不能过分放在门锁上,而应该去尽力寻找钥匙。我又这些电光火石的念想,说明我还不是特别适合投资,还需要继续修炼。 * 认知差异 自己的认知不足,经常会听信圈子里不正确的逻辑,导致错误的判断,最后演变成错误的行为。所以提高认知是重中之重,就像一些欧洲人对区块链并不看好(说现在的区块链产品都是Bullshit),我觉得是欧洲的互联网已经非常落后了,所以他们的认知是有问题的,至少不应该自以为是,以为自己是世界的中心。 * 现行后知 行动很重要,比如我这一次误打误撞地接触到了区块链,虽然没有完完全全看明白这个东西,但是进行了小投入的行动,这个过程中也加深了对这个行业的认知,学习到了很多相关的知识。 * 看好区块链这个技术 我其实对炒币这种行为并不看好,我觉得货币不流通就没有意义,我看好的是实现比特币的区块链技术,是这种新的电子记账方法。并且我看到现在已经有很多好的产品出现,比如[sia.tech](http://sia.tech/)、[zeronet](https://zeronet.io/)。 |
| json metadata | {"tags":["cn","blockchain","bitcoin"],"links":["http://sia.tech/","https://zeronet.io/"],"app":"steemit/0.1","format":"markdown"} |
| parent author | |
| parent permlink | cn |
| permlink | 4dqlkh |
| title | 投资区块链初体验 |
| Transaction Info | Block #12731007/Trx f510ae1bccc42eaa4f749353296326aa973ec58a |
View Raw JSON Data
{
"block": 12731007,
"op": [
"comment",
{
"author": "heha37",
"body": "作死的人,欢迎来到区块链的世界。\n\n\n\n几个月之前,看了中本聪的比特币论文,然后就决定进入区块链世界闯一闯。试水的第一件事情是参加了一个币种的ICO,投入了一小部分资金进行尝试,之后该币在一些区块链交易所上市,价格一路疯涨,此时的我很兴奋,对价格的波动很敏感,一直在盯盘,这期间还到一些所谓的“币圈”中看消息、看大家的议论,做了几笔短线交易(事后看都很不理智),最后以卖掉一些币提现、留下一些币期待长期价值为结局。\n\n\n\n这一次经历体验让我领悟颇多,也见识到了自己人性中的弱点,所以我对自己的这一次行为进行一下复盘,总结之后以励再战。\n\n\n\n* 一些不好的闪念\n\n> 怎么回事,一买就跌,一卖就涨?\n\n> 这个币怎么样,别人怎么看?\n\n> 涨得这么凶,发财了!\n\n> 跌得这么狠,完蛋了!\n\n> 刚才发生了什么,我错过了什么?\n\n> 我的运气这么差,为什么别人的这么好?\n\n\n\n我出现的闪念是因为我过于追求短期利益,并且对区块链货币的认识也不够深刻,所以我把注意力都放在的价格的波动上,及其短视地做出了一些错误的交易,导致自己的损失成为别人的短期收益,俗话说就是被人当韭菜割了。其实真正有用的东西不在盘内,而在盘外,不断去深化对区块链技术的理解,看到这一理财产品的长期价值,打一个比方,就像开门锁,注意力不能过分放在门锁上,而应该去尽力寻找钥匙。我又这些电光火石的念想,说明我还不是特别适合投资,还需要继续修炼。\n\n* 认知差异\n\n自己的认知不足,经常会听信圈子里不正确的逻辑,导致错误的判断,最后演变成错误的行为。所以提高认知是重中之重,就像一些欧洲人对区块链并不看好(说现在的区块链产品都是Bullshit),我觉得是欧洲的互联网已经非常落后了,所以他们的认知是有问题的,至少不应该自以为是,以为自己是世界的中心。\n\n* 现行后知\n\n行动很重要,比如我这一次误打误撞地接触到了区块链,虽然没有完完全全看明白这个东西,但是进行了小投入的行动,这个过程中也加深了对这个行业的认知,学习到了很多相关的知识。\n\n* 看好区块链这个技术\n\n我其实对炒币这种行为并不看好,我觉得货币不流通就没有意义,我看好的是实现比特币的区块链技术,是这种新的电子记账方法。并且我看到现在已经有很多好的产品出现,比如[sia.tech](http://sia.tech/)、[zeronet](https://zeronet.io/)。",
"json_metadata": "{\"tags\":[\"cn\",\"blockchain\",\"bitcoin\"],\"links\":[\"http://sia.tech/\",\"https://zeronet.io/\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
"parent_author": "",
"parent_permlink": "cn",
"permlink": "4dqlkh",
"title": "投资区块链初体验"
}
],
"op_in_trx": 0,
"timestamp": "2017-06-11T15:51:45",
"trx_id": "f510ae1bccc42eaa4f749353296326aa973ec58a",
"trx_in_block": 0,
"virtual_op": 0
}Manabar
Voting Power100.00%
Downvote Power100.00%
Resource Credits100.00%
Reputation Progress78.03%
{
"voting_manabar": {
"current_mana": 9800,
"last_update_time": 1525770213
},
"downvote_manabar": {
"current_mana": 0,
"last_update_time": 1489797780
},
"rc_account": {
"account": "heha37",
"max_rc": "76000799024",
"max_rc_creation_adjustment": {
"amount": "2020748973",
"nai": "@@000000037",
"precision": 6
},
"rc_manabar": {
"current_mana": "76000799024",
"last_update_time": 1537887600
}
}
}Account Metadata
| POSTING JSON METADATA | |
| profile | {"name":"heha3737","profile_image":"https://pbs.twimg.com/profile_images/619890136025698308/Cc1CFtsh_400x400.jpg"} |
| JSON METADATA | |
| profile | {"name":"heha3737","profile_image":"https://pbs.twimg.com/profile_images/619890136025698308/Cc1CFtsh_400x400.jpg"} |
{
"posting_json_metadata": {
"profile": {
"name": "heha3737",
"profile_image": "https://pbs.twimg.com/profile_images/619890136025698308/Cc1CFtsh_400x400.jpg"
}
},
"json_metadata": {
"profile": {
"name": "heha3737",
"profile_image": "https://pbs.twimg.com/profile_images/619890136025698308/Cc1CFtsh_400x400.jpg"
}
}
}Auth Keys
Owner
Single Signature
Public Keys
STM59uk43E3VyJ2NuebNRh6As8SvxBDqEHj2pTD9xGYszVb6E83zn1/1
Active
Single Signature
Public Keys
STM5wgyLj55Ldcn1x7FqPmfeR1tJUzg6WEjCcpTE7n67m8HnrQzoE1/1
Posting
Single Signature
Public Keys
STM8QNX8cccFMra8pAQCPQSjKjZeDtjZXbbKTr8EJNsjvvKgEBfsu1/1
Memo
STM6uRcF83nvHha6WbpuUhPd2yDsAA6ubcNbzCbZnbPrhkDpMB7FG
{
"owner": {
"account_auths": [],
"key_auths": [
[
"STM59uk43E3VyJ2NuebNRh6As8SvxBDqEHj2pTD9xGYszVb6E83zn",
1
]
],
"weight_threshold": 1
},
"active": {
"account_auths": [],
"key_auths": [
[
"STM5wgyLj55Ldcn1x7FqPmfeR1tJUzg6WEjCcpTE7n67m8HnrQzoE",
1
]
],
"weight_threshold": 1
},
"posting": {
"account_auths": [],
"key_auths": [
[
"STM8QNX8cccFMra8pAQCPQSjKjZeDtjZXbbKTr8EJNsjvvKgEBfsu",
1
]
],
"weight_threshold": 1
},
"memo": "STM6uRcF83nvHha6WbpuUhPd2yDsAA6ubcNbzCbZnbPrhkDpMB7FG"
}Witness Votes
0 / 30
No active witness votes.
[]