Ecoer Logo
VOTING POWER100.00%
DOWNVOTE POWER100.00%
RESOURCE CREDITS100.00%
REPUTATION PROGRESS0.00%
Net Worth
0.037USD
STEEM
0.003STEEM
SBD
0.000SBD
Effective Power
5.007SP
├── Own SP
0.629SP
└── Incoming Deleg
+4.379SP

Detailed Balance

STEEM
balance
0.003STEEM
market_balance
0.000STEEM
savings_balance
0.000STEEM
reward_steem_balance
0.000STEEM
STEEM POWER
Own SP
0.629SP
Delegated Out
0.000SP
Delegation In
4.379SP
Effective Power
5.007SP
Reward SP (pending)
0.000SP
SBD
sbd_balance
0.000SBD
sbd_conversions
0.000SBD
sbd_market_balance
0.000SBD
savings_sbd_balance
0.000SBD
reward_sbd_balance
0.000SBD
{
  "balance": "0.003 STEEM",
  "savings_balance": "0.000 STEEM",
  "reward_steem_balance": "0.000 STEEM",
  "vesting_shares": "1022.368855 VESTS",
  "delegated_vesting_shares": "0.000000 VESTS",
  "received_vesting_shares": "7121.290951 VESTS",
  "sbd_balance": "0.000 SBD",
  "savings_sbd_balance": "0.000 SBD",
  "reward_sbd_balance": "0.000 SBD",
  "conversions": []
}

Account Info

namebitfamily
id761369
rank0
reputation245941185
created2018-02-13T07:11:06
recovery_accountsteem
proxyNone
post_count20
comment_count0
lifetime_vote_count0
witnesses_voted_for0
last_post2020-09-07T11:46:33
last_root_post2020-09-07T11:46:33
last_vote_time2018-02-16T13:29:18
proxied_vsf_votes0, 0, 0, 0
can_vote1
voting_power0
delayed_votes0
balance0.003 STEEM
savings_balance0.000 STEEM
sbd_balance0.000 SBD
savings_sbd_balance0.000 SBD
vesting_shares1022.368855 VESTS
delegated_vesting_shares0.000000 VESTS
received_vesting_shares7121.290951 VESTS
reward_vesting_balance0.000000 VESTS
vesting_balance0.000 STEEM
vesting_withdraw_rate0.000000 VESTS
next_vesting_withdrawal1969-12-31T23:59:59
withdrawn0
to_withdraw0
withdraw_routes0
savings_withdraw_requests0
last_account_recovery1970-01-01T00:00:00
reset_accountnull
last_owner_update2019-09-06T06:44:36
last_account_update2019-09-06T06:52:18
minedNo
sbd_seconds0
sbd_last_interest_payment1970-01-01T00:00:00
savings_sbd_last_interest_payment1970-01-01T00:00:00
{
  "id": 761369,
  "name": "bitfamily",
  "owner": {
    "weight_threshold": 1,
    "account_auths": [],
    "key_auths": [
      [
        "STM7mFPVmzq7S1kZDZwEm37itYjF5ncjVxjhsCfUvjtUU5VypCmom",
        1
      ]
    ]
  },
  "active": {
    "weight_threshold": 1,
    "account_auths": [],
    "key_auths": [
      [
        "STM72fxy7X9JSpTfs833Uk9nhphVnpBsNDAPZSfyew2edeigGJSe5",
        1
      ]
    ]
  },
  "posting": {
    "weight_threshold": 1,
    "account_auths": [
      [
        "dtube.app",
        1
      ]
    ],
    "key_auths": [
      [
        "STM7C3QrWydLJD4VEmCxLsYBfafRN53a1n5gW6xMXusWeyCpK9rHi",
        1
      ]
    ]
  },
  "memo_key": "STM7Krvdb4MubN8z56iGsXjbHUN45DjmLenWrtq17h7eBEwFR9cCv",
  "json_metadata": "{\"profile\":{\"dtube_pub\":\"xKknrg8fGpf83UKCqs9nBrTMwRFRq77tBuWEe6A2HEEt\"}}",
  "posting_json_metadata": "",
  "proxy": "",
  "last_owner_update": "2019-09-06T06:44:36",
  "last_account_update": "2019-09-06T06:52:18",
  "created": "2018-02-13T07:11:06",
  "mined": false,
  "recovery_account": "steem",
  "last_account_recovery": "1970-01-01T00:00:00",
  "reset_account": "null",
  "comment_count": 0,
  "lifetime_vote_count": 0,
  "post_count": 20,
  "can_vote": true,
  "voting_manabar": {
    "current_mana": "8143659806",
    "last_update_time": 1779055644
  },
  "downvote_manabar": {
    "current_mana": 2035914951,
    "last_update_time": 1779055644
  },
  "voting_power": 0,
  "balance": "0.003 STEEM",
  "savings_balance": "0.000 STEEM",
  "sbd_balance": "0.000 SBD",
  "sbd_seconds": "0",
  "sbd_seconds_last_update": "1970-01-01T00:00:00",
  "sbd_last_interest_payment": "1970-01-01T00:00:00",
  "savings_sbd_balance": "0.000 SBD",
  "savings_sbd_seconds": "0",
  "savings_sbd_seconds_last_update": "1970-01-01T00:00:00",
  "savings_sbd_last_interest_payment": "1970-01-01T00:00:00",
  "savings_withdraw_requests": 0,
  "reward_sbd_balance": "0.000 SBD",
  "reward_steem_balance": "0.000 STEEM",
  "reward_vesting_balance": "0.000000 VESTS",
  "reward_vesting_steem": "0.000 STEEM",
  "vesting_shares": "1022.368855 VESTS",
  "delegated_vesting_shares": "0.000000 VESTS",
  "received_vesting_shares": "7121.290951 VESTS",
  "vesting_withdraw_rate": "0.000000 VESTS",
  "next_vesting_withdrawal": "1969-12-31T23:59:59",
  "withdrawn": 0,
  "to_withdraw": 0,
  "withdraw_routes": 0,
  "curation_rewards": 0,
  "posting_rewards": 0,
  "proxied_vsf_votes": [
    0,
    0,
    0,
    0
  ],
  "witnesses_voted_for": 0,
  "last_post": "2020-09-07T11:46:33",
  "last_root_post": "2020-09-07T11:46:33",
  "last_vote_time": "2018-02-16T13:29:18",
  "post_bandwidth": 0,
  "pending_claimed_accounts": 0,
  "vesting_balance": "0.000 STEEM",
  "reputation": 245941185,
  "transfer_history": [],
  "market_history": [],
  "post_history": [],
  "vote_history": [],
  "other_history": [],
  "witness_votes": [],
  "tags_usage": [],
  "guest_bloggers": []
}

Withdraw Routes

IncomingOutgoing
Empty
Empty
{
  "incoming": [],
  "outgoing": []
}
From Date
To Date
steemdelegated 4.379 SP to @bitfamily
2026/05/17 22:07:24
delegatorsteem
delegateebitfamily
vesting shares7121.290951 VESTS
Transaction InfoBlock #106140903/Trx 56df428145486d9fce02bf66cce3b273506d70fa
View Raw JSON Data
{
  "trx_id": "56df428145486d9fce02bf66cce3b273506d70fa",
  "block": 106140903,
  "trx_in_block": 0,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2026-05-17T22:07:24",
  "op": [
    "delegate_vesting_shares",
    {
      "delegator": "steem",
      "delegatee": "bitfamily",
      "vesting_shares": "7121.290951 VESTS"
    }
  ]
}
steemdelegated 2.711 SP to @bitfamily
2026/05/11 19:36:36
delegatorsteem
delegateebitfamily
vesting shares4409.080546 VESTS
Transaction InfoBlock #105965863/Trx 6a6ece486380f59354bd6adaa95aaac6ef7d3861
View Raw JSON Data
{
  "trx_id": "6a6ece486380f59354bd6adaa95aaac6ef7d3861",
  "block": 105965863,
  "trx_in_block": 3,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2026-05-11T19:36:36",
  "op": [
    "delegate_vesting_shares",
    {
      "delegator": "steem",
      "delegatee": "bitfamily",
      "vesting_shares": "4409.080546 VESTS"
    }
  ]
}
steemdelegated 4.386 SP to @bitfamily
2026/04/25 21:31:36
delegatorsteem
delegateebitfamily
vesting shares7133.806707 VESTS
Transaction InfoBlock #105508616/Trx a811cc4c7639ac896919f288ef826280f5922dfb
View Raw JSON Data
{
  "trx_id": "a811cc4c7639ac896919f288ef826280f5922dfb",
  "block": 105508616,
  "trx_in_block": 0,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2026-04-25T21:31:36",
  "op": [
    "delegate_vesting_shares",
    {
      "delegator": "steem",
      "delegatee": "bitfamily",
      "vesting_shares": "7133.806707 VESTS"
    }
  ]
}
steemdelegated 2.737 SP to @bitfamily
2026/01/23 02:12:12
delegatorsteem
delegateebitfamily
vesting shares4450.627365 VESTS
Transaction InfoBlock #102845110/Trx 01699c16a26ec43f366fa91f06888228cc0d6291
View Raw JSON Data
{
  "trx_id": "01699c16a26ec43f366fa91f06888228cc0d6291",
  "block": 102845110,
  "trx_in_block": 0,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2026-01-23T02:12:12",
  "op": [
    "delegate_vesting_shares",
    {
      "delegator": "steem",
      "delegatee": "bitfamily",
      "vesting_shares": "4450.627365 VESTS"
    }
  ]
}
steemdelegated 2.837 SP to @bitfamily
2024/12/16 21:31:54
delegatorsteem
delegateebitfamily
vesting shares4614.846562 VESTS
Transaction InfoBlock #91291524/Trx cfc16c3d06c08b55d94cdf1216974dbff76d2307
View Raw JSON Data
{
  "trx_id": "cfc16c3d06c08b55d94cdf1216974dbff76d2307",
  "block": 91291524,
  "trx_in_block": 9,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2024-12-16T21:31:54",
  "op": [
    "delegate_vesting_shares",
    {
      "delegator": "steem",
      "delegatee": "bitfamily",
      "vesting_shares": "4614.846562 VESTS"
    }
  ]
}
steemdelegated 2.941 SP to @bitfamily
2023/11/13 13:17:03
delegatorsteem
delegateebitfamily
vesting shares4783.980094 VESTS
Transaction InfoBlock #79845789/Trx b7587557518cfa4781e8b60d3f45ccc21952920c
View Raw JSON Data
{
  "trx_id": "b7587557518cfa4781e8b60d3f45ccc21952920c",
  "block": 79845789,
  "trx_in_block": 6,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2023-11-13T13:17:03",
  "op": [
    "delegate_vesting_shares",
    {
      "delegator": "steem",
      "delegatee": "bitfamily",
      "vesting_shares": "4783.980094 VESTS"
    }
  ]
}
steemdelegated 2.941 SP to @bitfamily
2023/11/13 13:17:03
delegatorsteem
delegateebitfamily
vesting shares4783.980094 VESTS
Transaction InfoBlock #79845789/Trx b7587557518cfa4781e8b60d3f45ccc21952920c
View Raw JSON Data
{
  "trx_id": "b7587557518cfa4781e8b60d3f45ccc21952920c",
  "block": 79845789,
  "trx_in_block": 6,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2023-11-13T13:17:03",
  "op": [
    "delegate_vesting_shares",
    {
      "delegator": "steem",
      "delegatee": "bitfamily",
      "vesting_shares": "4783.980094 VESTS"
    }
  ]
}
steemdelegated 4.748 SP to @bitfamily
2023/09/21 19:21:45
delegatorsteem
delegateebitfamily
vesting shares7721.258880 VESTS
Transaction InfoBlock #78344881/Trx 773c4bee46fe8cbba1bec6d44ab9ef13d1b99c54
View Raw JSON Data
{
  "trx_id": "773c4bee46fe8cbba1bec6d44ab9ef13d1b99c54",
  "block": 78344881,
  "trx_in_block": 4,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2023-09-21T19:21:45",
  "op": [
    "delegate_vesting_shares",
    {
      "delegator": "steem",
      "delegatee": "bitfamily",
      "vesting_shares": "7721.258880 VESTS"
    }
  ]
}
steemdelegated 4.884 SP to @bitfamily
2022/11/03 09:25:48
delegatorsteem
delegateebitfamily
vesting shares7942.940318 VESTS
Transaction InfoBlock #69110545/Trx 4edaf0af928c2d9f55be59bd18a154877ab62ff0
View Raw JSON Data
{
  "trx_id": "4edaf0af928c2d9f55be59bd18a154877ab62ff0",
  "block": 69110545,
  "trx_in_block": 5,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2022-11-03T09:25:48",
  "op": [
    "delegate_vesting_shares",
    {
      "delegator": "steem",
      "delegatee": "bitfamily",
      "vesting_shares": "7942.940318 VESTS"
    }
  ]
}
ph-supportsent 0.001 STEEM to @bitfamily
2022/08/16 13:15:54
fromph-support
tobitfamily
amount0.001 STEEM
memo
Transaction InfoBlock #66854045/Trx 879c294c70ff3603cc11d695497a453fe9eda93e
View Raw JSON Data
{
  "trx_id": "879c294c70ff3603cc11d695497a453fe9eda93e",
  "block": 66854045,
  "trx_in_block": 0,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2022-08-16T13:15:54",
  "op": [
    "transfer",
    {
      "from": "ph-support",
      "to": "bitfamily",
      "amount": "0.001 STEEM",
      "memo": ""
    }
  ]
}
steemdelegated 5.023 SP to @bitfamily
2022/01/10 14:22:27
delegatorsteem
delegateebitfamily
vesting shares8168.912065 VESTS
Transaction InfoBlock #60612964/Trx 5fa97197db985e6c2c7e1d6e2ab0c1ee5a768a9d
View Raw JSON Data
{
  "trx_id": "5fa97197db985e6c2c7e1d6e2ab0c1ee5a768a9d",
  "block": 60612964,
  "trx_in_block": 14,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2022-01-10T14:22:27",
  "op": [
    "delegate_vesting_shares",
    {
      "delegator": "steem",
      "delegatee": "bitfamily",
      "vesting_shares": "8168.912065 VESTS"
    }
  ]
}
steemdelegated 5.136 SP to @bitfamily
2021/06/08 04:00:18
delegatorsteem
delegateebitfamily
vesting shares8352.766701 VESTS
Transaction InfoBlock #54440011/Trx dae481bda2b828ac11c2c433ef16e41c03696eac
View Raw JSON Data
{
  "trx_id": "dae481bda2b828ac11c2c433ef16e41c03696eac",
  "block": 54440011,
  "trx_in_block": 0,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2021-06-08T04:00:18",
  "op": [
    "delegate_vesting_shares",
    {
      "delegator": "steem",
      "delegatee": "bitfamily",
      "vesting_shares": "8352.766701 VESTS"
    }
  ]
}
steemdelegated 5.251 SP to @bitfamily
2020/12/06 02:52:00
delegatorsteem
delegateebitfamily
vesting shares8540.348711 VESTS
Transaction InfoBlock #49204531/Trx af12691be34aeca89d66596bbd592ae455ba7a0b
View Raw JSON Data
{
  "trx_id": "af12691be34aeca89d66596bbd592ae455ba7a0b",
  "block": 49204531,
  "trx_in_block": 5,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2020-12-06T02:52:00",
  "op": [
    "delegate_vesting_shares",
    {
      "delegator": "steem",
      "delegatee": "bitfamily",
      "vesting_shares": "8540.348711 VESTS"
    }
  ]
}
steemdelegated 17.326 SP to @bitfamily
2020/12/05 10:48:57
delegatorsteem
delegateebitfamily
vesting shares28179.014598 VESTS
Transaction InfoBlock #49185635/Trx 223d5987bd363a51342c58f6c383b5180f027af4
View Raw JSON Data
{
  "trx_id": "223d5987bd363a51342c58f6c383b5180f027af4",
  "block": 49185635,
  "trx_in_block": 5,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2020-12-05T10:48:57",
  "op": [
    "delegate_vesting_shares",
    {
      "delegator": "steem",
      "delegatee": "bitfamily",
      "vesting_shares": "28179.014598 VESTS"
    }
  ]
}
steemdelegated 5.270 SP to @bitfamily
2020/11/07 23:36:36
delegatorsteem
delegateebitfamily
vesting shares8571.483684 VESTS
Transaction InfoBlock #48408490/Trx 517c83e54ecb6a9f1a98ad36e148dc5698e101cc
View Raw JSON Data
{
  "trx_id": "517c83e54ecb6a9f1a98ad36e148dc5698e101cc",
  "block": 48408490,
  "trx_in_block": 1,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2020-11-07T23:36:36",
  "op": [
    "delegate_vesting_shares",
    {
      "delegator": "steem",
      "delegatee": "bitfamily",
      "vesting_shares": "8571.483684 VESTS"
    }
  ]
}
steemdelegated 17.391 SP to @bitfamily
2020/11/04 00:26:45
delegatorsteem
delegateebitfamily
vesting shares28283.823844 VESTS
Transaction InfoBlock #48296428/Trx 255052a4cc7fac40c6d741392aaacdf5b123dd97
View Raw JSON Data
{
  "trx_id": "255052a4cc7fac40c6d741392aaacdf5b123dd97",
  "block": 48296428,
  "trx_in_block": 1,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2020-11-04T00:26:45",
  "op": [
    "delegate_vesting_shares",
    {
      "delegator": "steem",
      "delegatee": "bitfamily",
      "vesting_shares": "28283.823844 VESTS"
    }
  ]
}
steemdelegated 17.509 SP to @bitfamily
2020/09/07 19:43:48
delegatorsteem
delegateebitfamily
vesting shares28476.350793 VESTS
Transaction InfoBlock #46672040/Trx 108f482c9ce5fd66911a9f8482e0e3ccf1e3d98d
View Raw JSON Data
{
  "trx_id": "108f482c9ce5fd66911a9f8482e0e3ccf1e3d98d",
  "block": 46672040,
  "trx_in_block": 0,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2020-09-07T19:43:48",
  "op": [
    "delegate_vesting_shares",
    {
      "delegator": "steem",
      "delegatee": "bitfamily",
      "vesting_shares": "28476.350793 VESTS"
    }
  ]
}
future.witnesssent 0.001 STEEM to @bitfamily- "⚠️ Please be careful with any website or discord link that you receive from other users, those are mostly phishing attempts."
2020/09/07 11:49:15
fromfuture.witness
tobitfamily
amount0.001 STEEM
memo⚠️ Please be careful with any website or discord link that you receive from other users, those are mostly phishing attempts.
Transaction InfoBlock #46662665/Trx 5c78af48172801b91669d74a6709908a10904c3b
View Raw JSON Data
{
  "trx_id": "5c78af48172801b91669d74a6709908a10904c3b",
  "block": 46662665,
  "trx_in_block": 0,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2020-09-07T11:49:15",
  "op": [
    "transfer",
    {
      "from": "future.witness",
      "to": "bitfamily",
      "amount": "0.001 STEEM",
      "memo": "⚠️ Please be careful with any website or discord link that you receive from other users, those are mostly phishing attempts."
    }
  ]
}
executive-boardsent 0.001 STEEM to @bitfamily- "❗ Hello bitfamily, great that you are using the STEEM blockchain. The Executive Board hereby invites you to https://discord.gg/KyBbmhh where you will get some insider infos on how you will earn the mo..."
2020/09/07 11:48:03
fromexecutive-board
tobitfamily
amount0.001 STEEM
memo❗ Hello bitfamily, great that you are using the STEEM blockchain. The Executive Board hereby invites you to https://discord.gg/KyBbmhh where you will get some insider infos on how you will earn the most coins. It's easy, just follow the instructions. Warm regards, The Executive Board.
Transaction InfoBlock #46662641/Trx 1a119f4978bd476c9a7556b478a6ed9d1d0e6e9e
View Raw JSON Data
{
  "trx_id": "1a119f4978bd476c9a7556b478a6ed9d1d0e6e9e",
  "block": 46662641,
  "trx_in_block": 3,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2020-09-07T11:48:03",
  "op": [
    "transfer",
    {
      "from": "executive-board",
      "to": "bitfamily",
      "amount": "0.001 STEEM",
      "memo": "❗ Hello bitfamily, great that you are using the STEEM blockchain. The Executive Board hereby invites you to https://discord.gg/KyBbmhh where you will get some insider infos on how you will earn the most coins. It's easy, just follow the instructions. Warm regards, The Executive Board."
    }
  ]
}
2020/09/07 11:46:33
parent author
parent permlinkbuy
authorbitfamily
permlinkbuy-wechat-account-or-usd45-buy-a-verified-wechat-account-with-escrow-transaction-100-works
titlebuy wechat account|$45 = buy a verified wechat account with escrow transaction. 100% works.
bodyI have some Chinese friends, As they said. It is really tough to create a Wechat account now. Especially in 2020. But, I can ask you some questions. I think you will get best solutions of signing up a Wechat account. #1. can you find a Chinese restaurant near you? You can ask their owners to do this job for you. Of course, you need buy some Chinese food first.when you eat your food, ask them to fix this issue for you.Sounds funny. But it could works. In fact. 99% Chinese restaurant owners have the Wechat. Because they don’t want to pay the tax for the U.S. and EU government. If you use the Wechat pay the bills, then, the restaurant owner can get money in his another bank card. This is the Chinese secret among Chinese in U.S.we all know that. #2. Can you find some freelancer marketplace? I know the peopleperhour and kiwikiwifly,etc. why not search Wechat in these two websites. It will save you lots of time. Many freelancers can do this job I think. And I think they are happy to help you address this issue. #3. Do you know Chinese language, do you know a website taobao, it is so famous in China, not understand of Chinese ? Can you use the google translate extension. #4. can you use the PayPal function? 14 days delay transaction , find a Chinese and buy it by PayPal . #5. can you post a job on a job seeking website? Just try to hire someone, and leave your contacts. #6. Submit a ticket to Wechat team, but it will take around 4 days to get their response. And I never find they have service phone. #7. There are some youtube video tutorials, but only a few of tutorial work. #8 buy a wechat account from some marketplace. But be sure that you must use the escrow transaction service. ok, I think you know what I said. You can try these method one by one. Now, why not give me a upvote?
json metadata{"tags":["buy","wechat","account"],"app":"steemit/0.2","format":"markdown"}
Transaction InfoBlock #46662611/Trx 35636e4e499571f7d4505d64c6879f7bf1224167
View Raw JSON Data
{
  "trx_id": "35636e4e499571f7d4505d64c6879f7bf1224167",
  "block": 46662611,
  "trx_in_block": 5,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2020-09-07T11:46:33",
  "op": [
    "comment",
    {
      "parent_author": "",
      "parent_permlink": "buy",
      "author": "bitfamily",
      "permlink": "buy-wechat-account-or-usd45-buy-a-verified-wechat-account-with-escrow-transaction-100-works",
      "title": "buy wechat account|$45 = buy a verified wechat account with escrow transaction. 100% works.",
      "body": "I have some Chinese friends, As they said. It is really tough to create a Wechat account now. Especially in 2020. But, I can ask you some questions. I think you will get best solutions of signing up a Wechat account.\n\n#1. can you find a Chinese restaurant near you? You can ask their owners to do this job for you. Of course, you need buy some Chinese food first.when you eat your food, ask them to fix this issue for you.Sounds funny. But it could works. In fact. 99% Chinese restaurant owners have the Wechat. Because they don’t want to pay the tax for the U.S. and EU government. If you use the Wechat pay the bills, then, the restaurant owner can get money in his another bank card. This is the Chinese secret among Chinese in U.S.we all know that.\n\n#2. Can you find some freelancer marketplace? I know the peopleperhour and kiwikiwifly,etc. why not search Wechat in these two websites. It will save you lots of time. Many freelancers can do this job I think. And I think they are happy to help you address this issue.\n\n#3. Do you know Chinese language, do you know a website taobao, it is so famous in China, not understand of Chinese ? Can you use the google translate extension.\n\n#4. can you use the PayPal function? 14 days delay transaction , find a Chinese and buy it by PayPal .\n\n#5. can you post a job on a job seeking website? Just try to hire someone, and leave your contacts.\n\n#6. Submit a ticket to Wechat team, but it will take around 4 days to get their response. And I never find they have service phone.\n\n#7. There are some youtube video tutorials, but only a few of tutorial work.\n\n#8 buy a wechat account from some marketplace. But be sure that you must use the escrow  transaction service.\n\nok, I think you know what I said. You can try these method one by one. Now, why not give me a upvote?",
      "json_metadata": "{\"tags\":[\"buy\",\"wechat\",\"account\"],\"app\":\"steemit/0.2\",\"format\":\"markdown\"}"
    }
  ]
}
steemdelegated 5.376 SP to @bitfamily
2020/05/09 03:47:12
delegatorsteem
delegateebitfamily
vesting shares8743.677394 VESTS
Transaction InfoBlock #43214747/Trx 9f1dcc7c0571792e6f2968b8712757e251cd4355
View Raw JSON Data
{
  "trx_id": "9f1dcc7c0571792e6f2968b8712757e251cd4355",
  "block": 43214747,
  "trx_in_block": 3,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2020-05-09T03:47:12",
  "op": [
    "delegate_vesting_shares",
    {
      "delegator": "steem",
      "delegatee": "bitfamily",
      "vesting_shares": "8743.677394 VESTS"
    }
  ]
}
steemdelegated 1.201 SP to @bitfamily
2020/05/08 07:05:57
delegatorsteem
delegateebitfamily
vesting shares1953.311140 VESTS
Transaction InfoBlock #43190504/Trx aa4e9c46fc16b62edeb8f58b8852ed16fd2ea404
View Raw JSON Data
{
  "trx_id": "aa4e9c46fc16b62edeb8f58b8852ed16fd2ea404",
  "block": 43190504,
  "trx_in_block": 3,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2020-05-08T07:05:57",
  "op": [
    "delegate_vesting_shares",
    {
      "delegator": "steem",
      "delegatee": "bitfamily",
      "vesting_shares": "1953.311140 VESTS"
    }
  ]
}
steemdelegated 5.388 SP to @bitfamily
2020/04/03 13:00:33
delegatorsteem
delegateebitfamily
vesting shares8762.966795 VESTS
Transaction InfoBlock #42214855/Trx d4eac8623fbc29f6064b0c40eb31dd97d3045278
View Raw JSON Data
{
  "trx_id": "d4eac8623fbc29f6064b0c40eb31dd97d3045278",
  "block": 42214855,
  "trx_in_block": 36,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2020-04-03T13:00:33",
  "op": [
    "delegate_vesting_shares",
    {
      "delegator": "steem",
      "delegatee": "bitfamily",
      "vesting_shares": "8762.966795 VESTS"
    }
  ]
}
2020/02/13 08:38:54
parent authorbitfamily
parent permlinkhd
authorsteemitboard
permlinksteemitboard-notify-bitfamily-20200213t083853000z
title
bodyCongratulations @bitfamily! You received a personal award! <table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@bitfamily/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/@bitfamily) and compare to others on the [Steem Ranking](https://steemitboard.com/ranking/index.php?name=bitfamily)_</sub> ###### [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"]}
Transaction InfoBlock #40778593/Trx 7b3a0045c4b02647c64081ed358d4edc0083a461
View Raw JSON Data
{
  "trx_id": "7b3a0045c4b02647c64081ed358d4edc0083a461",
  "block": 40778593,
  "trx_in_block": 6,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2020-02-13T08:38:54",
  "op": [
    "comment",
    {
      "parent_author": "bitfamily",
      "parent_permlink": "hd",
      "author": "steemitboard",
      "permlink": "steemitboard-notify-bitfamily-20200213t083853000z",
      "title": "",
      "body": "Congratulations @bitfamily! You received a personal award!\n\n<table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@bitfamily/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/@bitfamily) and compare to others on the [Steem Ranking](https://steemitboard.com/ranking/index.php?name=bitfamily)_</sub>\n\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\"]}"
    }
  ]
}
samotraderupvoted (0.10%) @bitfamily / hd
2020/01/03 11:11:36
votersamotrader
authorbitfamily
permlinkhd
weight10 (0.10%)
Transaction InfoBlock #39603230/Trx 27899aa11e74322b783a9f78d74df9dce81cb479
View Raw JSON Data
{
  "trx_id": "27899aa11e74322b783a9f78d74df9dce81cb479",
  "block": 39603230,
  "trx_in_block": 12,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2020-01-03T11:11:36",
  "op": [
    "vote",
    {
      "voter": "samotrader",
      "author": "bitfamily",
      "permlink": "hd",
      "weight": 10
    }
  ]
}
laissez-faireupvoted (100.00%) @bitfamily / hd
2020/01/03 11:11:33
voterlaissez-faire
authorbitfamily
permlinkhd
weight10000 (100.00%)
Transaction InfoBlock #39603229/Trx 6d5258346c2e5825d7a635346ae3f09c4217da8a
View Raw JSON Data
{
  "trx_id": "6d5258346c2e5825d7a635346ae3f09c4217da8a",
  "block": 39603229,
  "trx_in_block": 23,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2020-01-03T11:11:33",
  "op": [
    "vote",
    {
      "voter": "laissez-faire",
      "author": "bitfamily",
      "permlink": "hd",
      "weight": 10000
    }
  ]
}
anomalyupvoted (1.00%) @bitfamily / hd
2020/01/03 11:11:30
voteranomaly
authorbitfamily
permlinkhd
weight100 (1.00%)
Transaction InfoBlock #39603228/Trx 45a1c1651436ee377530715e9480f48dc52c0102
View Raw JSON Data
{
  "trx_id": "45a1c1651436ee377530715e9480f48dc52c0102",
  "block": 39603228,
  "trx_in_block": 6,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2020-01-03T11:11:30",
  "op": [
    "vote",
    {
      "voter": "anomaly",
      "author": "bitfamily",
      "permlink": "hd",
      "weight": 100
    }
  ]
}
bitfamilypublished a new post: hd
2020/01/03 11:10:36
parent author
parent permlinkbitcoin
authorbitfamily
permlinkhd
title比特币新手图文教程:如何用比特币HD钱包,批量产生多个比特币地址和私钥?
body如何用比特币HD钱包,批量产生多个比特币地址和私钥? HD钱包可以快速方便的生成多个比特币地址,并且不需要备份对应的私钥。你只需要备份一个父私钥就可以把所有的私钥和地址全部恢复。 HD钱包可以随机生成一对父私钥和父公钥,只需要一个父私钥可以推导出海量的比特币私钥/公钥对。备份时,只要备份父私钥即可。无需备份多个比特币私钥。 **比特币hd钱包解决了下面几个问题**: * 每次生成一个新地址都需要备份一遍私钥,操作麻烦 * 生成了一堆私钥,管理起来很不方便 **HD钱包的优缺点** 优点 * 您只需要备份一个父私钥(种子密钥),不需要备份每个比特币地址的私钥 * 可以快速生成很多地址 * 有效保护财务隐私 缺点 * 父私钥丢失或被盗,父私钥下生成的所有地址都丢失或被盗 如果您在日常生活中,需要用到大量的比特币地址,您可以使用HD钱包的功能。下面详细图文讲解比特币菜鸟钱包的HD地址功能。 首先,我们去官方首页https://newbiewallet.ga/ ,点击“创建”,然后点击“比特币HD地址”,如图所示: ![image](https://i.ibb.co/8Mh9Ndc/2020-01-03-6-05-29.png) 点击左下角的绿色“确定”按钮,即可随机生成一对父私钥和父公钥,如图所示: ![image](https://i.ibb.co/7J9nJCw/2020-01-03-6-05-59.png) ⚠️**请注意:请务必备份父私钥到一个安全的地方,如果您的父私钥丢失或被盗,该父私钥下生成的所有比特币地址都会丢失或被盗。** 生成父私钥后,您有2个方法,通过该父私钥,可以批量产生多个比特币地址和私钥对。 方法一:点击父私钥最右边的“黑色右方向箭头”,进入批量产生多个比特币地址页面,如图所示: ![image](https://i.ibb.co/rc7X0DJ/2020-01-03-6-06-50.png) 方法二:点击比特币钱包最上面的“验证”,按钮,把父私钥粘贴到输入框内,然后点击绿色的确定按钮。如图所示: ![image](https://i.ibb.co/JHXLzNZ/2020-01-03-6-08-09.png) 我们以下面的父私钥进行演示: xprv9s21ZrQH143K44aghmzDbNQqjUfFBokbKsYYjuGeUXyj2EjfvaEiJP3L3KVhZB5G6AWbyt8CL5qBP5PhHQgKt4vQxsjsympvqU1BKDYQEws 在推导的标签最右边有一个数目(最小值) 和数目(最大值),如果您想生成5个比特币地址,您就输入数字5。如果您想生成200个比特币地址,您就输入数据200,默认的最大值为1, 然后点击最下面的绿色确定按钮。 如图所示: ![image](https://i.ibb.co/0sw2MDD/2020-01-03-6-16-27.png) 在这里,您可以看到多个比特币地址和对应的私钥。您无需备份这些比特币地址和对应的私钥,您只需要备份父私钥即可,只要是支持HD功能的比特币钱包,均可以推导出这些比特币地址和对应的私钥。 在日常的使用过程中,您可以把其中任意一个比特币地址发布到网络,用来收发比特币,而不用担心泄漏您的隐私。
json metadata{"tags":["bitcoin"],"image":["https://i.ibb.co/8Mh9Ndc/2020-01-03-6-05-29.png","https://i.ibb.co/7J9nJCw/2020-01-03-6-05-59.png","https://i.ibb.co/rc7X0DJ/2020-01-03-6-06-50.png","https://i.ibb.co/JHXLzNZ/2020-01-03-6-08-09.png","https://i.ibb.co/0sw2MDD/2020-01-03-6-16-27.png"],"links":["https://newbiewallet.ga/"],"app":"steemit/0.1","format":"markdown"}
Transaction InfoBlock #39603210/Trx 691b1dc6588682032fca868ebb3feecf276dd664
View Raw JSON Data
{
  "trx_id": "691b1dc6588682032fca868ebb3feecf276dd664",
  "block": 39603210,
  "trx_in_block": 5,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2020-01-03T11:10:36",
  "op": [
    "comment",
    {
      "parent_author": "",
      "parent_permlink": "bitcoin",
      "author": "bitfamily",
      "permlink": "hd",
      "title": "比特币新手图文教程:如何用比特币HD钱包,批量产生多个比特币地址和私钥?",
      "body": "如何用比特币HD钱包,批量产生多个比特币地址和私钥?\n\nHD钱包可以快速方便的生成多个比特币地址,并且不需要备份对应的私钥。你只需要备份一个父私钥就可以把所有的私钥和地址全部恢复。\n\nHD钱包可以随机生成一对父私钥和父公钥,只需要一个父私钥可以推导出海量的比特币私钥/公钥对。备份时,只要备份父私钥即可。无需备份多个比特币私钥。\n\n**比特币hd钱包解决了下面几个问题**:\n\n* 每次生成一个新地址都需要备份一遍私钥,操作麻烦\n\n* 生成了一堆私钥,管理起来很不方便\n\n\n **HD钱包的优缺点**\n\n优点\n\n* 您只需要备份一个父私钥(种子密钥),不需要备份每个比特币地址的私钥\n\n* 可以快速生成很多地址\n\n* 有效保护财务隐私\n\n缺点\n\n* 父私钥丢失或被盗,父私钥下生成的所有地址都丢失或被盗\n\n如果您在日常生活中,需要用到大量的比特币地址,您可以使用HD钱包的功能。下面详细图文讲解比特币菜鸟钱包的HD地址功能。\n\n首先,我们去官方首页https://newbiewallet.ga/  ,点击“创建”,然后点击“比特币HD地址”,如图所示:\n![image](https://i.ibb.co/8Mh9Ndc/2020-01-03-6-05-29.png)\n\n点击左下角的绿色“确定”按钮,即可随机生成一对父私钥和父公钥,如图所示:\n\n![image](https://i.ibb.co/7J9nJCw/2020-01-03-6-05-59.png)\n\n⚠️**请注意:请务必备份父私钥到一个安全的地方,如果您的父私钥丢失或被盗,该父私钥下生成的所有比特币地址都会丢失或被盗。**\n\n生成父私钥后,您有2个方法,通过该父私钥,可以批量产生多个比特币地址和私钥对。\n\n方法一:点击父私钥最右边的“黑色右方向箭头”,进入批量产生多个比特币地址页面,如图所示:\n\n![image](https://i.ibb.co/rc7X0DJ/2020-01-03-6-06-50.png)\n\n方法二:点击比特币钱包最上面的“验证”,按钮,把父私钥粘贴到输入框内,然后点击绿色的确定按钮。如图所示:\n\n![image](https://i.ibb.co/JHXLzNZ/2020-01-03-6-08-09.png)\n\n我们以下面的父私钥进行演示:    \nxprv9s21ZrQH143K44aghmzDbNQqjUfFBokbKsYYjuGeUXyj2EjfvaEiJP3L3KVhZB5G6AWbyt8CL5qBP5PhHQgKt4vQxsjsympvqU1BKDYQEws\n\n在推导的标签最右边有一个数目(最小值) 和数目(最大值),如果您想生成5个比特币地址,您就输入数字5。如果您想生成200个比特币地址,您就输入数据200,默认的最大值为1, 然后点击最下面的绿色确定按钮。\n如图所示:\n\n![image](https://i.ibb.co/0sw2MDD/2020-01-03-6-16-27.png)\n\n在这里,您可以看到多个比特币地址和对应的私钥。您无需备份这些比特币地址和对应的私钥,您只需要备份父私钥即可,只要是支持HD功能的比特币钱包,均可以推导出这些比特币地址和对应的私钥。\n在日常的使用过程中,您可以把其中任意一个比特币地址发布到网络,用来收发比特币,而不用担心泄漏您的隐私。",
      "json_metadata": "{\"tags\":[\"bitcoin\"],\"image\":[\"https://i.ibb.co/8Mh9Ndc/2020-01-03-6-05-29.png\",\"https://i.ibb.co/7J9nJCw/2020-01-03-6-05-59.png\",\"https://i.ibb.co/rc7X0DJ/2020-01-03-6-06-50.png\",\"https://i.ibb.co/JHXLzNZ/2020-01-03-6-08-09.png\",\"https://i.ibb.co/0sw2MDD/2020-01-03-6-16-27.png\"],\"links\":[\"https://newbiewallet.ga/\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
    }
  ]
}
greateyeupvoted (5.00%) @bitfamily / 5l9trv
2019/12/30 04:43:39
votergreateye
authorbitfamily
permlink5l9trv
weight500 (5.00%)
Transaction InfoBlock #39480492/Trx 0577ef6916e4c53c7eb770e3afc88df2ae88b821
View Raw JSON Data
{
  "trx_id": "0577ef6916e4c53c7eb770e3afc88df2ae88b821",
  "block": 39480492,
  "trx_in_block": 17,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-12-30T04:43:39",
  "op": [
    "vote",
    {
      "voter": "greateye",
      "author": "bitfamily",
      "permlink": "5l9trv",
      "weight": 500
    }
  ]
}
bitfamilypublished a new post: 5l9trv
2019/12/30 04:42:30
parent author
parent permlinkbitcoin
authorbitfamily
permlink5l9trv
title“马化腾”隔空喊话“马云”:支付宝不安全!我现在用比特币闪电网络给同事发红包。
body最近2020腾讯公司年会期间,财经记者问马化腾关于比特币和区块链的发展问题,马化腾透露了一些腾讯最近的动作。并且隔空喊话马云:支付宝不安全!我现在尝试用比特币闪电网络给同事发红包。 当财经记者追问马化腾:你是如何用比特币闪电网络给同事发红包?马化腾没有给出具体答案。根据内部人士透露,腾讯目前已经布局了区块链行业,内测了一款“比特币红包” 的软件,准备布局海外市场。记者按图索骥,网络上已经有少量内部的教程被流出。小编摘要部分,供大家内测。 第1步:打开比特币红包官方网站。网址是 https://bitcoingift.gq/ 举个例子:我们以一个同事小张的身份给另外一个同事发送一个比特币红包,金额为103satoshi。在首页的右边,如图所示,按照格式,填入下面的信息,然后点击绿色的确定按钮。名称和留言为可以不填写,红包金额必须大于100sats,小于100,0001 sats 。按照2019年12月2号的汇率计算,100sats相当于人民币0.0514元,100,0001 sats相当于人民币513.57元。 ![image](https://i.ibb.co/PTsGpzS/2019-12-01-4-38-07.png) 第2步:点击绿色的确定按钮后,会自动生成一个待充值的比特币闪电网络红包二维码,如图所示: ![image](https://i.ibb.co/6WcdFmX/2019-12-01-4-41-28.png) 您本人可以通过您的比特币闪电网络钱包扫描这个二维码进行充值,推荐开源的blue wallet和wallet of satoshi这2个钱包,有中文版本。 第3步:扫描充值后,页面会自动更新成如下页面: ![image](https://i.ibb.co/xD4ngBd/2019-12-01-5-37-41.png) 第4步:您可以把这个充值成功的比特币红包二维码直接发给你的同事,也可以复制“查看你的比特币红包”链接。把这个网址链接发给你的同事。同事打开这个连接后,会出现下面的页面: ![image](https://i.ibb.co/xqHSry1/2019-12-01-5-21-03.png) 第5步:你的同事可以通过2种方法领取这个比特币红包,方法1就是可以直接用自己的比特币闪电网络钱包扫描这个二维码,2秒钟即可到账,如图所示: ![image](https://i.ibb.co/prZcVr6/2019-12-01-5-30-02.png) 方法2就是用自己的比特币闪电网络钱包创建一个等额的收款地址,粘贴到绿色确定按钮上面的输入框内。如这个例子所示,必须创建一个103satoshi金额的比特闪电网络收款地址,如果您设置的金额不一致,会出现下面的页面: ![image](https://i.ibb.co/zfWTb29/2019-12-01-5-29-39.png) 第6步:红包被领取后,该页面自动会出现“该比特币红包已经被领取”的提示: ![image](https://i.ibb.co/dk947g0/2019-12-01-5-35-49.png)
json metadata{"tags":["bitcoin"],"image":["https://i.ibb.co/PTsGpzS/2019-12-01-4-38-07.png","https://i.ibb.co/6WcdFmX/2019-12-01-4-41-28.png","https://i.ibb.co/xD4ngBd/2019-12-01-5-37-41.png","https://i.ibb.co/xqHSry1/2019-12-01-5-21-03.png","https://i.ibb.co/prZcVr6/2019-12-01-5-30-02.png","https://i.ibb.co/zfWTb29/2019-12-01-5-29-39.png","https://i.ibb.co/dk947g0/2019-12-01-5-35-49.png"],"links":["https://bitcoingift.gq/"],"app":"steemit/0.1","format":"markdown"}
Transaction InfoBlock #39480469/Trx d546a7665880ae14d727b65294921644117b2879
View Raw JSON Data
{
  "trx_id": "d546a7665880ae14d727b65294921644117b2879",
  "block": 39480469,
  "trx_in_block": 1,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-12-30T04:42:30",
  "op": [
    "comment",
    {
      "parent_author": "",
      "parent_permlink": "bitcoin",
      "author": "bitfamily",
      "permlink": "5l9trv",
      "title": "“马化腾”隔空喊话“马云”:支付宝不安全!我现在用比特币闪电网络给同事发红包。",
      "body": "最近2020腾讯公司年会期间,财经记者问马化腾关于比特币和区块链的发展问题,马化腾透露了一些腾讯最近的动作。并且隔空喊话马云:支付宝不安全!我现在尝试用比特币闪电网络给同事发红包。\n\n当财经记者追问马化腾:你是如何用比特币闪电网络给同事发红包?马化腾没有给出具体答案。根据内部人士透露,腾讯目前已经布局了区块链行业,内测了一款“比特币红包” 的软件,准备布局海外市场。记者按图索骥,网络上已经有少量内部的教程被流出。小编摘要部分,供大家内测。\n\n第1步:打开比特币红包官方网站。网址是 https://bitcoingift.gq/   举个例子:我们以一个同事小张的身份给另外一个同事发送一个比特币红包,金额为103satoshi。在首页的右边,如图所示,按照格式,填入下面的信息,然后点击绿色的确定按钮。名称和留言为可以不填写,红包金额必须大于100sats,小于100,0001 sats 。按照2019年12月2号的汇率计算,100sats相当于人民币0.0514元,100,0001 sats相当于人民币513.57元。\n\n![image](https://i.ibb.co/PTsGpzS/2019-12-01-4-38-07.png)\n\n第2步:点击绿色的确定按钮后,会自动生成一个待充值的比特币闪电网络红包二维码,如图所示:\n\n![image](https://i.ibb.co/6WcdFmX/2019-12-01-4-41-28.png)\n\n您本人可以通过您的比特币闪电网络钱包扫描这个二维码进行充值,推荐开源的blue wallet和wallet of satoshi这2个钱包,有中文版本。\n\n第3步:扫描充值后,页面会自动更新成如下页面:\n\n![image](https://i.ibb.co/xD4ngBd/2019-12-01-5-37-41.png)\n第4步:您可以把这个充值成功的比特币红包二维码直接发给你的同事,也可以复制“查看你的比特币红包”链接。把这个网址链接发给你的同事。同事打开这个连接后,会出现下面的页面:\n\n![image](https://i.ibb.co/xqHSry1/2019-12-01-5-21-03.png)\n\n第5步:你的同事可以通过2种方法领取这个比特币红包,方法1就是可以直接用自己的比特币闪电网络钱包扫描这个二维码,2秒钟即可到账,如图所示:\n\n![image](https://i.ibb.co/prZcVr6/2019-12-01-5-30-02.png)\n\n方法2就是用自己的比特币闪电网络钱包创建一个等额的收款地址,粘贴到绿色确定按钮上面的输入框内。如这个例子所示,必须创建一个103satoshi金额的比特闪电网络收款地址,如果您设置的金额不一致,会出现下面的页面:\n\n![image](https://i.ibb.co/zfWTb29/2019-12-01-5-29-39.png)\n\n\n第6步:红包被领取后,该页面自动会出现“该比特币红包已经被领取”的提示:\n\n![image](https://i.ibb.co/dk947g0/2019-12-01-5-35-49.png)",
      "json_metadata": "{\"tags\":[\"bitcoin\"],\"image\":[\"https://i.ibb.co/PTsGpzS/2019-12-01-4-38-07.png\",\"https://i.ibb.co/6WcdFmX/2019-12-01-4-41-28.png\",\"https://i.ibb.co/xD4ngBd/2019-12-01-5-37-41.png\",\"https://i.ibb.co/xqHSry1/2019-12-01-5-21-03.png\",\"https://i.ibb.co/prZcVr6/2019-12-01-5-30-02.png\",\"https://i.ibb.co/zfWTb29/2019-12-01-5-29-39.png\",\"https://i.ibb.co/dk947g0/2019-12-01-5-35-49.png\"],\"links\":[\"https://bitcoingift.gq/\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
    }
  ]
}
2019/12/27 01:18:06
votertheodosiskatq
authorbitfamily
permlinknewbiewallet
weight5000 (50.00%)
Transaction InfoBlock #39390140/Trx b2dbf3e586a04e4be822c55812ade5f438a9c786
View Raw JSON Data
{
  "trx_id": "b2dbf3e586a04e4be822c55812ade5f438a9c786",
  "block": 39390140,
  "trx_in_block": 11,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-12-27T01:18:06",
  "op": [
    "vote",
    {
      "voter": "theodosiskatq",
      "author": "bitfamily",
      "permlink": "newbiewallet",
      "weight": 5000
    }
  ]
}
microbotupvoted (50.00%) @bitfamily / newbiewallet
2019/12/27 01:18:00
votermicrobot
authorbitfamily
permlinknewbiewallet
weight5000 (50.00%)
Transaction InfoBlock #39390138/Trx e514f5adbdbee5416af5ed5135938c51257efc85
View Raw JSON Data
{
  "trx_id": "e514f5adbdbee5416af5ed5135938c51257efc85",
  "block": 39390138,
  "trx_in_block": 11,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-12-27T01:18:00",
  "op": [
    "vote",
    {
      "voter": "microbot",
      "author": "bitfamily",
      "permlink": "newbiewallet",
      "weight": 5000
    }
  ]
}
2019/12/27 01:17:00
voterlaissez-faire
authorbitfamily
permlinknewbiewallet
weight10000 (100.00%)
Transaction InfoBlock #39390118/Trx ed8105aa53797afe4a3c6f0f3e2e7eb7d861a3c2
View Raw JSON Data
{
  "trx_id": "ed8105aa53797afe4a3c6f0f3e2e7eb7d861a3c2",
  "block": 39390118,
  "trx_in_block": 23,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-12-27T01:17:00",
  "op": [
    "vote",
    {
      "voter": "laissez-faire",
      "author": "bitfamily",
      "permlink": "newbiewallet",
      "weight": 10000
    }
  ]
}
2019/12/27 01:16:57
voteranomaly
authorbitfamily
permlinknewbiewallet
weight100 (1.00%)
Transaction InfoBlock #39390117/Trx 105c909fe3a2adb19c8b621bd409eaf44b62b3c9
View Raw JSON Data
{
  "trx_id": "105c909fe3a2adb19c8b621bd409eaf44b62b3c9",
  "block": 39390117,
  "trx_in_block": 17,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-12-27T01:16:57",
  "op": [
    "vote",
    {
      "voter": "anomaly",
      "author": "bitfamily",
      "permlink": "newbiewallet",
      "weight": 100
    }
  ]
}
bitfamilypublished a new post: newbiewallet
2019/12/27 01:15:51
parent author
parent permlinkbitcoin
authorbitfamily
permlinknewbiewallet
title自从有了newbiewallet(比特币菜鸟钱包),妈妈再也不用担心我找不到密钥了。
bodybitcoin core ,newbiewallet,和electrum是目前国外使用量最多的开源比特币钱包,下面的教程重点讲解网页版的newbiewallet的比特币地址、密钥生成和保存的功能。 打开newbiewallet比特币菜鸟钱包官网首页:https://www.newbiewallet.ga/ (适合海外的英文用户) 备用网址:cainiaoqianbao.ga (适合大陆中文用户) 或者使用beaker浏览器打开网址:dat://f21be4dc769ca7099494ab56416866b3bbe7994d1b622659add4472d136a4942/ 在最上面导航栏一行,找到“+创建” 2个字,鼠标左键点击一下。 然后,在弹出的窗口中,鼠标左键点击“比特币地址”按钮,位置在第2步,红色箭头标注处。如图所示: ![image](https://i.ibb.co/0VKWrHj/image.png) 点击“比特币地址”按钮之后,出现的页面没有含有任何地址、公钥和私钥。您需要点击最下面绿色的“确定”按钮,然后就自动随机生成地址、公钥和私钥。操作如图所示: ![image](https://i.ibb.co/t4CrCbQ/image.png) 为了安全,用户的私钥默认是不显示的,如何查看自己的私钥呢?您可以在”私钥“输入框最后面,点击“显示”的按钮,这样您的私钥就显示了。如图所示: ![image](https://i.ibb.co/PZzSXWT/image.png) 如何查看自己的比特币地址二维码呢?您可以在”比特币地址“输入框最后面,点击二维码的按钮,这样您的比特币地址的二维码就显示了。如图所示: ![image](https://i.ibb.co/vJpd1QZ/image.png) 如何用打印机把这个比特币地址页面打印出来呢? 找到最下面绿色的“确定”按钮,旁边有一个白色的向下的小箭头,您可以把鼠标移动到上面,点击这个向下的小箭头。这样会弹出一个“打印的窗口”,点击“打印”的按钮,您就可以打印出纸质的比特币钱包了。如图所示: ![image](https://i.ibb.co/pWnBPZT/image.png) 如何保存这个比特币地址页面的pdf文档呢?同样,找到最下面绿色的“确定”按钮,旁边有一个白色的向下的小箭头,您可以把鼠标移动到上面,点击这个向下的小箭头。这样会弹出一个“打印的窗口”,点击“打印”的按钮,在打印的选贤里面,您可以选择“存储为pdf”。这里以safari浏览器举例: ![image](https://i.ibb.co/VLhYd2L/pdf.png)
json metadata{"tags":["bitcoin"],"image":["https://i.ibb.co/0VKWrHj/image.png","https://i.ibb.co/t4CrCbQ/image.png","https://i.ibb.co/PZzSXWT/image.png","https://i.ibb.co/vJpd1QZ/image.png","https://i.ibb.co/pWnBPZT/image.png","https://i.ibb.co/VLhYd2L/pdf.png"],"links":["https://www.newbiewallet.ga/"],"app":"steemit/0.1","format":"markdown"}
Transaction InfoBlock #39390095/Trx e5ccc483c47514e58efdb3f6a4817635fc012ea1
View Raw JSON Data
{
  "trx_id": "e5ccc483c47514e58efdb3f6a4817635fc012ea1",
  "block": 39390095,
  "trx_in_block": 24,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-12-27T01:15:51",
  "op": [
    "comment",
    {
      "parent_author": "",
      "parent_permlink": "bitcoin",
      "author": "bitfamily",
      "permlink": "newbiewallet",
      "title": "自从有了newbiewallet(比特币菜鸟钱包),妈妈再也不用担心我找不到密钥了。",
      "body": "bitcoin core ,newbiewallet,和electrum是目前国外使用量最多的开源比特币钱包,下面的教程重点讲解网页版的newbiewallet的比特币地址、密钥生成和保存的功能。\n\n打开newbiewallet比特币菜鸟钱包官网首页:https://www.newbiewallet.ga/ (适合海外的英文用户)\n\n备用网址:cainiaoqianbao.ga (适合大陆中文用户)\n\n或者使用beaker浏览器打开网址:dat://f21be4dc769ca7099494ab56416866b3bbe7994d1b622659add4472d136a4942/\n\n在最上面导航栏一行,找到“+创建” 2个字,鼠标左键点击一下。 然后,在弹出的窗口中,鼠标左键点击“比特币地址”按钮,位置在第2步,红色箭头标注处。如图所示:\n\n![image](https://i.ibb.co/0VKWrHj/image.png)\n\n点击“比特币地址”按钮之后,出现的页面没有含有任何地址、公钥和私钥。您需要点击最下面绿色的“确定”按钮,然后就自动随机生成地址、公钥和私钥。操作如图所示:\n\n\n![image](https://i.ibb.co/t4CrCbQ/image.png)\n\n为了安全,用户的私钥默认是不显示的,如何查看自己的私钥呢?您可以在”私钥“输入框最后面,点击“显示”的按钮,这样您的私钥就显示了。如图所示:\n\n![image](https://i.ibb.co/PZzSXWT/image.png)\n\n\n如何查看自己的比特币地址二维码呢?您可以在”比特币地址“输入框最后面,点击二维码的按钮,这样您的比特币地址的二维码就显示了。如图所示:\n\n![image](https://i.ibb.co/vJpd1QZ/image.png)\n\n如何用打印机把这个比特币地址页面打印出来呢? 找到最下面绿色的“确定”按钮,旁边有一个白色的向下的小箭头,您可以把鼠标移动到上面,点击这个向下的小箭头。这样会弹出一个“打印的窗口”,点击“打印”的按钮,您就可以打印出纸质的比特币钱包了。如图所示:\n\n![image](https://i.ibb.co/pWnBPZT/image.png)\n\n\n如何保存这个比特币地址页面的pdf文档呢?同样,找到最下面绿色的“确定”按钮,旁边有一个白色的向下的小箭头,您可以把鼠标移动到上面,点击这个向下的小箭头。这样会弹出一个“打印的窗口”,点击“打印”的按钮,在打印的选贤里面,您可以选择“存储为pdf”。这里以safari浏览器举例:\n![image](https://i.ibb.co/VLhYd2L/pdf.png)",
      "json_metadata": "{\"tags\":[\"bitcoin\"],\"image\":[\"https://i.ibb.co/0VKWrHj/image.png\",\"https://i.ibb.co/t4CrCbQ/image.png\",\"https://i.ibb.co/PZzSXWT/image.png\",\"https://i.ibb.co/vJpd1QZ/image.png\",\"https://i.ibb.co/pWnBPZT/image.png\",\"https://i.ibb.co/VLhYd2L/pdf.png\"],\"links\":[\"https://www.newbiewallet.ga/\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
    }
  ]
}
statsexpertupvoted (20.00%) @bitfamily / 6gad84
2019/12/27 01:10:09
voterstatsexpert
authorbitfamily
permlink6gad84
weight2000 (20.00%)
Transaction InfoBlock #39389982/Trx 109bf7e5a088daed278a76253e9a5f75fa4b9de6
View Raw JSON Data
{
  "trx_id": "109bf7e5a088daed278a76253e9a5f75fa4b9de6",
  "block": 39389982,
  "trx_in_block": 12,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-12-27T01:10:09",
  "op": [
    "vote",
    {
      "voter": "statsexpert",
      "author": "bitfamily",
      "permlink": "6gad84",
      "weight": 2000
    }
  ]
}
bitfamilypublished a new post: 6gad84
2019/12/27 01:08:39
parent author
parent permlinkbitcoin
authorbitfamily
permlink6gad84
title马化腾隔空喊话马云:支付宝不安全!我现在尝试用比特币闪电网络给同事发红包。
body最近公司年会期间,财经记者问马化腾关于比特币和区块链的发展问题,马化腾透露了一些腾讯最近的动作。并且隔空喊话马云:支付宝不安全!我现在尝试用比特币闪电网络给同事发红包。 那记者朋友追问马化腾:你是如何用比特币闪电网络给同事发红包?马化腾没有给出具体答案。根据内部人士透露,腾讯目前已经布局了区块链行业,内测了一款“比特币红包” 的软件,准备布局海外市场。记者按图索骥, 网络上已经有内部的教程被流出。小编摘要部分,供大家内测。 第1步:打开比特币红包官方网站。网址是 https://bitcoingift.gq/ 举个例子:我们以一个同事小张的身份给另外一个同事发送一个比特币红包,金额为103satoshi。在首页的右边,如图所示,按照格式,填入下面的信息,然后点击绿色的确定按钮。名称和留言为可以不填写,红包金额必须大于100sats,小于100,0001 sats 。按照2019年12月2号的汇率计算,100sats相当于人民币0.0514元,100,0001 sats相当于人民币513.57元。 ![image](https://i.ibb.co/PTsGpzS/2019-12-01-4-38-07.png) 第2步:点击绿色的确定按钮后,会自动生成一个待充值的比特币闪电网络红包二维码,如图所示: ![image](https://i.ibb.co/6WcdFmX/2019-12-01-4-41-28.png) 您本人可以通过您的比特币闪电网络钱包扫描这个二维码进行充值,推荐开源的blue wallet和wallet of satoshi这2个钱包,有中文版本。 第3步:扫描充值后,页面会自动更新成如下页面: ![image](https://i.ibb.co/xD4ngBd/2019-12-01-5-37-41.png) 第4步:您可以把这个充值成功的比特币红包二维码直接发给你的同事,也可以复制“查看你的比特币红包”链接。把这个网址链接发给你的同事。同事打开这个连接后,会出现下面的页面: ![image](https://i.ibb.co/xqHSry1/2019-12-01-5-21-03.png) 第5步:你的同事可以通过2种方法领取这个比特币红包,方法1就是可以直接用自己的比特币闪电网络钱包扫描这个二维码,2秒钟即可到账,如图所示: ![image](https://i.ibb.co/prZcVr6/2019-12-01-5-30-02.png) 方法2就是用自己的比特币闪电网络钱包创建一个等额的收款地址,粘贴到绿色确定按钮上面的输入框内。如这个例子所示,必须创建一个103satoshi金额的比特闪电网络收款地址,如果您设置的金额不一致,会出现下面的页面: ![image](https://i.ibb.co/zfWTb29/2019-12-01-5-29-39.png) 第6步:红包被领取后,该页面自动会出现“该比特币红包已经被领取”的提示: ![image](https://i.ibb.co/dk947g0/2019-12-01-5-35-49.png)
json metadata{"tags":["bitcoin"],"image":["https://i.ibb.co/PTsGpzS/2019-12-01-4-38-07.png","https://i.ibb.co/6WcdFmX/2019-12-01-4-41-28.png","https://i.ibb.co/xD4ngBd/2019-12-01-5-37-41.png","https://i.ibb.co/xqHSry1/2019-12-01-5-21-03.png","https://i.ibb.co/prZcVr6/2019-12-01-5-30-02.png","https://i.ibb.co/zfWTb29/2019-12-01-5-29-39.png","https://i.ibb.co/dk947g0/2019-12-01-5-35-49.png"],"links":["https://bitcoingift.gq/"],"app":"steemit/0.1","format":"markdown"}
Transaction InfoBlock #39389952/Trx 25dec85e6cdcd6720621cfc5c86831c734083d1a
View Raw JSON Data
{
  "trx_id": "25dec85e6cdcd6720621cfc5c86831c734083d1a",
  "block": 39389952,
  "trx_in_block": 0,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-12-27T01:08:39",
  "op": [
    "comment",
    {
      "parent_author": "",
      "parent_permlink": "bitcoin",
      "author": "bitfamily",
      "permlink": "6gad84",
      "title": "马化腾隔空喊话马云:支付宝不安全!我现在尝试用比特币闪电网络给同事发红包。",
      "body": "最近公司年会期间,财经记者问马化腾关于比特币和区块链的发展问题,马化腾透露了一些腾讯最近的动作。并且隔空喊话马云:支付宝不安全!我现在尝试用比特币闪电网络给同事发红包。\n\n那记者朋友追问马化腾:你是如何用比特币闪电网络给同事发红包?马化腾没有给出具体答案。根据内部人士透露,腾讯目前已经布局了区块链行业,内测了一款“比特币红包” 的软件,准备布局海外市场。记者按图索骥, 网络上已经有内部的教程被流出。小编摘要部分,供大家内测。\n\n第1步:打开比特币红包官方网站。网址是 https://bitcoingift.gq/   举个例子:我们以一个同事小张的身份给另外一个同事发送一个比特币红包,金额为103satoshi。在首页的右边,如图所示,按照格式,填入下面的信息,然后点击绿色的确定按钮。名称和留言为可以不填写,红包金额必须大于100sats,小于100,0001 sats 。按照2019年12月2号的汇率计算,100sats相当于人民币0.0514元,100,0001 sats相当于人民币513.57元。\n\n![image](https://i.ibb.co/PTsGpzS/2019-12-01-4-38-07.png)\n\n第2步:点击绿色的确定按钮后,会自动生成一个待充值的比特币闪电网络红包二维码,如图所示:\n\n![image](https://i.ibb.co/6WcdFmX/2019-12-01-4-41-28.png)\n\n您本人可以通过您的比特币闪电网络钱包扫描这个二维码进行充值,推荐开源的blue wallet和wallet of satoshi这2个钱包,有中文版本。\n\n第3步:扫描充值后,页面会自动更新成如下页面:\n\n![image](https://i.ibb.co/xD4ngBd/2019-12-01-5-37-41.png)\n第4步:您可以把这个充值成功的比特币红包二维码直接发给你的同事,也可以复制“查看你的比特币红包”链接。把这个网址链接发给你的同事。同事打开这个连接后,会出现下面的页面:\n\n![image](https://i.ibb.co/xqHSry1/2019-12-01-5-21-03.png)\n\n第5步:你的同事可以通过2种方法领取这个比特币红包,方法1就是可以直接用自己的比特币闪电网络钱包扫描这个二维码,2秒钟即可到账,如图所示:\n\n![image](https://i.ibb.co/prZcVr6/2019-12-01-5-30-02.png)\n\n方法2就是用自己的比特币闪电网络钱包创建一个等额的收款地址,粘贴到绿色确定按钮上面的输入框内。如这个例子所示,必须创建一个103satoshi金额的比特闪电网络收款地址,如果您设置的金额不一致,会出现下面的页面:\n\n![image](https://i.ibb.co/zfWTb29/2019-12-01-5-29-39.png)\n\n\n第6步:红包被领取后,该页面自动会出现“该比特币红包已经被领取”的提示:\n\n![image](https://i.ibb.co/dk947g0/2019-12-01-5-35-49.png)",
      "json_metadata": "{\"tags\":[\"bitcoin\"],\"image\":[\"https://i.ibb.co/PTsGpzS/2019-12-01-4-38-07.png\",\"https://i.ibb.co/6WcdFmX/2019-12-01-4-41-28.png\",\"https://i.ibb.co/xD4ngBd/2019-12-01-5-37-41.png\",\"https://i.ibb.co/xqHSry1/2019-12-01-5-21-03.png\",\"https://i.ibb.co/prZcVr6/2019-12-01-5-30-02.png\",\"https://i.ibb.co/zfWTb29/2019-12-01-5-29-39.png\",\"https://i.ibb.co/dk947g0/2019-12-01-5-35-49.png\"],\"links\":[\"https://bitcoingift.gq/\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
    }
  ]
}
steemdelegated 17.837 SP to @bitfamily
2019/12/26 03:44:30
delegatorsteem
delegateebitfamily
vesting shares29009.092679 VESTS
Transaction InfoBlock #39364312/Trx a0ea783e3e9cde217a7901297e892e1d71e887ec
View Raw JSON Data
{
  "trx_id": "a0ea783e3e9cde217a7901297e892e1d71e887ec",
  "block": 39364312,
  "trx_in_block": 10,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-12-26T03:44:30",
  "op": [
    "delegate_vesting_shares",
    {
      "delegator": "steem",
      "delegatee": "bitfamily",
      "vesting_shares": "29009.092679 VESTS"
    }
  ]
}
2019/12/26 03:00:18
voterstatsexpert
authorbitfamily
permlinkbitcoin-core-electrum-3
weight2000 (20.00%)
Transaction InfoBlock #39363432/Trx 3b667c432e7526a487f4651dfebd3c994a50d570
View Raw JSON Data
{
  "trx_id": "3b667c432e7526a487f4651dfebd3c994a50d570",
  "block": 39363432,
  "trx_in_block": 23,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-12-26T03:00:18",
  "op": [
    "vote",
    {
      "voter": "statsexpert",
      "author": "bitfamily",
      "permlink": "bitcoin-core-electrum-3",
      "weight": 2000
    }
  ]
}
bitfamilypublished a new post: bitcoin-core-electrum-3
2019/12/26 02:57:00
parent author
parent permlinkbitcoin
authorbitfamily
permlinkbitcoin-core-electrum-3
title谁是目前最安全的比特币钱包?亲身测试比特币菜鸟钱包,bitcoin core和electrum 3款开源的主流比特币钱包
body根据比特币特有的源代码属性,只要你的私钥没有丢失,你的比特币就可以随时找回。只要私钥丢了,比特币也就无法找回了。跟比特币钱包关系不大,只要钱包安全、方便即可。可是,现在的比特币钱包成千上万,到底哪一个最方便、安全性最好呢?核心得看它们的客户端程序所采用的地址生成算法和加密算法是否安全。大部分主流的开源钱包都采用了sha256算法,那么问题来了,到底它们的客户端桌面程序生成的私钥和地址对,是否可以彼此通用呢?如果彼此通用,说明它们用了相同的算法;如果不通用,说明它们采用的算法并不一致。下面亲自测试bitcoin core、比特币菜鸟钱包、electrum,看他们各自随机产生的私钥,是否可以彼此通用。下面开始图文教程讲解。 以electrum钱包为例,演示比特币菜鸟钱包生成的私钥是否可以在electrum钱包里面通用,对应的比特币地址是否一致。 第1步: 通过比特币菜鸟钱包生成一个私钥、公钥、比特币地址对。点击地址: https://www.newbiewallet.ga/#newAddress ,然后点击绿色“确定”按钮来生成一个随机的私钥、公钥、比特币地址对。 例如: 比特币地址: 1GQBzMJWKNZ3GKM64shtSUjivJnvQtHbQu 公钥: 0215336667fd0c6798a4523e251630f05da2dfbcc5a802adcaf19a0bba39a9c684 私钥: KwvkkiKCudZfzVyGpRnQM4Ck2591CLQCbCEKW7XxLH95S2t281xF 如图所示: ![image](https://i.ibb.co/HPBC1rh/2019-12-11-1-13-12.png) 第2步:进入electrum钱包,导入这个私钥地址: KwvkkiKCudZfzVyGpRnQM4Ck2591CLQCbCEKW7XxLH95S2t281xF 用electrum钱包的算法来生成对应的比特币地址,然后去验证是否和比特币菜鸟钱包生成的比特币地址是否一致。 打开你的electrum钱包桌面客户端,点击桌面最上面一行:钱包-私钥-导入。操作步骤如图所示: ![image](https://i.ibb.co/pKF1pkQ/2019-12-11-1-11-10.png) 然后输入密码,如图所示: ![image](https://i.ibb.co/8jKLRZk/2019-12-11-1-11-21.png) 在输入框内粘贴您在比特币菜鸟钱包生成的私钥,例如:KwvkkiKCudZfzVyGpRnQM4Ck2591CLQCbCEKW7XxLH95S2t281xF ![image](https://i.ibb.co/LQcrNJv/2019-12-11-1-13-24.png) 然后点击右下角的导入按钮,点击后会出现一个窗口: ![image](https://i.ibb.co/0BLyQrJ/2019-12-11-1-09-24.png) 点击ok,然后回到electrum钱包界面,点击“地址”,即可显示这个私钥对应的比特币地址和比特币金额。 ![image](https://i.ibb.co/19MKTxF/2019-12-11-1-43-38.png) 经过以上实验,我们看到,2者采用了相同的私钥和地址生成算法。操作方法以此类推,您在bitcoin core生成的私钥、公钥、地址对也可以导入到比特币菜鸟钱包或者electrum钱包,进行验证。
json metadata{"tags":["bitcoin"],"image":["https://i.ibb.co/HPBC1rh/2019-12-11-1-13-12.png","https://i.ibb.co/pKF1pkQ/2019-12-11-1-11-10.png","https://i.ibb.co/8jKLRZk/2019-12-11-1-11-21.png","https://i.ibb.co/LQcrNJv/2019-12-11-1-13-24.png","https://i.ibb.co/0BLyQrJ/2019-12-11-1-09-24.png","https://i.ibb.co/19MKTxF/2019-12-11-1-43-38.png"],"links":["https://www.newbiewallet.ga/#newAddress"],"app":"steemit/0.1","format":"markdown"}
Transaction InfoBlock #39363366/Trx c09aa1a1f08bd44223d32d344bfdf514d21dae22
View Raw JSON Data
{
  "trx_id": "c09aa1a1f08bd44223d32d344bfdf514d21dae22",
  "block": 39363366,
  "trx_in_block": 4,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-12-26T02:57:00",
  "op": [
    "comment",
    {
      "parent_author": "",
      "parent_permlink": "bitcoin",
      "author": "bitfamily",
      "permlink": "bitcoin-core-electrum-3",
      "title": "谁是目前最安全的比特币钱包?亲身测试比特币菜鸟钱包,bitcoin core和electrum 3款开源的主流比特币钱包",
      "body": "根据比特币特有的源代码属性,只要你的私钥没有丢失,你的比特币就可以随时找回。只要私钥丢了,比特币也就无法找回了。跟比特币钱包关系不大,只要钱包安全、方便即可。可是,现在的比特币钱包成千上万,到底哪一个最方便、安全性最好呢?核心得看它们的客户端程序所采用的地址生成算法和加密算法是否安全。大部分主流的开源钱包都采用了sha256算法,那么问题来了,到底它们的客户端桌面程序生成的私钥和地址对,是否可以彼此通用呢?如果彼此通用,说明它们用了相同的算法;如果不通用,说明它们采用的算法并不一致。下面亲自测试bitcoin core、比特币菜鸟钱包、electrum,看他们各自随机产生的私钥,是否可以彼此通用。下面开始图文教程讲解。\n\n\n以electrum钱包为例,演示比特币菜鸟钱包生成的私钥是否可以在electrum钱包里面通用,对应的比特币地址是否一致。\n\n\n第1步: 通过比特币菜鸟钱包生成一个私钥、公钥、比特币地址对。点击地址: https://www.newbiewallet.ga/#newAddress ,然后点击绿色“确定”按钮来生成一个随机的私钥、公钥、比特币地址对。\n例如:\n\n比特币地址: 1GQBzMJWKNZ3GKM64shtSUjivJnvQtHbQu\n\n公钥: 0215336667fd0c6798a4523e251630f05da2dfbcc5a802adcaf19a0bba39a9c684\n\n私钥: KwvkkiKCudZfzVyGpRnQM4Ck2591CLQCbCEKW7XxLH95S2t281xF\n\n\n如图所示:\n\n![image](https://i.ibb.co/HPBC1rh/2019-12-11-1-13-12.png)\n\n第2步:进入electrum钱包,导入这个私钥地址: KwvkkiKCudZfzVyGpRnQM4Ck2591CLQCbCEKW7XxLH95S2t281xF   用electrum钱包的算法来生成对应的比特币地址,然后去验证是否和比特币菜鸟钱包生成的比特币地址是否一致。\n\n打开你的electrum钱包桌面客户端,点击桌面最上面一行:钱包-私钥-导入。操作步骤如图所示:\n\n![image](https://i.ibb.co/pKF1pkQ/2019-12-11-1-11-10.png)\n\n然后输入密码,如图所示:\n![image](https://i.ibb.co/8jKLRZk/2019-12-11-1-11-21.png)\n\n在输入框内粘贴您在比特币菜鸟钱包生成的私钥,例如:KwvkkiKCudZfzVyGpRnQM4Ck2591CLQCbCEKW7XxLH95S2t281xF\n\n![image](https://i.ibb.co/LQcrNJv/2019-12-11-1-13-24.png)\n\n然后点击右下角的导入按钮,点击后会出现一个窗口:\n\n![image](https://i.ibb.co/0BLyQrJ/2019-12-11-1-09-24.png)\n\n\n点击ok,然后回到electrum钱包界面,点击“地址”,即可显示这个私钥对应的比特币地址和比特币金额。\n\n\n![image](https://i.ibb.co/19MKTxF/2019-12-11-1-43-38.png)\n\n\n\n\n经过以上实验,我们看到,2者采用了相同的私钥和地址生成算法。操作方法以此类推,您在bitcoin core生成的私钥、公钥、地址对也可以导入到比特币菜鸟钱包或者electrum钱包,进行验证。",
      "json_metadata": "{\"tags\":[\"bitcoin\"],\"image\":[\"https://i.ibb.co/HPBC1rh/2019-12-11-1-13-12.png\",\"https://i.ibb.co/pKF1pkQ/2019-12-11-1-11-10.png\",\"https://i.ibb.co/8jKLRZk/2019-12-11-1-11-21.png\",\"https://i.ibb.co/LQcrNJv/2019-12-11-1-13-24.png\",\"https://i.ibb.co/0BLyQrJ/2019-12-11-1-09-24.png\",\"https://i.ibb.co/19MKTxF/2019-12-11-1-43-38.png\"],\"links\":[\"https://www.newbiewallet.ga/#newAddress\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
    }
  ]
}
2019/12/26 02:51:54
parent author
parent permlinkbitcoin
authorbitfamily
permlinkblockstack-id-1-blockstack-2020
title注册一个blockstack ID = 免费获得1美金的比特币,来自blockstack 2020 年的圣诞礼物🎁
body这篇图文教程详细演示如何注册blockstack id,并免费获得1美金的比特币 blockstack id 类似于qq登录或者微信一键登录,在github上高达6k的点赞,已经有数千的程序员使用这个blockstack架构来开发dapp。使用blockstack id 对于普通用户和开发者有2个作用: 1. 可以不用注册app,直接登录。体验众多的dapp。比如类似于百度网盘的xordrive 2. 开发者可以免去写注册、登录的代码,省去大量开发时间,api比google outh或者qq一键登录更加友好、简单。 首先我们点击打开他们的官方网站 https://www.yournewinternet.com/?grsf=ssoby4 然后会出现很多提示:你可以通过这个网站注册blockstack id 并获得大约1美金左右的免费比特币。不过经过我测试,中国的手机号是不行的,但是可以得到一个免费的blockstack id。ok,我们继续.当看下面的图片时,我们直接点击紫色的next按钮。 ![image](https://i.ibb.co/0y3xsQF/2019-12-21-6-30-34.png) ![image](https://i.ibb.co/2Yfm6D9/2019-12-21-6-30-43.png) ![image](https://i.ibb.co/mNTjpT0/2019-12-21-6-30-50.png) ![image](https://i.ibb.co/MVKZTX2/2019-12-21-6-30-56.png) ![image](https://i.ibb.co/X3JGMZy/2019-12-21-6-31-55.png) 最重要的环节来了,当你填写的手机号验证通过后,我们就到了https://browser.blockstack.org/ 这个页面来注册一个blockstack id,我用的是Estonia的号码,大家也可以尝试别的国家试试。 接下来就非常简单了,点击紫色create new id按钮,如图所示: ![image](https://i.ibb.co/Syjx9H6/1.png) 填写一个用户名,程序会自动检测是否已经被注册过。 ![image](https://i.ibb.co/nBSrzn9/1.png) 然后我们在输入一个邮箱地址,用来保存我们的recovery key ![image](https://i.ibb.co/Vq8yKpQ/1.png) ⚠️注意:这个密钥不能分享给任何人!!类似于比特币的私钥,这个recovery key也是在本地电脑生成的,如果你丢失,是无法找回这个密钥的! ok,我们继续,点击紫色按钮secret recovery key 显示密钥明文,把我们的密钥保存到一个安全的地方。 ![image](https://i.ibb.co/hs4vB1B/1.png) ok,一旦你验证你的密钥后,网页会提示你注册成功。 你就可以到: https://browser.blockstack.org/ 这个页面去体验300个去中心化的网站和应用程序。 或者你也可以去 dapp.co 这个网站里面查看最新的基于blockstack架构开发的 dapp。 去这个网址下面查看你的比特币余额: https://browser.blockstack.org/wallet/receive 我用的是Japan免费的号码注册,也没有收到。 估计薅羊毛的人太多,被官方屏蔽了。 这里说明:youname.id.blockstack 这样格式的blockstack id 是免费的。但是如果你想更近一步,注册一个去中心化的域名例如:alibaba.id 或者google.id 是需要费用的,那么跟godaddy上注册域名例如:xxx.com 或者mydonamin.org这种格式的有什么区别呢? ok,目前这种去中心化域名还没有实现成功,目前主流的浏览器firefox、chrome都不支持这种格式。不过你可以去blockstack explorer上搜索alibaba.id或者58.com ,上面标注了具体注册的时间,和区块位置。简单地说,比特币的用户是不是每个人的电脑上都存储了一个账本呢?这个包含了每个人转账记录的账本是一致的。blockstack的用户,每个人的电脑上都存储了一个域名账本,这个域名账本包含了每个人注册、和转移域名的记录。如果你精力足够,可以看下面注册blockstack 去中心域名的教程。 1.从官方网站和 github 上下载最新版本的浏览器: https://github.com/blockstack/blockstack-browser/releases https://blockstack.org/install 2.点击桌面 icon,按照提示安装。 ![image](https://i.imgur.com/jUJZPi0.png) 3,回到首页 http://localhost:8888/ ![image](https://i.ibb.co/w641rNb/2018-02-08-9-56-42.png) 4.点击 IDS, 进入个人简介页面, 点击 ADD A USERNAME 按钮 ![image](https://i.ibb.co/0BBy3CN/2018-02-08-9-59-05.png) 5.输入你想注册的域名,例如:myfirstblokchain.id , yumingmingcheng.id ![image](https://i.ibb.co/Rb2X8Zh/2018-02-08-10-00-42.png) 6.充值一定数量的 bitcoin 到 blockstack 钱包。充值成功后,去 https://explorer.blockstack.org/ 查询注册的状态。大概需要24小时的同步时间。 ![image](https://i.ibb.co/bsWHYGr/2018-02-08-10-16-29.png) 7.他们官网对去中心化的域名的问答: https://blockstack.org/faq 请注意:这个区块链网络只能注册最多2年期限的“域名”,2年后,你还要续费。所有用户电脑客户端的保存的域名记录数据库类似与 bitcoin 用户保存的总账本ledger数据库,每个用户电脑客户端都会存储所有已经注册的“域名”。 教程标签:blockstack id注册|blockstack id注册教程
json metadata{"tags":["bitcoin"],"image":["https://i.ibb.co/0y3xsQF/2019-12-21-6-30-34.png","https://i.ibb.co/2Yfm6D9/2019-12-21-6-30-43.png","https://i.ibb.co/mNTjpT0/2019-12-21-6-30-50.png","https://i.ibb.co/MVKZTX2/2019-12-21-6-30-56.png","https://i.ibb.co/X3JGMZy/2019-12-21-6-31-55.png","https://i.ibb.co/Syjx9H6/1.png","https://i.ibb.co/nBSrzn9/1.png","https://i.ibb.co/Vq8yKpQ/1.png","https://i.ibb.co/hs4vB1B/1.png","https://i.imgur.com/jUJZPi0.png","https://i.ibb.co/w641rNb/2018-02-08-9-56-42.png","https://i.ibb.co/0BBy3CN/2018-02-08-9-59-05.png","https://i.ibb.co/Rb2X8Zh/2018-02-08-10-00-42.png","https://i.ibb.co/bsWHYGr/2018-02-08-10-16-29.png"],"links":["https://www.yournewinternet.com/?grsf=ssoby4","https://browser.blockstack.org/","https://browser.blockstack.org/wallet/receive","https://github.com/blockstack/blockstack-browser/releases","https://blockstack.org/install","http://localhost:8888/","https://explorer.blockstack.org/","https://blockstack.org/faq"],"app":"steemit/0.1","format":"markdown"}
Transaction InfoBlock #39363264/Trx 58a1f5c4b81cecdbf4565d557e0c3e993294f14f
View Raw JSON Data
{
  "trx_id": "58a1f5c4b81cecdbf4565d557e0c3e993294f14f",
  "block": 39363264,
  "trx_in_block": 6,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-12-26T02:51:54",
  "op": [
    "comment",
    {
      "parent_author": "",
      "parent_permlink": "bitcoin",
      "author": "bitfamily",
      "permlink": "blockstack-id-1-blockstack-2020",
      "title": "注册一个blockstack ID = 免费获得1美金的比特币,来自blockstack 2020 年的圣诞礼物🎁",
      "body": "这篇图文教程详细演示如何注册blockstack id,并免费获得1美金的比特币\n\nblockstack id 类似于qq登录或者微信一键登录,在github上高达6k的点赞,已经有数千的程序员使用这个blockstack架构来开发dapp。使用blockstack id 对于普通用户和开发者有2个作用:\n\n1. 可以不用注册app,直接登录。体验众多的dapp。比如类似于百度网盘的xordrive\n2. 开发者可以免去写注册、登录的代码,省去大量开发时间,api比google outh或者qq一键登录更加友好、简单。\n\n首先我们点击打开他们的官方网站 https://www.yournewinternet.com/?grsf=ssoby4 \n\n然后会出现很多提示:你可以通过这个网站注册blockstack id 并获得大约1美金左右的免费比特币。不过经过我测试,中国的手机号是不行的,但是可以得到一个免费的blockstack id。ok,我们继续.当看下面的图片时,我们直接点击紫色的next按钮。\n\n![image](https://i.ibb.co/0y3xsQF/2019-12-21-6-30-34.png)\n![image](https://i.ibb.co/2Yfm6D9/2019-12-21-6-30-43.png)\n![image](https://i.ibb.co/mNTjpT0/2019-12-21-6-30-50.png)\n![image](https://i.ibb.co/MVKZTX2/2019-12-21-6-30-56.png)\n![image](https://i.ibb.co/X3JGMZy/2019-12-21-6-31-55.png)\n\n最重要的环节来了,当你填写的手机号验证通过后,我们就到了https://browser.blockstack.org/ 这个页面来注册一个blockstack id,我用的是Estonia的号码,大家也可以尝试别的国家试试。\n\n接下来就非常简单了,点击紫色create new id按钮,如图所示:\n\n![image](https://i.ibb.co/Syjx9H6/1.png)\n\n填写一个用户名,程序会自动检测是否已经被注册过。\n\n![image](https://i.ibb.co/nBSrzn9/1.png)\n\n\n然后我们在输入一个邮箱地址,用来保存我们的recovery key\n\n![image](https://i.ibb.co/Vq8yKpQ/1.png)\n\n⚠️注意:这个密钥不能分享给任何人!!类似于比特币的私钥,这个recovery key也是在本地电脑生成的,如果你丢失,是无法找回这个密钥的!\n\nok,我们继续,点击紫色按钮secret recovery key 显示密钥明文,把我们的密钥保存到一个安全的地方。\n\n\n![image](https://i.ibb.co/hs4vB1B/1.png)\n\n\nok,一旦你验证你的密钥后,网页会提示你注册成功。 你就可以到: https://browser.blockstack.org/ 这个页面去体验300个去中心化的网站和应用程序。\n\n或者你也可以去 dapp.co  这个网站里面查看最新的基于blockstack架构开发的 dapp。\n\n去这个网址下面查看你的比特币余额: https://browser.blockstack.org/wallet/receive  我用的是Japan免费的号码注册,也没有收到。 估计薅羊毛的人太多,被官方屏蔽了。\n\n这里说明:youname.id.blockstack 这样格式的blockstack id 是免费的。但是如果你想更近一步,注册一个去中心化的域名例如:alibaba.id 或者google.id 是需要费用的,那么跟godaddy上注册域名例如:xxx.com 或者mydonamin.org这种格式的有什么区别呢? ok,目前这种去中心化域名还没有实现成功,目前主流的浏览器firefox、chrome都不支持这种格式。不过你可以去blockstack explorer上搜索alibaba.id或者58.com ,上面标注了具体注册的时间,和区块位置。简单地说,比特币的用户是不是每个人的电脑上都存储了一个账本呢?这个包含了每个人转账记录的账本是一致的。blockstack的用户,每个人的电脑上都存储了一个域名账本,这个域名账本包含了每个人注册、和转移域名的记录。如果你精力足够,可以看下面注册blockstack 去中心域名的教程。\n\n\n\n1.从官方网站和 github 上下载最新版本的浏览器:\n\nhttps://github.com/blockstack/blockstack-browser/releases\n\nhttps://blockstack.org/install\n\n2.点击桌面 icon,按照提示安装。\n\n![image](https://i.imgur.com/jUJZPi0.png)\n\n3,回到首页 http://localhost:8888/\n\n![image](https://i.ibb.co/w641rNb/2018-02-08-9-56-42.png)\n\n4.点击 IDS, 进入个人简介页面, 点击 ADD A USERNAME 按钮\n\n![image](https://i.ibb.co/0BBy3CN/2018-02-08-9-59-05.png)\n\n5.输入你想注册的域名,例如:myfirstblokchain.id , yumingmingcheng.id\n\n![image](https://i.ibb.co/Rb2X8Zh/2018-02-08-10-00-42.png)\n\n\n\n6.充值一定数量的 bitcoin 到 blockstack 钱包。充值成功后,去 https://explorer.blockstack.org/  查询注册的状态。大概需要24小时的同步时间。\n\n![image](https://i.ibb.co/bsWHYGr/2018-02-08-10-16-29.png)\n\n7.他们官网对去中心化的域名的问答: https://blockstack.org/faq\n\n请注意:这个区块链网络只能注册最多2年期限的“域名”,2年后,你还要续费。所有用户电脑客户端的保存的域名记录数据库类似与 bitcoin 用户保存的总账本ledger数据库,每个用户电脑客户端都会存储所有已经注册的“域名”。\n\n\n教程标签:blockstack id注册|blockstack id注册教程",
      "json_metadata": "{\"tags\":[\"bitcoin\"],\"image\":[\"https://i.ibb.co/0y3xsQF/2019-12-21-6-30-34.png\",\"https://i.ibb.co/2Yfm6D9/2019-12-21-6-30-43.png\",\"https://i.ibb.co/mNTjpT0/2019-12-21-6-30-50.png\",\"https://i.ibb.co/MVKZTX2/2019-12-21-6-30-56.png\",\"https://i.ibb.co/X3JGMZy/2019-12-21-6-31-55.png\",\"https://i.ibb.co/Syjx9H6/1.png\",\"https://i.ibb.co/nBSrzn9/1.png\",\"https://i.ibb.co/Vq8yKpQ/1.png\",\"https://i.ibb.co/hs4vB1B/1.png\",\"https://i.imgur.com/jUJZPi0.png\",\"https://i.ibb.co/w641rNb/2018-02-08-9-56-42.png\",\"https://i.ibb.co/0BBy3CN/2018-02-08-9-59-05.png\",\"https://i.ibb.co/Rb2X8Zh/2018-02-08-10-00-42.png\",\"https://i.ibb.co/bsWHYGr/2018-02-08-10-16-29.png\"],\"links\":[\"https://www.yournewinternet.com/?grsf=ssoby4\",\"https://browser.blockstack.org/\",\"https://browser.blockstack.org/wallet/receive\",\"https://github.com/blockstack/blockstack-browser/releases\",\"https://blockstack.org/install\",\"http://localhost:8888/\",\"https://explorer.blockstack.org/\",\"https://blockstack.org/faq\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
    }
  ]
}
2019/12/26 02:45:06
parent author
parent permlinkbitcoin
authorbitfamily
permlinkregister-a-blocktack-id-1-dollar-free-bitcoin-step-by-step-tutorial-video-tutorial
titleregister a blocktack id = 1 dollar free bitcoin , step by step tutorial +video tutorial
bodyhow to register blockstack id and get free 1 dollar bitcoin.🎁 blockstack id just like google outh and twitter outh , it has over 6k upvotes on github. Thousands of developers use it developing dapp. Thre are two benefits for using blockstack id: 1. you won’t need to use your own email address or phone number to register or log in a new website, the password is stored in your local computer, you don’t need to remember your password anymore. 2. Developer can save lots of time to write codes for user id logic parts. The API is much simpler than google outh.No one can block or delete your id. First, we should click their official website: https://www.yournewinternet.com/?grsf=ssoby4 From here, we can see some messages that we may have about 1 dollar free bitcoins, I tried it, if you use a phone number from NYC or China, you cannot get through, Japan phone number is valid. When you see images below, you just need to click the purple “next” button. ![image](https://i.ibb.co/0y3xsQF/2019-12-21-6-30-34.png) ![image](https://i.ibb.co/2Yfm6D9/2019-12-21-6-30-43.png) ![image](https://i.ibb.co/mNTjpT0/2019-12-21-6-30-50.png) ![image](https://i.ibb.co/MVKZTX2/2019-12-21-6-30-56.png) ![image](https://i.ibb.co/X3JGMZy/2019-12-21-6-31-55.png) After you type your name, phone number, we are directed to https://browser.blockstack.org/ I uses the Japan phone number, you can try other countries. So, next, click the purple button “create new id” ![image](https://i.ibb.co/Syjx9H6/1.png) Type your id name, and see it valid or not. ![1 (1).png](https://cdn.steemitimages.com/DQmWh2gY9knLtiBWwGvs72WkjZxyVdkd97bBfxh4UCJoDZC/1%20(1).png) Then you can input your email address for saving your recovery key ![1 (2).png](https://cdn.steemitimages.com/DQmSypi6JcDHhoAhtCyHZQPL5cfGhXhgRtZxuBLmoUeBTjt/1%20(2).png) ⚠️Note:Do not share your recovery key to anybody, it's like the private key of bitcoin, if you lose your recovery key, you would lose your data and coins! ![1 (3).png](https://cdn.steemitimages.com/DQmcraBeJYNn2gpxApAYCvCUjUa3EyPvSfsCS2QH2jQvZJs/1%20(3).png) ok,after you verify your recovery key, the page would prompt you are successfully registered.Now, you can go to: https://browser.blockstack.org/ to check out over 300 decentralized apps and software. Or, you can go to dapp.co, there are lots of latest decentralized apps. you can check your free bitcoin from here: https://browser.blockstack.org/wallet/receive if you have a referral of 10 users, you would get 10 dollars of bitcoins. Tutorial Tags: how to register blockstack id|blockstack id registration tutorial|how to sign up a blockstack id|blockstack id| how to get free bitcoins
json metadata{"tags":["bitcoin"],"image":["https://i.ibb.co/0y3xsQF/2019-12-21-6-30-34.png","https://i.ibb.co/2Yfm6D9/2019-12-21-6-30-43.png","https://i.ibb.co/mNTjpT0/2019-12-21-6-30-50.png","https://i.ibb.co/MVKZTX2/2019-12-21-6-30-56.png","https://i.ibb.co/X3JGMZy/2019-12-21-6-31-55.png","https://i.ibb.co/Syjx9H6/1.png","https://cdn.steemitimages.com/DQmWh2gY9knLtiBWwGvs72WkjZxyVdkd97bBfxh4UCJoDZC/1%20(1).png","https://cdn.steemitimages.com/DQmSypi6JcDHhoAhtCyHZQPL5cfGhXhgRtZxuBLmoUeBTjt/1%20(2).png","https://cdn.steemitimages.com/DQmcraBeJYNn2gpxApAYCvCUjUa3EyPvSfsCS2QH2jQvZJs/1%20(3).png"],"links":["https://www.yournewinternet.com/?grsf=ssoby4","https://browser.blockstack.org/","https://browser.blockstack.org/wallet/receive"],"app":"steemit/0.1","format":"markdown"}
Transaction InfoBlock #39363128/Trx e5d889b4eb4f59b9e6d976558d2d7378d66808e9
View Raw JSON Data
{
  "trx_id": "e5d889b4eb4f59b9e6d976558d2d7378d66808e9",
  "block": 39363128,
  "trx_in_block": 36,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-12-26T02:45:06",
  "op": [
    "comment",
    {
      "parent_author": "",
      "parent_permlink": "bitcoin",
      "author": "bitfamily",
      "permlink": "register-a-blocktack-id-1-dollar-free-bitcoin-step-by-step-tutorial-video-tutorial",
      "title": "register a  blocktack id = 1 dollar free bitcoin ,  step by step tutorial +video tutorial",
      "body": "how to register blockstack id and get free 1 dollar bitcoin.🎁\n\nblockstack id just like google outh and twitter outh , it has over 6k upvotes on github. Thousands of developers use it developing dapp. Thre are two benefits for using blockstack id:\n\n1. you won’t need to use your own email address or phone number to register or log in a new website, the password is stored in your local computer, you don’t need to remember your password anymore.\n2. Developer can save lots of time to write codes for user id logic parts. The API is much simpler than google outh.No one can block or delete your id.\n\nFirst, we should click their official website:\n\nhttps://www.yournewinternet.com/?grsf=ssoby4 \n\nFrom here, we can see some messages that we may have about 1 dollar free bitcoins, I tried it, if you use a phone number from NYC or China, you cannot get through, Japan phone number is valid. When you see images below, you just need to click the purple “next” button.\n\n\n\n![image](https://i.ibb.co/0y3xsQF/2019-12-21-6-30-34.png)\n![image](https://i.ibb.co/2Yfm6D9/2019-12-21-6-30-43.png)\n![image](https://i.ibb.co/mNTjpT0/2019-12-21-6-30-50.png)\n![image](https://i.ibb.co/MVKZTX2/2019-12-21-6-30-56.png)\n![image](https://i.ibb.co/X3JGMZy/2019-12-21-6-31-55.png)\n\nAfter you type your name, phone number, we are directed to https://browser.blockstack.org/ I uses the Japan phone number, you can try other countries.\n\nSo, next, click the purple button “create new id”\n\n![image](https://i.ibb.co/Syjx9H6/1.png)\n\nType your id name, and see it valid or not.\n![1 (1).png](https://cdn.steemitimages.com/DQmWh2gY9knLtiBWwGvs72WkjZxyVdkd97bBfxh4UCJoDZC/1%20(1).png)\n\n\nThen you can input your email address for saving your recovery key\n![1 (2).png](https://cdn.steemitimages.com/DQmSypi6JcDHhoAhtCyHZQPL5cfGhXhgRtZxuBLmoUeBTjt/1%20(2).png)\n\n⚠️Note:Do not share your recovery key to anybody, it's like the private key of bitcoin, if you lose your recovery key, you would lose your data and coins!\n\n\n![1 (3).png](https://cdn.steemitimages.com/DQmcraBeJYNn2gpxApAYCvCUjUa3EyPvSfsCS2QH2jQvZJs/1%20(3).png)\n\n\nok,after you verify your recovery key, the page would prompt you are successfully registered.Now, you can go to: https://browser.blockstack.org/\nto check out over 300 decentralized apps and software. Or, you can go to dapp.co, there are lots of latest decentralized apps.\nyou can check your free bitcoin from here: https://browser.blockstack.org/wallet/receive if you have a referral of 10 users, you would get 10 dollars of bitcoins.\nTutorial Tags: how to register blockstack id|blockstack id registration tutorial|how to sign up a blockstack id|blockstack id| how to get free bitcoins",
      "json_metadata": "{\"tags\":[\"bitcoin\"],\"image\":[\"https://i.ibb.co/0y3xsQF/2019-12-21-6-30-34.png\",\"https://i.ibb.co/2Yfm6D9/2019-12-21-6-30-43.png\",\"https://i.ibb.co/mNTjpT0/2019-12-21-6-30-50.png\",\"https://i.ibb.co/MVKZTX2/2019-12-21-6-30-56.png\",\"https://i.ibb.co/X3JGMZy/2019-12-21-6-31-55.png\",\"https://i.ibb.co/Syjx9H6/1.png\",\"https://cdn.steemitimages.com/DQmWh2gY9knLtiBWwGvs72WkjZxyVdkd97bBfxh4UCJoDZC/1%20(1).png\",\"https://cdn.steemitimages.com/DQmSypi6JcDHhoAhtCyHZQPL5cfGhXhgRtZxuBLmoUeBTjt/1%20(2).png\",\"https://cdn.steemitimages.com/DQmcraBeJYNn2gpxApAYCvCUjUa3EyPvSfsCS2QH2jQvZJs/1%20(3).png\"],\"links\":[\"https://www.yournewinternet.com/?grsf=ssoby4\",\"https://browser.blockstack.org/\",\"https://browser.blockstack.org/wallet/receive\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
    }
  ]
}
bitfamilyupdated their account properties
2019/09/06 06:52:18
accountbitfamily
memo keySTM7Krvdb4MubN8z56iGsXjbHUN45DjmLenWrtq17h7eBEwFR9cCv
json metadata{"profile":{"dtube_pub":"xKknrg8fGpf83UKCqs9nBrTMwRFRq77tBuWEe6A2HEEt"}}
Transaction InfoBlock #36177919/Trx a18f0335d4df9e8da750dc7b92f52ddee94fbc25
View Raw JSON Data
{
  "trx_id": "a18f0335d4df9e8da750dc7b92f52ddee94fbc25",
  "block": 36177919,
  "trx_in_block": 12,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-09-06T06:52:18",
  "op": [
    "account_update",
    {
      "account": "bitfamily",
      "memo_key": "STM7Krvdb4MubN8z56iGsXjbHUN45DjmLenWrtq17h7eBEwFR9cCv",
      "json_metadata": "{\"profile\":{\"dtube_pub\":\"xKknrg8fGpf83UKCqs9nBrTMwRFRq77tBuWEe6A2HEEt\"}}"
    }
  ]
}
bitfamilyupdated their account properties
2019/09/06 06:44:36
accountbitfamily
owner{"weight_threshold":1,"account_auths":[],"key_auths":[["STM7mFPVmzq7S1kZDZwEm37itYjF5ncjVxjhsCfUvjtUU5VypCmom",1]]}
active{"weight_threshold":1,"account_auths":[],"key_auths":[["STM72fxy7X9JSpTfs833Uk9nhphVnpBsNDAPZSfyew2edeigGJSe5",1]]}
posting{"weight_threshold":1,"account_auths":[["dtube.app",1]],"key_auths":[["STM7C3QrWydLJD4VEmCxLsYBfafRN53a1n5gW6xMXusWeyCpK9rHi",1]]}
memo keySTM7Krvdb4MubN8z56iGsXjbHUN45DjmLenWrtq17h7eBEwFR9cCv
json metadata
Transaction InfoBlock #36177766/Trx 33873271d82d18956ff25e2fedcd094ed93625b5
View Raw JSON Data
{
  "trx_id": "33873271d82d18956ff25e2fedcd094ed93625b5",
  "block": 36177766,
  "trx_in_block": 2,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-09-06T06:44:36",
  "op": [
    "account_update",
    {
      "account": "bitfamily",
      "owner": {
        "weight_threshold": 1,
        "account_auths": [],
        "key_auths": [
          [
            "STM7mFPVmzq7S1kZDZwEm37itYjF5ncjVxjhsCfUvjtUU5VypCmom",
            1
          ]
        ]
      },
      "active": {
        "weight_threshold": 1,
        "account_auths": [],
        "key_auths": [
          [
            "STM72fxy7X9JSpTfs833Uk9nhphVnpBsNDAPZSfyew2edeigGJSe5",
            1
          ]
        ]
      },
      "posting": {
        "weight_threshold": 1,
        "account_auths": [
          [
            "dtube.app",
            1
          ]
        ],
        "key_auths": [
          [
            "STM7C3QrWydLJD4VEmCxLsYBfafRN53a1n5gW6xMXusWeyCpK9rHi",
            1
          ]
        ]
      },
      "memo_key": "STM7Krvdb4MubN8z56iGsXjbHUN45DjmLenWrtq17h7eBEwFR9cCv",
      "json_metadata": ""
    }
  ]
}
steemdelegated 5.497 SP to @bitfamily
2019/06/03 05:35:45
delegatorsteem
delegateebitfamily
vesting shares8939.664187 VESTS
Transaction InfoBlock #33467428/Trx 699282b9dd131a498ea06fa795bb3b3f3e56b4c3
View Raw JSON Data
{
  "trx_id": "699282b9dd131a498ea06fa795bb3b3f3e56b4c3",
  "block": 33467428,
  "trx_in_block": 29,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-06-03T05:35:45",
  "op": [
    "delegate_vesting_shares",
    {
      "delegator": "steem",
      "delegatee": "bitfamily",
      "vesting_shares": "8939.664187 VESTS"
    }
  ]
}
2019/03/04 06:25:42
parent authorbitfamily
parent permlinkd99rc5cv
authormissouri-pl
permlinkjnone1soh
title
body@@ -57,11 +57,46 @@ already - +. Just hoped I will see a new pos... ;)
json metadata{"app":"steemit/0.1","tags":["dtube"]}
Transaction InfoBlock #30850918/Trx e7d0fb18d445da7f178ff97beeb033a6bcb06f0a
View Raw JSON Data
{
  "trx_id": "e7d0fb18d445da7f178ff97beeb033a6bcb06f0a",
  "block": 30850918,
  "trx_in_block": 6,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-03-04T06:25:42",
  "op": [
    "comment",
    {
      "parent_author": "bitfamily",
      "parent_permlink": "d99rc5cv",
      "author": "missouri-pl",
      "permlink": "jnone1soh",
      "title": "",
      "body": "@@ -57,11 +57,46 @@\n  already\n- \n+. Just hoped I will see a new pos...\n ;)\n",
      "json_metadata": "{\"app\":\"steemit/0.1\",\"tags\":[\"dtube\"]}"
    }
  ]
}
ahmedjonyupvoted (5.00%) @bitfamily / 8f1ooelt
2019/03/04 06:23:03
voterahmedjony
authorbitfamily
permlink8f1ooelt
weight500 (5.00%)
Transaction InfoBlock #30850865/Trx 83608492b1923556a2aba80fc17c35da15a606cb
View Raw JSON Data
{
  "trx_id": "83608492b1923556a2aba80fc17c35da15a606cb",
  "block": 30850865,
  "trx_in_block": 23,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-03-04T06:23:03",
  "op": [
    "vote",
    {
      "voter": "ahmedjony",
      "author": "bitfamily",
      "permlink": "8f1ooelt",
      "weight": 500
    }
  ]
}
2019/03/04 06:20:54
parent authorbitfamily
parent permlinkd99rc5cv
authormissouri-pl
permlinkjnone1soh
titlejnone1soh
bodykinda nice tune, but bear in mind I have had a few shots already ;)
json metadata{"app":"dtube/0.8"}
Transaction InfoBlock #30850822/Trx 144499e72a4dffc664e5d2869a3347c2c4f33184
View Raw JSON Data
{
  "trx_id": "144499e72a4dffc664e5d2869a3347c2c4f33184",
  "block": 30850822,
  "trx_in_block": 15,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-03-04T06:20:54",
  "op": [
    "comment",
    {
      "parent_author": "bitfamily",
      "parent_permlink": "d99rc5cv",
      "author": "missouri-pl",
      "permlink": "jnone1soh",
      "title": "jnone1soh",
      "body": "kinda nice tune, but bear in mind I have had a few shots already ;)",
      "json_metadata": "{\"app\":\"dtube/0.8\"}"
    }
  ]
}
missouri-plupvoted (100.00%) @bitfamily / d99rc5cv
2019/03/04 06:12:57
votermissouri-pl
authorbitfamily
permlinkd99rc5cv
weight10000 (100.00%)
Transaction InfoBlock #30850663/Trx 8bb874698e021e732db24759d8929c5a6cf2f7be
View Raw JSON Data
{
  "trx_id": "8bb874698e021e732db24759d8929c5a6cf2f7be",
  "block": 30850663,
  "trx_in_block": 11,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-03-04T06:12:57",
  "op": [
    "vote",
    {
      "voter": "missouri-pl",
      "author": "bitfamily",
      "permlink": "d99rc5cv",
      "weight": 10000
    }
  ]
}
golluupvoted (5.00%) @bitfamily / 8f1ooelt
2019/03/04 05:04:03
votergollu
authorbitfamily
permlink8f1ooelt
weight500 (5.00%)
Transaction InfoBlock #30849286/Trx 7f5bf689dd3a0f1bd9708fcc16af58e6f599cd65
View Raw JSON Data
{
  "trx_id": "7f5bf689dd3a0f1bd9708fcc16af58e6f599cd65",
  "block": 30849286,
  "trx_in_block": 34,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-03-04T05:04:03",
  "op": [
    "vote",
    {
      "voter": "gollu",
      "author": "bitfamily",
      "permlink": "8f1ooelt",
      "weight": 500
    }
  ]
}
steemdelegated 17.844 SP to @bitfamily
2019/03/04 04:37:54
delegatorsteem
delegateebitfamily
vesting shares29021.427138 VESTS
Transaction InfoBlock #30848763/Trx 69d703123a0de4a7c1c6547cf404e07efdb0971a
View Raw JSON Data
{
  "trx_id": "69d703123a0de4a7c1c6547cf404e07efdb0971a",
  "block": 30848763,
  "trx_in_block": 11,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-03-04T04:37:54",
  "op": [
    "delegate_vesting_shares",
    {
      "delegator": "steem",
      "delegatee": "bitfamily",
      "vesting_shares": "29021.427138 VESTS"
    }
  ]
}
bitfamilyupdated options for 8f1ooelt
2019/03/04 04:33:48
authorbitfamily
permlink8f1ooelt
max accepted payout1000000.000 SBD
percent steem dollars10000
allow votestrue
allow curation rewardstrue
extensions[[0,{"beneficiaries":[{"account":"dtube","weight":1000}]}]]
Transaction InfoBlock #30848681/Trx 5bb96831418b9189c92e2b0212ddbf47a7a3b467
View Raw JSON Data
{
  "trx_id": "5bb96831418b9189c92e2b0212ddbf47a7a3b467",
  "block": 30848681,
  "trx_in_block": 1,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-03-04T04:33:48",
  "op": [
    "comment_options",
    {
      "author": "bitfamily",
      "permlink": "8f1ooelt",
      "max_accepted_payout": "1000000.000 SBD",
      "percent_steem_dollars": 10000,
      "allow_votes": true,
      "allow_curation_rewards": true,
      "extensions": [
        [
          0,
          {
            "beneficiaries": [
              {
                "account": "dtube",
                "weight": 1000
              }
            ]
          }
        ]
      ]
    }
  ]
}
bitfamilypublished a new post: 8f1ooelt
2019/03/04 04:33:48
parent author
parent permlinkdtube
authorbitfamily
permlink8f1ooelt
title2019 NEW YEAR MEGA MIX Mash Up - DJ TADGUE FT BONGO,KENYA,NAIJA,DANCEHALL.HIPHOP
body<center><a href='https://d.tube/#!/v/bitfamily/8f1ooelt'><img src='https://ipfs.io/ipfs/QmYVrKMs61b96pMGx5hDJA8v2n3pTT3o7fGVKAh4Bo7uVy'></a></center><hr> 2019 NEW YEAR MEGA MIX Mash Up - DJ TADGUE FT BONGO,KENYA,NAIJA,DANCEHALL.HIPHOP <hr><a href='https://d.tube/#!/v/bitfamily/8f1ooelt'> ▶️ DTube</a><br /><a href='https://ipfs.io/ipfs/QmcAwXowJyGREZJYeDkHbQPp6dDTALjrFMaYqdyJqy3o8N'> ▶️ IPFS</a>
json metadata{"video":{"info":{"title":"2019 NEW YEAR MEGA MIX Mash Up - DJ TADGUE FT BONGO,KENYA,NAIJA,DANCEHALL.HIPHOP","snaphash":"QmPoJvLNbgsM5EheE1NLvqSB1LTC34wpWRutRPrCtHEqMt","author":"bitfamily","permlink":"8f1ooelt","duration":124.245333,"filesize":190824777,"spritehash":"QmSLcTyHP51wVtoQEQ3u2t6UpoqMSBYg6RcpTEsEv8ENuT"},"content":{"videohash":"QmcAwXowJyGREZJYeDkHbQPp6dDTALjrFMaYqdyJqy3o8N","description":"2019 NEW YEAR MEGA MIX Mash Up - DJ TADGUE FT BONGO,KENYA,NAIJA,DANCEHALL.HIPHOP","tags":["dj"],"video240hash":"QmfVqVng6V8rp1Hd9UDe7CSbU27x6zdhhafisahh5eCr85","video480hash":"QmbCACyEJ481jL4GHQkfVBrGAG19n7Bijr6hJdWZbrcrZo"}},"tags":["dtube","dj"],"app":"dtube/0.8"}
Transaction InfoBlock #30848681/Trx 5bb96831418b9189c92e2b0212ddbf47a7a3b467
View Raw JSON Data
{
  "trx_id": "5bb96831418b9189c92e2b0212ddbf47a7a3b467",
  "block": 30848681,
  "trx_in_block": 1,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-03-04T04:33:48",
  "op": [
    "comment",
    {
      "parent_author": "",
      "parent_permlink": "dtube",
      "author": "bitfamily",
      "permlink": "8f1ooelt",
      "title": "2019 NEW YEAR MEGA MIX Mash Up - DJ TADGUE FT BONGO,KENYA,NAIJA,DANCEHALL.HIPHOP",
      "body": "<center><a href='https://d.tube/#!/v/bitfamily/8f1ooelt'><img src='https://ipfs.io/ipfs/QmYVrKMs61b96pMGx5hDJA8v2n3pTT3o7fGVKAh4Bo7uVy'></a></center><hr>\n\n2019 NEW YEAR MEGA MIX Mash Up - DJ TADGUE FT BONGO,KENYA,NAIJA,DANCEHALL.HIPHOP\n\n<hr><a href='https://d.tube/#!/v/bitfamily/8f1ooelt'> ▶️ DTube</a><br /><a href='https://ipfs.io/ipfs/QmcAwXowJyGREZJYeDkHbQPp6dDTALjrFMaYqdyJqy3o8N'> ▶️ IPFS</a>",
      "json_metadata": "{\"video\":{\"info\":{\"title\":\"2019 NEW YEAR MEGA MIX Mash Up - DJ TADGUE FT BONGO,KENYA,NAIJA,DANCEHALL.HIPHOP\",\"snaphash\":\"QmPoJvLNbgsM5EheE1NLvqSB1LTC34wpWRutRPrCtHEqMt\",\"author\":\"bitfamily\",\"permlink\":\"8f1ooelt\",\"duration\":124.245333,\"filesize\":190824777,\"spritehash\":\"QmSLcTyHP51wVtoQEQ3u2t6UpoqMSBYg6RcpTEsEv8ENuT\"},\"content\":{\"videohash\":\"QmcAwXowJyGREZJYeDkHbQPp6dDTALjrFMaYqdyJqy3o8N\",\"description\":\"2019 NEW YEAR MEGA MIX Mash Up - DJ TADGUE FT BONGO,KENYA,NAIJA,DANCEHALL.HIPHOP\",\"tags\":[\"dj\"],\"video240hash\":\"QmfVqVng6V8rp1Hd9UDe7CSbU27x6zdhhafisahh5eCr85\",\"video480hash\":\"QmbCACyEJ481jL4GHQkfVBrGAG19n7Bijr6hJdWZbrcrZo\"}},\"tags\":[\"dtube\",\"dj\"],\"app\":\"dtube/0.8\"}"
    }
  ]
}
bitfamilyupdated options for d99rc5cv
2019/03/04 03:35:33
authorbitfamily
permlinkd99rc5cv
max accepted payout1000000.000 SBD
percent steem dollars10000
allow votestrue
allow curation rewardstrue
extensions[[0,{"beneficiaries":[{"account":"dtube","weight":1000}]}]]
Transaction InfoBlock #30847517/Trx dacd4045d6ec04cdb99b771e2fe0a84a14ccd79f
View Raw JSON Data
{
  "trx_id": "dacd4045d6ec04cdb99b771e2fe0a84a14ccd79f",
  "block": 30847517,
  "trx_in_block": 16,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-03-04T03:35:33",
  "op": [
    "comment_options",
    {
      "author": "bitfamily",
      "permlink": "d99rc5cv",
      "max_accepted_payout": "1000000.000 SBD",
      "percent_steem_dollars": 10000,
      "allow_votes": true,
      "allow_curation_rewards": true,
      "extensions": [
        [
          0,
          {
            "beneficiaries": [
              {
                "account": "dtube",
                "weight": 1000
              }
            ]
          }
        ]
      ]
    }
  ]
}
bitfamilypublished a new post: d99rc5cv
2019/03/04 03:35:33
parent author
parent permlinkdtube
authorbitfamily
permlinkd99rc5cv
title2019 NEW AFROBEAT NAIJA ,KENYAN BONGO MIX STREET TAKEOVER 7 MIX - DJ NIJJOH
body<center><a href='https://d.tube/#!/v/bitfamily/d99rc5cv'><img src='https://ipfs.io/ipfs/QmeXCxsfV9vpwJLfEoAZpmYitTDjcXg8uVgjGgczy7P5Wu'></a></center><hr> 2019 NEW AFROBEAT NAIJA ,KENYAN BONGO MIX STREET TAKEOVER 7 MIX - DJ NIJJOH <hr><a href='https://d.tube/#!/v/bitfamily/d99rc5cv'> ▶️ DTube</a><br /><a href='https://ipfs.io/ipfs/QmejoKtM2hfjCdRwQp9vJ2JhKn9LdAP7BVmWsTGqp1HeGz'> ▶️ IPFS</a>
json metadata{"video":{"info":{"title":"2019 NEW AFROBEAT NAIJA ,KENYAN BONGO MIX STREET TAKEOVER 7 MIX - DJ NIJJOH","snaphash":"Qmc3KoD13S6XXk6PfKMWpdBrdzKXmE9Wfg2z6wxnGncAiq","author":"bitfamily","permlink":"d99rc5cv","duration":76.224,"filesize":117224780,"spritehash":"QmfGSRKD1Qr4Mc7SeeCdAH6TAy7xxko3wzB4GmdRB18VWs"},"content":{"videohash":"QmejoKtM2hfjCdRwQp9vJ2JhKn9LdAP7BVmWsTGqp1HeGz","description":"2019 NEW AFROBEAT NAIJA ,KENYAN BONGO MIX STREET TAKEOVER 7 MIX - DJ NIJJOH","tags":["dj"],"video240hash":"Qma8GW1Mh1QCuhFmPffqKLA7vrwRZpXdCMompaWTCtBYse","video480hash":"QmY15sDumkoF2HogFDQaJGu3rG79vqAFmFRWcEJ3TaNBdT"}},"tags":["dtube","dj"],"app":"dtube/0.8"}
Transaction InfoBlock #30847517/Trx dacd4045d6ec04cdb99b771e2fe0a84a14ccd79f
View Raw JSON Data
{
  "trx_id": "dacd4045d6ec04cdb99b771e2fe0a84a14ccd79f",
  "block": 30847517,
  "trx_in_block": 16,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-03-04T03:35:33",
  "op": [
    "comment",
    {
      "parent_author": "",
      "parent_permlink": "dtube",
      "author": "bitfamily",
      "permlink": "d99rc5cv",
      "title": "2019 NEW AFROBEAT NAIJA ,KENYAN BONGO MIX STREET TAKEOVER 7 MIX - DJ NIJJOH",
      "body": "<center><a href='https://d.tube/#!/v/bitfamily/d99rc5cv'><img src='https://ipfs.io/ipfs/QmeXCxsfV9vpwJLfEoAZpmYitTDjcXg8uVgjGgczy7P5Wu'></a></center><hr>\n\n2019 NEW AFROBEAT NAIJA ,KENYAN BONGO MIX STREET TAKEOVER 7 MIX - DJ NIJJOH\n\n<hr><a href='https://d.tube/#!/v/bitfamily/d99rc5cv'> ▶️ DTube</a><br /><a href='https://ipfs.io/ipfs/QmejoKtM2hfjCdRwQp9vJ2JhKn9LdAP7BVmWsTGqp1HeGz'> ▶️ IPFS</a>",
      "json_metadata": "{\"video\":{\"info\":{\"title\":\"2019 NEW AFROBEAT NAIJA ,KENYAN BONGO MIX STREET TAKEOVER 7 MIX - DJ NIJJOH\",\"snaphash\":\"Qmc3KoD13S6XXk6PfKMWpdBrdzKXmE9Wfg2z6wxnGncAiq\",\"author\":\"bitfamily\",\"permlink\":\"d99rc5cv\",\"duration\":76.224,\"filesize\":117224780,\"spritehash\":\"QmfGSRKD1Qr4Mc7SeeCdAH6TAy7xxko3wzB4GmdRB18VWs\"},\"content\":{\"videohash\":\"QmejoKtM2hfjCdRwQp9vJ2JhKn9LdAP7BVmWsTGqp1HeGz\",\"description\":\"2019 NEW AFROBEAT NAIJA ,KENYAN BONGO MIX STREET TAKEOVER 7 MIX - DJ NIJJOH\",\"tags\":[\"dj\"],\"video240hash\":\"Qma8GW1Mh1QCuhFmPffqKLA7vrwRZpXdCMompaWTCtBYse\",\"video480hash\":\"QmY15sDumkoF2HogFDQaJGu3rG79vqAFmFRWcEJ3TaNBdT\"}},\"tags\":[\"dtube\",\"dj\"],\"app\":\"dtube/0.8\"}"
    }
  ]
}
bitfamilyupdated options for t7zaj2kr
2019/03/04 03:15:09
authorbitfamily
permlinkt7zaj2kr
max accepted payout1000000.000 SBD
percent steem dollars10000
allow votestrue
allow curation rewardstrue
extensions[[0,{"beneficiaries":[{"account":"dtube","weight":1000}]}]]
Transaction InfoBlock #30847109/Trx bcb2543277a4bf0a2f27fdf7184601a2766afc18
View Raw JSON Data
{
  "trx_id": "bcb2543277a4bf0a2f27fdf7184601a2766afc18",
  "block": 30847109,
  "trx_in_block": 1,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-03-04T03:15:09",
  "op": [
    "comment_options",
    {
      "author": "bitfamily",
      "permlink": "t7zaj2kr",
      "max_accepted_payout": "1000000.000 SBD",
      "percent_steem_dollars": 10000,
      "allow_votes": true,
      "allow_curation_rewards": true,
      "extensions": [
        [
          0,
          {
            "beneficiaries": [
              {
                "account": "dtube",
                "weight": 1000
              }
            ]
          }
        ]
      ]
    }
  ]
}
bitfamilypublished a new post: t7zaj2kr
2019/03/04 03:15:09
parent author
parent permlinkdtube
authorbitfamily
permlinkt7zaj2kr
titlekenya dj part4
body<center><a href='https://d.tube/#!/v/bitfamily/t7zaj2kr'><img src='https://ipfs.io/ipfs/QmS659P8iFzuug5VBNneaXMAZxioBTNdDCAZZteoRRh8UF'></a></center><hr> kenya dj part4 <hr><a href='https://d.tube/#!/v/bitfamily/t7zaj2kr'> ▶️ DTube</a><br /><a href='https://ipfs.io/ipfs/QmTYXaR2oiZJq26vCBgrYiuu5PY69LRnDqVxp36iBvXhst'> ▶️ IPFS</a>
json metadata{"video":{"info":{"title":"kenya dj part4","snaphash":"QmSS92Ehanvrk5KyDUz7AFBd5yPqmEuVcRyAMvDZ5QBSff","author":"bitfamily","permlink":"t7zaj2kr","duration":121.066666,"filesize":186412877,"spritehash":"QmaCuGw85dWudtZz3PBK6TvfJp7Emd3jmWkezjbDQBAuKG"},"content":{"videohash":"QmTYXaR2oiZJq26vCBgrYiuu5PY69LRnDqVxp36iBvXhst","description":"kenya dj part4","tags":[""],"video240hash":"QmQNfNTsgFNGEyPiTHqQFW5rfjwouFhdNDNJFkvZA9DVVZ","video480hash":"QmYBscLWxhpNi4AuXZxfwugxxPHDo7Mf9r5vSTMTuDLiGp"}},"tags":["dtube",""],"app":"dtube/0.8"}
Transaction InfoBlock #30847109/Trx bcb2543277a4bf0a2f27fdf7184601a2766afc18
View Raw JSON Data
{
  "trx_id": "bcb2543277a4bf0a2f27fdf7184601a2766afc18",
  "block": 30847109,
  "trx_in_block": 1,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-03-04T03:15:09",
  "op": [
    "comment",
    {
      "parent_author": "",
      "parent_permlink": "dtube",
      "author": "bitfamily",
      "permlink": "t7zaj2kr",
      "title": "kenya dj part4",
      "body": "<center><a href='https://d.tube/#!/v/bitfamily/t7zaj2kr'><img src='https://ipfs.io/ipfs/QmS659P8iFzuug5VBNneaXMAZxioBTNdDCAZZteoRRh8UF'></a></center><hr>\n\nkenya dj part4\n\n<hr><a href='https://d.tube/#!/v/bitfamily/t7zaj2kr'> ▶️ DTube</a><br /><a href='https://ipfs.io/ipfs/QmTYXaR2oiZJq26vCBgrYiuu5PY69LRnDqVxp36iBvXhst'> ▶️ IPFS</a>",
      "json_metadata": "{\"video\":{\"info\":{\"title\":\"kenya dj part4\",\"snaphash\":\"QmSS92Ehanvrk5KyDUz7AFBd5yPqmEuVcRyAMvDZ5QBSff\",\"author\":\"bitfamily\",\"permlink\":\"t7zaj2kr\",\"duration\":121.066666,\"filesize\":186412877,\"spritehash\":\"QmaCuGw85dWudtZz3PBK6TvfJp7Emd3jmWkezjbDQBAuKG\"},\"content\":{\"videohash\":\"QmTYXaR2oiZJq26vCBgrYiuu5PY69LRnDqVxp36iBvXhst\",\"description\":\"kenya dj part4\",\"tags\":[\"\"],\"video240hash\":\"QmQNfNTsgFNGEyPiTHqQFW5rfjwouFhdNDNJFkvZA9DVVZ\",\"video480hash\":\"QmYBscLWxhpNi4AuXZxfwugxxPHDo7Mf9r5vSTMTuDLiGp\"}},\"tags\":[\"dtube\",\"\"],\"app\":\"dtube/0.8\"}"
    }
  ]
}
2019/02/13 08:21:03
parent authorbitfamily
parent permlinkblockstack-tutorial-multi-player-storage-tutorial-blockstack
authorsteemitboard
permlinksteemitboard-notify-bitfamily-20190213t082103000z
title
bodyCongratulations @bitfamily! You received a personal award! <table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@bitfamily/birthday1.png</td><td>Happy Birthday! - You are on the Steem blockchain for 1 year!</td></tr></table> <sub>_[Click here to view your Board](https://steemitboard.com/@bitfamily)_</sub> > Support [SteemitBoard's project](https://steemit.com/@steemitboard)! **[Vote for its witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1)** and **get one more award**!
json metadata{"image":["https://steemitboard.com/img/notify.png"]}
Transaction InfoBlock #30306420/Trx 347042873299ccdf192b60c3dd1f0d499d3216f9
View Raw JSON Data
{
  "trx_id": "347042873299ccdf192b60c3dd1f0d499d3216f9",
  "block": 30306420,
  "trx_in_block": 8,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-02-13T08:21:03",
  "op": [
    "comment",
    {
      "parent_author": "bitfamily",
      "parent_permlink": "blockstack-tutorial-multi-player-storage-tutorial-blockstack",
      "author": "steemitboard",
      "permlink": "steemitboard-notify-bitfamily-20190213t082103000z",
      "title": "",
      "body": "Congratulations @bitfamily! You received a personal award!\n\n<table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@bitfamily/birthday1.png</td><td>Happy Birthday! - You are on the Steem blockchain for 1 year!</td></tr></table>\n\n<sub>_[Click here to view your Board](https://steemitboard.com/@bitfamily)_</sub>\n\n\n> Support [SteemitBoard's project](https://steemit.com/@steemitboard)! **[Vote for its witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1)** and **get one more award**!",
      "json_metadata": "{\"image\":[\"https://steemitboard.com/img/notify.png\"]}"
    }
  ]
}
smitopblockchain operation: transfer from savings
2018/08/29 23:10:18
fromsmitop
request id20844
tobitfamily
amount3.333 SBD
memoHi, it looks like you're not voting for any witnesses. Witnesses help secure the Steem network. You should vote for some, at https://steemit.com/~witnesses, or by pressing 'Vote for witnesses' in the Steemit sidebar (top right corner). I'm a bot.
Transaction InfoBlock #25504931/Trx 331779f8366ccde3a8d48493a3af733d73a22f3f
View Raw JSON Data
{
  "trx_id": "331779f8366ccde3a8d48493a3af733d73a22f3f",
  "block": 25504931,
  "trx_in_block": 1,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-08-29T23:10:18",
  "op": [
    "transfer_from_savings",
    {
      "from": "smitop",
      "request_id": 20844,
      "to": "bitfamily",
      "amount": "3.333 SBD",
      "memo": "Hi, it looks like you're not voting for any witnesses. Witnesses help secure the Steem network. You should vote for some, at https://steemit.com/~witnesses, or by pressing 'Vote for witnesses' in the Steemit sidebar (top right corner). I'm a bot."
    }
  ]
}
steemdelegated 5.603 SP to @bitfamily
2018/07/30 10:38:39
delegatorsteem
delegateebitfamily
vesting shares9112.161429 VESTS
Transaction InfoBlock #24626265/Trx d93c4a0e5cdb12ecddcc817af74bd82a0336f5b0
View Raw JSON Data
{
  "trx_id": "d93c4a0e5cdb12ecddcc817af74bd82a0336f5b0",
  "block": 24626265,
  "trx_in_block": 38,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-07-30T10:38:39",
  "op": [
    "delegate_vesting_shares",
    {
      "delegator": "steem",
      "delegatee": "bitfamily",
      "vesting_shares": "9112.161429 VESTS"
    }
  ]
}
steemdelegated 18.136 SP to @bitfamily
2018/05/19 13:39:27
delegatorsteem
delegateebitfamily
vesting shares29495.936902 VESTS
Transaction InfoBlock #22568277/Trx 0c3a6d654168bb3927e299e67b6be543df2076e3
View Raw JSON Data
{
  "trx_id": "0c3a6d654168bb3927e299e67b6be543df2076e3",
  "block": 22568277,
  "trx_in_block": 4,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-05-19T13:39:27",
  "op": [
    "delegate_vesting_shares",
    {
      "delegator": "steem",
      "delegatee": "bitfamily",
      "vesting_shares": "29495.936902 VESTS"
    }
  ]
}
2018/04/30 10:50:21
voteranomaly
authorbitfamily
permlinkblockstack-tutorial-multi-player-storage-tutorial-blockstack
weight100 (1.00%)
Transaction InfoBlock #22017804/Trx 406004f41e842e918180d788f6cec7377b974987
View Raw JSON Data
{
  "trx_id": "406004f41e842e918180d788f6cec7377b974987",
  "block": 22017804,
  "trx_in_block": 22,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-04-30T10:50:21",
  "op": [
    "vote",
    {
      "voter": "anomaly",
      "author": "bitfamily",
      "permlink": "blockstack-tutorial-multi-player-storage-tutorial-blockstack",
      "weight": 100
    }
  ]
}
2018/04/30 10:20:00
parent author
parent permlinkblockchain
authorbitfamily
permlinkblockstack-tutorial-multi-player-storage-tutorial-blockstack
titleHow to build a decentralized microblog with multi-player storage | Blockstack Tutorial(멀티 플레이어 스토리지 분산된 microblog 구축 하는 방법)
body@@ -15,53 +15,63 @@ s:// -blockstack.org/tutorials/multi-player-storage +www.youtube.com/watch?time_continue=4&amp;v=w7Sa54H-CGg %3C/p%3E @@ -1812,33 +1812,32 @@ SignIn(e) %7B%3Cbr%3E%0A - &nbsp;e.preventD @@ -1846,25 +1846,24 @@ ault();%3Cbr%3E%0A - &nbsp;redire @@ -1950,25 +1950,24 @@ In(e) %7B%3Cbr%3E%0A - &nbsp;e.prev @@ -1980,25 +1980,24 @@ ault();%3Cbr%3E%0A - &nbsp;const @@ -2028,25 +2028,24 @@ .origin%3Cbr%3E%0A - &nbsp;redire @@ -2591,25 +2591,24 @@ mport %7B%3Cbr%3E%0A - &nbsp;isSign @@ -2618,25 +2618,24 @@ ending,%3Cbr%3E%0A - &nbsp;loadUs @@ -2642,25 +2642,24 @@ erData,%3Cbr%3E%0A - &nbsp;Person @@ -2660,25 +2660,24 @@ Person,%3Cbr%3E%0A - &nbsp;getFil @@ -2679,25 +2679,24 @@ etFile,%3Cbr%3E%0A - &nbsp;putFil @@ -2698,25 +2698,24 @@ utFile,%3Cbr%3E%0A - &nbsp;lookup @@ -2885,25 +2885,24 @@ rops) %7B%3Cbr%3E%0A - &nbsp;super( @@ -2914,25 +2914,24 @@ );%3Cbr%3E%0A%3Cbr%3E%0A - &nbsp;this.s @@ -2935,33 +2935,32 @@ s.state = %7B%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -2971,25 +2971,24 @@ rson: %7B%3Cbr%3E%0A - &nbsp;&nbsp; @@ -3010,33 +3010,32 @@ sp;name() %7B%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -3080,25 +3080,24 @@ ymous';%3Cbr%3E%0A - &nbsp;&nbsp; @@ -3113,33 +3113,32 @@ sp;&nbsp;%7D,%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -3161,33 +3161,32 @@ atarUrl() %7B%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -3239,25 +3239,24 @@ kImage;%3Cbr%3E%0A - &nbsp;&nbsp; @@ -3272,33 +3272,32 @@ sp;&nbsp;%7D,%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -3301,25 +3301,24 @@ nbsp;%7D,%3Cbr%3E%0A - &nbsp;&nbsp; @@ -3333,33 +3333,32 @@ ername: %22%22,%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -3374,25 +3374,24 @@ us: %22%22,%3Cbr%3E%0A - &nbsp;&nbsp; @@ -3410,25 +3410,24 @@ es: %5B%5D,%3Cbr%3E%0A - &nbsp;&nbsp; @@ -3448,25 +3448,24 @@ dex: 0,%3Cbr%3E%0A - &nbsp;&nbsp; @@ -3506,25 +3506,24 @@ ;&nbsp;%3Cbr%3E%0A - &nbsp;%7D;%3Cbr%3E @@ -3672,25 +3672,24 @@ der() %7B%3Cbr%3E%0A - &nbsp;const @@ -3720,25 +3720,24 @@ .props;%3Cbr%3E%0A - &nbsp;const @@ -3761,25 +3761,24 @@ .state;%3Cbr%3E%0A - &nbsp;const @@ -3809,25 +3809,24 @@ e;%3Cbr%3E%0A%3Cbr%3E%0A - &nbsp;return @@ -3828,25 +3828,24 @@ eturn (%3Cbr%3E%0A - &nbsp;&nbsp; @@ -3889,25 +3889,24 @@ erson ?%3Cbr%3E%0A - &nbsp;&nbsp; @@ -3941,33 +3941,32 @@ tainer%22&gt;%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -4003,33 +4003,32 @@ e=%22row%22&gt;%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -4098,33 +4098,32 @@ l-md-6%22&gt;%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -4190,33 +4190,32 @@ -md-12%22&gt;%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -4299,33 +4299,32 @@ ection%22&gt;%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -4393,25 +4393,24 @@ &lt;img%3Cbr%3E%0A - &nbsp;&nbsp; @@ -4553,33 +4553,32 @@ backImage %7D%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -4682,25 +4682,24 @@ avatar%22%3Cbr%3E%0A - &nbsp;&nbsp; @@ -4794,25 +4794,24 @@ -image%22%3Cbr%3E%0A - &nbsp;&nbsp; @@ -4878,33 +4878,32 @@ &nbsp;/&gt;%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -4993,33 +4993,32 @@ ername%22&gt;%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -5098,33 +5098,32 @@ ;&lt;h1&gt;%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -5270,25 +5270,24 @@ .name()%3Cbr%3E%0A - &nbsp;&nbsp; @@ -5419,33 +5419,32 @@ t;/span&gt;%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -5537,33 +5537,32 @@ &lt;/h1&gt;%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -5667,33 +5667,32 @@ t;/span&gt;%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -5774,33 +5774,32 @@ lt;span&gt;%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -5902,33 +5902,32 @@ %7C&amp;nbsp;%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -6073,33 +6073,32 @@ )&lt;/a&gt;%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -6181,33 +6181,32 @@ t;/span&gt;%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -6276,33 +6276,32 @@ lt;/div&gt;%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -6359,33 +6359,32 @@ lt;/div&gt;%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -6435,33 +6435,32 @@ iv&gt;%3Cbr%3E%0A%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -6528,33 +6528,32 @@ status%22&gt;%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -6632,33 +6632,32 @@ -md-12%22&gt;%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -6752,33 +6752,32 @@ put-status%22%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -6875,33 +6875,32 @@ .newStatus%7D%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -7018,33 +7018,32 @@ sChange(e)%7D%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -7147,33 +7147,32 @@ your mind?%22%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -7235,33 +7235,32 @@ &nbsp;/&gt;%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -7318,33 +7318,32 @@ lt;/div&gt;%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -7422,33 +7422,32 @@ -md-12%22&gt;%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -7515,33 +7515,32 @@ ;&lt;button%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -7644,33 +7644,32 @@ ary btn-lg%22%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -7790,25 +7790,24 @@ mit(e)%7D%3Cbr%3E%0A - &nbsp;&nbsp; @@ -7873,33 +7873,32 @@ ;&nbsp;&gt;%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -7974,33 +7974,32 @@ nbsp;Submit%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -8072,33 +8072,32 @@ /button&gt;%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -8155,33 +8155,32 @@ lt;/div&gt;%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -8231,33 +8231,32 @@ iv&gt;%3Cbr%3E%0A%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -8290,33 +8290,32 @@ lt;/div&gt;%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -8337,33 +8337,32 @@ lt;/div&gt;%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -8383,25 +8383,24 @@ : null%3Cbr%3E%0A - &nbsp;);%3Cbr%3E @@ -8615,33 +8615,32 @@ llMount() %7B%3Cbr%3E%0A - &nbsp;this.setSt @@ -8641,33 +8641,32 @@ .setState(%7B%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -8707,33 +8707,32 @@ ).profile),%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -8767,25 +8767,24 @@ sername%3Cbr%3E%0A - &nbsp;%7D);%3Cbr @@ -8916,33 +8916,32 @@ ge(event) %7B%3Cbr%3E%0A - &nbsp;this.setSt @@ -9019,33 +9019,32 @@ it(event) %7B%3Cbr%3E%0A - &nbsp;this.saveN @@ -9074,25 +9074,24 @@ Status)%3Cbr%3E%0A - &nbsp;this.s @@ -9096,33 +9096,32 @@ .setState(%7B%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -9136,25 +9136,24 @@ tus: %22%22%3Cbr%3E%0A - &nbsp;%7D)%3Cbr%3E @@ -9274,25 +9274,24 @@ Text) %7B%3Cbr%3E%0A - &nbsp;let st @@ -9324,25 +9324,24 @@ es%3Cbr%3E%0A%3Cbr%3E%0A - &nbsp;let st @@ -9349,25 +9349,24 @@ tus = %7B%3Cbr%3E%0A - &nbsp;&nbsp; @@ -9401,25 +9401,24 @@ ndex++,%3Cbr%3E%0A - &nbsp;&nbsp; @@ -9448,25 +9448,24 @@ trim(),%3Cbr%3E%0A - &nbsp;&nbsp; @@ -9493,25 +9493,24 @@ e.now()%3Cbr%3E%0A - &nbsp;%7D%3Cbr%3E%0A @@ -9510,25 +9510,24 @@ ;%7D%3Cbr%3E%0A%3Cbr%3E%0A - &nbsp;status @@ -9545,25 +9545,24 @@ status)%3Cbr%3E%0A - &nbsp;const @@ -9590,25 +9590,24 @@ false %7D%3Cbr%3E%0A - &nbsp;putFil @@ -9656,33 +9656,32 @@ ), options)%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -9695,33 +9695,32 @@ (() =&gt; %7B%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -9745,33 +9745,32 @@ .setState(%7B%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -9810,33 +9810,32 @@ s: statuses%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -9847,33 +9847,32 @@ sp;&nbsp;%7D)%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -10183,25 +10183,24 @@ es%22&gt;%3Cbr%3E%0A - &nbsp;%7Bthis. @@ -10263,25 +10263,24 @@ an&gt;%7D%3Cbr%3E%0A - &nbsp;%7Bthis. @@ -10315,25 +10315,24 @@ =&gt; (%3Cbr%3E%0A - &nbsp;&nbsp; @@ -10392,33 +10392,32 @@ tus.id%7D&gt;%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -10456,25 +10456,24 @@ s.text%7D%3Cbr%3E%0A - &nbsp;&nbsp; @@ -10499,33 +10499,32 @@ lt;/div&gt;%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -10527,25 +10527,24 @@ &nbsp;)%3Cbr%3E%0A - &nbsp;)%7D%3Cbr%3E @@ -10720,33 +10720,32 @@ idMount() %7B%3Cbr%3E%0A - + &nbsp;this.fetch @@ -10776,33 +10776,32 @@ tchData() %7B%3Cbr%3E%0A - &nbsp;this.setSt @@ -10825,25 +10825,24 @@ true %7D)%3Cbr%3E%0A - &nbsp;const @@ -10870,25 +10870,24 @@ false %7D%3Cbr%3E%0A - &nbsp;getFil @@ -10910,33 +10910,32 @@ ', options)%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -10953,33 +10953,32 @@ le) =&gt; %7B%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -11027,33 +11027,32 @@ le %7C%7C '%5B%5D')%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -11077,33 +11077,32 @@ .setState(%7B%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -11167,33 +11167,32 @@ ).profile),%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -11248,33 +11248,32 @@ ).username,%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -11324,33 +11324,32 @@ ses.length,%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -11390,33 +11390,32 @@ : statuses,%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -11427,33 +11427,32 @@ sp;&nbsp;%7D)%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -11452,33 +11452,32 @@ sp;&nbsp;%7D)%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -11494,33 +11494,32 @@ (() =&gt; %7B%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -11564,33 +11564,32 @@ g: false %7D)%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -14882,25 +14882,24 @@ ender((%3Cbr%3E%0A - &nbsp;&lt;Br @@ -14910,33 +14910,32 @@ rRouter&gt;%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -14946,33 +14946,32 @@ t;App /&gt;%3Cbr%3E%0A - &nbsp;&lt;/Brows @@ -15410,25 +15410,24 @@ &nbsp;:%3Cbr%3E%0A - &nbsp;&lt;Sw @@ -15431,33 +15431,32 @@ ;Switch&gt;%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -15467,25 +15467,24 @@ t;Route%3Cbr%3E%0A - &nbsp;&nbsp; @@ -15520,25 +15520,24 @@ rname?'%3Cbr%3E%0A - &nbsp;&nbsp; @@ -15563,25 +15563,24 @@ ender=%7B%3Cbr%3E%0A - &nbsp;&nbsp; @@ -15693,33 +15693,32 @@ rops%7D /&gt;%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -15733,25 +15733,24 @@ &nbsp;%7D%3Cbr%3E%0A - &nbsp;&nbsp; @@ -15757,33 +15757,32 @@ &nbsp;/&gt;%3Cbr%3E%0A - &nbsp;&lt;/Switc @@ -16191,25 +16191,24 @@ back: %7B%3Cbr%3E%0A - + &nbsp;disabl @@ -16417,25 +16417,24 @@ cal() %7B%3Cbr%3E%0A - + &nbsp;return @@ -16600,25 +16600,24 @@ ata() %7B%3Cbr%3E%0A - &nbsp;this.s @@ -16645,25 +16645,24 @@ true %7D)%3Cbr%3E%0A - &nbsp;if (th @@ -16677,25 +16677,24 @@ al()) %7B%3Cbr%3E%0A - &nbsp;&nbsp; @@ -16734,25 +16734,24 @@ false %7D%3Cbr%3E%0A - &nbsp;&nbsp; @@ -16790,25 +16790,24 @@ ptions)%3Cbr%3E%0A - &nbsp;&nbsp; @@ -16841,33 +16841,32 @@ le) =&gt; %7B%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -16927,33 +16927,32 @@ le %7C%7C '%5B%5D')%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -16989,33 +16989,32 @@ .setState(%7B%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -17091,33 +17091,32 @@ ).profile),%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -17188,25 +17188,24 @@ ername,%3Cbr%3E%0A - &nbsp;&nbsp; @@ -17272,33 +17272,32 @@ ses.length,%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -17354,25 +17354,24 @@ atuses,%3Cbr%3E%0A - &nbsp;&nbsp; @@ -17399,33 +17399,32 @@ sp;&nbsp;%7D)%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -17436,33 +17436,32 @@ sp;&nbsp;%7D)%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -17490,33 +17490,32 @@ (() =&gt; %7B%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -17576,25 +17576,24 @@ alse %7D)%3Cbr%3E%0A - &nbsp;&nbsp; @@ -17613,25 +17613,24 @@ nbsp;%7D)%3Cbr%3E%0A - &nbsp;%7D else @@ -17632,25 +17632,24 @@ else %7B%3Cbr%3E%0A - &nbsp;&nbsp; @@ -17709,25 +17709,24 @@ me%3Cbr%3E%0A%3Cbr%3E%0A - &nbsp;&nbsp; @@ -17755,25 +17755,24 @@ ername)%3Cbr%3E%0A - &nbsp;&nbsp; @@ -17809,33 +17809,32 @@ le) =&gt; %7B%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -17871,33 +17871,32 @@ .setState(%7B%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -17962,25 +17962,24 @@ ofile),%3Cbr%3E%0A - &nbsp;&nbsp; @@ -18039,25 +18039,24 @@ sername%3Cbr%3E%0A - &nbsp;&nbsp; @@ -18084,33 +18084,32 @@ sp;&nbsp;%7D)%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -18125,25 +18125,24 @@ nbsp;%7D)%3Cbr%3E%0A - &nbsp;&nbsp; @@ -18178,33 +18178,32 @@ or) =&gt; %7B%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -18269,25 +18269,24 @@ ofile')%3Cbr%3E%0A - &nbsp;&nbsp; @@ -18306,25 +18306,24 @@ nbsp;%7D)%3Cbr%3E%0A - &nbsp;%7D%3Cbr%3E%0A @@ -18934,25 +18934,24 @@ ptions)%3Cbr%3E%0A - &nbsp;.then( @@ -18961,33 +18961,32 @@ le) =&gt; %7B%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -19027,25 +19027,24 @@ %7C '%5B%5D')%3Cbr%3E%0A - &nbsp;&nbsp; @@ -19065,25 +19065,24 @@ State(%7B%3Cbr%3E%0A - &nbsp;&nbsp; @@ -19129,25 +19129,24 @@ length,%3Cbr%3E%0A - &nbsp;&nbsp; @@ -19182,25 +19182,24 @@ tatuses%3Cbr%3E%0A - &nbsp;&nbsp; @@ -19207,25 +19207,24 @@ nbsp;%7D)%3Cbr%3E%0A - &nbsp;%7D)%3Cbr%3E @@ -19220,25 +19220,24 @@ nbsp;%7D)%3Cbr%3E%0A - &nbsp;.catch @@ -19249,33 +19249,32 @@ or) =&gt; %7B%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -19315,25 +19315,24 @@ tuses')%3Cbr%3E%0A - &nbsp;%7D)%3Cbr%3E @@ -19328,25 +19328,24 @@ nbsp;%7D)%3Cbr%3E%0A - &nbsp;.final @@ -19358,25 +19358,24 @@ =&gt; %7B%3Cbr%3E%0A - &nbsp;&nbsp; @@ -19416,25 +19416,24 @@ alse %7D)%3Cbr%3E%0A - &nbsp;%7D)%3Cbr%3E @@ -19688,33 +19688,32 @@ &amp;&amp;%3Cbr%3E%0A - &nbsp;&lt;span&g @@ -19711,33 +19711,32 @@ lt;span&gt;%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -19759,25 +19759,24 @@ p;nbsp;%3Cbr%3E%0A - &nbsp;&nbsp; @@ -19842,33 +19842,32 @@ )&lt;/a&gt;%3Cbr%3E%0A - &nbsp;&lt;/span& @@ -19927,25 +19927,24 @@ p;&amp;%3Cbr%3E%0A - &nbsp;&lt;di @@ -19968,33 +19968,32 @@ status%22&gt;%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -20024,33 +20024,32 @@ -md-12%22&gt;%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -20100,25 +20100,24 @@ status%22%3Cbr%3E%0A - &nbsp;&nbsp; @@ -20175,25 +20175,24 @@ Status%7D%3Cbr%3E%0A - &nbsp;&nbsp; @@ -20259,25 +20259,24 @@ Change%7D%3Cbr%3E%0A - &nbsp;&nbsp; @@ -20340,25 +20340,24 @@ mind?%22%3Cbr%3E%0A - &nbsp;&nbsp; @@ -20376,33 +20376,32 @@ &nbsp;/&gt;%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -20411,33 +20411,32 @@ lt;/div&gt;%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -20478,33 +20478,32 @@ -right%22&gt;%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -20527,25 +20527,24 @@ ;button%3Cbr%3E%0A - &nbsp;&nbsp; @@ -20608,25 +20608,24 @@ btn-lg%22%3Cbr%3E%0A - &nbsp;&nbsp; @@ -20691,25 +20691,24 @@ Submit%7D%3Cbr%3E%0A - &nbsp;&nbsp; @@ -20726,33 +20726,32 @@ ;&nbsp;&gt;%3Cbr%3E%0A - &nbsp;&nbsp;&nbs @@ -20783,25 +20783,24 @@ ;Submit%3Cbr%3E%0A - &nbsp;&nbsp; @@ -20833,25 +20833,24 @@ ton&gt;%3Cbr%3E%0A - &nbsp;&nbsp; @@ -20872,17 +20872,16 @@ gt;%3Cbr%3E%0A - &nbsp;&l
json metadata{"tags":["blockchain"],"image":["https://blockstack.org/images/tutorials/multi-player-storage-status.png"],"links":["https://www.youtube.com/watch?time_continue=4&amp;v=w7Sa54H-CGg","http://localhost:8080/other_user.id를","http://localhost:8080/other_user.id","http://localhost:8080/your_blockstack.id"],"app":"steemit/0.1","format":"html"}
Transaction InfoBlock #22017197/Trx b4bfca9690b33c0fb24ff7bbd7c37e2883514b92
View Raw JSON Data
{
  "trx_id": "b4bfca9690b33c0fb24ff7bbd7c37e2883514b92",
  "block": 22017197,
  "trx_in_block": 18,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-04-30T10:20:00",
  "op": [
    "comment",
    {
      "parent_author": "",
      "parent_permlink": "blockchain",
      "author": "bitfamily",
      "permlink": "blockstack-tutorial-multi-player-storage-tutorial-blockstack",
      "title": "How to build a decentralized microblog with multi-player storage | Blockstack Tutorial(멀티 플레이어 스토리지 분산된 microblog 구축 하는 방법)",
      "body": "@@ -15,53 +15,63 @@\n s://\n-blockstack.org/tutorials/multi-player-storage\n+www.youtube.com/watch?time_continue=4&amp;v=w7Sa54H-CGg\n %3C/p%3E\n@@ -1812,33 +1812,32 @@\n SignIn(e) %7B%3Cbr%3E%0A\n- \n &nbsp;e.preventD\n@@ -1846,25 +1846,24 @@\n ault();%3Cbr%3E%0A\n- \n &nbsp;redire\n@@ -1950,25 +1950,24 @@\n In(e) %7B%3Cbr%3E%0A\n- \n &nbsp;e.prev\n@@ -1980,25 +1980,24 @@\n ault();%3Cbr%3E%0A\n- \n &nbsp;const \n@@ -2028,25 +2028,24 @@\n .origin%3Cbr%3E%0A\n- \n &nbsp;redire\n@@ -2591,25 +2591,24 @@\n mport %7B%3Cbr%3E%0A\n- \n &nbsp;isSign\n@@ -2618,25 +2618,24 @@\n ending,%3Cbr%3E%0A\n- \n &nbsp;loadUs\n@@ -2642,25 +2642,24 @@\n erData,%3Cbr%3E%0A\n- \n &nbsp;Person\n@@ -2660,25 +2660,24 @@\n Person,%3Cbr%3E%0A\n- \n &nbsp;getFil\n@@ -2679,25 +2679,24 @@\n etFile,%3Cbr%3E%0A\n- \n &nbsp;putFil\n@@ -2698,25 +2698,24 @@\n utFile,%3Cbr%3E%0A\n- \n &nbsp;lookup\n@@ -2885,25 +2885,24 @@\n rops) %7B%3Cbr%3E%0A\n- \n &nbsp;super(\n@@ -2914,25 +2914,24 @@\n );%3Cbr%3E%0A%3Cbr%3E%0A\n- \n &nbsp;this.s\n@@ -2935,33 +2935,32 @@\n s.state = %7B%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -2971,25 +2971,24 @@\n rson: %7B%3Cbr%3E%0A\n- \n &nbsp;&nbsp;\n@@ -3010,33 +3010,32 @@\n sp;name() %7B%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -3080,25 +3080,24 @@\n ymous';%3Cbr%3E%0A\n- \n &nbsp;&nbsp;\n@@ -3113,33 +3113,32 @@\n sp;&nbsp;%7D,%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -3161,33 +3161,32 @@\n atarUrl() %7B%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -3239,25 +3239,24 @@\n kImage;%3Cbr%3E%0A\n- \n &nbsp;&nbsp;\n@@ -3272,33 +3272,32 @@\n sp;&nbsp;%7D,%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -3301,25 +3301,24 @@\n nbsp;%7D,%3Cbr%3E%0A\n- \n &nbsp;&nbsp;\n@@ -3333,33 +3333,32 @@\n ername: %22%22,%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -3374,25 +3374,24 @@\n us: %22%22,%3Cbr%3E%0A\n- \n &nbsp;&nbsp;\n@@ -3410,25 +3410,24 @@\n es: %5B%5D,%3Cbr%3E%0A\n- \n &nbsp;&nbsp;\n@@ -3448,25 +3448,24 @@\n dex: 0,%3Cbr%3E%0A\n- \n &nbsp;&nbsp;\n@@ -3506,25 +3506,24 @@\n ;&nbsp;%3Cbr%3E%0A\n- \n &nbsp;%7D;%3Cbr%3E\n@@ -3672,25 +3672,24 @@\n der() %7B%3Cbr%3E%0A\n- \n &nbsp;const \n@@ -3720,25 +3720,24 @@\n .props;%3Cbr%3E%0A\n- \n &nbsp;const \n@@ -3761,25 +3761,24 @@\n .state;%3Cbr%3E%0A\n- \n &nbsp;const \n@@ -3809,25 +3809,24 @@\n e;%3Cbr%3E%0A%3Cbr%3E%0A\n- \n &nbsp;return\n@@ -3828,25 +3828,24 @@\n eturn (%3Cbr%3E%0A\n- \n &nbsp;&nbsp;\n@@ -3889,25 +3889,24 @@\n erson ?%3Cbr%3E%0A\n- \n &nbsp;&nbsp;\n@@ -3941,33 +3941,32 @@\n tainer%22&gt;%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -4003,33 +4003,32 @@\n e=%22row%22&gt;%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -4098,33 +4098,32 @@\n l-md-6%22&gt;%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -4190,33 +4190,32 @@\n -md-12%22&gt;%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -4299,33 +4299,32 @@\n ection%22&gt;%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -4393,25 +4393,24 @@\n &lt;img%3Cbr%3E%0A\n- \n &nbsp;&nbsp;\n@@ -4553,33 +4553,32 @@\n backImage %7D%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -4682,25 +4682,24 @@\n avatar%22%3Cbr%3E%0A\n- \n &nbsp;&nbsp;\n@@ -4794,25 +4794,24 @@\n -image%22%3Cbr%3E%0A\n- \n &nbsp;&nbsp;\n@@ -4878,33 +4878,32 @@\n &nbsp;/&gt;%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -4993,33 +4993,32 @@\n ername%22&gt;%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -5098,33 +5098,32 @@\n ;&lt;h1&gt;%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -5270,25 +5270,24 @@\n .name()%3Cbr%3E%0A\n- \n &nbsp;&nbsp;\n@@ -5419,33 +5419,32 @@\n t;/span&gt;%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -5537,33 +5537,32 @@\n &lt;/h1&gt;%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -5667,33 +5667,32 @@\n t;/span&gt;%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -5774,33 +5774,32 @@\n lt;span&gt;%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -5902,33 +5902,32 @@\n %7C&amp;nbsp;%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -6073,33 +6073,32 @@\n )&lt;/a&gt;%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -6181,33 +6181,32 @@\n t;/span&gt;%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -6276,33 +6276,32 @@\n lt;/div&gt;%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -6359,33 +6359,32 @@\n lt;/div&gt;%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -6435,33 +6435,32 @@\n iv&gt;%3Cbr%3E%0A%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -6528,33 +6528,32 @@\n status%22&gt;%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -6632,33 +6632,32 @@\n -md-12%22&gt;%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -6752,33 +6752,32 @@\n put-status%22%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -6875,33 +6875,32 @@\n .newStatus%7D%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -7018,33 +7018,32 @@\n sChange(e)%7D%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -7147,33 +7147,32 @@\n your mind?%22%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -7235,33 +7235,32 @@\n &nbsp;/&gt;%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -7318,33 +7318,32 @@\n lt;/div&gt;%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -7422,33 +7422,32 @@\n -md-12%22&gt;%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -7515,33 +7515,32 @@\n ;&lt;button%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -7644,33 +7644,32 @@\n ary btn-lg%22%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -7790,25 +7790,24 @@\n mit(e)%7D%3Cbr%3E%0A\n- \n &nbsp;&nbsp;\n@@ -7873,33 +7873,32 @@\n ;&nbsp;&gt;%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -7974,33 +7974,32 @@\n nbsp;Submit%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -8072,33 +8072,32 @@\n /button&gt;%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -8155,33 +8155,32 @@\n lt;/div&gt;%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -8231,33 +8231,32 @@\n iv&gt;%3Cbr%3E%0A%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -8290,33 +8290,32 @@\n lt;/div&gt;%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -8337,33 +8337,32 @@\n lt;/div&gt;%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -8383,25 +8383,24 @@\n  : null%3Cbr%3E%0A\n- \n &nbsp;);%3Cbr%3E\n@@ -8615,33 +8615,32 @@\n llMount() %7B%3Cbr%3E%0A\n- \n &nbsp;this.setSt\n@@ -8641,33 +8641,32 @@\n .setState(%7B%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -8707,33 +8707,32 @@\n ).profile),%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -8767,25 +8767,24 @@\n sername%3Cbr%3E%0A\n- \n &nbsp;%7D);%3Cbr\n@@ -8916,33 +8916,32 @@\n ge(event) %7B%3Cbr%3E%0A\n- \n &nbsp;this.setSt\n@@ -9019,33 +9019,32 @@\n it(event) %7B%3Cbr%3E%0A\n- \n &nbsp;this.saveN\n@@ -9074,25 +9074,24 @@\n Status)%3Cbr%3E%0A\n- \n &nbsp;this.s\n@@ -9096,33 +9096,32 @@\n .setState(%7B%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -9136,25 +9136,24 @@\n tus: %22%22%3Cbr%3E%0A\n- \n &nbsp;%7D)%3Cbr%3E\n@@ -9274,25 +9274,24 @@\n Text) %7B%3Cbr%3E%0A\n- \n &nbsp;let st\n@@ -9324,25 +9324,24 @@\n es%3Cbr%3E%0A%3Cbr%3E%0A\n- \n &nbsp;let st\n@@ -9349,25 +9349,24 @@\n tus = %7B%3Cbr%3E%0A\n- \n &nbsp;&nbsp;\n@@ -9401,25 +9401,24 @@\n ndex++,%3Cbr%3E%0A\n- \n &nbsp;&nbsp;\n@@ -9448,25 +9448,24 @@\n trim(),%3Cbr%3E%0A\n- \n &nbsp;&nbsp;\n@@ -9493,25 +9493,24 @@\n e.now()%3Cbr%3E%0A\n- \n &nbsp;%7D%3Cbr%3E%0A\n@@ -9510,25 +9510,24 @@\n ;%7D%3Cbr%3E%0A%3Cbr%3E%0A\n- \n &nbsp;status\n@@ -9545,25 +9545,24 @@\n status)%3Cbr%3E%0A\n- \n &nbsp;const \n@@ -9590,25 +9590,24 @@\n false %7D%3Cbr%3E%0A\n- \n &nbsp;putFil\n@@ -9656,33 +9656,32 @@\n ), options)%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -9695,33 +9695,32 @@\n (() =&gt; %7B%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -9745,33 +9745,32 @@\n .setState(%7B%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -9810,33 +9810,32 @@\n s: statuses%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -9847,33 +9847,32 @@\n sp;&nbsp;%7D)%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -10183,25 +10183,24 @@\n es%22&gt;%3Cbr%3E%0A\n- \n &nbsp;%7Bthis.\n@@ -10263,25 +10263,24 @@\n an&gt;%7D%3Cbr%3E%0A\n- \n &nbsp;%7Bthis.\n@@ -10315,25 +10315,24 @@\n =&gt; (%3Cbr%3E%0A\n- \n &nbsp;&nbsp;\n@@ -10392,33 +10392,32 @@\n tus.id%7D&gt;%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -10456,25 +10456,24 @@\n s.text%7D%3Cbr%3E%0A\n- \n &nbsp;&nbsp;\n@@ -10499,33 +10499,32 @@\n lt;/div&gt;%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -10527,25 +10527,24 @@\n &nbsp;)%3Cbr%3E%0A\n- \n &nbsp;)%7D%3Cbr%3E\n@@ -10720,33 +10720,32 @@\n idMount() %7B%3Cbr%3E%0A\n- \n \n+\n &nbsp;this.fetch\n@@ -10776,33 +10776,32 @@\n tchData() %7B%3Cbr%3E%0A\n- \n &nbsp;this.setSt\n@@ -10825,25 +10825,24 @@\n true %7D)%3Cbr%3E%0A\n- \n &nbsp;const \n@@ -10870,25 +10870,24 @@\n false %7D%3Cbr%3E%0A\n- \n &nbsp;getFil\n@@ -10910,33 +10910,32 @@\n ', options)%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -10953,33 +10953,32 @@\n le) =&gt; %7B%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -11027,33 +11027,32 @@\n le %7C%7C '%5B%5D')%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -11077,33 +11077,32 @@\n .setState(%7B%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -11167,33 +11167,32 @@\n ).profile),%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -11248,33 +11248,32 @@\n ).username,%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -11324,33 +11324,32 @@\n ses.length,%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -11390,33 +11390,32 @@\n : statuses,%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -11427,33 +11427,32 @@\n sp;&nbsp;%7D)%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -11452,33 +11452,32 @@\n sp;&nbsp;%7D)%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -11494,33 +11494,32 @@\n (() =&gt; %7B%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -11564,33 +11564,32 @@\n g: false %7D)%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -14882,25 +14882,24 @@\n ender((%3Cbr%3E%0A\n- \n &nbsp;&lt;Br\n@@ -14910,33 +14910,32 @@\n rRouter&gt;%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -14946,33 +14946,32 @@\n t;App /&gt;%3Cbr%3E%0A\n- \n &nbsp;&lt;/Brows\n@@ -15410,25 +15410,24 @@\n &nbsp;:%3Cbr%3E%0A\n- \n &nbsp;&lt;Sw\n@@ -15431,33 +15431,32 @@\n ;Switch&gt;%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -15467,25 +15467,24 @@\n t;Route%3Cbr%3E%0A\n- \n &nbsp;&nbsp;\n@@ -15520,25 +15520,24 @@\n rname?'%3Cbr%3E%0A\n- \n &nbsp;&nbsp;\n@@ -15563,25 +15563,24 @@\n ender=%7B%3Cbr%3E%0A\n- \n &nbsp;&nbsp;\n@@ -15693,33 +15693,32 @@\n rops%7D /&gt;%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -15733,25 +15733,24 @@\n &nbsp;%7D%3Cbr%3E%0A\n- \n &nbsp;&nbsp;\n@@ -15757,33 +15757,32 @@\n &nbsp;/&gt;%3Cbr%3E%0A\n- \n &nbsp;&lt;/Switc\n@@ -16191,25 +16191,24 @@\n back: %7B%3Cbr%3E%0A\n- \n \n+\n &nbsp;disabl\n@@ -16417,25 +16417,24 @@\n cal() %7B%3Cbr%3E%0A\n- \n \n+\n &nbsp;return\n@@ -16600,25 +16600,24 @@\n ata() %7B%3Cbr%3E%0A\n- \n &nbsp;this.s\n@@ -16645,25 +16645,24 @@\n true %7D)%3Cbr%3E%0A\n- \n &nbsp;if (th\n@@ -16677,25 +16677,24 @@\n al()) %7B%3Cbr%3E%0A\n- \n &nbsp;&nbsp;\n@@ -16734,25 +16734,24 @@\n false %7D%3Cbr%3E%0A\n- \n &nbsp;&nbsp;\n@@ -16790,25 +16790,24 @@\n ptions)%3Cbr%3E%0A\n- \n &nbsp;&nbsp;\n@@ -16841,33 +16841,32 @@\n le) =&gt; %7B%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -16927,33 +16927,32 @@\n le %7C%7C '%5B%5D')%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -16989,33 +16989,32 @@\n .setState(%7B%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -17091,33 +17091,32 @@\n ).profile),%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -17188,25 +17188,24 @@\n ername,%3Cbr%3E%0A\n- \n &nbsp;&nbsp;\n@@ -17272,33 +17272,32 @@\n ses.length,%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -17354,25 +17354,24 @@\n atuses,%3Cbr%3E%0A\n- \n &nbsp;&nbsp;\n@@ -17399,33 +17399,32 @@\n sp;&nbsp;%7D)%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -17436,33 +17436,32 @@\n sp;&nbsp;%7D)%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -17490,33 +17490,32 @@\n (() =&gt; %7B%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -17576,25 +17576,24 @@\n alse %7D)%3Cbr%3E%0A\n- \n &nbsp;&nbsp;\n@@ -17613,25 +17613,24 @@\n nbsp;%7D)%3Cbr%3E%0A\n- \n &nbsp;%7D else\n@@ -17632,25 +17632,24 @@\n  else %7B%3Cbr%3E%0A\n- \n &nbsp;&nbsp;\n@@ -17709,25 +17709,24 @@\n me%3Cbr%3E%0A%3Cbr%3E%0A\n- \n &nbsp;&nbsp;\n@@ -17755,25 +17755,24 @@\n ername)%3Cbr%3E%0A\n- \n &nbsp;&nbsp;\n@@ -17809,33 +17809,32 @@\n le) =&gt; %7B%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -17871,33 +17871,32 @@\n .setState(%7B%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -17962,25 +17962,24 @@\n ofile),%3Cbr%3E%0A\n- \n &nbsp;&nbsp;\n@@ -18039,25 +18039,24 @@\n sername%3Cbr%3E%0A\n- \n &nbsp;&nbsp;\n@@ -18084,33 +18084,32 @@\n sp;&nbsp;%7D)%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -18125,25 +18125,24 @@\n nbsp;%7D)%3Cbr%3E%0A\n- \n &nbsp;&nbsp;\n@@ -18178,33 +18178,32 @@\n or) =&gt; %7B%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -18269,25 +18269,24 @@\n ofile')%3Cbr%3E%0A\n- \n &nbsp;&nbsp;\n@@ -18306,25 +18306,24 @@\n nbsp;%7D)%3Cbr%3E%0A\n- \n &nbsp;%7D%3Cbr%3E%0A\n@@ -18934,25 +18934,24 @@\n ptions)%3Cbr%3E%0A\n- \n &nbsp;.then(\n@@ -18961,33 +18961,32 @@\n le) =&gt; %7B%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -19027,25 +19027,24 @@\n %7C '%5B%5D')%3Cbr%3E%0A\n- \n &nbsp;&nbsp;\n@@ -19065,25 +19065,24 @@\n State(%7B%3Cbr%3E%0A\n- \n &nbsp;&nbsp;\n@@ -19129,25 +19129,24 @@\n length,%3Cbr%3E%0A\n- \n &nbsp;&nbsp;\n@@ -19182,25 +19182,24 @@\n tatuses%3Cbr%3E%0A\n- \n &nbsp;&nbsp;\n@@ -19207,25 +19207,24 @@\n nbsp;%7D)%3Cbr%3E%0A\n- \n &nbsp;%7D)%3Cbr%3E\n@@ -19220,25 +19220,24 @@\n nbsp;%7D)%3Cbr%3E%0A\n- \n &nbsp;.catch\n@@ -19249,33 +19249,32 @@\n or) =&gt; %7B%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -19315,25 +19315,24 @@\n tuses')%3Cbr%3E%0A\n- \n &nbsp;%7D)%3Cbr%3E\n@@ -19328,25 +19328,24 @@\n nbsp;%7D)%3Cbr%3E%0A\n- \n &nbsp;.final\n@@ -19358,25 +19358,24 @@\n =&gt; %7B%3Cbr%3E%0A\n- \n &nbsp;&nbsp;\n@@ -19416,25 +19416,24 @@\n alse %7D)%3Cbr%3E%0A\n- \n &nbsp;%7D)%3Cbr%3E\n@@ -19688,33 +19688,32 @@\n  &amp;&amp;%3Cbr%3E%0A\n- \n &nbsp;&lt;span&g\n@@ -19711,33 +19711,32 @@\n lt;span&gt;%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -19759,25 +19759,24 @@\n p;nbsp;%3Cbr%3E%0A\n- \n &nbsp;&nbsp;\n@@ -19842,33 +19842,32 @@\n )&lt;/a&gt;%3Cbr%3E%0A\n- \n &nbsp;&lt;/span&\n@@ -19927,25 +19927,24 @@\n p;&amp;%3Cbr%3E%0A\n- \n &nbsp;&lt;di\n@@ -19968,33 +19968,32 @@\n status%22&gt;%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -20024,33 +20024,32 @@\n -md-12%22&gt;%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -20100,25 +20100,24 @@\n status%22%3Cbr%3E%0A\n- \n &nbsp;&nbsp;\n@@ -20175,25 +20175,24 @@\n Status%7D%3Cbr%3E%0A\n- \n &nbsp;&nbsp;\n@@ -20259,25 +20259,24 @@\n Change%7D%3Cbr%3E%0A\n- \n &nbsp;&nbsp;\n@@ -20340,25 +20340,24 @@\n  mind?%22%3Cbr%3E%0A\n- \n &nbsp;&nbsp;\n@@ -20376,33 +20376,32 @@\n &nbsp;/&gt;%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -20411,33 +20411,32 @@\n lt;/div&gt;%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -20478,33 +20478,32 @@\n -right%22&gt;%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -20527,25 +20527,24 @@\n ;button%3Cbr%3E%0A\n- \n &nbsp;&nbsp;\n@@ -20608,25 +20608,24 @@\n btn-lg%22%3Cbr%3E%0A\n- \n &nbsp;&nbsp;\n@@ -20691,25 +20691,24 @@\n Submit%7D%3Cbr%3E%0A\n- \n &nbsp;&nbsp;\n@@ -20726,33 +20726,32 @@\n ;&nbsp;&gt;%3Cbr%3E%0A\n- \n &nbsp;&nbsp;&nbs\n@@ -20783,25 +20783,24 @@\n ;Submit%3Cbr%3E%0A\n- \n &nbsp;&nbsp;\n@@ -20833,25 +20833,24 @@\n ton&gt;%3Cbr%3E%0A\n- \n &nbsp;&nbsp;\n@@ -20872,17 +20872,16 @@\n gt;%3Cbr%3E%0A\n- \n &nbsp;&l\n",
      "json_metadata": "{\"tags\":[\"blockchain\"],\"image\":[\"https://blockstack.org/images/tutorials/multi-player-storage-status.png\"],\"links\":[\"https://www.youtube.com/watch?time_continue=4&amp;v=w7Sa54H-CGg\",\"http://localhost:8080/other_user.id를\",\"http://localhost:8080/other_user.id\",\"http://localhost:8080/your_blockstack.id\"],\"app\":\"steemit/0.1\",\"format\":\"html\"}"
    }
  ]
}
2018/04/30 10:17:42
parent author
parent permlinkblockchain
authorbitfamily
permlinkblockstack-tutorial-multi-player-storage-tutorial-blockstack
titleBlockstack tutorial Multi-player Storage Tutorial(Blockstack 자습서 멀티 플레이어 스토리지 자습서)
body<html> <p>https://blockstack.org/tutorials/multi-player-storage</p> <p><br></p> <p>멀티 플레이어 스토리지 자습서<br> 이 튜토리얼에서 우리는 멀티 플레이어 가이아 스토리지를 사용 하 여 분산 된 마이크로-블로깅 응용 프로그램 구축을 거 야.<br> 이 애플 리 케이이 션 React.js 응용 프로그램을 완전히 분산 및 서버가 없는 것입니다. Id 및 스토리지 서비스 blockstack.js에 의해 제공 됩니다.<br> App은 다음을 수행할 수 있을 것입니다.<br> Blockstack를 사용 하 여 사용자 인증<br> 포스트 새로운 상태<br> 사용자 프로필에 상태 표시<br> 조회 다른 사용자가 자신의 프로필 및 상태 보고<br> 우리는 다음과 같은 도구가 사용할 것입니다.<br> 종속성 및 스크립트를 관리 하는 고궁<br> 요 반응 하는 Blockstack 응용 프로그램에 대 한 상용구 생성 하<br> 인증 사용자 및 액세스 가이아 스토리지 blockstack.js<br> 경험 있는 Blockstack 개발자, TL; DR:<br> 로그인 요청에 publish_data 범위 추가<br> GetFile 사용 ('filename.json ', {사용자: 'username.id', 해독: false}) 다른 사용자 로부터 파일을 읽을 수.<br> LookupProfile('username.id') 조회 사용자 프로필을 사용 하 여<br> PutFile 사용 ('filename.json ', 파일, 옵션) 옵션 설정 되어 있는 전에 {암호화: false} 암호화가 해제 되 고 다른 파일을 읽을 수 있도록.<br> 설치 및 생성<br> 첫째, Blockstack 응용 프로그램 생성기 함께 유사시 설치:</p> <p><br></p> <p><code>npm install -g yo generator-blockstack</code></p> <p><br></p> <p>다음으로, 우리의 응용 프로그램에 대 한 디렉터리를 만듭니다. 우리는 우리의 애플 리 케이 션 Publik 호출 됩니다.</p> <p><br></p> <p><code>mkdir publik &amp;&amp; cd publik</code></p> <p><br></p> <p>다음, Blockstack 반응 응용 프로그램 생성기를 사용 하 여 간단한 Blockstack 응용 프로그램을 생성 하기 위해:</p> <p><br></p> <p><code>yo blockstack:react</code></p> <p><br></p> <p>프롬프트에 응답 하는 후 응용 프로그램 생성기를 모든 응용 프로그램 파일을 만들고 모든 종속성을 설치.<br> 로컬로 응용 프로그램 실행:</p> <p><br></p> <p><code>npm start</code></p> <p><br></p> <p>멀티 플레이어 저장 범위<br> 멀티 플레이어 저장, 가이아에 저장 된 사용자 파일 사용자의 profile.json 파일에 애플 리 케이 션 속성을 통해 다른 사람에 게 보이는 만들어집니다. 모든 응용 프로그램을 멀티 플레이어 저장소를 사용 하 여 사용자의 profile.json 파일을 자체를 추가 해야 합니다. Blockstack 브라우저 인증 중 publish_data 범위 요청 될 때 자동으로이 부분을 처리 합니다.<br> 그래서 우리가 해야 할 첫 번째 일은 우리의 인증 요청 publish_data 범위를 포함 하도록 수정 합니다.<br> Src/components/App.jsx를 열고 처리기 메서드에 기호를 찾습니다.</p> <p><br></p> <p><code>handleSignIn(e) {<br> &nbsp;e.preventDefault();<br> &nbsp;redirectToSignIn();<br> }</code></p> <p><br></p> <p>이 메서드를 수정:</p> <p><code>handleSignIn(e) {<br> &nbsp;e.preventDefault();<br> &nbsp;const origin = window.location.origin<br> &nbsp;redirectToSignIn(origin, origin + '/manifest.json', ['store_write', 'publish_data'])<br> }</code></p> <p><br></p> <p>기본적으로 인증 요청 저장을 가능 하 게 store_write 범위 포함 note.<br> 로그 아웃 하 고 다시 로그인 하는 경우 인증 요청 이제 우리의 애플 리 케이 션에 대 한 저장 된 데이터를 게시 하려면 사용자를 자극할 것 이다.</p> <p><br></p> <p><br></p> <p><br></p> <p>게시 상태<br> 이 단계에서 우리는 게시 하 고 "상태"의 표시를 허용 하도록 기능을 추가 합니다.<br> 하자 src/components/Profile.jsx를 열고 blockstack.js에서 여러 가지 방법을 사용 하 게 될 것을 가져오기. 이 메서드는 putFile(), getFile() 및 lookupProfile(). Blockstack는 파일의 위쪽에 대 한 import 문을 추가할:</p> <p><br></p> <p><code>import {<br> &nbsp;isSignInPending,<br> &nbsp;loadUserData,<br> &nbsp;Person,<br> &nbsp;getFile,<br> &nbsp;putFile,<br> &nbsp;lookupProfile<br> } from 'blockstack';</code></p> <p><br></p> <p>다음, 우리는 몇 가지 속성을 추가 해야 합니다 constructor()에서 초기 상태. 생성자는 다음과 같이 한다:</p> <p><br></p> <p><code>constructor(props) {<br> &nbsp;super(props);<br> <br> &nbsp;this.state = {<br> &nbsp;&nbsp;&nbsp;person: {<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name() {<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 'Anonymous';<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;avatarUrl() {<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return avatarFallbackImage;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},<br> &nbsp;&nbsp;&nbsp;},<br> &nbsp;&nbsp;&nbsp;username: "",<br> &nbsp;&nbsp;&nbsp;newStatus: "",<br> &nbsp;&nbsp;&nbsp;statuses: [],<br> &nbsp;&nbsp;&nbsp;statusIndex: 0,<br> &nbsp;&nbsp;&nbsp;isLoading: false &nbsp;&nbsp;&nbsp;<br> &nbsp;};<br> }</code></p> <p><br></p> <p>이제 텍스트 입력을 추가 하 여 상태를 게시할 수 있도록 버튼을 제출 render() 메서드를 수정 하자. 다음으로 render() 메서드를 바꿉니다.</p> <p><br></p> <p><code>render() {<br> &nbsp;const { handleSignOut } = this.props;<br> &nbsp;const { person } = this.state;<br> &nbsp;const { username } = this.state;<br> <br> &nbsp;return (<br> &nbsp;&nbsp;&nbsp;!isSignInPending() &amp;&amp; person ?<br> &nbsp;&nbsp;&nbsp;&lt;div className="container"&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div className="row"&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div className="col-md-offset-3 col-md-6"&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div className="col-md-12"&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div className="avatar-section"&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;img<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;src={ person.avatarUrl() ? person.avatarUrl() : avatarFallbackImage }<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;className="img-rounded avatar"<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id="avatar-image"<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div className="username"&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;h1&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;span id="heading-name"&gt;{ person.name() ? person.name()<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: 'Nameless Person' }&lt;/span&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/h1&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;span&gt;{username}&lt;/span&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;span&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;nbsp;|&amp;nbsp;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;a onClick={ handleSignOut.bind(this) }&gt;(Logout)&lt;/a&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/span&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;<br> <br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div className="new-status"&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div className="col-md-12"&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;textarea className="input-status"<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value={this.state.newStatus}<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;onChange={e =&gt; this.handleNewStatusChange(e)}<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;placeholder="What's on your mind?"<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div className="col-md-12"&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;button<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;className="btn btn-primary btn-lg"<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;onClick={e =&gt; this.handleNewStatusSubmit(e)}<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Submit<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/button&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;<br> <br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;<br> &nbsp;&nbsp;&nbsp;&lt;/div&gt; : null<br> &nbsp;);<br> }<br> </code></p> <p><br></p> <p>위의 render() 방법에서 우리 또한 사용자의 Blockstack ID 표시 야. 우리는 사용자 프로필 데이터에서이 추출 해야 합니다. ComponentWillMount() 메서드를 찾아서 사람 속성 아래 username 속성을 추가 합니다.</p> <p><br></p> <p><code>componentWillMount() {<br> &nbsp;this.setState({<br> &nbsp;&nbsp;&nbsp;person: new Person(loadUserData().profile),<br> &nbsp;&nbsp;&nbsp;username: loadUserData().username<br> &nbsp;});<br> }</code></p> <p><br></p> <p>다음으로, 우리가 우리의 입력된 이벤트를 처리 하기 위해 두 가지 방법을 추가할 것입니다.</p> <p><br></p> <p><code>handleNewStatusChange(event) {<br> &nbsp;this.setState({newStatus: event.target.value})<br> }<br> <br> handleNewStatusSubmit(event) {<br> &nbsp;this.saveNewStatus(this.state.newStatus)<br> &nbsp;this.setState({<br> &nbsp;&nbsp;&nbsp;newStatus: ""<br> &nbsp;})<br> }</code></p> <p><br></p> <p>그리고 우리의 새로운 상태를 저장 하려면 저장 작업을 수행 하는 방법:</p> <p><br></p> <p><code>saveNewStatus(statusText) {<br> &nbsp;let statuses = this.state.statuses<br> <br> &nbsp;let status = {<br> &nbsp;&nbsp;&nbsp;id: this.state.statusIndex++,<br> &nbsp;&nbsp;&nbsp;text: statusText.trim(),<br> &nbsp;&nbsp;&nbsp;created_at: Date.now()<br> &nbsp;}<br> <br> &nbsp;statuses.unshift(status)<br> &nbsp;const options = { encrypt: false }<br> &nbsp;putFile('statuses.json', JSON.stringify(statuses), options)<br> &nbsp;&nbsp;&nbsp;.then(() =&gt; {<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.setState({<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;statuses: statuses<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;})<br> &nbsp;&nbsp;&nbsp;})<br> }</code></p> <p><br></p> <p><br></p> <p>이제 수 텍스트 상자에 상태를 입력 하 고 제출 버튼을 눌러 저장 해야 합니다.<br> 전송 버튼을 누르면 아무것도 일이 표시 됩니다. 때문에 우리 상태를 표시 하는 모든 코드를 추가 하지 않았습니다.<br> 상태 표시<br> Render() 메서드를 다시 이동 하 고 다음 블록 텍스트 입력을 포함 하는 div 요소 바로 아래 추가 버튼을 제출.</p> <p><br></p> <p><code>&lt;div className="col-md-12 statuses"&gt;<br> &nbsp;{this.state.isLoading &amp;&amp; &lt;span&gt;Loading...&lt;/span&gt;}<br> &nbsp;{this.state.statuses.map((status) =&gt; (<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div className="status" key={status.id}&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{status.text}<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;<br> &nbsp;&nbsp;&nbsp;)<br> &nbsp;)}<br> &lt;/div&gt;</code></p> <p><br></p> <p>우리 또한 페이지 로드 상태를 가져옵니다, 그래서 새로운 메서드 fetchData()를 호출 하 고 componentDidMount() 메서드에서 호출을 추가할 필요가</p> <p><br></p> <p><code>componentDidMount() {<br> &nbsp;this.fetchData()<br> }<br> <br> fetchData() {<br> &nbsp;this.setState({ isLoading: true })<br> &nbsp;const options = { decrypt: false }<br> &nbsp;getFile('statuses.json', options)<br> &nbsp;&nbsp;&nbsp;.then((file) =&gt; {<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var statuses = JSON.parse(file || '[]')<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.setState({<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;person: new Person(loadUserData().profile),<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;username: loadUserData().username,<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;statusIndex: statuses.length,<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;statuses: statuses,<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;})<br> &nbsp;&nbsp;&nbsp;})<br> &nbsp;&nbsp;&nbsp;.finally(() =&gt; {<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.setState({ isLoading: false })<br> &nbsp;&nbsp;&nbsp;})<br> }</code></p> <p><br></p> <p>이 시점에서 우리는 기본적인 마이크로 블로깅 애플 리 케이 션 우리가 게시 및 보기 상태를 사용할 수 있다. 그러나, 다른 사용자의 상태를 볼 수 없습니다입니다. 우리는 다음 단계에서 멀티 플레이어 부분에 받을 거 야. 하지만 먼저, 우리의 응용 프로그램에 아주 잠시.<br> Src/styles/style.css를 열고 기존 스타일을 다음으로 바꿉니다.</p> <p><br></p> <p><br></p> <p><code>/* Globals */<br> a,a:focus,a:hover{color:#fff;}<br> html,body{height:100%;text-align:center;background-color:#191b22;}<br> body{color:#fff}<br> .hide{display:none;}<br> .landing-heading{font-family:'Lato',Sans-Serif;font-weight:400;}<br> <br> /* Buttons */<br> .btn{font-family:'Lato',Sans-Serif;padding:0.5625rem 2.5rem;font-size:0.8125rem;font-weight:400;line-height:1.75rem;border-radius:0!important;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-ms-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;}<br> .btn-lg{font-size:1.5rem;padding:0.6875rem 3.4375rem;line-height:2.5rem;}<br> .btn:focus,.btn:active:focus,.btn.active:focus{outline:none;}<br> .btn-primary{color:#fff;border:1px solid #2C96FF;background-color:#2C96FF;}<br> .btn-primary:hover,.btn-primary:focus,.btn-primary:active{color:#fff;border:1px solid #1a6ec0;background-color:#1a6ec0;}<br> <br> /* Avatar */<br> .avatar{width:100px;height:100px;}<br> .avatar-section{margin-bottom:25px;display:flex;text-align:left;}<br> .username{margin-left:20px;}<br> <br> /* Scaffolding */<br> .site-wrapper{display:table;width:100%;height:100vh;min-height:100%;}<br> .site-wrapper-inner{display:flex;flex-direction:column;justify-content:center;margin-right:auto;margin-left:auto;width:100%;height:100vh;}<br> .panel-authed{padding:0 0 0 0;}<br> <br> /* Home button */<br> .btn-home-hello{position:absolute;font-family:'Source Code Pro',monospace;font-size:11px;font-weight:400;color:rgba(255,255,255,0.85);top:15px;left:15px;padding:3px 20px;background-color:rgba(255,255,255,0.15);border-radius:6px;-webkit-box-shadow:0px 0px 20px 0px rgba(0,0,0,0.15);-moz-box-shadow:0px 0px 20px 0px rgba(0,0,0,0.15);box-shadow:0px 0px 20px 0px rgba(0,0,0,0.15);}<br> <br> /* Input */<br> input, textarea{color:#000;padding:10px;}<br> .input-status{width:100%;height:70px;border-radius:6px;}<br> .new-status{text-align:right;}<br> <br> /* Statuses */<br> .statuses{padding-top:30px;}<br> .status{margin:15px 0px;padding:20px;background-color:#2e2e2e;border-radius:6px}</code></p> <p><br></p> <p>다 잘만 된다면, 우리와 끝까지 한다 이런식으로 뭔가:</p> <p><br></p> <p><img src="https://blockstack.org/images/tutorials/multi-player-storage-status.png" width="643" height="628"/></p> <p><br></p> <p>사용자 프로필 조회<br> 자 이제 우리의 Profile.jsx 다른 사용자의 프로필을 표시 하려면 수정할. 우리가 우리가 우리의 import 문을 이전에 추가 blockstack.js 제공 하는 lookupProfile() 메서드를 사용 해야 합니다. lookupProfile()는 Blockstack id를 조회 하 고 프로필 개체를 반환 합니다 프로필의 단일 매개 변수를 걸립니다.<br> 첫째, 우리가 만들어 줄 게 몇 가지 변화 우리의 애플 리 케이 션의 라우팅 구조를 우리가 http://localhost:8080/other_user.id를 방문 하 여 다른 사용자의 프로필을 볼 수 있도록<br> 반응-라우터를 설치:</p> <p><br></p> <p><code>npm install --save react-router-dom</code></p> <p><br></p> <p>Src/index.js를 열고 파일의 맨 추가:</p> <p><br></p> <p><code>import { BrowserRouter } from 'react-router-dom'</code></p> <p><br></p> <p>다음 ReactDOM.render() 메서드를 src/index.js에서 변경:</p> <p><code>ReactDOM.render((<br> &nbsp;&lt;BrowserRouter&gt;<br> &nbsp;&nbsp;&nbsp;&lt;App /&gt;<br> &nbsp;&lt;/BrowserRouter&gt;<br> ), document.getElementById('root'));</code></p> <p><br></p> <p>다음 우리는 다시 src/components/App.jsx에가 고 새로운 경로 추가 해야 합니다. Src/components/App.jsx를 열고 반응-라우터-dom에서 스위치와 경로 구성 요소를 가져옵니다.</p> <p><code>import { Switch, Route } from 'react-router-dom'</code></p> <p>다음으로, render() 방법에 아래 줄을 찾습니다.</p> <p><code>: &lt;Profile handleSignOut={ this.handleSignOut } /&gt;</code></p> <p><br></p> <p>그리고 그것을 다음으로 바꿉니다.</p> <p><code>&nbsp;:<br> &nbsp;&lt;Switch&gt;<br> &nbsp;&nbsp;&nbsp;&lt;Route<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;path='/:username?'<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;render={<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;routeProps =&gt; &lt;Profile handleSignOut={ this.handleSignOut } {...routeProps} /&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br> &nbsp;&nbsp;&nbsp;/&gt;<br> &nbsp;&lt;/Switch&gt;</code></p> <p><br></p> <p>이 경로를 설정 하 고 프로필 조회 사용자 이름으로 사용 될 경로 매개 변수를 캡처합니다.<br> 우리 또한 우리가 제대로 포함 된 URL 경로 처리할 수 있도록 우리의 시스템용 구성에 규칙을 추가 해야 합니다. 문자입니다. 예를 들어 http://localhost:8080/other_user.id 참고: 생산 애플 리 케이 션, 웹 서버가를 처리 하도록 구성 해야.<br> 루트 프로젝트 디렉터리에서 webpack.config.js을 열고 다음 줄을 찾습니다.</p> <p><br></p> <p><code>historyApiFallback: true,</code></p> <p><br></p> <p>이 변경:</p> <p><code>historyApiFallback: {<br> &nbsp;disableDotRule: true<br> },</code></p> <p>참고: 우리 원의 시작이 적용에 대 한 다시 실행 해야 합니다.<br> 이제 우리 src/components/Profile.jsx 다시 이동 하 고 우리가 로컬 사용자 프로필 또는 다른 사용자의 프로필을 보고 결정 하자 하는 단일 메서드 추가.</p> <p><br></p> <p><code>isLocal() {<br> &nbsp;return this.props.match.params.username ? false : true<br> }</code></p> <p><br></p> <p>다음 우리는 우리의 fetchData() 메서드를 수정할 수 있습니다 다음과 같이:</p> <p><br></p> <p><code>fetchData() {<br> &nbsp;this.setState({ isLoading: true })<br> &nbsp;if (this.isLocal()) {<br> &nbsp;&nbsp;&nbsp;const options = { decrypt: false }<br> &nbsp;&nbsp;&nbsp;getFile('statuses.json', options)<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.then((file) =&gt; {<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var statuses = JSON.parse(file || '[]')<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.setState({<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;person: new Person(loadUserData().profile),<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;username: loadUserData().username,<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;statusIndex: statuses.length,<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;statuses: statuses,<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;})<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;})<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.finally(() =&gt; {<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.setState({ isLoading: false })<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;})<br> &nbsp;} else {<br> &nbsp;&nbsp;&nbsp;const username = this.props.match.params.username<br> <br> &nbsp;&nbsp;&nbsp;lookupProfile(username)<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.then((profile) =&gt; {<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.setState({<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;person: new Person(profile),<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;username: username<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;})<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;})<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.catch((error) =&gt; {<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('could not resolve profile')<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;})<br> &nbsp;}<br> }</code></p> <p><br></p> <p>우리는 먼저 isLocal()을 사용 하 여 로컬 사용자 프로필 또는 다른 사용자의 프로필을 보고 있는 우리를 확인 하. 로컬 사용자 프로필 인 경우 우리 우리 앞에 추가 하는 getFile() 함수를 실행 됩니다. 그렇지 않으면, 우리는 lookupProfile() 메서드를 사용 하 여 사용자 이름에 속하는 프로필을 조회.<br> 참고: https 배포, 기본 Blockstack 코어 API 끝점 이름 조회에 대 한 https를 통해 제공 하는 핵심 API를 가리키도록 변경 되어야 합니다. 그렇지 않으면 이름 조회 혼합된 콘텐츠 차단 브라우저 인해 실패 합니다. 자세한 내용은 Blockstack.js 내용은를 참조 하십시오.<br> 사용자의 상태를 가져오기 위하여 추가 하는 다음 블록을 fetchData() lookupProfile(username) 호출한 후 바로... catch((error) {.} 블록 =&gt;:</p> <p><br></p> <p><code>const options = { username: username, decrypt: false }<br> getFile('statuses.json', options)<br> &nbsp;.then((file) =&gt; {<br> &nbsp;&nbsp;&nbsp;var statuses = JSON.parse(file || '[]')<br> &nbsp;&nbsp;&nbsp;this.setState({<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;statusIndex: statuses.length,<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;statuses: statuses<br> &nbsp;&nbsp;&nbsp;})<br> &nbsp;})<br> &nbsp;.catch((error) =&gt; {<br> &nbsp;&nbsp;&nbsp;console.log('could not fetch statuses')<br> &nbsp;})<br> &nbsp;.finally(() =&gt; {<br> &nbsp;&nbsp;&nbsp;this.setState({ isLoading: false })<br> &nbsp;})<br> </code></p> <p><br></p> <p>그리고 마지막으로, 우리 조건에 따라 로그 아웃 버튼, 상태 입력된 텍스트 상자를 렌더링 하 고 그래서 그들은 다른 사용자의 프로필을 볼 때 표시 되지 않습니다 단추를 제출 해야 합니다. Render() 메서드에서 확인 입력 하 고 로그 아웃 버튼을 배치 하 여 자신의 프로필을 보고 있는 {isLocal() &amp;&amp;...} 상태:</p> <p><code>{this.isLocal() &amp;&amp;<br> &nbsp;&lt;span&gt;<br> &nbsp;&nbsp;&nbsp;&amp;nbsp;|&amp;nbsp;<br> &nbsp;&nbsp;&nbsp;&lt;a onClick={ handleSignOut.bind(this) }&gt;(Logout)&lt;/a&gt;<br> &nbsp;&lt;/span&gt;<br> }<br> <br> //...<br> <br> {this.isLocal() &amp;&amp;<br> &nbsp;&lt;div className="new-status"&gt;<br> &nbsp;&nbsp;&nbsp;&lt;div className="col-md-12"&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;textarea className="input-status"<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value={this.state.newStatus}<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;onChange={this.handleNewStatusChange}<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;placeholder="What's on your mind?"<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/&gt;<br> &nbsp;&nbsp;&nbsp;&lt;/div&gt;<br> &nbsp;&nbsp;&nbsp;&lt;div className="col-md-12 text-right"&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;button<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;className="btn btn-primary btn-lg"<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;onClick={this.handleNewStatusSubmit}<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Submit<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/button&gt;<br> &nbsp;&nbsp;&nbsp;&lt;/div&gt;<br> &nbsp;&lt;/div&gt;<br> }</code></p> <p><br></p> <p>그리고 우리는 완료! 브라우저 프로 파일을 볼 수 http://localhost:8080/your_blockstack.id 가리킵니다. 참고: 등록된 Blockstack ID가을 작동 하도록 해야 합니다.</p> <p><br></p> <p><br></p> <p><br></p> <p><br></p> </html>
json metadata{"tags":["blockchain"],"image":["https://blockstack.org/images/tutorials/multi-player-storage-status.png"],"links":["https://blockstack.org/tutorials/multi-player-storage","http://localhost:8080/other_user.id를","http://localhost:8080/other_user.id","http://localhost:8080/your_blockstack.id"],"app":"steemit/0.1","format":"html"}
Transaction InfoBlock #22017151/Trx 1a745fa8cb786a964d42893e9d4f4c614a915c42
View Raw JSON Data
{
  "trx_id": "1a745fa8cb786a964d42893e9d4f4c614a915c42",
  "block": 22017151,
  "trx_in_block": 37,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-04-30T10:17:42",
  "op": [
    "comment",
    {
      "parent_author": "",
      "parent_permlink": "blockchain",
      "author": "bitfamily",
      "permlink": "blockstack-tutorial-multi-player-storage-tutorial-blockstack",
      "title": "Blockstack tutorial Multi-player Storage Tutorial(Blockstack 자습서 멀티 플레이어 스토리지 자습서)",
      "body": "<html>\n<p>https://blockstack.org/tutorials/multi-player-storage</p>\n<p><br></p>\n<p>멀티 플레이어 스토리지 자습서<br>\n이 튜토리얼에서 우리는 멀티 플레이어 가이아 스토리지를 사용 하 여 분산 된 마이크로-블로깅 응용 프로그램 구축을 거 야.<br>\n이 애플 리 케이이 션 React.js 응용 프로그램을 완전히 분산 및 서버가 없는 것입니다. Id 및 스토리지 서비스 blockstack.js에 의해 제공 됩니다.<br>\nApp은 다음을 수행할 수 있을 것입니다.<br>\nBlockstack를 사용 하 여 사용자 인증<br>\n포스트 새로운 상태<br>\n사용자 프로필에 상태 표시<br>\n조회 다른 사용자가 자신의 프로필 및 상태 보고<br>\n우리는 다음과 같은 도구가 사용할 것입니다.<br>\n종속성 및 스크립트를 관리 하는 고궁<br>\n요 반응 하는 Blockstack 응용 프로그램에 대 한 상용구 생성 하<br>\n인증 사용자 및 액세스 가이아 스토리지 blockstack.js<br>\n경험 있는 Blockstack 개발자, TL; DR:<br>\n로그인 요청에 publish_data 범위 추가<br>\nGetFile 사용 ('filename.json ', {사용자: 'username.id', 해독: false}) 다른 사용자 로부터 파일을 읽을 수.<br>\nLookupProfile('username.id') 조회 사용자 프로필을 사용 하 여<br>\nPutFile 사용 ('filename.json ', 파일, 옵션) 옵션 설정 되어 있는 전에 {암호화: false} 암호화가 해제 되 고 다른 파일을 읽을 수 있도록.<br>\n설치 및 생성<br>\n첫째, Blockstack 응용 프로그램 생성기 함께 유사시 설치:</p>\n<p><br></p>\n<p><code>npm install -g yo generator-blockstack</code></p>\n<p><br></p>\n<p>다음으로, 우리의 응용 프로그램에 대 한 디렉터리를 만듭니다. 우리는 우리의 애플 리 케이 션 Publik 호출 됩니다.</p>\n<p><br></p>\n<p><code>mkdir publik &amp;&amp; cd publik</code></p>\n<p><br></p>\n<p>다음, Blockstack 반응 응용 프로그램 생성기를 사용 하 여 간단한 Blockstack 응용 프로그램을 생성 하기 위해:</p>\n<p><br></p>\n<p><code>yo blockstack:react</code></p>\n<p><br></p>\n<p>프롬프트에 응답 하는 후 응용 프로그램 생성기를 모든 응용 프로그램 파일을 만들고 모든 종속성을 설치.<br>\n로컬로 응용 프로그램 실행:</p>\n<p><br></p>\n<p><code>npm start</code></p>\n<p><br></p>\n<p>멀티 플레이어 저장 범위<br>\n멀티 플레이어 저장, 가이아에 저장 된 사용자 파일 사용자의 profile.json 파일에 애플 리 케이 션 속성을 통해 다른 사람에 게 보이는 만들어집니다. 모든 응용 프로그램을 멀티 플레이어 저장소를 사용 하 여 사용자의 profile.json 파일을 자체를 추가 해야 합니다. Blockstack 브라우저 인증 중 publish_data 범위 요청 될 때 자동으로이 부분을 처리 합니다.<br>\n그래서 우리가 해야 할 첫 번째 일은 우리의 인증 요청 publish_data 범위를 포함 하도록 수정 합니다.<br>\nSrc/components/App.jsx를 열고 처리기 메서드에 기호를 찾습니다.</p>\n<p><br></p>\n<p><code>handleSignIn(e) {<br>\n &nbsp;e.preventDefault();<br>\n &nbsp;redirectToSignIn();<br>\n}</code></p>\n<p><br></p>\n<p>이 메서드를 수정:</p>\n<p><code>handleSignIn(e) {<br>\n &nbsp;e.preventDefault();<br>\n &nbsp;const origin = window.location.origin<br>\n &nbsp;redirectToSignIn(origin, origin + '/manifest.json', ['store_write', 'publish_data'])<br>\n}</code></p>\n<p><br></p>\n<p>기본적으로 인증 요청 저장을 가능 하 게 store_write 범위 포함 note.<br>\n로그 아웃 하 고 다시 로그인 하는 경우 인증 요청 이제 우리의 애플 리 케이 션에 대 한 저장 된 데이터를 게시 하려면 사용자를 자극할 것 이다.</p>\n<p><br></p>\n<p><br></p>\n<p><br></p>\n<p>게시 상태<br>\n이 단계에서 우리는 게시 하 고 \"상태\"의 표시를 허용 하도록 기능을 추가 합니다.<br>\n하자 src/components/Profile.jsx를 열고 blockstack.js에서 여러 가지 방법을 사용 하 게 될 것을 가져오기. 이 메서드는 putFile(), getFile() 및 lookupProfile(). Blockstack는 파일의 위쪽에 대 한 import 문을 추가할:</p>\n<p><br></p>\n<p><code>import {<br>\n &nbsp;isSignInPending,<br>\n &nbsp;loadUserData,<br>\n &nbsp;Person,<br>\n &nbsp;getFile,<br>\n &nbsp;putFile,<br>\n &nbsp;lookupProfile<br>\n} from 'blockstack';</code></p>\n<p><br></p>\n<p>다음, 우리는 몇 가지 속성을 추가 해야 합니다 constructor()에서 초기 상태. 생성자는 다음과 같이 한다:</p>\n<p><br></p>\n<p><code>constructor(props) {<br>\n &nbsp;super(props);<br>\n<br>\n &nbsp;this.state = {<br>\n &nbsp;&nbsp;&nbsp;person: {<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name() {<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 'Anonymous';<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;avatarUrl() {<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return avatarFallbackImage;<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},<br>\n &nbsp;&nbsp;&nbsp;},<br>\n &nbsp;&nbsp;&nbsp;username: \"\",<br>\n &nbsp;&nbsp;&nbsp;newStatus: \"\",<br>\n &nbsp;&nbsp;&nbsp;statuses: [],<br>\n &nbsp;&nbsp;&nbsp;statusIndex: 0,<br>\n &nbsp;&nbsp;&nbsp;isLoading: false &nbsp;&nbsp;&nbsp;<br>\n &nbsp;};<br>\n}</code></p>\n<p><br></p>\n<p>이제 텍스트 입력을 추가 하 여 상태를 게시할 수 있도록 버튼을 제출 render() 메서드를 수정 하자. 다음으로 render() 메서드를 바꿉니다.</p>\n<p><br></p>\n<p><code>render() {<br>\n &nbsp;const { handleSignOut } = this.props;<br>\n &nbsp;const { person } = this.state;<br>\n &nbsp;const { username } = this.state;<br>\n<br>\n &nbsp;return (<br>\n &nbsp;&nbsp;&nbsp;!isSignInPending() &amp;&amp; person ?<br>\n &nbsp;&nbsp;&nbsp;&lt;div className=\"container\"&gt;<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div className=\"row\"&gt;<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div className=\"col-md-offset-3 col-md-6\"&gt;<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div className=\"col-md-12\"&gt;<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div className=\"avatar-section\"&gt;<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;img<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;src={ person.avatarUrl() ? person.avatarUrl() : avatarFallbackImage }<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;className=\"img-rounded avatar\"<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;id=\"avatar-image\"<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/&gt;<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div className=\"username\"&gt;<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;h1&gt;<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;span id=\"heading-name\"&gt;{ person.name() ? person.name()<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: 'Nameless Person' }&lt;/span&gt;<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/h1&gt;<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;span&gt;{username}&lt;/span&gt;<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;span&gt;<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;nbsp;|&amp;nbsp;<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;a onClick={ handleSignOut.bind(this) }&gt;(Logout)&lt;/a&gt;<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/span&gt;<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;<br>\n<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div className=\"new-status\"&gt;<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div className=\"col-md-12\"&gt;<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;textarea className=\"input-status\"<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value={this.state.newStatus}<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;onChange={e =&gt; this.handleNewStatusChange(e)}<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;placeholder=\"What's on your mind?\"<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/&gt;<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div className=\"col-md-12\"&gt;<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;button<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;className=\"btn btn-primary btn-lg\"<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;onClick={e =&gt; this.handleNewStatusSubmit(e)}<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt;<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Submit<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/button&gt;<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;<br>\n<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;<br>\n &nbsp;&nbsp;&nbsp;&lt;/div&gt; : null<br>\n &nbsp;);<br>\n}<br>\n</code></p>\n<p><br></p>\n<p>위의 render() 방법에서 우리 또한 사용자의 Blockstack ID 표시 야. 우리는 사용자 프로필 데이터에서이 추출 해야 합니다. ComponentWillMount() 메서드를 찾아서 사람 속성 아래 username 속성을 추가 합니다.</p>\n<p><br></p>\n<p><code>componentWillMount() {<br>\n &nbsp;this.setState({<br>\n &nbsp;&nbsp;&nbsp;person: new Person(loadUserData().profile),<br>\n &nbsp;&nbsp;&nbsp;username: loadUserData().username<br>\n &nbsp;});<br>\n}</code></p>\n<p><br></p>\n<p>다음으로, 우리가 우리의 입력된 이벤트를 처리 하기 위해 두 가지 방법을 추가할 것입니다.</p>\n<p><br></p>\n<p><code>handleNewStatusChange(event) {<br>\n &nbsp;this.setState({newStatus: event.target.value})<br>\n}<br>\n<br>\nhandleNewStatusSubmit(event) {<br>\n &nbsp;this.saveNewStatus(this.state.newStatus)<br>\n &nbsp;this.setState({<br>\n &nbsp;&nbsp;&nbsp;newStatus: \"\"<br>\n &nbsp;})<br>\n}</code></p>\n<p><br></p>\n<p>그리고 우리의 새로운 상태를 저장 하려면 저장 작업을 수행 하는 방법:</p>\n<p><br></p>\n<p><code>saveNewStatus(statusText) {<br>\n &nbsp;let statuses = this.state.statuses<br>\n<br>\n &nbsp;let status = {<br>\n &nbsp;&nbsp;&nbsp;id: this.state.statusIndex++,<br>\n &nbsp;&nbsp;&nbsp;text: statusText.trim(),<br>\n &nbsp;&nbsp;&nbsp;created_at: Date.now()<br>\n &nbsp;}<br>\n<br>\n &nbsp;statuses.unshift(status)<br>\n &nbsp;const options = { encrypt: false }<br>\n &nbsp;putFile('statuses.json', JSON.stringify(statuses), options)<br>\n &nbsp;&nbsp;&nbsp;.then(() =&gt; {<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.setState({<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;statuses: statuses<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;})<br>\n &nbsp;&nbsp;&nbsp;})<br>\n}</code></p>\n<p><br></p>\n<p><br></p>\n<p>이제 수 텍스트 상자에 상태를 입력 하 고 제출 버튼을 눌러 저장 해야 합니다.<br>\n전송 버튼을 누르면 아무것도 일이 표시 됩니다. 때문에 우리 상태를 표시 하는 모든 코드를 추가 하지 않았습니다.<br>\n상태 표시<br>\nRender() 메서드를 다시 이동 하 고 다음 블록 텍스트 입력을 포함 하는 div 요소 바로 아래 추가 버튼을 제출.</p>\n<p><br></p>\n<p><code>&lt;div className=\"col-md-12 statuses\"&gt;<br>\n &nbsp;{this.state.isLoading &amp;&amp; &lt;span&gt;Loading...&lt;/span&gt;}<br>\n &nbsp;{this.state.statuses.map((status) =&gt; (<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;div className=\"status\" key={status.id}&gt;<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{status.text}<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/div&gt;<br>\n &nbsp;&nbsp;&nbsp;)<br>\n &nbsp;)}<br>\n&lt;/div&gt;</code></p>\n<p><br></p>\n<p>우리 또한 페이지 로드 상태를 가져옵니다, 그래서 새로운 메서드 fetchData()를 호출 하 고 componentDidMount() 메서드에서 호출을 추가할 필요가</p>\n<p><br></p>\n<p><code>componentDidMount() {<br>\n &nbsp;this.fetchData()<br>\n}<br>\n<br>\nfetchData() {<br>\n &nbsp;this.setState({ isLoading: true })<br>\n &nbsp;const options = { decrypt: false }<br>\n &nbsp;getFile('statuses.json', options)<br>\n &nbsp;&nbsp;&nbsp;.then((file) =&gt; {<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var statuses = JSON.parse(file || '[]')<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.setState({<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;person: new Person(loadUserData().profile),<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;username: loadUserData().username,<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;statusIndex: statuses.length,<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;statuses: statuses,<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;})<br>\n &nbsp;&nbsp;&nbsp;})<br>\n &nbsp;&nbsp;&nbsp;.finally(() =&gt; {<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.setState({ isLoading: false })<br>\n &nbsp;&nbsp;&nbsp;})<br>\n}</code></p>\n<p><br></p>\n<p>이 시점에서 우리는 기본적인 마이크로 블로깅 애플 리 케이 션 우리가 게시 및 보기 상태를 사용할 수 있다. 그러나, 다른 사용자의 상태를 볼 수 없습니다입니다. 우리는 다음 단계에서 멀티 플레이어 부분에 받을 거 야. 하지만 먼저, 우리의 응용 프로그램에 아주 잠시.<br>\nSrc/styles/style.css를 열고 기존 스타일을 다음으로 바꿉니다.</p>\n<p><br></p>\n<p><br></p>\n<p><code>/* Globals */<br>\na,a:focus,a:hover{color:#fff;}<br>\nhtml,body{height:100%;text-align:center;background-color:#191b22;}<br>\nbody{color:#fff}<br>\n.hide{display:none;}<br>\n.landing-heading{font-family:'Lato',Sans-Serif;font-weight:400;}<br>\n<br>\n/* Buttons */<br>\n.btn{font-family:'Lato',Sans-Serif;padding:0.5625rem 2.5rem;font-size:0.8125rem;font-weight:400;line-height:1.75rem;border-radius:0!important;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;-ms-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;}<br>\n.btn-lg{font-size:1.5rem;padding:0.6875rem 3.4375rem;line-height:2.5rem;}<br>\n.btn:focus,.btn:active:focus,.btn.active:focus{outline:none;}<br>\n.btn-primary{color:#fff;border:1px solid #2C96FF;background-color:#2C96FF;}<br>\n.btn-primary:hover,.btn-primary:focus,.btn-primary:active{color:#fff;border:1px solid #1a6ec0;background-color:#1a6ec0;}<br>\n<br>\n/* Avatar */<br>\n.avatar{width:100px;height:100px;}<br>\n.avatar-section{margin-bottom:25px;display:flex;text-align:left;}<br>\n.username{margin-left:20px;}<br>\n<br>\n/* Scaffolding */<br>\n.site-wrapper{display:table;width:100%;height:100vh;min-height:100%;}<br>\n.site-wrapper-inner{display:flex;flex-direction:column;justify-content:center;margin-right:auto;margin-left:auto;width:100%;height:100vh;}<br>\n.panel-authed{padding:0 0 0 0;}<br>\n<br>\n/* Home button */<br>\n.btn-home-hello{position:absolute;font-family:'Source Code Pro',monospace;font-size:11px;font-weight:400;color:rgba(255,255,255,0.85);top:15px;left:15px;padding:3px 20px;background-color:rgba(255,255,255,0.15);border-radius:6px;-webkit-box-shadow:0px 0px 20px 0px rgba(0,0,0,0.15);-moz-box-shadow:0px 0px 20px 0px rgba(0,0,0,0.15);box-shadow:0px 0px 20px 0px rgba(0,0,0,0.15);}<br>\n<br>\n/* Input */<br>\ninput, textarea{color:#000;padding:10px;}<br>\n.input-status{width:100%;height:70px;border-radius:6px;}<br>\n.new-status{text-align:right;}<br>\n<br>\n/* Statuses */<br>\n.statuses{padding-top:30px;}<br>\n.status{margin:15px 0px;padding:20px;background-color:#2e2e2e;border-radius:6px}</code></p>\n<p><br></p>\n<p>다 잘만 된다면, 우리와 끝까지 한다 이런식으로 뭔가:</p>\n<p><br></p>\n<p><img src=\"https://blockstack.org/images/tutorials/multi-player-storage-status.png\" width=\"643\" height=\"628\"/></p>\n<p><br></p>\n<p>사용자 프로필 조회<br>\n자 이제 우리의 Profile.jsx 다른 사용자의 프로필을 표시 하려면 수정할. 우리가 우리가 우리의 import 문을 이전에 추가 blockstack.js 제공 하는 lookupProfile() 메서드를 사용 해야 합니다. lookupProfile()는 Blockstack id를 조회 하 고 프로필 개체를 반환 합니다 프로필의 단일 매개 변수를 걸립니다.<br>\n첫째, 우리가 만들어 줄 게 몇 가지 변화 우리의 애플 리 케이 션의 라우팅 구조를 우리가 http://localhost:8080/other_user.id를 방문 하 여 다른 사용자의 프로필을 볼 수 있도록<br>\n반응-라우터를 설치:</p>\n<p><br></p>\n<p><code>npm install --save react-router-dom</code></p>\n<p><br></p>\n<p>Src/index.js를 열고 파일의 맨 추가:</p>\n<p><br></p>\n<p><code>import { BrowserRouter } from 'react-router-dom'</code></p>\n<p><br></p>\n<p>다음 ReactDOM.render() 메서드를 src/index.js에서 변경:</p>\n<p><code>ReactDOM.render((<br>\n &nbsp;&lt;BrowserRouter&gt;<br>\n &nbsp;&nbsp;&nbsp;&lt;App /&gt;<br>\n &nbsp;&lt;/BrowserRouter&gt;<br>\n), document.getElementById('root'));</code></p>\n<p><br></p>\n<p>다음 우리는 다시 src/components/App.jsx에가 고 새로운 경로 추가 해야 합니다. Src/components/App.jsx를 열고 반응-라우터-dom에서 스위치와 경로 구성 요소를 가져옵니다.</p>\n<p><code>import { Switch, Route } from 'react-router-dom'</code></p>\n<p>다음으로, render() 방법에 아래 줄을 찾습니다.</p>\n<p><code>: &lt;Profile handleSignOut={ this.handleSignOut } /&gt;</code></p>\n<p><br></p>\n<p>그리고 그것을 다음으로 바꿉니다.</p>\n<p><code>&nbsp;:<br>\n &nbsp;&lt;Switch&gt;<br>\n &nbsp;&nbsp;&nbsp;&lt;Route<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;path='/:username?'<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;render={<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;routeProps =&gt; &lt;Profile handleSignOut={ this.handleSignOut } {...routeProps} /&gt;<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>\n &nbsp;&nbsp;&nbsp;/&gt;<br>\n &nbsp;&lt;/Switch&gt;</code></p>\n<p><br></p>\n<p>이 경로를 설정 하 고 프로필 조회 사용자 이름으로 사용 될 경로 매개 변수를 캡처합니다.<br>\n우리 또한 우리가 제대로 포함 된 URL 경로 처리할 수 있도록 우리의 시스템용 구성에 규칙을 추가 해야 합니다. 문자입니다. 예를 들어 http://localhost:8080/other_user.id 참고: 생산 애플 리 케이 션, 웹 서버가를 처리 하도록 구성 해야.<br>\n루트 프로젝트 디렉터리에서 webpack.config.js을 열고 다음 줄을 찾습니다.</p>\n<p><br></p>\n<p><code>historyApiFallback: true,</code></p>\n<p><br></p>\n<p>이 변경:</p>\n<p><code>historyApiFallback: {<br>\n &nbsp;disableDotRule: true<br>\n},</code></p>\n<p>참고: 우리 원의 시작이 적용에 대 한 다시 실행 해야 합니다.<br>\n이제 우리 src/components/Profile.jsx 다시 이동 하 고 우리가 로컬 사용자 프로필 또는 다른 사용자의 프로필을 보고 결정 하자 하는 단일 메서드 추가.</p>\n<p><br></p>\n<p><code>isLocal() {<br>\n &nbsp;return this.props.match.params.username ? false : true<br>\n}</code></p>\n<p><br></p>\n<p>다음 우리는 우리의 fetchData() 메서드를 수정할 수 있습니다 다음과 같이:</p>\n<p><br></p>\n<p><code>fetchData() {<br>\n &nbsp;this.setState({ isLoading: true })<br>\n &nbsp;if (this.isLocal()) {<br>\n &nbsp;&nbsp;&nbsp;const options = { decrypt: false }<br>\n &nbsp;&nbsp;&nbsp;getFile('statuses.json', options)<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.then((file) =&gt; {<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var statuses = JSON.parse(file || '[]')<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.setState({<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;person: new Person(loadUserData().profile),<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;username: loadUserData().username,<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;statusIndex: statuses.length,<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;statuses: statuses,<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;})<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;})<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.finally(() =&gt; {<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.setState({ isLoading: false })<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;})<br>\n &nbsp;} else {<br>\n &nbsp;&nbsp;&nbsp;const username = this.props.match.params.username<br>\n<br>\n &nbsp;&nbsp;&nbsp;lookupProfile(username)<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.then((profile) =&gt; {<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.setState({<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;person: new Person(profile),<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;username: username<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;})<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;})<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.catch((error) =&gt; {<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('could not resolve profile')<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;})<br>\n &nbsp;}<br>\n}</code></p>\n<p><br></p>\n<p>우리는 먼저 isLocal()을 사용 하 여 로컬 사용자 프로필 또는 다른 사용자의 프로필을 보고 있는 우리를 확인 하. 로컬 사용자 프로필 인 경우 우리 우리 앞에 추가 하는 getFile() 함수를 실행 됩니다. 그렇지 않으면, 우리는 lookupProfile() 메서드를 사용 하 여 사용자 이름에 속하는 프로필을 조회.<br>\n참고: https 배포, 기본 Blockstack 코어 API 끝점 이름 조회에 대 한 https를 통해 제공 하는 핵심 API를 가리키도록 변경 되어야 합니다. 그렇지 않으면 이름 조회 혼합된 콘텐츠 차단 브라우저 인해 실패 합니다. 자세한 내용은 Blockstack.js 내용은를 참조 하십시오.<br>\n사용자의 상태를 가져오기 위하여 추가 하는 다음 블록을 fetchData() lookupProfile(username) 호출한 후 바로... catch((error) {.} 블록 =&gt;:</p>\n<p><br></p>\n<p><code>const options = { username: username, decrypt: false }<br>\ngetFile('statuses.json', options)<br>\n &nbsp;.then((file) =&gt; {<br>\n &nbsp;&nbsp;&nbsp;var statuses = JSON.parse(file || '[]')<br>\n &nbsp;&nbsp;&nbsp;this.setState({<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;statusIndex: statuses.length,<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;statuses: statuses<br>\n &nbsp;&nbsp;&nbsp;})<br>\n &nbsp;})<br>\n &nbsp;.catch((error) =&gt; {<br>\n &nbsp;&nbsp;&nbsp;console.log('could not fetch statuses')<br>\n &nbsp;})<br>\n &nbsp;.finally(() =&gt; {<br>\n &nbsp;&nbsp;&nbsp;this.setState({ isLoading: false })<br>\n &nbsp;})<br>\n</code></p>\n<p><br></p>\n<p>그리고 마지막으로, 우리 조건에 따라 로그 아웃 버튼, 상태 입력된 텍스트 상자를 렌더링 하 고 그래서 그들은 다른 사용자의 프로필을 볼 때 표시 되지 않습니다 단추를 제출 해야 합니다. Render() 메서드에서 확인 입력 하 고 로그 아웃 버튼을 배치 하 여 자신의 프로필을 보고 있는 {isLocal() &amp;&amp;...} 상태:</p>\n<p><code>{this.isLocal() &amp;&amp;<br>\n &nbsp;&lt;span&gt;<br>\n &nbsp;&nbsp;&nbsp;&amp;nbsp;|&amp;nbsp;<br>\n &nbsp;&nbsp;&nbsp;&lt;a onClick={ handleSignOut.bind(this) }&gt;(Logout)&lt;/a&gt;<br>\n &nbsp;&lt;/span&gt;<br>\n}<br>\n<br>\n//...<br>\n<br>\n{this.isLocal() &amp;&amp;<br>\n &nbsp;&lt;div className=\"new-status\"&gt;<br>\n &nbsp;&nbsp;&nbsp;&lt;div className=\"col-md-12\"&gt;<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;textarea className=\"input-status\"<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value={this.state.newStatus}<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;onChange={this.handleNewStatusChange}<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;placeholder=\"What's on your mind?\"<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/&gt;<br>\n &nbsp;&nbsp;&nbsp;&lt;/div&gt;<br>\n &nbsp;&nbsp;&nbsp;&lt;div className=\"col-md-12 text-right\"&gt;<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;button<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;className=\"btn btn-primary btn-lg\"<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;onClick={this.handleNewStatusSubmit}<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&gt;<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Submit<br>\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;/button&gt;<br>\n &nbsp;&nbsp;&nbsp;&lt;/div&gt;<br>\n &nbsp;&lt;/div&gt;<br>\n}</code></p>\n<p><br></p>\n<p>그리고 우리는 완료! 브라우저 프로 파일을 볼 수 http://localhost:8080/your_blockstack.id 가리킵니다. 참고: 등록된 Blockstack ID가을 작동 하도록 해야 합니다.</p>\n<p><br></p>\n<p><br></p>\n<p><br></p>\n<p><br></p>\n</html>",
      "json_metadata": "{\"tags\":[\"blockchain\"],\"image\":[\"https://blockstack.org/images/tutorials/multi-player-storage-status.png\"],\"links\":[\"https://blockstack.org/tutorials/multi-player-storage\",\"http://localhost:8080/other_user.id를\",\"http://localhost:8080/other_user.id\",\"http://localhost:8080/your_blockstack.id\"],\"app\":\"steemit/0.1\",\"format\":\"html\"}"
    }
  ]
}
2018/04/30 10:00:36
parent author
parent permlinkblockchain
authorbitfamily
permlinkhow-to-build-a-todolist-application-with-blockstack
titleHow to build a TodoList application with Blockstack (Blockstack와 TodoList 응용 프로그램을 구축 하는 방법)
body<html> <p><br></p> <p><br></p> <p><br></p> <p>https://www.youtube.com/watch?v=oyvg-h0obFw</p> <p>요구 사항:</p> <ul> <li>blockstack browser</li> <li>node.js LTS Version -&gt;&nbsp;<code>v6.11.2</code></li> </ul> <p>지 고 시작-설치 종속성 &amp; 실행된 서버$&nbsp;git&nbsp;clone&nbsp;[email protected]:blockstack/blockstack-todos.git$&nbsp;cd&nbsp;blockstack-todos$&nbsp;yarn&nbsp;install$&nbsp;npm&nbsp;run&nbsp;start<br> 로그인-어떻게 작동<br> 기호에 Blockstack 버튼을 클릭 하면 임시 키를 응용 프로그램 내에서 생성 됩니다. 그냥 응용 프로그램의 특정 인스턴스에 대 한 사용 됩니다,이 키를 그냥 로그인 요청을 서명 하는 데 사용 됩니다. 그것은 또한 브라우저에 전송 하 고 Blockstack 노드를 돌아오기 데이터를 암호화 하는 데 사용 되는 공개 키를 생성 합니다. Blockstack 저장소에 데이터를 저장 하는 응용 프로그램 수 있습니다. 서명된 인증 요청 Blockstack는 JSON 웹 토큰을 통해 전송 됩니다.<br> 토큰을 해독 하 고 정보 보유 하 고 있습니다 수 <a href="http://jwt.io/">jwt.io</a> 이동한 거기 전체 토큰을 붙여 넣습니다. 출력은 아래와 유사한 좀 해야 합니다.</p> <p><br> <code>{</code><br> <code>&nbsp; "jti":"bbf82977-cc3e-4593-bacc-33ff3b749790",</code><br> <code>&nbsp; "iat":1501784293,</code><br> <code>&nbsp; "exp":1501787893,</code><br> <code>&nbsp; "iss":"did:btc-addr:1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa",</code><br> <code>&nbsp; "public_keys":[</code><br> <code>&nbsp; &nbsp; "a09932dx081273xmreDII8yhjd0m8ioawfokljISHhejrnHG"</code><br> <code>&nbsp; ],</code><br> <code>&nbsp; "domain_name":"</code><a href="http://localhost:8080/"><code>http://localhost:8080/</code></a><code>",</code><br> <code>&nbsp; "manifest_uri":"</code><a href="http://localhost:8080/manifest.json"><code>http://localhost:8080/manifest.json</code></a><code>",</code><br> <code>&nbsp; "redirect_uri":"</code><a href="http://localhost:8080/"><code>http://localhost:8080/</code></a><code>",</code><br> <code>&nbsp; "scopes":[</code><br> <code>&nbsp; &nbsp; "store-write"</code><br> <code>&nbsp; ]</code>}<br> <br> <br> 로그인 버튼을 클릭 하면 한 모달 뜹니다. 승인을 클릭 하면 다음 작업이 수행 됩니다.요청은 브라우저에서 로컬 blockstack 코어 노드로 전송 됩니다.Blockstack 코어 노드는 응용 프로그램에 반환 되는 세션 토큰을 생성 합니다.이 세션 토큰을 읽고 개인 Blockstack 저장소에 파일을 쓸 응용 프로그램을 수 있습니다.인증 응답 다음 위의 authRequest와 비슷한 생성 됩니다.authResponse는 또한 응용 프로그램만을 위한 개인 키를 포함 합니다. 응용 프로그램을 저장소에서 데이터를 암호화 수 있습니다.Todo 응용 프로그램에 로그인 하는 게 지금!<br> 스토리지-그것은 어떻게 작동행동에 가이아 저장 모든의 몇 가지를 추가 하십시오. 아마 볼 하려는 응용 프로그램의 목록을 Blockstack의 상단에 내장. 나는 다음과 같은 추가:소프트웨어 패키지 관리자는 blockchain에 의해 확보인간의 읽을 수 있는 이름으로 변경할 수 급류분산 트위터이러한 모든 지금 가이아 허브 Blockstack id 연결에 저장 된 가이아 허브에 대 한 허브 설명서를 참조 하십시오.자바 스크립트 콘솔을 열고 다음 명령을 실행 하 여 방금 추가한 todos.json 파일을 가져올 수 있습니다.</p> <p><br> <code>blockstack.getFile("todos.json",&nbsp;{&nbsp;decrypt:&nbsp;true&nbsp;}).then((file)&nbsp;=&gt;&nbsp;{console.log(file)})</code></p> <p><br> 최근에 추가 된 모든을 표시 됩니다. 위에서 만든 모든 다음 JSON 생성:</p> <p><br> <code>[</code><br> <code>&nbsp; {</code><br> <code>&nbsp; &nbsp; "id":2,</code><br> <code>&nbsp; &nbsp; "text":"Software&nbsp;package&nbsp;manager&nbsp;secured&nbsp;by&nbsp;the&nbsp;blockchain",</code><br> <code>&nbsp; &nbsp; "completed":false</code><br> <code>&nbsp; },</code><br> <code>&nbsp; {</code><br> <code>&nbsp; &nbsp; "id":1,</code><br> <code>&nbsp; &nbsp; "text":"Mutable&nbsp;torrents&nbsp;with&nbsp;human&nbsp;readable&nbsp;names",</code><br> <code>&nbsp; &nbsp; "completed":false</code><br> <code>&nbsp; },</code><br> <code>&nbsp; {</code><br> <code>&nbsp; &nbsp; "id":0,</code><br> <code>&nbsp; &nbsp; "text":"Decentralized&nbsp;twitter",</code><br> <code>&nbsp; &nbsp; "completed":false</code><br> <code>&nbsp; }</code>]</p> <p><br> 이제 다른 todo와 마크 완료 추가:[x] Blockstack Todo소프트웨어 패키지 관리자는 blockchain에 의해 확보인간의 읽을 수 있는 이름으로 변경할 수 급류분산 트위터자바 스크립트 콘솔을 사용 하 여 새로 생성 된 파일을 가져올 때 변경을 반영 됩니다.<br> <br> <code>[</code><br> <code>&nbsp; {</code><br> <code>&nbsp; &nbsp; "id":3,</code><br> <code>&nbsp; &nbsp; "text":"Blockstack&nbsp;Todo",</code><br> <code>&nbsp; &nbsp; "completed":true</code><br> <code>&nbsp; },</code><br> <code>&nbsp; {</code><br> <code>&nbsp; &nbsp; "id":2,</code><br> <code>&nbsp; &nbsp; "text":"Software&nbsp;package&nbsp;manager&nbsp;secured&nbsp;by&nbsp;the&nbsp;blockchain",</code><br> <code>&nbsp; &nbsp; "completed":false</code><br> <code>&nbsp; },</code><br> <code>&nbsp; {</code><br> <code>&nbsp; &nbsp; "id":1,</code><br> <code>&nbsp; &nbsp; "text":"Mutable&nbsp;torrents&nbsp;with&nbsp;human&nbsp;readable&nbsp;names",</code><br> <code>&nbsp; &nbsp; "completed":false</code><br> <code>&nbsp; },</code><br> <code>&nbsp; {</code><br> <code>&nbsp; &nbsp; "id":0,</code><br> <code>&nbsp; &nbsp; "text":"Decentralized&nbsp;twitter",</code><br> <code>&nbsp; &nbsp; "completed":false</code><br> <code>&nbsp; }</code>]<br> <br> 로그인-구현:</p> <p><code>signIn&nbsp;()&nbsp;{</code><br> <code>&nbsp; const&nbsp;blockstack&nbsp;=&nbsp;this.blockstack</code><br> <code>&nbsp; blockstack.redirectToSignIn()</code>}</p> <p><br> 때이 단추를 위에서 설명한 인증 요청 생성 되 고 사용자는 그들의 blockstack-브라우저 로그인 승인에 리디렉션됩니다. 사용자 승인 로그인 되 면 응용 프로그램은 authResponse를 처리 해야 합니다. 이것은 응용 프로그램 루트에 페이지 src/App.vue에서 일어나 /:</p> <p><br> <code>if&nbsp;(blockstack.isUserSignedIn())&nbsp;{</code><br> <code>&nbsp; this.user&nbsp;=&nbsp;blockstack.loadUserData().profile</code><br> <code>}&nbsp;else&nbsp;if&nbsp;(blockstack.isSignInPending())&nbsp;{</code><br> <code>&nbsp; blockstack.handlePendingSignIn()</code><br> <code>&nbsp; .then((userData)&nbsp;=&gt;&nbsp;{</code><br> <code>&nbsp; &nbsp; window.location&nbsp;=&nbsp;window.location.origin</code><br> <code>&nbsp; })</code>}<br> 먼저 우리는 사용자가 blockstack.isUserSignedIn()로 로그인 경우 확인 합니다. 이것이 사실이 라면 우리 수 있습니다 브라우저에서 그 데이터를 끌어 그리고 우리의 응용 프로그램에서 사용 합니다.만약 우리가 서명 하지 않습니다 우리는 다음 blockstack.isSignInPending()를 확인 하셔야 합니다. 즉 그는 authResponse 응용 프로그램에 다시 전송 된 아직 처리 되지 않았습니다. handlePendingSignIn 함수는 보류에 로그인 처리를 다룬다.Signout은 src/components/Dashboard.js에서 처리 됩니다. 메서드를 응용 프로그램 작성자를 로그 아웃 시 사용자를 리디렉션할 위치를 결정 하는 것을 수 있습니다<br> <code>signOut&nbsp;()&nbsp;{</code><br> <code>&nbsp; this.blockstack.signUserOut(window.location.href)</code>}<br> 스토리지-구현다음 응용 프로그램 가이아 허브와 상호 작용 하는 방법을 보고 하겠습니다. 이 코드는 src/components/Dashboard.vue 파일에 살고 있다. 먼저는 모든 변경 내용이 처리 됩니다 볼 수 있습니다.<br> <code>todos:&nbsp;{</code><br> <code>&nbsp; handler:&nbsp;function&nbsp;(todos)&nbsp;{</code><br> <code>&nbsp; &nbsp; const&nbsp;blockstack&nbsp;=&nbsp;this.blockstack</code><br> <code>&nbsp; &nbsp; return&nbsp;blockstack.putFile(STORAGE_FILE,&nbsp;JSON.stringify(todos),&nbsp;{&nbsp;encrypt:&nbsp;true&nbsp;})</code><br> <code>&nbsp; },</code><br> <code>&nbsp; deep:&nbsp;true</code>}모든 JSON 개체에 전달 됩니다를 볼 수 있습니다. 다음 우리는 우리의 가이아 허브에 그것을 저장 하는 blockstack.putFile() 메서드를 사용 합니다. 신속 하 고 쉽게!다른 작업을 수행할 필요가 우리는 모든 저장소에서 읽을 것입니다. 이 약속을 반환 하는 blockstack.getFile() 방법으로 수행 됩니다.<code>fetchData&nbsp;()&nbsp;{</code><br> <code>&nbsp; const&nbsp;blockstack&nbsp;=&nbsp;this.blockstack</code><br> <code>&nbsp; blockstack.getFile(STORAGE_FILE,&nbsp;{&nbsp;decrypt:&nbsp;true&nbsp;})</code><br> <code>&nbsp; .then((todosText)&nbsp;=&gt;&nbsp;{</code><br> <code>&nbsp; &nbsp; var&nbsp;todos&nbsp;=&nbsp;JSON.parse(todosText&nbsp;||&nbsp;'[]')</code><br> <code>&nbsp; &nbsp; todos.forEach(function&nbsp;(todo,&nbsp;index)&nbsp;{</code><br> <code>&nbsp; &nbsp; &nbsp; todo.id&nbsp;=&nbsp;index</code><br> <code>&nbsp; &nbsp; })</code><br> <code>&nbsp; &nbsp; this.uidCount&nbsp;=&nbsp;todos.length</code><br> <code>&nbsp; &nbsp; this.todos&nbsp;=&nbsp;todos</code><br> <code>&nbsp; })</code>},<br> <br> 이제 복잡 한 응용 프로그램 인증 및 분산 인터넷에 스토리지를 구성 하는 데 필요한 모든 있다. 나아가 고 구축!!</p> <p><br></p> <p><br></p> </html>
json metadata{"tags":["blockchain"],"image":["https://img.youtube.com/vi/oyvg-h0obFw/0.jpg"],"links":["https://www.youtube.com/watch?v=oyvg-h0obFw","http://jwt.io/","http://localhost:8080/","http://localhost:8080/manifest.json"],"app":"steemit/0.1","format":"html"}
Transaction InfoBlock #22016809/Trx 4ed8015b949e27950eec73f75e434d7fd15b1899
View Raw JSON Data
{
  "trx_id": "4ed8015b949e27950eec73f75e434d7fd15b1899",
  "block": 22016809,
  "trx_in_block": 23,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-04-30T10:00:36",
  "op": [
    "comment",
    {
      "parent_author": "",
      "parent_permlink": "blockchain",
      "author": "bitfamily",
      "permlink": "how-to-build-a-todolist-application-with-blockstack",
      "title": "How  to build a TodoList  application with Blockstack (Blockstack와 TodoList 응용 프로그램을 구축 하는 방법)",
      "body": "<html>\n<p><br></p>\n<p><br></p>\n<p><br></p>\n<p>https://www.youtube.com/watch?v=oyvg-h0obFw</p>\n<p>요구 사항:</p>\n<ul>\n  <li>blockstack browser</li>\n  <li>node.js LTS Version -&gt;&nbsp;<code>v6.11.2</code></li>\n</ul>\n<p>지 고 시작-설치 종속성 &amp; 실행된 서버$&nbsp;git&nbsp;clone&nbsp;[email protected]:blockstack/blockstack-todos.git$&nbsp;cd&nbsp;blockstack-todos$&nbsp;yarn&nbsp;install$&nbsp;npm&nbsp;run&nbsp;start<br>\n로그인-어떻게 작동<br>\n기호에 Blockstack 버튼을 클릭 하면 임시 키를 응용 프로그램 내에서 생성 됩니다. 그냥 응용 프로그램의 특정 인스턴스에 대 한 사용 됩니다,이 키를 그냥 로그인 요청을 서명 하는 데 사용 됩니다. 그것은 또한 브라우저에 전송 하 고 Blockstack 노드를 돌아오기 데이터를 암호화 하는 데 사용 되는 공개 키를 생성 합니다. Blockstack 저장소에 데이터를 저장 하는 응용 프로그램 수 있습니다. 서명된 인증 요청 Blockstack는 JSON 웹 토큰을 통해 전송 됩니다.<br>\n토큰을 해독 하 고 정보 보유 하 고 있습니다 수 <a href=\"http://jwt.io/\">jwt.io</a> 이동한 거기 전체 토큰을 붙여 넣습니다. 출력은 아래와 유사한 좀 해야 합니다.</p>\n<p><br>\n<code>{</code><br>\n<code>&nbsp; \"jti\":\"bbf82977-cc3e-4593-bacc-33ff3b749790\",</code><br>\n<code>&nbsp; \"iat\":1501784293,</code><br>\n<code>&nbsp; \"exp\":1501787893,</code><br>\n<code>&nbsp; \"iss\":\"did:btc-addr:1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa\",</code><br>\n<code>&nbsp; \"public_keys\":[</code><br>\n<code>&nbsp; &nbsp; \"a09932dx081273xmreDII8yhjd0m8ioawfokljISHhejrnHG\"</code><br>\n<code>&nbsp; ],</code><br>\n<code>&nbsp; \"domain_name\":\"</code><a href=\"http://localhost:8080/\"><code>http://localhost:8080/</code></a><code>\",</code><br>\n<code>&nbsp; \"manifest_uri\":\"</code><a href=\"http://localhost:8080/manifest.json\"><code>http://localhost:8080/manifest.json</code></a><code>\",</code><br>\n<code>&nbsp; \"redirect_uri\":\"</code><a href=\"http://localhost:8080/\"><code>http://localhost:8080/</code></a><code>\",</code><br>\n<code>&nbsp; \"scopes\":[</code><br>\n<code>&nbsp; &nbsp; \"store-write\"</code><br>\n<code>&nbsp; ]</code>}<br>\n<br>\n<br>\n로그인 버튼을 클릭 하면 한 모달 뜹니다. 승인을 클릭 하면 다음 작업이 수행 됩니다.요청은 브라우저에서 로컬 blockstack 코어 노드로 전송 됩니다.Blockstack 코어 노드는 응용 프로그램에 반환 되는 세션 토큰을 생성 합니다.이 세션 토큰을 읽고 개인 Blockstack 저장소에 파일을 쓸 응용 프로그램을 수 있습니다.인증 응답 다음 위의 authRequest와 비슷한 생성 됩니다.authResponse는 또한 응용 프로그램만을 위한 개인 키를 포함 합니다. 응용 프로그램을 저장소에서 데이터를 암호화 수 있습니다.Todo 응용 프로그램에 로그인 하는 게 지금!<br>\n스토리지-그것은 어떻게 작동행동에 가이아 저장 모든의 몇 가지를 추가 하십시오. 아마 볼 하려는 응용 프로그램의 목록을 Blockstack의 상단에 내장. 나는 다음과 같은 추가:소프트웨어 패키지 관리자는 blockchain에 의해 확보인간의 읽을 수 있는 이름으로 변경할 수 급류분산 트위터이러한 모든 지금 가이아 허브 Blockstack id 연결에 저장 된 가이아 허브에 대 한 허브 설명서를 참조 하십시오.자바 스크립트 콘솔을 열고 다음 명령을 실행 하 여 방금 추가한 todos.json 파일을 가져올 수 있습니다.</p>\n<p><br>\n<code>blockstack.getFile(\"todos.json\",&nbsp;{&nbsp;decrypt:&nbsp;true&nbsp;}).then((file)&nbsp;=&gt;&nbsp;{console.log(file)})</code></p>\n<p><br>\n최근에 추가 된 모든을 표시 됩니다. 위에서 만든 모든 다음 JSON 생성:</p>\n<p><br>\n<code>[</code><br>\n<code>&nbsp; {</code><br>\n<code>&nbsp; &nbsp; \"id\":2,</code><br>\n<code>&nbsp; &nbsp; \"text\":\"Software&nbsp;package&nbsp;manager&nbsp;secured&nbsp;by&nbsp;the&nbsp;blockchain\",</code><br>\n<code>&nbsp; &nbsp; \"completed\":false</code><br>\n<code>&nbsp; },</code><br>\n<code>&nbsp; {</code><br>\n<code>&nbsp; &nbsp; \"id\":1,</code><br>\n<code>&nbsp; &nbsp; \"text\":\"Mutable&nbsp;torrents&nbsp;with&nbsp;human&nbsp;readable&nbsp;names\",</code><br>\n<code>&nbsp; &nbsp; \"completed\":false</code><br>\n<code>&nbsp; },</code><br>\n<code>&nbsp; {</code><br>\n<code>&nbsp; &nbsp; \"id\":0,</code><br>\n<code>&nbsp; &nbsp; \"text\":\"Decentralized&nbsp;twitter\",</code><br>\n<code>&nbsp; &nbsp; \"completed\":false</code><br>\n<code>&nbsp; }</code>]</p>\n<p><br>\n이제 다른 todo와 마크 완료 추가:[x] Blockstack Todo소프트웨어 패키지 관리자는 blockchain에 의해 확보인간의 읽을 수 있는 이름으로 변경할 수 급류분산 트위터자바 스크립트 콘솔을 사용 하 여 새로 생성 된 파일을 가져올 때 변경을 반영 됩니다.<br>\n<br>\n<code>[</code><br>\n<code>&nbsp; {</code><br>\n<code>&nbsp; &nbsp; \"id\":3,</code><br>\n<code>&nbsp; &nbsp; \"text\":\"Blockstack&nbsp;Todo\",</code><br>\n<code>&nbsp; &nbsp; \"completed\":true</code><br>\n<code>&nbsp; },</code><br>\n<code>&nbsp; {</code><br>\n<code>&nbsp; &nbsp; \"id\":2,</code><br>\n<code>&nbsp; &nbsp; \"text\":\"Software&nbsp;package&nbsp;manager&nbsp;secured&nbsp;by&nbsp;the&nbsp;blockchain\",</code><br>\n<code>&nbsp; &nbsp; \"completed\":false</code><br>\n<code>&nbsp; },</code><br>\n<code>&nbsp; {</code><br>\n<code>&nbsp; &nbsp; \"id\":1,</code><br>\n<code>&nbsp; &nbsp; \"text\":\"Mutable&nbsp;torrents&nbsp;with&nbsp;human&nbsp;readable&nbsp;names\",</code><br>\n<code>&nbsp; &nbsp; \"completed\":false</code><br>\n<code>&nbsp; },</code><br>\n<code>&nbsp; {</code><br>\n<code>&nbsp; &nbsp; \"id\":0,</code><br>\n<code>&nbsp; &nbsp; \"text\":\"Decentralized&nbsp;twitter\",</code><br>\n<code>&nbsp; &nbsp; \"completed\":false</code><br>\n<code>&nbsp; }</code>]<br>\n<br>\n로그인-구현:</p>\n<p><code>signIn&nbsp;()&nbsp;{</code><br>\n<code>&nbsp; const&nbsp;blockstack&nbsp;=&nbsp;this.blockstack</code><br>\n<code>&nbsp; blockstack.redirectToSignIn()</code>}</p>\n<p><br>\n때이 단추를 위에서 설명한 인증 요청 생성 되 고 사용자는 그들의 blockstack-브라우저 로그인 승인에 리디렉션됩니다. 사용자 승인 로그인 되 면 응용 프로그램은 authResponse를 처리 해야 합니다. 이것은 응용 프로그램 루트에 페이지 src/App.vue에서 일어나 /:</p>\n<p><br>\n<code>if&nbsp;(blockstack.isUserSignedIn())&nbsp;{</code><br>\n<code>&nbsp; this.user&nbsp;=&nbsp;blockstack.loadUserData().profile</code><br>\n<code>}&nbsp;else&nbsp;if&nbsp;(blockstack.isSignInPending())&nbsp;{</code><br>\n<code>&nbsp; blockstack.handlePendingSignIn()</code><br>\n<code>&nbsp; .then((userData)&nbsp;=&gt;&nbsp;{</code><br>\n<code>&nbsp; &nbsp; window.location&nbsp;=&nbsp;window.location.origin</code><br>\n<code>&nbsp; })</code>}<br>\n먼저 우리는 사용자가 blockstack.isUserSignedIn()로 로그인 경우 확인 합니다. 이것이 사실이 라면 우리 수 있습니다 브라우저에서 그 데이터를 끌어 그리고 우리의 응용 프로그램에서 사용 합니다.만약 우리가 서명 하지 않습니다 우리는 다음 blockstack.isSignInPending()를 확인 하셔야 합니다. 즉 그는 authResponse 응용 프로그램에 다시 전송 된 아직 처리 되지 않았습니다. handlePendingSignIn 함수는 보류에 로그인 처리를 다룬다.Signout은 src/components/Dashboard.js에서 처리 됩니다. 메서드를 응용 프로그램 작성자를 로그 아웃 시 사용자를 리디렉션할 위치를 결정 하는 것을 수 있습니다<br>\n<code>signOut&nbsp;()&nbsp;{</code><br>\n<code>&nbsp; this.blockstack.signUserOut(window.location.href)</code>}<br>\n스토리지-구현다음 응용 프로그램 가이아 허브와 상호 작용 하는 방법을 보고 하겠습니다. 이 코드는 src/components/Dashboard.vue 파일에 살고 있다. 먼저는 모든 변경 내용이 처리 됩니다 볼 수 있습니다.<br>\n<code>todos:&nbsp;{</code><br>\n<code>&nbsp; handler:&nbsp;function&nbsp;(todos)&nbsp;{</code><br>\n<code>&nbsp; &nbsp; const&nbsp;blockstack&nbsp;=&nbsp;this.blockstack</code><br>\n<code>&nbsp; &nbsp; return&nbsp;blockstack.putFile(STORAGE_FILE,&nbsp;JSON.stringify(todos),&nbsp;{&nbsp;encrypt:&nbsp;true&nbsp;})</code><br>\n<code>&nbsp; },</code><br>\n<code>&nbsp; deep:&nbsp;true</code>}모든 JSON 개체에 전달 됩니다를 볼 수 있습니다. 다음 우리는 우리의 가이아 허브에 그것을 저장 하는 blockstack.putFile() 메서드를 사용 합니다. 신속 하 고 쉽게!다른 작업을 수행할 필요가 우리는 모든 저장소에서 읽을 것입니다. 이 약속을 반환 하는 blockstack.getFile() 방법으로 수행 됩니다.<code>fetchData&nbsp;()&nbsp;{</code><br>\n<code>&nbsp; const&nbsp;blockstack&nbsp;=&nbsp;this.blockstack</code><br>\n<code>&nbsp; blockstack.getFile(STORAGE_FILE,&nbsp;{&nbsp;decrypt:&nbsp;true&nbsp;})</code><br>\n<code>&nbsp; .then((todosText)&nbsp;=&gt;&nbsp;{</code><br>\n<code>&nbsp; &nbsp; var&nbsp;todos&nbsp;=&nbsp;JSON.parse(todosText&nbsp;||&nbsp;'[]')</code><br>\n<code>&nbsp; &nbsp; todos.forEach(function&nbsp;(todo,&nbsp;index)&nbsp;{</code><br>\n<code>&nbsp; &nbsp; &nbsp; todo.id&nbsp;=&nbsp;index</code><br>\n<code>&nbsp; &nbsp; })</code><br>\n<code>&nbsp; &nbsp; this.uidCount&nbsp;=&nbsp;todos.length</code><br>\n<code>&nbsp; &nbsp; this.todos&nbsp;=&nbsp;todos</code><br>\n<code>&nbsp; })</code>},<br>\n<br>\n이제 복잡 한 응용 프로그램 인증 및 분산 인터넷에 스토리지를 구성 하는 데 필요한 모든 있다. 나아가 고 구축!!</p>\n<p><br></p>\n<p><br></p>\n</html>",
      "json_metadata": "{\"tags\":[\"blockchain\"],\"image\":[\"https://img.youtube.com/vi/oyvg-h0obFw/0.jpg\"],\"links\":[\"https://www.youtube.com/watch?v=oyvg-h0obFw\",\"http://jwt.io/\",\"http://localhost:8080/\",\"http://localhost:8080/manifest.json\"],\"app\":\"steemit/0.1\",\"format\":\"html\"}"
    }
  ]
}
2018/04/30 09:58:45
parent author
parent permlinkblockchain
authorbitfamily
permlinkhow-to-build-a-todolist-application-with-blockstack
titleHow to build a TodoList application with Blockstack
body<html> <p><br></p> <p><br></p> <p><br></p> <p>https://www.youtube.com/watch?v=oyvg-h0obFw</p> <p>요구 사항:</p> <ul> <li>blockstack browser</li> <li>node.js LTS Version -&gt;&nbsp;<code>v6.11.2</code></li> </ul> <p>지 고 시작-설치 종속성 &amp; 실행된 서버$&nbsp;git&nbsp;clone&nbsp;[email protected]:blockstack/blockstack-todos.git$&nbsp;cd&nbsp;blockstack-todos$&nbsp;yarn&nbsp;install$&nbsp;npm&nbsp;run&nbsp;start<br> 로그인-어떻게 작동<br> 기호에 Blockstack 버튼을 클릭 하면 임시 키를 응용 프로그램 내에서 생성 됩니다. 그냥 응용 프로그램의 특정 인스턴스에 대 한 사용 됩니다,이 키를 그냥 로그인 요청을 서명 하는 데 사용 됩니다. 그것은 또한 브라우저에 전송 하 고 Blockstack 노드를 돌아오기 데이터를 암호화 하는 데 사용 되는 공개 키를 생성 합니다. Blockstack 저장소에 데이터를 저장 하는 응용 프로그램 수 있습니다. 서명된 인증 요청 Blockstack는 JSON 웹 토큰을 통해 전송 됩니다.<br> 토큰을 해독 하 고 정보 보유 하 고 있습니다 수 <a href="http://jwt.io/">jwt.io</a> 이동한 거기 전체 토큰을 붙여 넣습니다. 출력은 아래와 유사한 좀 해야 합니다.</p> <p><br> <code>{</code><br> <code>&nbsp; "jti":"bbf82977-cc3e-4593-bacc-33ff3b749790",</code><br> <code>&nbsp; "iat":1501784293,</code><br> <code>&nbsp; "exp":1501787893,</code><br> <code>&nbsp; "iss":"did:btc-addr:1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa",</code><br> <code>&nbsp; "public_keys":[</code><br> <code>&nbsp; &nbsp; "a09932dx081273xmreDII8yhjd0m8ioawfokljISHhejrnHG"</code><br> <code>&nbsp; ],</code><br> <code>&nbsp; "domain_name":"</code><a href="http://localhost:8080/"><code>http://localhost:8080/</code></a><code>",</code><br> <code>&nbsp; "manifest_uri":"</code><a href="http://localhost:8080/manifest.json"><code>http://localhost:8080/manifest.json</code></a><code>",</code><br> <code>&nbsp; "redirect_uri":"</code><a href="http://localhost:8080/"><code>http://localhost:8080/</code></a><code>",</code><br> <code>&nbsp; "scopes":[</code><br> <code>&nbsp; &nbsp; "store-write"</code><br> <code>&nbsp; ]</code>}<br> <br> <br> 로그인 버튼을 클릭 하면 한 모달 뜹니다. 승인을 클릭 하면 다음 작업이 수행 됩니다.요청은 브라우저에서 로컬 blockstack 코어 노드로 전송 됩니다.Blockstack 코어 노드는 응용 프로그램에 반환 되는 세션 토큰을 생성 합니다.이 세션 토큰을 읽고 개인 Blockstack 저장소에 파일을 쓸 응용 프로그램을 수 있습니다.인증 응답 다음 위의 authRequest와 비슷한 생성 됩니다.authResponse는 또한 응용 프로그램만을 위한 개인 키를 포함 합니다. 응용 프로그램을 저장소에서 데이터를 암호화 수 있습니다.Todo 응용 프로그램에 로그인 하는 게 지금!<br> 스토리지-그것은 어떻게 작동행동에 가이아 저장 모든의 몇 가지를 추가 하십시오. 아마 볼 하려는 응용 프로그램의 목록을 Blockstack의 상단에 내장. 나는 다음과 같은 추가:소프트웨어 패키지 관리자는 blockchain에 의해 확보인간의 읽을 수 있는 이름으로 변경할 수 급류분산 트위터이러한 모든 지금 가이아 허브 Blockstack id 연결에 저장 된 가이아 허브에 대 한 허브 설명서를 참조 하십시오.자바 스크립트 콘솔을 열고 다음 명령을 실행 하 여 방금 추가한 todos.json 파일을 가져올 수 있습니다.</p> <p><br> <code>blockstack.getFile("todos.json",&nbsp;{&nbsp;decrypt:&nbsp;true&nbsp;}).then((file)&nbsp;=&gt;&nbsp;{console.log(file)})</code></p> <p><br> 최근에 추가 된 모든을 표시 됩니다. 위에서 만든 모든 다음 JSON 생성:</p> <p><br> <code>[</code><br> <code>&nbsp; {</code><br> <code>&nbsp; &nbsp; "id":2,</code><br> <code>&nbsp; &nbsp; "text":"Software&nbsp;package&nbsp;manager&nbsp;secured&nbsp;by&nbsp;the&nbsp;blockchain",</code><br> <code>&nbsp; &nbsp; "completed":false</code><br> <code>&nbsp; },</code><br> <code>&nbsp; {</code><br> <code>&nbsp; &nbsp; "id":1,</code><br> <code>&nbsp; &nbsp; "text":"Mutable&nbsp;torrents&nbsp;with&nbsp;human&nbsp;readable&nbsp;names",</code><br> <code>&nbsp; &nbsp; "completed":false</code><br> <code>&nbsp; },</code><br> <code>&nbsp; {</code><br> <code>&nbsp; &nbsp; "id":0,</code><br> <code>&nbsp; &nbsp; "text":"Decentralized&nbsp;twitter",</code><br> <code>&nbsp; &nbsp; "completed":false</code><br> <code>&nbsp; }</code>]</p> <p><br> 이제 다른 todo와 마크 완료 추가:[x] Blockstack Todo소프트웨어 패키지 관리자는 blockchain에 의해 확보인간의 읽을 수 있는 이름으로 변경할 수 급류분산 트위터자바 스크립트 콘솔을 사용 하 여 새로 생성 된 파일을 가져올 때 변경을 반영 됩니다.<br> <br> <code>[</code><br> <code>&nbsp; {</code><br> <code>&nbsp; &nbsp; "id":3,</code><br> <code>&nbsp; &nbsp; "text":"Blockstack&nbsp;Todo",</code><br> <code>&nbsp; &nbsp; "completed":true</code><br> <code>&nbsp; },</code><br> <code>&nbsp; {</code><br> <code>&nbsp; &nbsp; "id":2,</code><br> <code>&nbsp; &nbsp; "text":"Software&nbsp;package&nbsp;manager&nbsp;secured&nbsp;by&nbsp;the&nbsp;blockchain",</code><br> <code>&nbsp; &nbsp; "completed":false</code><br> <code>&nbsp; },</code><br> <code>&nbsp; {</code><br> <code>&nbsp; &nbsp; "id":1,</code><br> <code>&nbsp; &nbsp; "text":"Mutable&nbsp;torrents&nbsp;with&nbsp;human&nbsp;readable&nbsp;names",</code><br> <code>&nbsp; &nbsp; "completed":false</code><br> <code>&nbsp; },</code><br> <code>&nbsp; {</code><br> <code>&nbsp; &nbsp; "id":0,</code><br> <code>&nbsp; &nbsp; "text":"Decentralized&nbsp;twitter",</code><br> <code>&nbsp; &nbsp; "completed":false</code><br> <code>&nbsp; }</code>]<br> <br> 로그인-구현:</p> <p><code>signIn&nbsp;()&nbsp;{</code><br> <code>&nbsp; const&nbsp;blockstack&nbsp;=&nbsp;this.blockstack</code><br> <code>&nbsp; blockstack.redirectToSignIn()</code>}</p> <p><br> 때이 단추를 위에서 설명한 인증 요청 생성 되 고 사용자는 그들의 blockstack-브라우저 로그인 승인에 리디렉션됩니다. 사용자 승인 로그인 되 면 응용 프로그램은 authResponse를 처리 해야 합니다. 이것은 응용 프로그램 루트에 페이지 src/App.vue에서 일어나 /:</p> <p><br> <code>if&nbsp;(blockstack.isUserSignedIn())&nbsp;{</code><br> <code>&nbsp; this.user&nbsp;=&nbsp;blockstack.loadUserData().profile</code><br> <code>}&nbsp;else&nbsp;if&nbsp;(blockstack.isSignInPending())&nbsp;{</code><br> <code>&nbsp; blockstack.handlePendingSignIn()</code><br> <code>&nbsp; .then((userData)&nbsp;=&gt;&nbsp;{</code><br> <code>&nbsp; &nbsp; window.location&nbsp;=&nbsp;window.location.origin</code><br> <code>&nbsp; })</code>}<br> 먼저 우리는 사용자가 blockstack.isUserSignedIn()로 로그인 경우 확인 합니다. 이것이 사실이 라면 우리 수 있습니다 브라우저에서 그 데이터를 끌어 그리고 우리의 응용 프로그램에서 사용 합니다.만약 우리가 서명 하지 않습니다 우리는 다음 blockstack.isSignInPending()를 확인 하셔야 합니다. 즉 그는 authResponse 응용 프로그램에 다시 전송 된 아직 처리 되지 않았습니다. handlePendingSignIn 함수는 보류에 로그인 처리를 다룬다.Signout은 src/components/Dashboard.js에서 처리 됩니다. 메서드를 응용 프로그램 작성자를 로그 아웃 시 사용자를 리디렉션할 위치를 결정 하는 것을 수 있습니다<br> <code>signOut&nbsp;()&nbsp;{</code><br> <code>&nbsp; this.blockstack.signUserOut(window.location.href)</code>}<br> 스토리지-구현다음 응용 프로그램 가이아 허브와 상호 작용 하는 방법을 보고 하겠습니다. 이 코드는 src/components/Dashboard.vue 파일에 살고 있다. 먼저는 모든 변경 내용이 처리 됩니다 볼 수 있습니다.<br> <code>todos:&nbsp;{</code><br> <code>&nbsp; handler:&nbsp;function&nbsp;(todos)&nbsp;{</code><br> <code>&nbsp; &nbsp; const&nbsp;blockstack&nbsp;=&nbsp;this.blockstack</code><br> <code>&nbsp; &nbsp; return&nbsp;blockstack.putFile(STORAGE_FILE,&nbsp;JSON.stringify(todos),&nbsp;{&nbsp;encrypt:&nbsp;true&nbsp;})</code><br> <code>&nbsp; },</code><br> <code>&nbsp; deep:&nbsp;true</code>}모든 JSON 개체에 전달 됩니다를 볼 수 있습니다. 다음 우리는 우리의 가이아 허브에 그것을 저장 하는 blockstack.putFile() 메서드를 사용 합니다. 신속 하 고 쉽게!다른 작업을 수행할 필요가 우리는 모든 저장소에서 읽을 것입니다. 이 약속을 반환 하는 blockstack.getFile() 방법으로 수행 됩니다.<code>fetchData&nbsp;()&nbsp;{</code><br> <code>&nbsp; const&nbsp;blockstack&nbsp;=&nbsp;this.blockstack</code><br> <code>&nbsp; blockstack.getFile(STORAGE_FILE,&nbsp;{&nbsp;decrypt:&nbsp;true&nbsp;})</code><br> <code>&nbsp; .then((todosText)&nbsp;=&gt;&nbsp;{</code><br> <code>&nbsp; &nbsp; var&nbsp;todos&nbsp;=&nbsp;JSON.parse(todosText&nbsp;||&nbsp;'[]')</code><br> <code>&nbsp; &nbsp; todos.forEach(function&nbsp;(todo,&nbsp;index)&nbsp;{</code><br> <code>&nbsp; &nbsp; &nbsp; todo.id&nbsp;=&nbsp;index</code><br> <code>&nbsp; &nbsp; })</code><br> <code>&nbsp; &nbsp; this.uidCount&nbsp;=&nbsp;todos.length</code><br> <code>&nbsp; &nbsp; this.todos&nbsp;=&nbsp;todos</code><br> <code>&nbsp; })</code>},<br> <br> 이제 복잡 한 응용 프로그램 인증 및 분산 인터넷에 스토리지를 구성 하는 데 필요한 모든 있다. 나아가 고 구축!!</p> <p><br></p> <p><br></p> </html>
json metadata{"tags":["blockchain"],"image":["https://img.youtube.com/vi/oyvg-h0obFw/0.jpg"],"links":["https://www.youtube.com/watch?v=oyvg-h0obFw","http://jwt.io/","http://localhost:8080/","http://localhost:8080/manifest.json"],"app":"steemit/0.1","format":"html"}
Transaction InfoBlock #22016772/Trx 1af5724f48714572cd97af69bf728814653d0a9b
View Raw JSON Data
{
  "trx_id": "1af5724f48714572cd97af69bf728814653d0a9b",
  "block": 22016772,
  "trx_in_block": 52,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-04-30T09:58:45",
  "op": [
    "comment",
    {
      "parent_author": "",
      "parent_permlink": "blockchain",
      "author": "bitfamily",
      "permlink": "how-to-build-a-todolist-application-with-blockstack",
      "title": "How  to build a TodoList  application with Blockstack",
      "body": "<html>\n<p><br></p>\n<p><br></p>\n<p><br></p>\n<p>https://www.youtube.com/watch?v=oyvg-h0obFw</p>\n<p>요구 사항:</p>\n<ul>\n  <li>blockstack browser</li>\n  <li>node.js LTS Version -&gt;&nbsp;<code>v6.11.2</code></li>\n</ul>\n<p>지 고 시작-설치 종속성 &amp; 실행된 서버$&nbsp;git&nbsp;clone&nbsp;[email protected]:blockstack/blockstack-todos.git$&nbsp;cd&nbsp;blockstack-todos$&nbsp;yarn&nbsp;install$&nbsp;npm&nbsp;run&nbsp;start<br>\n로그인-어떻게 작동<br>\n기호에 Blockstack 버튼을 클릭 하면 임시 키를 응용 프로그램 내에서 생성 됩니다. 그냥 응용 프로그램의 특정 인스턴스에 대 한 사용 됩니다,이 키를 그냥 로그인 요청을 서명 하는 데 사용 됩니다. 그것은 또한 브라우저에 전송 하 고 Blockstack 노드를 돌아오기 데이터를 암호화 하는 데 사용 되는 공개 키를 생성 합니다. Blockstack 저장소에 데이터를 저장 하는 응용 프로그램 수 있습니다. 서명된 인증 요청 Blockstack는 JSON 웹 토큰을 통해 전송 됩니다.<br>\n토큰을 해독 하 고 정보 보유 하 고 있습니다 수 <a href=\"http://jwt.io/\">jwt.io</a> 이동한 거기 전체 토큰을 붙여 넣습니다. 출력은 아래와 유사한 좀 해야 합니다.</p>\n<p><br>\n<code>{</code><br>\n<code>&nbsp; \"jti\":\"bbf82977-cc3e-4593-bacc-33ff3b749790\",</code><br>\n<code>&nbsp; \"iat\":1501784293,</code><br>\n<code>&nbsp; \"exp\":1501787893,</code><br>\n<code>&nbsp; \"iss\":\"did:btc-addr:1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa\",</code><br>\n<code>&nbsp; \"public_keys\":[</code><br>\n<code>&nbsp; &nbsp; \"a09932dx081273xmreDII8yhjd0m8ioawfokljISHhejrnHG\"</code><br>\n<code>&nbsp; ],</code><br>\n<code>&nbsp; \"domain_name\":\"</code><a href=\"http://localhost:8080/\"><code>http://localhost:8080/</code></a><code>\",</code><br>\n<code>&nbsp; \"manifest_uri\":\"</code><a href=\"http://localhost:8080/manifest.json\"><code>http://localhost:8080/manifest.json</code></a><code>\",</code><br>\n<code>&nbsp; \"redirect_uri\":\"</code><a href=\"http://localhost:8080/\"><code>http://localhost:8080/</code></a><code>\",</code><br>\n<code>&nbsp; \"scopes\":[</code><br>\n<code>&nbsp; &nbsp; \"store-write\"</code><br>\n<code>&nbsp; ]</code>}<br>\n<br>\n<br>\n로그인 버튼을 클릭 하면 한 모달 뜹니다. 승인을 클릭 하면 다음 작업이 수행 됩니다.요청은 브라우저에서 로컬 blockstack 코어 노드로 전송 됩니다.Blockstack 코어 노드는 응용 프로그램에 반환 되는 세션 토큰을 생성 합니다.이 세션 토큰을 읽고 개인 Blockstack 저장소에 파일을 쓸 응용 프로그램을 수 있습니다.인증 응답 다음 위의 authRequest와 비슷한 생성 됩니다.authResponse는 또한 응용 프로그램만을 위한 개인 키를 포함 합니다. 응용 프로그램을 저장소에서 데이터를 암호화 수 있습니다.Todo 응용 프로그램에 로그인 하는 게 지금!<br>\n스토리지-그것은 어떻게 작동행동에 가이아 저장 모든의 몇 가지를 추가 하십시오. 아마 볼 하려는 응용 프로그램의 목록을 Blockstack의 상단에 내장. 나는 다음과 같은 추가:소프트웨어 패키지 관리자는 blockchain에 의해 확보인간의 읽을 수 있는 이름으로 변경할 수 급류분산 트위터이러한 모든 지금 가이아 허브 Blockstack id 연결에 저장 된 가이아 허브에 대 한 허브 설명서를 참조 하십시오.자바 스크립트 콘솔을 열고 다음 명령을 실행 하 여 방금 추가한 todos.json 파일을 가져올 수 있습니다.</p>\n<p><br>\n<code>blockstack.getFile(\"todos.json\",&nbsp;{&nbsp;decrypt:&nbsp;true&nbsp;}).then((file)&nbsp;=&gt;&nbsp;{console.log(file)})</code></p>\n<p><br>\n최근에 추가 된 모든을 표시 됩니다. 위에서 만든 모든 다음 JSON 생성:</p>\n<p><br>\n<code>[</code><br>\n<code>&nbsp; {</code><br>\n<code>&nbsp; &nbsp; \"id\":2,</code><br>\n<code>&nbsp; &nbsp; \"text\":\"Software&nbsp;package&nbsp;manager&nbsp;secured&nbsp;by&nbsp;the&nbsp;blockchain\",</code><br>\n<code>&nbsp; &nbsp; \"completed\":false</code><br>\n<code>&nbsp; },</code><br>\n<code>&nbsp; {</code><br>\n<code>&nbsp; &nbsp; \"id\":1,</code><br>\n<code>&nbsp; &nbsp; \"text\":\"Mutable&nbsp;torrents&nbsp;with&nbsp;human&nbsp;readable&nbsp;names\",</code><br>\n<code>&nbsp; &nbsp; \"completed\":false</code><br>\n<code>&nbsp; },</code><br>\n<code>&nbsp; {</code><br>\n<code>&nbsp; &nbsp; \"id\":0,</code><br>\n<code>&nbsp; &nbsp; \"text\":\"Decentralized&nbsp;twitter\",</code><br>\n<code>&nbsp; &nbsp; \"completed\":false</code><br>\n<code>&nbsp; }</code>]</p>\n<p><br>\n이제 다른 todo와 마크 완료 추가:[x] Blockstack Todo소프트웨어 패키지 관리자는 blockchain에 의해 확보인간의 읽을 수 있는 이름으로 변경할 수 급류분산 트위터자바 스크립트 콘솔을 사용 하 여 새로 생성 된 파일을 가져올 때 변경을 반영 됩니다.<br>\n<br>\n<code>[</code><br>\n<code>&nbsp; {</code><br>\n<code>&nbsp; &nbsp; \"id\":3,</code><br>\n<code>&nbsp; &nbsp; \"text\":\"Blockstack&nbsp;Todo\",</code><br>\n<code>&nbsp; &nbsp; \"completed\":true</code><br>\n<code>&nbsp; },</code><br>\n<code>&nbsp; {</code><br>\n<code>&nbsp; &nbsp; \"id\":2,</code><br>\n<code>&nbsp; &nbsp; \"text\":\"Software&nbsp;package&nbsp;manager&nbsp;secured&nbsp;by&nbsp;the&nbsp;blockchain\",</code><br>\n<code>&nbsp; &nbsp; \"completed\":false</code><br>\n<code>&nbsp; },</code><br>\n<code>&nbsp; {</code><br>\n<code>&nbsp; &nbsp; \"id\":1,</code><br>\n<code>&nbsp; &nbsp; \"text\":\"Mutable&nbsp;torrents&nbsp;with&nbsp;human&nbsp;readable&nbsp;names\",</code><br>\n<code>&nbsp; &nbsp; \"completed\":false</code><br>\n<code>&nbsp; },</code><br>\n<code>&nbsp; {</code><br>\n<code>&nbsp; &nbsp; \"id\":0,</code><br>\n<code>&nbsp; &nbsp; \"text\":\"Decentralized&nbsp;twitter\",</code><br>\n<code>&nbsp; &nbsp; \"completed\":false</code><br>\n<code>&nbsp; }</code>]<br>\n<br>\n로그인-구현:</p>\n<p><code>signIn&nbsp;()&nbsp;{</code><br>\n<code>&nbsp; const&nbsp;blockstack&nbsp;=&nbsp;this.blockstack</code><br>\n<code>&nbsp; blockstack.redirectToSignIn()</code>}</p>\n<p><br>\n때이 단추를 위에서 설명한 인증 요청 생성 되 고 사용자는 그들의 blockstack-브라우저 로그인 승인에 리디렉션됩니다. 사용자 승인 로그인 되 면 응용 프로그램은 authResponse를 처리 해야 합니다. 이것은 응용 프로그램 루트에 페이지 src/App.vue에서 일어나 /:</p>\n<p><br>\n<code>if&nbsp;(blockstack.isUserSignedIn())&nbsp;{</code><br>\n<code>&nbsp; this.user&nbsp;=&nbsp;blockstack.loadUserData().profile</code><br>\n<code>}&nbsp;else&nbsp;if&nbsp;(blockstack.isSignInPending())&nbsp;{</code><br>\n<code>&nbsp; blockstack.handlePendingSignIn()</code><br>\n<code>&nbsp; .then((userData)&nbsp;=&gt;&nbsp;{</code><br>\n<code>&nbsp; &nbsp; window.location&nbsp;=&nbsp;window.location.origin</code><br>\n<code>&nbsp; })</code>}<br>\n먼저 우리는 사용자가 blockstack.isUserSignedIn()로 로그인 경우 확인 합니다. 이것이 사실이 라면 우리 수 있습니다 브라우저에서 그 데이터를 끌어 그리고 우리의 응용 프로그램에서 사용 합니다.만약 우리가 서명 하지 않습니다 우리는 다음 blockstack.isSignInPending()를 확인 하셔야 합니다. 즉 그는 authResponse 응용 프로그램에 다시 전송 된 아직 처리 되지 않았습니다. handlePendingSignIn 함수는 보류에 로그인 처리를 다룬다.Signout은 src/components/Dashboard.js에서 처리 됩니다. 메서드를 응용 프로그램 작성자를 로그 아웃 시 사용자를 리디렉션할 위치를 결정 하는 것을 수 있습니다<br>\n<code>signOut&nbsp;()&nbsp;{</code><br>\n<code>&nbsp; this.blockstack.signUserOut(window.location.href)</code>}<br>\n스토리지-구현다음 응용 프로그램 가이아 허브와 상호 작용 하는 방법을 보고 하겠습니다. 이 코드는 src/components/Dashboard.vue 파일에 살고 있다. 먼저는 모든 변경 내용이 처리 됩니다 볼 수 있습니다.<br>\n<code>todos:&nbsp;{</code><br>\n<code>&nbsp; handler:&nbsp;function&nbsp;(todos)&nbsp;{</code><br>\n<code>&nbsp; &nbsp; const&nbsp;blockstack&nbsp;=&nbsp;this.blockstack</code><br>\n<code>&nbsp; &nbsp; return&nbsp;blockstack.putFile(STORAGE_FILE,&nbsp;JSON.stringify(todos),&nbsp;{&nbsp;encrypt:&nbsp;true&nbsp;})</code><br>\n<code>&nbsp; },</code><br>\n<code>&nbsp; deep:&nbsp;true</code>}모든 JSON 개체에 전달 됩니다를 볼 수 있습니다. 다음 우리는 우리의 가이아 허브에 그것을 저장 하는 blockstack.putFile() 메서드를 사용 합니다. 신속 하 고 쉽게!다른 작업을 수행할 필요가 우리는 모든 저장소에서 읽을 것입니다. 이 약속을 반환 하는 blockstack.getFile() 방법으로 수행 됩니다.<code>fetchData&nbsp;()&nbsp;{</code><br>\n<code>&nbsp; const&nbsp;blockstack&nbsp;=&nbsp;this.blockstack</code><br>\n<code>&nbsp; blockstack.getFile(STORAGE_FILE,&nbsp;{&nbsp;decrypt:&nbsp;true&nbsp;})</code><br>\n<code>&nbsp; .then((todosText)&nbsp;=&gt;&nbsp;{</code><br>\n<code>&nbsp; &nbsp; var&nbsp;todos&nbsp;=&nbsp;JSON.parse(todosText&nbsp;||&nbsp;'[]')</code><br>\n<code>&nbsp; &nbsp; todos.forEach(function&nbsp;(todo,&nbsp;index)&nbsp;{</code><br>\n<code>&nbsp; &nbsp; &nbsp; todo.id&nbsp;=&nbsp;index</code><br>\n<code>&nbsp; &nbsp; })</code><br>\n<code>&nbsp; &nbsp; this.uidCount&nbsp;=&nbsp;todos.length</code><br>\n<code>&nbsp; &nbsp; this.todos&nbsp;=&nbsp;todos</code><br>\n<code>&nbsp; })</code>},<br>\n<br>\n이제 복잡 한 응용 프로그램 인증 및 분산 인터넷에 스토리지를 구성 하는 데 필요한 모든 있다. 나아가 고 구축!!</p>\n<p><br></p>\n<p><br></p>\n</html>",
      "json_metadata": "{\"tags\":[\"blockchain\"],\"image\":[\"https://img.youtube.com/vi/oyvg-h0obFw/0.jpg\"],\"links\":[\"https://www.youtube.com/watch?v=oyvg-h0obFw\",\"http://jwt.io/\",\"http://localhost:8080/\",\"http://localhost:8080/manifest.json\"],\"app\":\"steemit/0.1\",\"format\":\"html\"}"
    }
  ]
}
bitfamilypublished a new post: api-hello-blockstack
2018/04/30 09:40:15
parent author
parent permlinkblockchain
authorbitfamily
permlinkapi-hello-blockstack
title이것은 백엔드 api가 필요하지 않거나 사용자가 데이터베이스를 등록 할 필요가없는 가장 간단한 블록 체인 애플릿 "hello blockstack"빌드 프로세스입니다.
body@@ -1937,236 +1937,8 @@ %EB%8B%A4.%0A%0A -%7B %22name%22: %22Hello, Blockstack%22, %22start_url%22: %22localhost:5000%22, %22description%22: %22A simple demo of Blockstack Auth%22, %0A%0A%22icons%22: %5B%7B %22src%22: %22https://helloblockstack.com/icon-192x192.png%22, %22sizes%22: %22192x192%22, %22type%22: %22image/png%22 %7D%5D %7D%0A %0A%EC%86%8C%EC%8A%A4
json metadata{"tags":["blockchain"],"image":["https://steemitimages.com/DQmS68geddTXmVXmbsYwMNbowC8mAgt38LtihyUdQW8Tjhs/%E5%B1%8F%E5%B9%95%E5%BF%AB%E7%85%A7%202018-04-30%20%E4%B8%8B%E5%8D%885.39.10.png"],"links":["https://github.com/new","https://contribute.blockstack.org/","https://blockstack.org/install"],"app":"steemit/0.1","format":"markdown"}
Transaction InfoBlock #22016402/Trx 183118d2c93c95ad2c4017f91bf00a8c5fd5c5bc
View Raw JSON Data
{
  "trx_id": "183118d2c93c95ad2c4017f91bf00a8c5fd5c5bc",
  "block": 22016402,
  "trx_in_block": 75,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-04-30T09:40:15",
  "op": [
    "comment",
    {
      "parent_author": "",
      "parent_permlink": "blockchain",
      "author": "bitfamily",
      "permlink": "api-hello-blockstack",
      "title": "이것은 백엔드 api가 필요하지 않거나 사용자가 데이터베이스를 등록 할 필요가없는 가장 간단한 블록 체인 애플릿 \"hello blockstack\"빌드 프로세스입니다.",
      "body": "@@ -1937,236 +1937,8 @@\n %EB%8B%A4.%0A%0A\n-%7B %22name%22: %22Hello, Blockstack%22, %22start_url%22: %22localhost:5000%22, %22description%22: %22A simple demo of Blockstack Auth%22, %0A%0A%22icons%22: %5B%7B %22src%22: %22https://helloblockstack.com/icon-192x192.png%22,  %22sizes%22: %22192x192%22, %22type%22: %22image/png%22 %7D%5D %7D%0A\n %0A%EC%86%8C%EC%8A%A4 \n",
      "json_metadata": "{\"tags\":[\"blockchain\"],\"image\":[\"https://steemitimages.com/DQmS68geddTXmVXmbsYwMNbowC8mAgt38LtihyUdQW8Tjhs/%E5%B1%8F%E5%B9%95%E5%BF%AB%E7%85%A7%202018-04-30%20%E4%B8%8B%E5%8D%885.39.10.png\"],\"links\":[\"https://github.com/new\",\"https://contribute.blockstack.org/\",\"https://blockstack.org/install\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
    }
  ]
}
bitfamilypublished a new post: api-hello-blockstack
2018/04/30 09:39:39
parent author
parent permlinkblockchain
authorbitfamily
permlinkapi-hello-blockstack
title이것은 백엔드 api가 필요하지 않거나 사용자가 데이터베이스를 등록 할 필요가없는 가장 간단한 블록 체인 애플릿 "hello blockstack"빌드 프로세스입니다.
body@@ -1,8 +1,199 @@ +!%5B%E5%B1%8F%E5%B9%95%E5%BF%AB%E7%85%A7 2018-04-30 %E4%B8%8B%E5%8D%885.39.10.png%5D(https://steemitimages.com/DQmS68geddTXmVXmbsYwMNbowC8mAgt38LtihyUdQW8Tjhs/%25E5%25B1%258F%25E5%25B9%2595%25E5%25BF%25AB%25E7%2585%25A7%25202018-04-30%2520%25E4%25B8%258B%25E5%258D%25885.39.10.png)%0A%0A %EC%9D%B4 %ED%8A%9C%ED%86%A0%EB%A6%AC%EC%96%BC%EC%97%90%EC%84%9C @@ -2046,16 +2046,18 @@ Auth%22, +%0A%0A %22icons%22: @@ -2114,16 +2114,17 @@ 92.png%22, + %22sizes%22 @@ -2173,16 +2173,17 @@ %EC%BD%94%EB%93%9C %EA%B5%AC%ED%98%84:%0A%0A +%0A git init
json metadata{"tags":["blockchain"],"image":["https://steemitimages.com/DQmS68geddTXmVXmbsYwMNbowC8mAgt38LtihyUdQW8Tjhs/%E5%B1%8F%E5%B9%95%E5%BF%AB%E7%85%A7%202018-04-30%20%E4%B8%8B%E5%8D%885.39.10.png","https://helloblockstack.com/icon-192x192.png"],"links":["https://github.com/new","https://contribute.blockstack.org/","https://blockstack.org/install"],"app":"steemit/0.1","format":"markdown"}
Transaction InfoBlock #22016390/Trx b7515575aabdfbc9eff1e9c790425933beb1df2f
View Raw JSON Data
{
  "trx_id": "b7515575aabdfbc9eff1e9c790425933beb1df2f",
  "block": 22016390,
  "trx_in_block": 37,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-04-30T09:39:39",
  "op": [
    "comment",
    {
      "parent_author": "",
      "parent_permlink": "blockchain",
      "author": "bitfamily",
      "permlink": "api-hello-blockstack",
      "title": "이것은 백엔드 api가 필요하지 않거나 사용자가 데이터베이스를 등록 할 필요가없는 가장 간단한 블록 체인 애플릿 \"hello blockstack\"빌드 프로세스입니다.",
      "body": "@@ -1,8 +1,199 @@\n+!%5B%E5%B1%8F%E5%B9%95%E5%BF%AB%E7%85%A7 2018-04-30 %E4%B8%8B%E5%8D%885.39.10.png%5D(https://steemitimages.com/DQmS68geddTXmVXmbsYwMNbowC8mAgt38LtihyUdQW8Tjhs/%25E5%25B1%258F%25E5%25B9%2595%25E5%25BF%25AB%25E7%2585%25A7%25202018-04-30%2520%25E4%25B8%258B%25E5%258D%25885.39.10.png)%0A%0A\n %EC%9D%B4 %ED%8A%9C%ED%86%A0%EB%A6%AC%EC%96%BC%EC%97%90%EC%84%9C\n@@ -2046,16 +2046,18 @@\n  Auth%22, \n+%0A%0A\n %22icons%22:\n@@ -2114,16 +2114,17 @@\n 92.png%22,\n+ \n  %22sizes%22\n@@ -2173,16 +2173,17 @@\n %EC%BD%94%EB%93%9C %EA%B5%AC%ED%98%84:%0A%0A\n+%0A\n git init\n",
      "json_metadata": "{\"tags\":[\"blockchain\"],\"image\":[\"https://steemitimages.com/DQmS68geddTXmVXmbsYwMNbowC8mAgt38LtihyUdQW8Tjhs/%E5%B1%8F%E5%B9%95%E5%BF%AB%E7%85%A7%202018-04-30%20%E4%B8%8B%E5%8D%885.39.10.png\",\"https://helloblockstack.com/icon-192x192.png\"],\"links\":[\"https://github.com/new\",\"https://contribute.blockstack.org/\",\"https://blockstack.org/install\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
    }
  ]
}
2018/04/30 09:36:39
voterax3
authorbitfamily
permlinkapi-hello-blockstack
weight100 (1.00%)
Transaction InfoBlock #22016330/Trx 51b45ea7728a8ab03030fa8e285b0968441e8842
View Raw JSON Data
{
  "trx_id": "51b45ea7728a8ab03030fa8e285b0968441e8842",
  "block": 22016330,
  "trx_in_block": 11,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-04-30T09:36:39",
  "op": [
    "vote",
    {
      "voter": "ax3",
      "author": "bitfamily",
      "permlink": "api-hello-blockstack",
      "weight": 100
    }
  ]
}
bitfamilypublished a new post: api-hello-blockstack
2018/04/30 09:36:27
parent author
parent permlinkblockchain
authorbitfamily
permlinkapi-hello-blockstack
title이것은 백엔드 api가 필요하지 않거나 사용자가 데이터베이스를 등록 할 필요가없는 가장 간단한 블록 체인 애플릿 "hello blockstack"빌드 프로세스입니다.
body이 튜토리얼에서는 다음 도구를 사용합니다: npm browserify blockstack.js 첫 번째 단계: yearoman 설치 npm install -g yo generator-blockstack 두 번째 단계 : 프로그램에 대한 새 디렉토리 만들기 mkdir hello-blockstack && cd hello-blockstack yo blockstack 세 번째 단계: 실행 npm run start 주요 코드 설명 및 이해: 주요 파일은 dom 컨텐츠 로드가 완료될 때까지 리스너 이벤트에 포함되는 app.js입니다. document.addEventListener("DOMContentLoaded", function(event) { }) 여기에는 사용자의 요청과 시작을 처리하는 signin handler가 있습니다. document.getElementById('signin-button').addEventListener('click', function() { blockstack.redirectUserToSignIn() }) 우리는 또한 사용자의 출시를 처리하기위한 신호 아웃 핸들러를 가지고 있습니다. document.getElementById('signout-button').addEventListener('click', function() { blockstack.signUserOut(window.location.origin) }) 다음으로 사용자의 이력서를 표시하는 함수가 있습니다. function showProfile(profile) { var person = new blockstack.Person(profile) document.getElementById('heading-name').innerHTML = person.name() document.getElementById('avatar-image').setAttribute('src', person.avatarUrl()) document.getElementById('section-1').style.display = 'none' document.getElementById('section-2').style.display = 'block' } 사용자가 로그인 할 수있는 세 가지 상태가 있습니다. The user is already signed in The user has a sign in request that is pending The user is signed out 코드 표현 방법 if (blockstack.isUserSignedIn()) { // Show the user's profile } else if (blockstack.isSignInPending()) { // Sign the user in } else { // Do nothing } 사용자 요청 중 if (blockstack.isUserSignedIn()) { var profile = blockstack.loadUserData().profile showProfile(profile) } else if (blockstack.isSignInPending()) { blockstack.handlePendingSignIn().then(function(userData) { window.location = window.location.origin }) } 프로그램 화면표시 스타일에 대한 제어 파일: 프로그램 표시 스타일을 제어하는 ​​파일은 (/ public / manifest.json입니다. { "name": "Hello, Blockstack", "start_url": "localhost:5000", "description": "A simple demo of Blockstack Auth", "icons": [{ "src": "https://helloblockstack.com/icon-192x192.png", "sizes": "192x192", "type": "image/png" }] } 소스 코드 구현: git init git add . && git commit -m "first commit" 그런 다음 github에 새로운 보고서를 추가하십시오. https://github.com/new git remote add origin [email protected]:YOUR_USERNAME_HERE/hello-blockstack.git git push origin master blockstack 커뮤니티에 추가하려면 다음과 같이 하십시오. https://contribute.blockstack.org/ Download blockstack:https://blockstack.org/install
json metadata{"tags":["blockchain"],"image":["https://helloblockstack.com/icon-192x192.png"],"links":["https://github.com/new","https://contribute.blockstack.org/","https://blockstack.org/install"],"app":"steemit/0.1","format":"markdown"}
Transaction InfoBlock #22016326/Trx 4004db4092e8fb6339600486647001837ff222bf
View Raw JSON Data
{
  "trx_id": "4004db4092e8fb6339600486647001837ff222bf",
  "block": 22016326,
  "trx_in_block": 31,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-04-30T09:36:27",
  "op": [
    "comment",
    {
      "parent_author": "",
      "parent_permlink": "blockchain",
      "author": "bitfamily",
      "permlink": "api-hello-blockstack",
      "title": "이것은 백엔드 api가 필요하지 않거나 사용자가 데이터베이스를 등록 할 필요가없는 가장 간단한 블록 체인 애플릿 \"hello blockstack\"빌드 프로세스입니다.",
      "body": "이 튜토리얼에서는 다음 도구를 사용합니다:\n\nnpm\n\nbrowserify\n\nblockstack.js\n\n첫 번째 단계: yearoman 설치\n\nnpm install -g yo generator-blockstack\n\n두 번째 단계 : 프로그램에 대한 새 디렉토리 만들기\n\nmkdir hello-blockstack && cd hello-blockstack\n\nyo blockstack\n\n세 번째 단계: 실행\n\nnpm run start\n\n주요 코드 설명 및 이해:\n\n주요 파일은 dom 컨텐츠 로드가 완료될 때까지 리스너 이벤트에 포함되는 app.js입니다.\n\ndocument.addEventListener(\"DOMContentLoaded\", function(event) {\n\n})\n\n여기에는 사용자의 요청과 시작을 처리하는 signin handler가 있습니다.\n\ndocument.getElementById('signin-button').addEventListener('click', function() {\n\nblockstack.redirectUserToSignIn()\n\n})\n\n우리는 또한 사용자의 출시를 처리하기위한 신호 아웃 핸들러를 가지고 있습니다.\n\ndocument.getElementById('signout-button').addEventListener('click', function() {\n\nblockstack.signUserOut(window.location.origin)\n\n})\n\n다음으로 사용자의 이력서를 표시하는 함수가 있습니다.\n\nfunction showProfile(profile) {\n\nvar person = new blockstack.Person(profile)\n\ndocument.getElementById('heading-name').innerHTML = person.name()\n\ndocument.getElementById('avatar-image').setAttribute('src', person.avatarUrl())\n\ndocument.getElementById('section-1').style.display = 'none'\n\ndocument.getElementById('section-2').style.display = 'block'\n\n}\n\n사용자가 로그인 할 수있는 세 가지 상태가 있습니다.\n\nThe user is already signed in The user has a sign in request that is pending The user is signed out\n\n코드 표현 방법\n\nif (blockstack.isUserSignedIn()) {\n\n// Show the user's profile\n\n} else if (blockstack.isSignInPending()) {\n\n// Sign the user in\n\n} else {\n\n// Do nothing\n\n}\n\n사용자 요청 중\n\nif (blockstack.isUserSignedIn()) { var profile = blockstack.loadUserData().profile showProfile(profile) } else if (blockstack.isSignInPending()) { blockstack.handlePendingSignIn().then(function(userData) { window.location = window.location.origin }) }\n\n프로그램 화면표시 스타일에 대한 제어 파일:\n\n프로그램 표시 스타일을 제어하는 ​​파일은 (/ public / manifest.json입니다.\n\n{ \"name\": \"Hello, Blockstack\", \"start_url\": \"localhost:5000\", \"description\": \"A simple demo of Blockstack Auth\", \"icons\": [{ \"src\": \"https://helloblockstack.com/icon-192x192.png\", \"sizes\": \"192x192\", \"type\": \"image/png\" }] }\n\n소스 코드 구현:\n\ngit init\n\ngit add . && git commit -m \"first commit\"\n\n그런 다음 github에 새로운 보고서를 추가하십시오.\n\nhttps://github.com/new\n\ngit remote add origin [email protected]:YOUR_USERNAME_HERE/hello-blockstack.git\n\ngit push origin master\n\nblockstack 커뮤니티에 추가하려면 다음과 같이 하십시오.\n\nhttps://contribute.blockstack.org/\n\nDownload blockstack:https://blockstack.org/install",
      "json_metadata": "{\"tags\":[\"blockchain\"],\"image\":[\"https://helloblockstack.com/icon-192x192.png\"],\"links\":[\"https://github.com/new\",\"https://contribute.blockstack.org/\",\"https://blockstack.org/install\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
    }
  ]
}
2018/02/16 13:29:18
voterbitfamily
authorbitfamily
permlinkone-year-old-baby-artists-painting-masterpiece-vlog198
weight10000 (100.00%)
Transaction InfoBlock #19921076/Trx a4a75d21c4ebc609ced5fec9cb2309b92a07a119
View Raw JSON Data
{
  "trx_id": "a4a75d21c4ebc609ced5fec9cb2309b92a07a119",
  "block": 19921076,
  "trx_in_block": 2,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-02-16T13:29:18",
  "op": [
    "vote",
    {
      "voter": "bitfamily",
      "author": "bitfamily",
      "permlink": "one-year-old-baby-artists-painting-masterpiece-vlog198",
      "weight": 10000
    }
  ]
}
2018/02/16 13:29:18
parent author
parent permlinkbaby
authorbitfamily
permlinkone-year-old-baby-artists-painting-masterpiece-vlog198
titleONE YEAR OLD BABY ARTISTS PAINTING MASTERPIECE vlog198
bodyhttps://www.youtube.com/watch?v=6gsLOVxoPTc Thanks to Color for Sponsoring this video. This new year, take a step for your and your family’s health. For a limited time, get your Color test for $25 off http://color.com/kylerandmad Today was the day we decided to get the twins ears pierced! We have talked about this for a long time and we finally pulled the trigger! Follow our Instagram! @taytumandoakley @kylerstevenfisher @madisonbontempo Follow us on Twitter! @KylerandMadison Like our NEW Facebook Page! https://www.facebook.com/kylerandmad/ Original Music by: Joakim Karud Please upvote me to support out family!!! Please upvote me to support out family!!!
json metadata{"tags":["baby"],"users":["taytumandoakley","madisonbontempo","kylerandmadison"],"image":["https://img.youtube.com/vi/6gsLOVxoPTc/0.jpg"],"links":["https://www.youtube.com/watch?v=6gsLOVxoPTc","http://color.com/kylerandmad","https://www.facebook.com/kylerandmad/"],"app":"steemit/0.1","format":"markdown"}
Transaction InfoBlock #19921076/Trx a4a75d21c4ebc609ced5fec9cb2309b92a07a119
View Raw JSON Data
{
  "trx_id": "a4a75d21c4ebc609ced5fec9cb2309b92a07a119",
  "block": 19921076,
  "trx_in_block": 2,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-02-16T13:29:18",
  "op": [
    "comment",
    {
      "parent_author": "",
      "parent_permlink": "baby",
      "author": "bitfamily",
      "permlink": "one-year-old-baby-artists-painting-masterpiece-vlog198",
      "title": "ONE YEAR OLD BABY ARTISTS PAINTING MASTERPIECE vlog198",
      "body": "https://www.youtube.com/watch?v=6gsLOVxoPTc\n\n\nThanks to Color for Sponsoring this video. This new year, take a step for your and your family’s health. For a limited time, get your Color test for $25 off http://color.com/kylerandmad\n\nToday was the day we decided to get the twins ears pierced! We have talked about this for a long time and we finally pulled the trigger! \n\n\nFollow our Instagram!\n@taytumandoakley\n@kylerstevenfisher\n@madisonbontempo\n\nFollow us on Twitter!\n@KylerandMadison\n\nLike our NEW Facebook Page! \nhttps://www.facebook.com/kylerandmad/\n\nOriginal Music by:\nJoakim Karud\n\nPlease upvote me to support out family!!!\nPlease upvote me to support out family!!!",
      "json_metadata": "{\"tags\":[\"baby\"],\"users\":[\"taytumandoakley\",\"madisonbontempo\",\"kylerandmadison\"],\"image\":[\"https://img.youtube.com/vi/6gsLOVxoPTc/0.jpg\"],\"links\":[\"https://www.youtube.com/watch?v=6gsLOVxoPTc\",\"http://color.com/kylerandmad\",\"https://www.facebook.com/kylerandmad/\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
    }
  ]
}
2018/02/16 13:11:24
voterbitfamily
authorbitfamily
permlinkone-year-old-baby-artists-painting-masterpiece
weight10000 (100.00%)
Transaction InfoBlock #19920718/Trx d4f22d1ffb649fec7f234077edef33723d7af932
View Raw JSON Data
{
  "trx_id": "d4f22d1ffb649fec7f234077edef33723d7af932",
  "block": 19920718,
  "trx_in_block": 46,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-02-16T13:11:24",
  "op": [
    "vote",
    {
      "voter": "bitfamily",
      "author": "bitfamily",
      "permlink": "one-year-old-baby-artists-painting-masterpiece",
      "weight": 10000
    }
  ]
}
2018/02/16 13:11:24
parent author
parent permlinkbaby
authorbitfamily
permlinkone-year-old-baby-artists-painting-masterpiece
titleONE YEAR OLD BABY ARTISTS PAINTING MASTERPIECE
bodyhttps://www.youtube.com/watch?v=ZeRWxK6j_Po It was time to get messy and to give the girls a chance to create something special! They created a masterpiece of art for Valentines Day! Also... DOWNLOAD @VOXEL_APP - Voxel iOS Download: http://m.onelink.me/91ee6548 Voxel Android Download: http://m.onelink.me/d18a7554 THIS VIDEO WAS SPONSORED BY @VOXEL_APP WATCH YESTERDAYS VLOG- https://youtu.be/8EPoANjt9JY Follow our Instagram! @taytumandoakley @kylerstevenfisher @madisonbontempo Follow us on Twitter! @KylerandMadison Like our NEW Facebook Page! https://www.facebook.com/kylerandmad/ Original Music by: Joakim Karud- Intro (Montage) Meluran- Skyline Please upvote me to support out family!!! Please upvote me to support out family!!!
json metadata{"tags":["baby"],"users":["voxel","taytumandoakley","madisonbontempo","kylerandmadison"],"image":["https://img.youtube.com/vi/ZeRWxK6j_Po/0.jpg","https://img.youtube.com/vi/8EPoANjt9JY/0.jpg"],"links":["https://www.youtube.com/watch?v=ZeRWxK6j_Po","http://m.onelink.me/91ee6548","http://m.onelink.me/d18a7554","https://youtu.be/8EPoANjt9JY","https://www.facebook.com/kylerandmad/"],"app":"steemit/0.1","format":"markdown"}
Transaction InfoBlock #19920718/Trx d4f22d1ffb649fec7f234077edef33723d7af932
View Raw JSON Data
{
  "trx_id": "d4f22d1ffb649fec7f234077edef33723d7af932",
  "block": 19920718,
  "trx_in_block": 46,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-02-16T13:11:24",
  "op": [
    "comment",
    {
      "parent_author": "",
      "parent_permlink": "baby",
      "author": "bitfamily",
      "permlink": "one-year-old-baby-artists-painting-masterpiece",
      "title": "ONE YEAR OLD BABY ARTISTS PAINTING MASTERPIECE",
      "body": "https://www.youtube.com/watch?v=ZeRWxK6j_Po\n\nIt was time to get messy and to give the girls a chance to create something special! They created a masterpiece of art for Valentines Day! Also... DOWNLOAD @VOXEL_APP - \nVoxel iOS Download: http://m.onelink.me/91ee6548\nVoxel Android Download: http://m.onelink.me/d18a7554\n\nTHIS VIDEO WAS SPONSORED BY @VOXEL_APP\n\nWATCH YESTERDAYS VLOG- https://youtu.be/8EPoANjt9JY\n\nFollow our Instagram!\n@taytumandoakley\n@kylerstevenfisher\n@madisonbontempo\n\nFollow us on Twitter!\n@KylerandMadison\n\nLike our NEW Facebook Page! \nhttps://www.facebook.com/kylerandmad/\n\nOriginal Music by:\nJoakim Karud- Intro\n\n(Montage) Meluran- Skyline\n\nPlease upvote me to support out family!!!\nPlease upvote me to support out family!!!",
      "json_metadata": "{\"tags\":[\"baby\"],\"users\":[\"voxel\",\"taytumandoakley\",\"madisonbontempo\",\"kylerandmadison\"],\"image\":[\"https://img.youtube.com/vi/ZeRWxK6j_Po/0.jpg\",\"https://img.youtube.com/vi/8EPoANjt9JY/0.jpg\"],\"links\":[\"https://www.youtube.com/watch?v=ZeRWxK6j_Po\",\"http://m.onelink.me/91ee6548\",\"http://m.onelink.me/d18a7554\",\"https://youtu.be/8EPoANjt9JY\",\"https://www.facebook.com/kylerandmad/\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
    }
  ]
}
2018/02/16 13:03:36
voterbitfamily
authorbitfamily
permlinkone-year-olds-boxing-ksi-my-family-vlog
weight10000 (100.00%)
Transaction InfoBlock #19920562/Trx da36f9eea03f933dcd0e1a8afe965ce48af20973
View Raw JSON Data
{
  "trx_id": "da36f9eea03f933dcd0e1a8afe965ce48af20973",
  "block": 19920562,
  "trx_in_block": 7,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2018-02-16T13:03:36",
  "op": [
    "vote",
    {
      "voter": "bitfamily",
      "author": "bitfamily",
      "permlink": "one-year-olds-boxing-ksi-my-family-vlog",
      "weight": 10000
    }
  ]
}

Account Metadata

POSTING JSON METADATA
None
JSON METADATA
profile{"dtube_pub":"xKknrg8fGpf83UKCqs9nBrTMwRFRq77tBuWEe6A2HEEt"}
{
  "posting_json_metadata": {},
  "json_metadata": {
    "profile": {
      "dtube_pub": "xKknrg8fGpf83UKCqs9nBrTMwRFRq77tBuWEe6A2HEEt"
    }
  }
}

Auth Keys

Owner
Single Signature
Public Keys
STM7mFPVmzq7S1kZDZwEm37itYjF5ncjVxjhsCfUvjtUU5VypCmom1/1
Active
Single Signature
Public Keys
STM72fxy7X9JSpTfs833Uk9nhphVnpBsNDAPZSfyew2edeigGJSe51/1
Posting
Single Signature
Public Keys
STM7C3QrWydLJD4VEmCxLsYBfafRN53a1n5gW6xMXusWeyCpK9rHi1/1
App Permissions
Memo
STM7Krvdb4MubN8z56iGsXjbHUN45DjmLenWrtq17h7eBEwFR9cCv
{
  "owner": {
    "weight_threshold": 1,
    "account_auths": [],
    "key_auths": [
      [
        "STM7mFPVmzq7S1kZDZwEm37itYjF5ncjVxjhsCfUvjtUU5VypCmom",
        1
      ]
    ]
  },
  "active": {
    "weight_threshold": 1,
    "account_auths": [],
    "key_auths": [
      [
        "STM72fxy7X9JSpTfs833Uk9nhphVnpBsNDAPZSfyew2edeigGJSe5",
        1
      ]
    ]
  },
  "posting": {
    "weight_threshold": 1,
    "account_auths": [
      [
        "dtube.app",
        1
      ]
    ],
    "key_auths": [
      [
        "STM7C3QrWydLJD4VEmCxLsYBfafRN53a1n5gW6xMXusWeyCpK9rHi",
        1
      ]
    ]
  },
  "memo": "STM7Krvdb4MubN8z56iGsXjbHUN45DjmLenWrtq17h7eBEwFR9cCv"
}

Witness Votes

0 / 30
No active witness votes.
[]