Ecoer Logo

@andy2046

26

not bad guy

steemit.com/@andy2046
VOTING POWER100.00%
DOWNVOTE POWER100.00%
RESOURCE CREDITS100.00%
REPUTATION PROGRESS50.38%
Net Worth
0.000USD
STEEM
0.002STEEM
SBD
0.000SBD
Effective Power
1.200SP
├── Own SP
0.000SP
└── Incoming Deleg
+1.200SP

Detailed Balance

STEEM
balance
0.002STEEM
market_balance
0.000STEEM
savings_balance
0.000STEEM
reward_steem_balance
0.000STEEM
STEEM POWER
Own SP
0.000SP
Delegated Out
0.000SP
Delegation In
1.200SP
Effective Power
1.200SP
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.002 STEEM",
  "savings_balance": "0.000 STEEM",
  "reward_steem_balance": "0.000 STEEM",
  "vesting_shares": "0.000000 VESTS",
  "delegated_vesting_shares": "0.000000 VESTS",
  "received_vesting_shares": "1953.311140 VESTS",
  "sbd_balance": "0.000 SBD",
  "savings_sbd_balance": "0.000 SBD",
  "reward_sbd_balance": "0.000 SBD",
  "conversions": []
}

Account Info

nameandy2046
id1207493
rank1,570,506
reputation1137578744
created2019-01-29T04:37:42
recovery_accountsteem
proxyNone
post_count10
comment_count0
lifetime_vote_count0
witnesses_voted_for0
last_post2019-02-18T03:04:12
last_root_post2019-02-18T03:04:12
last_vote_time2019-02-18T03:46:51
proxied_vsf_votes0, 0, 0, 0
can_vote1
voting_power0
delayed_votes0
balance0.002 STEEM
savings_balance0.000 STEEM
sbd_balance0.000 SBD
savings_sbd_balance0.000 SBD
vesting_shares0.000000 VESTS
delegated_vesting_shares0.000000 VESTS
received_vesting_shares1953.311140 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_update1970-01-01T00:00:00
last_account_update2019-01-29T12:43:09
minedNo
sbd_seconds0
sbd_last_interest_payment1970-01-01T00:00:00
savings_sbd_last_interest_payment1970-01-01T00:00:00
{
  "active": {
    "account_auths": [],
    "key_auths": [
      [
        "STM7HHVR5qA3nCzsPoSVsKXJQP2SLvcg5EpT23EeAbqBbfg2Qo94t",
        1
      ]
    ],
    "weight_threshold": 1
  },
  "balance": "0.002 STEEM",
  "can_vote": true,
  "comment_count": 0,
  "created": "2019-01-29T04:37:42",
  "curation_rewards": 0,
  "delegated_vesting_shares": "0.000000 VESTS",
  "downvote_manabar": {
    "current_mana": 488327785,
    "last_update_time": 1588918860
  },
  "guest_bloggers": [],
  "id": 1207493,
  "json_metadata": "{\"profile\":{\"name\":\"_not_bad_\",\"about\":\"not bad guy\",\"website\":\"https://steemit.com/@andy2046\",\"location\":\"earth\",\"cover_image\":\"https://cdn.steemitimages.com/DQmXxBFtDixwV2Szuc6uL4HWwSWPnQGDN3cfAQhVVr1bhHU/not-bad.jpeg\",\"profile_image\":\"https://cdn.steemitimages.com/DQmWDkasLs7zynM8KWwjeVXQMmfhJNN3E4x39QMnsnHbYi6/notbad.jpg\"}}",
  "last_account_recovery": "1970-01-01T00:00:00",
  "last_account_update": "2019-01-29T12:43:09",
  "last_owner_update": "1970-01-01T00:00:00",
  "last_post": "2019-02-18T03:04:12",
  "last_root_post": "2019-02-18T03:04:12",
  "last_vote_time": "2019-02-18T03:46:51",
  "lifetime_vote_count": 0,
  "market_history": [],
  "memo_key": "STM5SHxwuBBVQPKNtUaPWTzvRJzNy3Xjc3RzKSkxm79rNEWB4Buma",
  "mined": false,
  "name": "andy2046",
  "next_vesting_withdrawal": "1969-12-31T23:59:59",
  "other_history": [],
  "owner": {
    "account_auths": [],
    "key_auths": [
      [
        "STM8D2NjDDxfct3fWLYCngVYVLtAsNwi6sYkrr1AoS7vjf9mqVGaX",
        1
      ]
    ],
    "weight_threshold": 1
  },
  "pending_claimed_accounts": 0,
  "post_bandwidth": 0,
  "post_count": 10,
  "post_history": [],
  "posting": {
    "account_auths": [],
    "key_auths": [
      [
        "STM7RuL4vh7gyyvYnAXCLg9v5hL27un22uVzJQ9GXKLNp5kNjdtNe",
        1
      ]
    ],
    "weight_threshold": 1
  },
  "posting_json_metadata": "{\"profile\":{\"name\":\"_not_bad_\",\"about\":\"not bad guy\",\"website\":\"https://steemit.com/@andy2046\",\"location\":\"earth\",\"cover_image\":\"https://cdn.steemitimages.com/DQmXxBFtDixwV2Szuc6uL4HWwSWPnQGDN3cfAQhVVr1bhHU/not-bad.jpeg\",\"profile_image\":\"https://cdn.steemitimages.com/DQmWDkasLs7zynM8KWwjeVXQMmfhJNN3E4x39QMnsnHbYi6/notbad.jpg\"}}",
  "posting_rewards": 0,
  "proxied_vsf_votes": [
    0,
    0,
    0,
    0
  ],
  "proxy": "",
  "received_vesting_shares": "1953.311140 VESTS",
  "recovery_account": "steem",
  "reputation": 1137578744,
  "reset_account": "null",
  "reward_sbd_balance": "0.000 SBD",
  "reward_steem_balance": "0.000 STEEM",
  "reward_vesting_balance": "0.000000 VESTS",
  "reward_vesting_steem": "0.000 STEEM",
  "savings_balance": "0.000 STEEM",
  "savings_sbd_balance": "0.000 SBD",
  "savings_sbd_last_interest_payment": "1970-01-01T00:00:00",
  "savings_sbd_seconds": "0",
  "savings_sbd_seconds_last_update": "1970-01-01T00:00:00",
  "savings_withdraw_requests": 0,
  "sbd_balance": "0.000 SBD",
  "sbd_last_interest_payment": "1970-01-01T00:00:00",
  "sbd_seconds": "0",
  "sbd_seconds_last_update": "1970-01-01T00:00:00",
  "tags_usage": [],
  "to_withdraw": 0,
  "transfer_history": [],
  "vesting_balance": "0.000 STEEM",
  "vesting_shares": "0.000000 VESTS",
  "vesting_withdraw_rate": "0.000000 VESTS",
  "vote_history": [],
  "voting_manabar": {
    "current_mana": 1953311140,
    "last_update_time": 1588918860
  },
  "voting_power": 0,
  "withdraw_routes": 0,
  "withdrawn": 0,
  "witness_votes": [],
  "witnesses_voted_for": 0,
  "rank": 1570506
}

Withdraw Routes

IncomingOutgoing
Empty
Empty
{
  "incoming": [],
  "outgoing": []
}
From Date
To Date
steemdelegated 1.200 SP to @andy2046
2020/05/08 06:21:00
delegatorsteem
delegateeandy2046
vesting shares1953.311140 VESTS
Transaction InfoBlock #43189625/Trx ec36bcc0d108d5493cb5865ae95ed5ae71b49210
View Raw JSON Data
{
  "trx_id": "ec36bcc0d108d5493cb5865ae95ed5ae71b49210",
  "block": 43189625,
  "trx_in_block": 57,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2020-05-08T06:21:00",
  "op": [
    "delegate_vesting_shares",
    {
      "delegator": "steem",
      "delegatee": "andy2046",
      "vesting_shares": "1953.311140 VESTS"
    }
  ]
}
steemdelegated 6.003 SP to @andy2046
2020/04/23 22:37:06
delegatorsteem
delegateeandy2046
vesting shares9774.636611 VESTS
Transaction InfoBlock #42787464/Trx f14025070937318e47a046cacb383b613bcf7c71
View Raw JSON Data
{
  "trx_id": "f14025070937318e47a046cacb383b613bcf7c71",
  "block": 42787464,
  "trx_in_block": 10,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2020-04-23T22:37:06",
  "op": [
    "delegate_vesting_shares",
    {
      "delegator": "steem",
      "delegatee": "andy2046",
      "vesting_shares": "9774.636611 VESTS"
    }
  ]
}
2020/01/29 05:47:57
parent authorandy2046
parent permlinkreact-redux
authorsteemitboard
permlinksteemitboard-notify-andy2046-20200129t054757000z
title
bodyCongratulations @andy2046! You received a personal award! <table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@andy2046/birthday1.png</td><td>Happy Birthday! - You are on the Steem blockchain for 1 year!</td></tr></table> <sub>_You can view [your badges on your Steem Board](https://steemitboard.com/@andy2046) and compare to others on the [Steem Ranking](https://steemitboard.com/ranking/index.php?name=andy2046)_</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 #40344103/Trx 7e8bcfc0462ac7298a6957dd657095bcebeaad59
View Raw JSON Data
{
  "trx_id": "7e8bcfc0462ac7298a6957dd657095bcebeaad59",
  "block": 40344103,
  "trx_in_block": 8,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2020-01-29T05:47:57",
  "op": [
    "comment",
    {
      "parent_author": "andy2046",
      "parent_permlink": "react-redux",
      "author": "steemitboard",
      "permlink": "steemitboard-notify-andy2046-20200129t054757000z",
      "title": "",
      "body": "Congratulations @andy2046! You received a personal award!\n\n<table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@andy2046/birthday1.png</td><td>Happy Birthday! - You are on the Steem blockchain for 1 year!</td></tr></table>\n\n<sub>_You can view [your badges on your Steem Board](https://steemitboard.com/@andy2046) and compare to others on the [Steem Ranking](https://steemitboard.com/ranking/index.php?name=andy2046)_</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\"]}"
    }
  ]
}
jjcav84removed vote from (0.00%) @andy2046 / kubernetes-cheat-sheet
2019/11/27 10:18:57
voterjjcav84
authorandy2046
permlinkkubernetes-cheat-sheet
weight0 (0.00%)
Transaction InfoBlock #38538521/Trx a75deddfb649b062cf242d0730b9c67201514ac6
View Raw JSON Data
{
  "trx_id": "a75deddfb649b062cf242d0730b9c67201514ac6",
  "block": 38538521,
  "trx_in_block": 7,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-11-27T10:18:57",
  "op": [
    "vote",
    {
      "voter": "jjcav84",
      "author": "andy2046",
      "permlink": "kubernetes-cheat-sheet",
      "weight": 0
    }
  ]
}
2019/11/27 10:18:18
voterjjcav84
authorandy2046
permlinkkubernetes-cheat-sheet
weight10000 (100.00%)
Transaction InfoBlock #38538508/Trx 731cdd32ed0829136316b461dad2af8f280db2be
View Raw JSON Data
{
  "trx_id": "731cdd32ed0829136316b461dad2af8f280db2be",
  "block": 38538508,
  "trx_in_block": 25,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-11-27T10:18:18",
  "op": [
    "vote",
    {
      "voter": "jjcav84",
      "author": "andy2046",
      "permlink": "kubernetes-cheat-sheet",
      "weight": 10000
    }
  ]
}
dtubesent 0.001 STEEM to @andy2046- "Time is running out, claim your DTube account now before anyone else can! Login at https://d.tube"
2019/08/22 15:15:27
fromdtube
toandy2046
amount0.001 STEEM
memoTime is running out, claim your DTube account now before anyone else can! Login at https://d.tube
Transaction InfoBlock #35778320/Trx 17bc9c2df9b0b23077b479d42af9de3f7b50816a
View Raw JSON Data
{
  "trx_id": "17bc9c2df9b0b23077b479d42af9de3f7b50816a",
  "block": 35778320,
  "trx_in_block": 14,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-08-22T15:15:27",
  "op": [
    "transfer",
    {
      "from": "dtube",
      "to": "andy2046",
      "amount": "0.001 STEEM",
      "memo": "Time is running out, claim your DTube account now before anyone else can! Login at https://d.tube"
    }
  ]
}
steemdelegated 6.123 SP to @andy2046
2019/05/20 05:29:09
delegatorsteem
delegateeandy2046
vesting shares9970.148062 VESTS
Transaction InfoBlock #33064445/Trx 09a15730ee9315c09e8110e4737d51691a5219e4
View Raw JSON Data
{
  "trx_id": "09a15730ee9315c09e8110e4737d51691a5219e4",
  "block": 33064445,
  "trx_in_block": 23,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-05-20T05:29:09",
  "op": [
    "delegate_vesting_shares",
    {
      "delegator": "steem",
      "delegatee": "andy2046",
      "vesting_shares": "9970.148062 VESTS"
    }
  ]
}
2019/02/26 07:27:03
parent authorandy2046
parent permlinkreact-redux
authorpartiko
permlinkpartiko-re-andy2046-react-redux-20190226t072703045z
title
bodyHello @andy2046! This is a friendly reminder that you have 3000 Partiko Points unclaimed in your Partiko account! Partiko is a fast and beautiful mobile app for Steem, and it’s the most popular Steem mobile app out there! Download Partiko using the link below and login using SteemConnect to claim your 3000 Partiko points! You can easily convert them into Steem token! https://partiko.app/referral/partiko ![](https://d1vof77qrk4l5q.cloudfront.net/statics/partiko-poster-best-steem-app-for-your-phone.jpg)
json metadata{"app":"partiko"}
Transaction InfoBlock #30679460/Trx 4c2b0335d3bcfe96d9d6bfaf79496aff6c34128b
View Raw JSON Data
{
  "trx_id": "4c2b0335d3bcfe96d9d6bfaf79496aff6c34128b",
  "block": 30679460,
  "trx_in_block": 10,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-02-26T07:27:03",
  "op": [
    "comment",
    {
      "parent_author": "andy2046",
      "parent_permlink": "react-redux",
      "author": "partiko",
      "permlink": "partiko-re-andy2046-react-redux-20190226t072703045z",
      "title": "",
      "body": "Hello @andy2046! This is a friendly reminder that you have 3000 Partiko Points unclaimed in your Partiko account!\n\nPartiko is a fast and beautiful mobile app for Steem, and it’s the most popular Steem mobile app out there! Download Partiko using the link below and login using SteemConnect to claim your 3000 Partiko points! You can easily convert them into Steem token!\n\nhttps://partiko.app/referral/partiko\n\n![](https://d1vof77qrk4l5q.cloudfront.net/statics/partiko-poster-best-steem-app-for-your-phone.jpg)",
      "json_metadata": "{\"app\":\"partiko\"}"
    }
  ]
}
andy2046upvoted (100.00%) @andy2046 / react-redux
2019/02/18 03:46:51
voterandy2046
authorandy2046
permlinkreact-redux
weight10000 (100.00%)
Transaction InfoBlock #30444820/Trx a2a8690a51b3dac8b8b083929dd4a0272c3e4e25
View Raw JSON Data
{
  "trx_id": "a2a8690a51b3dac8b8b083929dd4a0272c3e4e25",
  "block": 30444820,
  "trx_in_block": 6,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-02-18T03:46:51",
  "op": [
    "vote",
    {
      "voter": "andy2046",
      "author": "andy2046",
      "permlink": "react-redux",
      "weight": 10000
    }
  ]
}
andy2046published a new post: react-redux
2019/02/18 03:04:12
parent author
parent permlinkreact
authorandy2046
permlinkreact-redux
title[React] Redux 源码解读
body![redux](https://user-images.githubusercontent.com/2193706/36338194-8c1a5dca-13e3-11e8-85c0-d45c030a9de8.jpg) --- ![redux](https://user-images.githubusercontent.com/2193706/36338195-96d490be-13e3-11e8-9a95-e18fba4e3c71.png) --- # 介绍 我们一起来研究下当前最流行的**React状态管理容器Redux**,本文基于**Redux v3.7.2** ,Redux用一个单独的状态树对象(state tree object)保存整个应用的状态,这个对象不能直接被改变(immutable),当数据变化了,一个新的对象就会被创建(通过actions和reducers) Redux有如下优点: - 可预测 始终有一个唯一的准确的数据源(single source of truth),就是store,通过actions和reducers来保证整个应用状态同步,做到绝不混乱 - 易维护 具备可预测的结果和严格的组织结构让代码更容易维护 - 易测试 编写可测试代码的首要准则是编写可以仅做一件事并且独立的小函数(single responsibility principle),Redux的代码几乎全部都是这样的函数:短小·纯粹·分离 # 实例代码 举个小栗子🌰看看应用代码中如何使用Redux 例子取自Redux examples 里面的counter ```js import React from 'react' import ReactDOM from 'react-dom' import { createStore } from 'redux' import Counter from './components/Counter' // import counter from './reducers' const counter = (state = 0, action) => { switch (action.type) { case 'INCREMENT': return state + 1 case 'DECREMENT': return state - 1 default: return state } } const store = createStore(counter) const rootEl = document.getElementById('root') const render = () => ReactDOM.render( <Counter value={store.getState()} onIncrement={() => store.dispatch({ type: 'INCREMENT' })} onDecrement={() => store.dispatch({ type: 'DECREMENT' })} />, rootEl ) render() store.subscribe(render) ``` # 整体结构 ![screen shot 2018-02-17 at 12 48 20 pm](https://user-images.githubusercontent.com/2193706/36338320-b8a938fe-13e6-11e8-9f2b-5fad07d431d5.png) ## utils/warning.js utils目录下面的warning.js负责控制台错误日志的输出,用于非生产环境下(`process.env.NODE_ENV !== 'production'`)抛出错误便于debug: ```js export default function warning(message) { if (typeof console !== 'undefined' && typeof console.error === 'function') { console.error(message) } try { // This error was thrown as a convenience so that if you enable // "break on all exceptions" in your console, // it would pause the execution at this line. throw new Error(message) } catch (e) { } } ``` ## index.js 入口文件index.js主要用于引出公共方法API供外面调用,isCrushed那段用于非生产环境 ```js import createStore from './createStore' import combineReducers from './combineReducers' import bindActionCreators from './bindActionCreators' import applyMiddleware from './applyMiddleware' import compose from './compose' import warning from './utils/warning' function isCrushed() {} if ( process.env.NODE_ENV !== 'production' && typeof isCrushed.name === 'string' && isCrushed.name !== 'isCrushed' ) { warning( 'You are currently using minified code outside of NODE_ENV === \'production\'. ' + 'This means that you are running a slower development build of Redux. ' + 'You can use loose-envify (https://github.com/zertosh/loose-envify) for browserify ' + 'or DefinePlugin for webpack (http://stackoverflow.com/questions/30030031) ' + 'to ensure you have the correct code for your production build.' ) } export { createStore, combineReducers, bindActionCreators, applyMiddleware, compose } ``` ## createStore.js createStore.js用于Store的生成,接受3个参数: - reducer函数,接受当前state tree和一个action,返回新的state tree - preloadedState,初始状态树,如果你使用`combineReducers`,必须确保初始state tree object的keys和`combineReducers`的keys保持一致 - enhancer,用来强化store,比如middleware / time travel,Redux自带的唯一enhancer是`applyMiddleware()` #### getState() 用来返回当前state tree #### replaceReducer(nextReducer) 用来替换掉当前store用的reducer,可用于动态按需加载或者热替换等场景 #### subscribe(listener) 订阅函数,用来注册监听事件,并返回取消订阅的函数 每当dispatch一个action时注册的listener被调用,为实现实时性,监听函数listener加入到nextListeners数组中,而dispatch事件使用currentListeners数组 #### dispatch(action) 用来分发action修改state tree的唯一方式,action必须是plain object并带有type属性 - 将当前state tree和action传入Reducer,返回的新的state tree用于更新当前state tree - 按顺序调用currentListeners数组中的listener - 返回action #### observable() 用于与`observable/reactive lib`互操作,当dispatch一个action时,调用注册的observer的next方法 ```js import isPlainObject from 'lodash/isPlainObject' import $$observable from 'symbol-observable' export const ActionTypes = { INIT: '@@redux/INIT' } export default function createStore(reducer, preloadedState, enhancer) { if (typeof preloadedState === 'function' && typeof enhancer === 'undefined') { enhancer = preloadedState preloadedState = undefined } if (typeof enhancer !== 'undefined') { if (typeof enhancer !== 'function') { throw new Error('Expected the enhancer to be a function.') } return enhancer(createStore)(reducer, preloadedState) } if (typeof reducer !== 'function') { throw new Error('Expected the reducer to be a function.') } let currentReducer = reducer let currentState = preloadedState let currentListeners = [] let nextListeners = currentListeners let isDispatching = false function ensureCanMutateNextListeners() { if (nextListeners === currentListeners) { nextListeners = currentListeners.slice() } } function getState() { return currentState } function subscribe(listener) { if (typeof listener !== 'function') { throw new Error('Expected listener to be a function.') } let isSubscribed = true ensureCanMutateNextListeners() nextListeners.push(listener) return function unsubscribe() { if (!isSubscribed) { return } isSubscribed = false ensureCanMutateNextListeners() const index = nextListeners.indexOf(listener) nextListeners.splice(index, 1) } } function dispatch(action) { if (!isPlainObject(action)) { throw new Error( 'Actions must be plain objects. ' + 'Use custom middleware for async actions.' ) } if (typeof action.type === 'undefined') { throw new Error( 'Actions may not have an undefined "type" property. ' + 'Have you misspelled a constant?' ) } if (isDispatching) { throw new Error('Reducers may not dispatch actions.') } try { isDispatching = true currentState = currentReducer(currentState, action) } finally { isDispatching = false } const listeners = currentListeners = nextListeners for (let i = 0; i < listeners.length; i++) { const listener = listeners[i] listener() } return action } function replaceReducer(nextReducer) { if (typeof nextReducer !== 'function') { throw new Error('Expected the nextReducer to be a function.') } currentReducer = nextReducer dispatch({ type: ActionTypes.INIT }) } function observable() { const outerSubscribe = subscribe return { subscribe(observer) { if (typeof observer !== 'object') { throw new TypeError('Expected the observer to be an object.') } function observeState() { if (observer.next) { observer.next(getState()) } } observeState() const unsubscribe = outerSubscribe(observeState) return { unsubscribe } }, [$$observable]() { return this } } } dispatch({ type: ActionTypes.INIT }) return { dispatch, subscribe, getState, replaceReducer, [$$observable]: observable } } ``` ## bindActionCreators.js 将action creators转换成具有同名keys的对象,用dispatch把每个action creator包起来,这样就可以直接调用它们,将包好的action creator往下传到一个组件上,却不让这个组件觉察到Redux的存在,松耦合 ```js function bindActionCreator(actionCreator, dispatch) { return (...args) => dispatch(actionCreator(...args)) } export default function bindActionCreators(actionCreators, dispatch) { if (typeof actionCreators === 'function') { return bindActionCreator(actionCreators, dispatch) } if (typeof actionCreators !== 'object' || actionCreators === null) { throw new Error( `bindActionCreators expected an object or a function, instead received ${actionCreators === null ? 'null' : typeof actionCreators}. ` + `Did you write "import ActionCreators from" instead of "import * as ActionCreators from"?` ) } const keys = Object.keys(actionCreators) const boundActionCreators = {} for (let i = 0; i < keys.length; i++) { const key = keys[i] const actionCreator = actionCreators[key] if (typeof actionCreator === 'function') { boundActionCreators[key] = bindActionCreator(actionCreator, dispatch) } } return boundActionCreators } ``` ## combineReducers.js 用来合并Reducers,将多个Reducer函数构成的对象转换为单个Reducer函数,当应用较大时Reducers可以按照模块拆分(domain model && SRP),代码结构比较清晰,它会调用每个子Reducer,并收集结果组成一个单一的state tree object,其keys与传递的子Reducer的keys相对应 对每一个Reducer,其初始state不可以为undefined,但可以为null,对传入的action,如果action为undefined,应该返回初始state,如果是未知的action,应该返回当前state ```js export default function combineReducers(reducers) { const reducerKeys = Object.keys(reducers) const finalReducers = {} for (let i = 0; i < reducerKeys.length; i++) { const key = reducerKeys[i] if (typeof reducers[key] === 'function') { finalReducers[key] = reducers[key] } } const finalReducerKeys = Object.keys(finalReducers) let shapeAssertionError try { assertReducerShape(finalReducers) } catch (e) { shapeAssertionError = e } return function combination(state = {}, action) { if (shapeAssertionError) { throw shapeAssertionError } let hasChanged = false const nextState = {} for (let i = 0; i < finalReducerKeys.length; i++) { const key = finalReducerKeys[i] const reducer = finalReducers[key] const previousStateForKey = state[key] const nextStateForKey = reducer(previousStateForKey, action) if (typeof nextStateForKey === 'undefined') { const errorMessage = getUndefinedStateErrorMessage(key, action) throw new Error(errorMessage) } nextState[key] = nextStateForKey hasChanged = hasChanged || nextStateForKey !== previousStateForKey } return hasChanged ? nextState : state } } ``` ## compose.js 用来组合传入的多个函数,在中间件时会用到,最终结果是把各个函数从右至左串联起来,相当于: `compose(a,b) = (...args) => a(b(...args))` ```js export default function compose(...funcs) { if (funcs.length === 0) { return arg => arg } if (funcs.length === 1) { return funcs[0] } return funcs.reduce((a, b) => (...args) => a(b(...args))) } ``` ## applyMiddleware.js 用于强化Store 上面👆分析createStore.js我们知道,中间件可以作为createStore的第二个或者第三个参数传入,如果有中间件,执行结果相当于`applyMiddleware(…middlewares)(createStore)(reducer, preloadedState)` ```js const store = createStore(reducer,applyMiddleware(…middlewares)) // or const store = createStore(reducer,{},applyMiddleware(…middlewares)) export default function createStore(reducer, preloadedState, enhancer) { if (typeof preloadedState === 'function' && typeof enhancer === 'undefined') { enhancer = preloadedState preloadedState = undefined } if (typeof enhancer !== 'undefined') { if (typeof enhancer !== 'function') { throw new Error('Expected the enhancer to be a function.') } return enhancer(createStore)(reducer, preloadedState) } } ``` 从下面👇的代码可以看到,相当于用compose把各个middleware串联起来,传入dispatch得到更新的dispatch 为了串联所有middleware,其接受三层参数,第一层是Store,第二层是下一个middleware,第三层才是action,代码如下: ```js export function middleware({ dispatch, getState }) { return next => action => { return next(action) } } // or export function createMiddleware() { return ({ dispatch, getState }) => next => action => { return next(action) } } ``` 问:`middlewareAPI`中的`dispatch`为何用匿名函数包起来? 答:经过`applyMiddleware()`之后的`dispatch`是更新过的,包起来后,只要`dispatch`更新,`middlewareAPI`中的`dispatch`也会变化 举个栗子🌰,"臭名昭著"的`Thunk` ```js function createThunkMiddleware(extraArgument) { return ({ dispatch, getState }) => next => action => { if (typeof action === 'function') { return action(dispatch, getState, extraArgument); } return next(action); }; } const thunk = createThunkMiddleware(); thunk.withExtraArgument = createThunkMiddleware; export default thunk; ``` ```js export default function applyMiddleware(...middlewares) { return (createStore) => (reducer, preloadedState, enhancer) => { const store = createStore(reducer, preloadedState, enhancer) let dispatch = store.dispatch let chain = [] const middlewareAPI = { getState: store.getState, dispatch: (action) => dispatch(action) } chain = middlewares.map(middleware => middleware(middlewareAPI)) dispatch = compose(...chain)(store.dispatch) return { ...store, dispatch } } } ``` [GitHub repo for Redux](https://github.com/reactjs/redux)
json metadata{"tags":["react","redux"],"image":["https://user-images.githubusercontent.com/2193706/36338194-8c1a5dca-13e3-11e8-85c0-d45c030a9de8.jpg","https://user-images.githubusercontent.com/2193706/36338195-96d490be-13e3-11e8-9a95-e18fba4e3c71.png","https://user-images.githubusercontent.com/2193706/36338320-b8a938fe-13e6-11e8-9f2b-5fad07d431d5.png"],"links":["https://github.com/reactjs/redux"],"app":"steemit/0.1","format":"markdown"}
Transaction InfoBlock #30443967/Trx b463b3490691624eab4fcb99bdf4d90df64e4504
View Raw JSON Data
{
  "trx_id": "b463b3490691624eab4fcb99bdf4d90df64e4504",
  "block": 30443967,
  "trx_in_block": 0,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-02-18T03:04:12",
  "op": [
    "comment",
    {
      "parent_author": "",
      "parent_permlink": "react",
      "author": "andy2046",
      "permlink": "react-redux",
      "title": "[React] Redux 源码解读",
      "body": "![redux](https://user-images.githubusercontent.com/2193706/36338194-8c1a5dca-13e3-11e8-85c0-d45c030a9de8.jpg)\n\n---\n\n![redux](https://user-images.githubusercontent.com/2193706/36338195-96d490be-13e3-11e8-9a95-e18fba4e3c71.png)\n---\n\n# 介绍\n我们一起来研究下当前最流行的**React状态管理容器Redux**,本文基于**Redux v3.7.2** ,Redux用一个单独的状态树对象(state tree object)保存整个应用的状态,这个对象不能直接被改变(immutable),当数据变化了,一个新的对象就会被创建(通过actions和reducers)\n\nRedux有如下优点:\n- 可预测\n始终有一个唯一的准确的数据源(single source of truth),就是store,通过actions和reducers来保证整个应用状态同步,做到绝不混乱\n- 易维护\n具备可预测的结果和严格的组织结构让代码更容易维护\n- 易测试\n编写可测试代码的首要准则是编写可以仅做一件事并且独立的小函数(single responsibility principle),Redux的代码几乎全部都是这样的函数:短小·纯粹·分离\n\n# 实例代码\n举个小栗子🌰看看应用代码中如何使用Redux\n例子取自Redux examples 里面的counter\n```js\nimport React           from 'react'\nimport ReactDOM        from 'react-dom'\nimport { createStore } from 'redux'\nimport Counter         from './components/Counter'\n// import counter      from './reducers'\nconst counter = (state = 0, action) => {\n  switch (action.type) {\n    case 'INCREMENT':\n      return state + 1\n    case 'DECREMENT':\n      return state - 1\n    default:\n      return state\n  }\n}\n\nconst store = createStore(counter)\nconst rootEl = document.getElementById('root')\n\nconst render = () => ReactDOM.render(\n  <Counter\n    value={store.getState()}\n    onIncrement={() => store.dispatch({ type: 'INCREMENT' })}\n    onDecrement={() => store.dispatch({ type: 'DECREMENT' })}\n  />,\n  rootEl\n)\n\nrender()\nstore.subscribe(render)\n```\n\n# 整体结构\n![screen shot 2018-02-17 at 12 48 20 pm](https://user-images.githubusercontent.com/2193706/36338320-b8a938fe-13e6-11e8-9f2b-5fad07d431d5.png)\n\n## utils/warning.js\nutils目录下面的warning.js负责控制台错误日志的输出,用于非生产环境下(`process.env.NODE_ENV !== 'production'`)抛出错误便于debug:\n```js\nexport default function warning(message) {\n  if (typeof console !== 'undefined' && typeof console.error === 'function') {\n    console.error(message)\n  }\n  try {\n    // This error was thrown as a convenience so that if you enable\n    // \"break on all exceptions\" in your console,\n    // it would pause the execution at this line.\n    throw new Error(message)\n  } catch (e) { }\n}\n```\n\n## index.js\n入口文件index.js主要用于引出公共方法API供外面调用,isCrushed那段用于非生产环境\n```js\nimport createStore from './createStore'\nimport combineReducers from './combineReducers'\nimport bindActionCreators from './bindActionCreators'\nimport applyMiddleware from './applyMiddleware'\nimport compose from './compose'\nimport warning from './utils/warning'\n\nfunction isCrushed() {}\n\nif (\n  process.env.NODE_ENV !== 'production' &&\n  typeof isCrushed.name === 'string' &&\n  isCrushed.name !== 'isCrushed'\n) {\n  warning(\n    'You are currently using minified code outside of NODE_ENV === \\'production\\'. ' +\n    'This means that you are running a slower development build of Redux. ' +\n    'You can use loose-envify (https://github.com/zertosh/loose-envify) for browserify ' +\n    'or DefinePlugin for webpack (http://stackoverflow.com/questions/30030031) ' +\n    'to ensure you have the correct code for your production build.'\n  )\n}\n\nexport {\n  createStore,\n  combineReducers,\n  bindActionCreators,\n  applyMiddleware,\n  compose\n}\n```\n\n## createStore.js\ncreateStore.js用于Store的生成,接受3个参数:\n- reducer函数,接受当前state tree和一个action,返回新的state tree\n- preloadedState,初始状态树,如果你使用`combineReducers`,必须确保初始state tree object的keys和`combineReducers`的keys保持一致\n- enhancer,用来强化store,比如middleware / time travel,Redux自带的唯一enhancer是`applyMiddleware()`\n\n#### getState()\n用来返回当前state tree\n#### replaceReducer(nextReducer)\n用来替换掉当前store用的reducer,可用于动态按需加载或者热替换等场景\n\n#### subscribe(listener)\n订阅函数,用来注册监听事件,并返回取消订阅的函数\n每当dispatch一个action时注册的listener被调用,为实现实时性,监听函数listener加入到nextListeners数组中,而dispatch事件使用currentListeners数组\n\n#### dispatch(action)\n用来分发action修改state tree的唯一方式,action必须是plain object并带有type属性\n- 将当前state tree和action传入Reducer,返回的新的state tree用于更新当前state tree\n- 按顺序调用currentListeners数组中的listener\n- 返回action\n\n#### observable()\n用于与`observable/reactive lib`互操作,当dispatch一个action时,调用注册的observer的next方法\n\n```js\nimport isPlainObject from 'lodash/isPlainObject'\nimport $$observable from 'symbol-observable'\n\nexport const ActionTypes = {\n  INIT: '@@redux/INIT'\n}\n\nexport default function createStore(reducer, preloadedState, enhancer) {\n  if (typeof preloadedState === 'function' && typeof enhancer === 'undefined') {\n    enhancer = preloadedState\n    preloadedState = undefined\n  }\n  if (typeof enhancer !== 'undefined') {\n    if (typeof enhancer !== 'function') {\n      throw new Error('Expected the enhancer to be a function.')\n    }\n    return enhancer(createStore)(reducer, preloadedState)\n  }\n  if (typeof reducer !== 'function') {\n    throw new Error('Expected the reducer to be a function.')\n  }\n\n  let currentReducer = reducer\n  let currentState = preloadedState\n  let currentListeners = []\n  let nextListeners = currentListeners\n  let isDispatching = false\n\n  function ensureCanMutateNextListeners() {\n    if (nextListeners === currentListeners) {\n      nextListeners = currentListeners.slice()\n    }\n  }\n\n  function getState() {\n    return currentState\n  }\n\n  function subscribe(listener) {\n    if (typeof listener !== 'function') {\n      throw new Error('Expected listener to be a function.')\n    }\n    let isSubscribed = true\n    ensureCanMutateNextListeners()\n    nextListeners.push(listener)\n    return function unsubscribe() {\n      if (!isSubscribed) {\n        return\n      }\n      isSubscribed = false\n      ensureCanMutateNextListeners()\n      const index = nextListeners.indexOf(listener)\n      nextListeners.splice(index, 1)\n    }\n  }\n\n  function dispatch(action) {\n    if (!isPlainObject(action)) {\n      throw new Error(\n        'Actions must be plain objects. ' +\n        'Use custom middleware for async actions.'\n      )\n    }\n    if (typeof action.type === 'undefined') {\n      throw new Error(\n        'Actions may not have an undefined \"type\" property. ' +\n        'Have you misspelled a constant?'\n      )\n    }\n    if (isDispatching) {\n      throw new Error('Reducers may not dispatch actions.')\n    }\n    try {\n      isDispatching = true\n      currentState = currentReducer(currentState, action)\n    } finally {\n      isDispatching = false\n    }\n    const listeners = currentListeners = nextListeners\n    for (let i = 0; i < listeners.length; i++) {\n      const listener = listeners[i]\n      listener()\n    }\n    return action\n  }\n\n  function replaceReducer(nextReducer) {\n    if (typeof nextReducer !== 'function') {\n      throw new Error('Expected the nextReducer to be a function.')\n    }\n    currentReducer = nextReducer\n    dispatch({ type: ActionTypes.INIT })\n  }\n\n  function observable() {\n    const outerSubscribe = subscribe\n    return {\n      subscribe(observer) {\n        if (typeof observer !== 'object') {\n          throw new TypeError('Expected the observer to be an object.')\n        }\n        function observeState() {\n          if (observer.next) {\n            observer.next(getState())\n          }\n        }\n        observeState()\n        const unsubscribe = outerSubscribe(observeState)\n        return { unsubscribe }\n      },\n      [$$observable]() {\n        return this\n      }\n    }\n  }\n\n  dispatch({ type: ActionTypes.INIT })\n\n  return {\n    dispatch,\n    subscribe,\n    getState,\n    replaceReducer,\n    [$$observable]: observable\n  }\n}\n```\n\n## bindActionCreators.js\n将action creators转换成具有同名keys的对象,用dispatch把每个action creator包起来,这样就可以直接调用它们,将包好的action creator往下传到一个组件上,却不让这个组件觉察到Redux的存在,松耦合\n```js\nfunction bindActionCreator(actionCreator, dispatch) {\n  return (...args) => dispatch(actionCreator(...args))\n}\n\nexport default function bindActionCreators(actionCreators, dispatch) {\n  if (typeof actionCreators === 'function') {\n    return bindActionCreator(actionCreators, dispatch)\n  }\n\n  if (typeof actionCreators !== 'object' || actionCreators === null) {\n    throw new Error(\n      `bindActionCreators expected an object or a function, instead received ${actionCreators === null ? 'null' : typeof actionCreators}. ` +\n      `Did you write \"import ActionCreators from\" instead of \"import * as ActionCreators from\"?`\n    )\n  }\n\n  const keys = Object.keys(actionCreators)\n  const boundActionCreators = {}\n  for (let i = 0; i < keys.length; i++) {\n    const key = keys[i]\n    const actionCreator = actionCreators[key]\n    if (typeof actionCreator === 'function') {\n      boundActionCreators[key] = bindActionCreator(actionCreator, dispatch)\n    }\n  }\n  return boundActionCreators\n}\n```\n\n## combineReducers.js\n用来合并Reducers,将多个Reducer函数构成的对象转换为单个Reducer函数,当应用较大时Reducers可以按照模块拆分(domain model && SRP),代码结构比较清晰,它会调用每个子Reducer,并收集结果组成一个单一的state tree object,其keys与传递的子Reducer的keys相对应\n对每一个Reducer,其初始state不可以为undefined,但可以为null,对传入的action,如果action为undefined,应该返回初始state,如果是未知的action,应该返回当前state\n```js\nexport default function combineReducers(reducers) {\n  const reducerKeys = Object.keys(reducers)\n  const finalReducers = {}\n  for (let i = 0; i < reducerKeys.length; i++) {\n    const key = reducerKeys[i]\n    if (typeof reducers[key] === 'function') {\n      finalReducers[key] = reducers[key]\n    }\n  }\n  const finalReducerKeys = Object.keys(finalReducers)\n  let shapeAssertionError\n  try {\n    assertReducerShape(finalReducers)\n  } catch (e) {\n    shapeAssertionError = e\n  }\n\n  return function combination(state = {}, action) {\n    if (shapeAssertionError) {\n      throw shapeAssertionError\n    }\n    let hasChanged = false\n    const nextState = {}\n    for (let i = 0; i < finalReducerKeys.length; i++) {\n      const key = finalReducerKeys[i]\n      const reducer = finalReducers[key]\n      const previousStateForKey = state[key]\n      const nextStateForKey = reducer(previousStateForKey, action)\n      if (typeof nextStateForKey === 'undefined') {\n        const errorMessage = getUndefinedStateErrorMessage(key, action)\n        throw new Error(errorMessage)\n      }\n      nextState[key] = nextStateForKey\n      hasChanged = hasChanged || nextStateForKey !== previousStateForKey\n    }\n    return hasChanged ? nextState : state\n  }\n}\n```\n\n## compose.js\n用来组合传入的多个函数,在中间件时会用到,最终结果是把各个函数从右至左串联起来,相当于:\n`compose(a,b) = (...args) => a(b(...args))`\n```js\nexport default function compose(...funcs) {\n  if (funcs.length === 0) {\n    return arg => arg\n  }\n  if (funcs.length === 1) {\n    return funcs[0]\n  }\n  return funcs.reduce((a, b) => (...args) => a(b(...args)))\n}\n```\n\n## applyMiddleware.js\n用于强化Store\n上面👆分析createStore.js我们知道,中间件可以作为createStore的第二个或者第三个参数传入,如果有中间件,执行结果相当于`applyMiddleware(…middlewares)(createStore)(reducer, preloadedState)`\n\n```js\nconst store = createStore(reducer,applyMiddleware(…middlewares))\n// or\nconst store = createStore(reducer,{},applyMiddleware(…middlewares))\n\nexport default function createStore(reducer, preloadedState, enhancer) {\n  if (typeof preloadedState === 'function' && typeof enhancer === 'undefined') {\n    enhancer = preloadedState\n    preloadedState = undefined\n  }\n\n  if (typeof enhancer !== 'undefined') {\n    if (typeof enhancer !== 'function') {\n      throw new Error('Expected the enhancer to be a function.')\n    }\n\n    return enhancer(createStore)(reducer, preloadedState)\n  }\n}\n```\n从下面👇的代码可以看到,相当于用compose把各个middleware串联起来,传入dispatch得到更新的dispatch\n为了串联所有middleware,其接受三层参数,第一层是Store,第二层是下一个middleware,第三层才是action,代码如下:\n```js\nexport function middleware({ dispatch, getState }) {\n  return next => action =>\n     { return next(action) }\n}\n// or\nexport function createMiddleware() {\n  return ({ dispatch, getState }) => next => action =>\n    { return next(action) }\n}\n```\n问:`middlewareAPI`中的`dispatch`为何用匿名函数包起来?\n答:经过`applyMiddleware()`之后的`dispatch`是更新过的,包起来后,只要`dispatch`更新,`middlewareAPI`中的`dispatch`也会变化\n\n举个栗子🌰,\"臭名昭著\"的`Thunk`\n```js\nfunction createThunkMiddleware(extraArgument) {\n  return ({ dispatch, getState }) => next => action => {\n    if (typeof action === 'function') {\n      return action(dispatch, getState, extraArgument);\n    }\n    return next(action);\n  };\n}\nconst thunk = createThunkMiddleware();\nthunk.withExtraArgument = createThunkMiddleware;\nexport default thunk;\n```\n\n```js\nexport default function applyMiddleware(...middlewares) {\n  return (createStore) => (reducer, preloadedState, enhancer) => {\n    const store = createStore(reducer, preloadedState, enhancer)\n    let dispatch = store.dispatch\n    let chain = []\n\n    const middlewareAPI = {\n      getState: store.getState,\n      dispatch: (action) => dispatch(action)\n    }\n    chain = middlewares.map(middleware => middleware(middlewareAPI))\n    dispatch = compose(...chain)(store.dispatch)\n\n    return {\n      ...store,\n      dispatch\n    }\n  }\n}\n```\n\n[GitHub repo for Redux](https://github.com/reactjs/redux)",
      "json_metadata": "{\"tags\":[\"react\",\"redux\"],\"image\":[\"https://user-images.githubusercontent.com/2193706/36338194-8c1a5dca-13e3-11e8-85c0-d45c030a9de8.jpg\",\"https://user-images.githubusercontent.com/2193706/36338195-96d490be-13e3-11e8-9a95-e18fba4e3c71.png\",\"https://user-images.githubusercontent.com/2193706/36338320-b8a938fe-13e6-11e8-9f2b-5fad07d431d5.png\"],\"links\":[\"https://github.com/reactjs/redux\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
    }
  ]
}
2019/02/05 03:15:18
parent authorandy2046
parent permlinkkubernetes-cheat-sheet
authorsteemcleaners
permlinkre-andy2046-kubernetes-cheat-sheet-20190205t031518469z
title
body[Source](https://gravitational.com/blog/troubleshooting-kubernetes-networking/) [Plagiarism](http://www.plagiarism.org/plagiarism-101/what-is-plagiarism/) is the copying & pasting of others work without giving credit to the original author or artist. Plagiarized posts are considered spam. Spam is discouraged by the community, and may result in action from the [cheetah bot](https://steemit.com/faq.html#What_is__cheetah). [More information and tips on sharing content.](https://steemcleaners.org/copy-paste-plagiarism/) If you believe this comment is in error, please contact us in [#disputes on Discord](https://discord.gg/YR2Wy5A)
json metadata{"app":"steemcleaners/0.3","format":"markdown+html","community":"steemcleaners"}
Transaction InfoBlock #30070088/Trx 5d7dd2f1fa8071499521e2515dba65dfdc63a0cb
View Raw JSON Data
{
  "trx_id": "5d7dd2f1fa8071499521e2515dba65dfdc63a0cb",
  "block": 30070088,
  "trx_in_block": 13,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-02-05T03:15:18",
  "op": [
    "comment",
    {
      "parent_author": "andy2046",
      "parent_permlink": "kubernetes-cheat-sheet",
      "author": "steemcleaners",
      "permlink": "re-andy2046-kubernetes-cheat-sheet-20190205t031518469z",
      "title": "",
      "body": "[Source](https://gravitational.com/blog/troubleshooting-kubernetes-networking/)\n[Plagiarism](http://www.plagiarism.org/plagiarism-101/what-is-plagiarism/) is the copying & pasting of others work without giving credit to the original author or artist. Plagiarized posts are considered spam. \r\n\r\nSpam is discouraged by the community, and may result in action from the [cheetah bot](https://steemit.com/faq.html#What_is__cheetah).\r\n\r\n[More information and tips on sharing content.](https://steemcleaners.org/copy-paste-plagiarism/)\r\n\r\nIf you believe this comment is in error, please contact us in [#disputes on Discord](https://discord.gg/YR2Wy5A)",
      "json_metadata": "{\"app\":\"steemcleaners/0.3\",\"format\":\"markdown+html\",\"community\":\"steemcleaners\"}"
    }
  ]
}
2019/02/03 08:23:15
voterbennettitalia
authorandy2046
permlinkkubernetes-api-reference
weight10000 (100.00%)
Transaction InfoBlock #30018710/Trx a231dd7ff83543b6cbc089781ebaac754f1480e3
View Raw JSON Data
{
  "trx_id": "a231dd7ff83543b6cbc089781ebaac754f1480e3",
  "block": 30018710,
  "trx_in_block": 12,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-02-03T08:23:15",
  "op": [
    "vote",
    {
      "voter": "bennettitalia",
      "author": "andy2046",
      "permlink": "kubernetes-api-reference",
      "weight": 10000
    }
  ]
}
2019/02/03 08:23:09
voterbennettitalia
authorandy2046
permlinknode-js-666
weight10000 (100.00%)
Transaction InfoBlock #30018708/Trx 088a241ec2b0483bb0ff4a0ab2e005a81dce8ae7
View Raw JSON Data
{
  "trx_id": "088a241ec2b0483bb0ff4a0ab2e005a81dce8ae7",
  "block": 30018708,
  "trx_in_block": 19,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-02-03T08:23:09",
  "op": [
    "vote",
    {
      "voter": "bennettitalia",
      "author": "andy2046",
      "permlink": "node-js-666",
      "weight": 10000
    }
  ]
}
2019/02/01 02:04:36
voterandy2046
authorhilarski
permlinkwhy-i-choose-to-be-blockchain-agnostic
weight10000 (100.00%)
Transaction InfoBlock #29953600/Trx ce275d475e02b9e8535e33b2e5c1074e848e7cbb
View Raw JSON Data
{
  "trx_id": "ce275d475e02b9e8535e33b2e5c1074e848e7cbb",
  "block": 29953600,
  "trx_in_block": 54,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-02-01T02:04:36",
  "op": [
    "vote",
    {
      "voter": "andy2046",
      "author": "hilarski",
      "permlink": "why-i-choose-to-be-blockchain-agnostic",
      "weight": 10000
    }
  ]
}
2019/02/01 00:09:06
parent authorandy2046
parent permlinknode-js-666
authorsteemitboard
permlinksteemitboard-notify-andy2046-20190201t000906000z
title
bodyCongratulations @andy2046! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) : <table><tr><td>https://steemitimages.com/60x60/http://steemitboard.com/notifications/firstcomment.png</td><td>You made your First Comment</td></tr> </table> <sub>_[Click here to view your Board](https://steemitboard.com/@andy2046)_</sub> <sub>_If you no longer want to receive notifications, reply to this comment with the word_ `STOP`</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 #29951293/Trx a90176b818851ec2a69166d6db94643117dcb7ab
View Raw JSON Data
{
  "trx_id": "a90176b818851ec2a69166d6db94643117dcb7ab",
  "block": 29951293,
  "trx_in_block": 22,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-02-01T00:09:06",
  "op": [
    "comment",
    {
      "parent_author": "andy2046",
      "parent_permlink": "node-js-666",
      "author": "steemitboard",
      "permlink": "steemitboard-notify-andy2046-20190201t000906000z",
      "title": "",
      "body": "Congratulations @andy2046! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :\n\n<table><tr><td>https://steemitimages.com/60x60/http://steemitboard.com/notifications/firstcomment.png</td><td>You made your First Comment</td></tr>\n</table>\n\n<sub>_[Click here to view your Board](https://steemitboard.com/@andy2046)_</sub>\n<sub>_If you no longer want to receive notifications, reply to this comment with the word_ `STOP`</sub>\n\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\"]}"
    }
  ]
}
2019/01/31 20:25:30
voterbennettitalia
authorandy2046
permlinkre-bennettitalia-u9uuppil-20190131t024043713z
weight10000 (100.00%)
Transaction InfoBlock #29946826/Trx d3513b69a78d2a64a8cd7f3668a83fbd13917913
View Raw JSON Data
{
  "trx_id": "d3513b69a78d2a64a8cd7f3668a83fbd13917913",
  "block": 29946826,
  "trx_in_block": 48,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-01-31T20:25:30",
  "op": [
    "vote",
    {
      "voter": "bennettitalia",
      "author": "andy2046",
      "permlink": "re-bennettitalia-u9uuppil-20190131t024043713z",
      "weight": 10000
    }
  ]
}
2019/01/31 14:49:00
voterandy2046
authortheriz
permlinkintroducing-castle-crypto-a-blockchain-gaming-review-website
weight10000 (100.00%)
Transaction InfoBlock #29940097/Trx eb6d9de748468793a41583df370e2bf27150d929
View Raw JSON Data
{
  "trx_id": "eb6d9de748468793a41583df370e2bf27150d929",
  "block": 29940097,
  "trx_in_block": 26,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-01-31T14:49:00",
  "op": [
    "vote",
    {
      "voter": "andy2046",
      "author": "theriz",
      "permlink": "introducing-castle-crypto-a-blockchain-gaming-review-website",
      "weight": 10000
    }
  ]
}
2019/01/31 14:48:48
voterandy2046
authorkieranbaxter
permlinktop-tier-cryptocurrency-exchange-huobi-partners-with-resistance-to-ensure-adequate-liquidity-on-resdex
weight10000 (100.00%)
Transaction InfoBlock #29940093/Trx d4ca22e28f60400f4c1fd682b5ac743563a40b00
View Raw JSON Data
{
  "trx_id": "d4ca22e28f60400f4c1fd682b5ac743563a40b00",
  "block": 29940093,
  "trx_in_block": 34,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-01-31T14:48:48",
  "op": [
    "vote",
    {
      "voter": "andy2046",
      "author": "kieranbaxter",
      "permlink": "top-tier-cryptocurrency-exchange-huobi-partners-with-resistance-to-ensure-adequate-liquidity-on-resdex",
      "weight": 10000
    }
  ]
}
2019/01/31 14:48:42
voterandy2046
authorghayas
permlinkichiba-a-better-way-to-to-crowdfund-your-projects-or-launch-campaigns-instantly
weight10000 (100.00%)
Transaction InfoBlock #29940091/Trx 400602327c4ab866cd9804f20058ae86f52cd7bf
View Raw JSON Data
{
  "trx_id": "400602327c4ab866cd9804f20058ae86f52cd7bf",
  "block": 29940091,
  "trx_in_block": 31,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-01-31T14:48:42",
  "op": [
    "vote",
    {
      "voter": "andy2046",
      "author": "ghayas",
      "permlink": "ichiba-a-better-way-to-to-crowdfund-your-projects-or-launch-campaigns-instantly",
      "weight": 10000
    }
  ]
}
2019/01/31 14:48:39
voterandy2046
authorbullbearnetwork
permlinkbullbearnetwork-soon-to-be-launched-bounties-inside
weight10000 (100.00%)
Transaction InfoBlock #29940090/Trx 2dd2016103c69bdae958abcdec6cfbcf169ab6b1
View Raw JSON Data
{
  "trx_id": "2dd2016103c69bdae958abcdec6cfbcf169ab6b1",
  "block": 29940090,
  "trx_in_block": 21,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-01-31T14:48:39",
  "op": [
    "vote",
    {
      "voter": "andy2046",
      "author": "bullbearnetwork",
      "permlink": "bullbearnetwork-soon-to-be-launched-bounties-inside",
      "weight": 10000
    }
  ]
}
2019/01/31 14:48:36
voterandy2046
authorhatu
permlinkyour-data-is-part-of-a-billion-dollar-market-you-re-getting-none-of-it
weight10000 (100.00%)
Transaction InfoBlock #29940089/Trx da15e7a237c40014d4e2ed285647d80e9e246f70
View Raw JSON Data
{
  "trx_id": "da15e7a237c40014d4e2ed285647d80e9e246f70",
  "block": 29940089,
  "trx_in_block": 5,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-01-31T14:48:36",
  "op": [
    "vote",
    {
      "voter": "andy2046",
      "author": "hatu",
      "permlink": "your-data-is-part-of-a-billion-dollar-market-you-re-getting-none-of-it",
      "weight": 10000
    }
  ]
}
steemdelegated 18.484 SP to @andy2046
2019/01/31 10:56:06
delegatorsteem
delegateeandy2046
vesting shares30099.196819 VESTS
Transaction InfoBlock #29935441/Trx 7cf2d5dd1c2d6105c93ceef072a50178f7280d8c
View Raw JSON Data
{
  "trx_id": "7cf2d5dd1c2d6105c93ceef072a50178f7280d8c",
  "block": 29935441,
  "trx_in_block": 17,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-01-31T10:56:06",
  "op": [
    "delegate_vesting_shares",
    {
      "delegator": "steem",
      "delegatee": "andy2046",
      "vesting_shares": "30099.196819 VESTS"
    }
  ]
}
2019/01/31 03:13:42
voterandy2046
authorschamangerbert
permlinkannouncement-steem-blitz-chess960-tournament-saturday-27-october-20-gmt-ankuendigung-steem-blitz-schach960-turnier-samstag-27
weight10000 (100.00%)
Transaction InfoBlock #29926203/Trx a54d2eb1fa668ec2fedb5ad7a5fd2bb4da6365af
View Raw JSON Data
{
  "trx_id": "a54d2eb1fa668ec2fedb5ad7a5fd2bb4da6365af",
  "block": 29926203,
  "trx_in_block": 17,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-01-31T03:13:42",
  "op": [
    "vote",
    {
      "voter": "andy2046",
      "author": "schamangerbert",
      "permlink": "announcement-steem-blitz-chess960-tournament-saturday-27-october-20-gmt-ankuendigung-steem-blitz-schach960-turnier-samstag-27",
      "weight": 10000
    }
  ]
}
2019/01/31 03:13:39
required auths[]
required posting auths["andy2046"]
idfollow
json["follow",{"follower":"andy2046","following":"blockgators","what":["blog"]}]
Transaction InfoBlock #29926202/Trx 0b621037f27d5a092eaba7f610944057df354700
View Raw JSON Data
{
  "trx_id": "0b621037f27d5a092eaba7f610944057df354700",
  "block": 29926202,
  "trx_in_block": 2,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-01-31T03:13:39",
  "op": [
    "custom_json",
    {
      "required_auths": [],
      "required_posting_auths": [
        "andy2046"
      ],
      "id": "follow",
      "json": "[\"follow\",{\"follower\":\"andy2046\",\"following\":\"blockgators\",\"what\":[\"blog\"]}]"
    }
  ]
}
2019/01/31 03:13:30
voterandy2046
authororiginalworks
permlinksponsored-writing-contest-liquidity-network-winners-announcement
weight10000 (100.00%)
Transaction InfoBlock #29926199/Trx 577069dc5bddcb5ddb060a9c272a712a041d97fa
View Raw JSON Data
{
  "trx_id": "577069dc5bddcb5ddb060a9c272a712a041d97fa",
  "block": 29926199,
  "trx_in_block": 3,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-01-31T03:13:30",
  "op": [
    "vote",
    {
      "voter": "andy2046",
      "author": "originalworks",
      "permlink": "sponsored-writing-contest-liquidity-network-winners-announcement",
      "weight": 10000
    }
  ]
}
2019/01/31 03:12:36
required auths[]
required posting auths["andy2046"]
idfollow
json["follow",{"follower":"andy2046","following":"steembasicincome","what":["blog"]}]
Transaction InfoBlock #29926181/Trx 62dfdef9d91e643939f8c23b00397ef17b29f07c
View Raw JSON Data
{
  "trx_id": "62dfdef9d91e643939f8c23b00397ef17b29f07c",
  "block": 29926181,
  "trx_in_block": 9,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-01-31T03:12:36",
  "op": [
    "custom_json",
    {
      "required_auths": [],
      "required_posting_auths": [
        "andy2046"
      ],
      "id": "follow",
      "json": "[\"follow\",{\"follower\":\"andy2046\",\"following\":\"steembasicincome\",\"what\":[\"blog\"]}]"
    }
  ]
}
2019/01/31 03:12:27
required auths[]
required posting auths["andy2046"]
idfollow
json["follow",{"follower":"andy2046","following":"qurator","what":["blog"]}]
Transaction InfoBlock #29926178/Trx 04ec899f922895f71f5c802f4f9634f0c512b562
View Raw JSON Data
{
  "trx_id": "04ec899f922895f71f5c802f4f9634f0c512b562",
  "block": 29926178,
  "trx_in_block": 14,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-01-31T03:12:27",
  "op": [
    "custom_json",
    {
      "required_auths": [],
      "required_posting_auths": [
        "andy2046"
      ],
      "id": "follow",
      "json": "[\"follow\",{\"follower\":\"andy2046\",\"following\":\"qurator\",\"what\":[\"blog\"]}]"
    }
  ]
}
2019/01/31 03:12:18
required auths[]
required posting auths["andy2046"]
idfollow
json["follow",{"follower":"andy2046","following":"originalworks","what":["blog"]}]
Transaction InfoBlock #29926175/Trx 54a5284f0a417e1992ba3cb4e4676a15ad3706f5
View Raw JSON Data
{
  "trx_id": "54a5284f0a417e1992ba3cb4e4676a15ad3706f5",
  "block": 29926175,
  "trx_in_block": 8,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-01-31T03:12:18",
  "op": [
    "custom_json",
    {
      "required_auths": [],
      "required_posting_auths": [
        "andy2046"
      ],
      "id": "follow",
      "json": "[\"follow\",{\"follower\":\"andy2046\",\"following\":\"originalworks\",\"what\":[\"blog\"]}]"
    }
  ]
}
2019/01/31 02:40:51
voterandy2046
authorandy2046
permlinkre-bennettitalia-u9uuppil-20190131t024043713z
weight10000 (100.00%)
Transaction InfoBlock #29925547/Trx 371cd51aa6bc89305a6c485c4fddb07f00110885
View Raw JSON Data
{
  "trx_id": "371cd51aa6bc89305a6c485c4fddb07f00110885",
  "block": 29925547,
  "trx_in_block": 23,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-01-31T02:40:51",
  "op": [
    "vote",
    {
      "voter": "andy2046",
      "author": "andy2046",
      "permlink": "re-bennettitalia-u9uuppil-20190131t024043713z",
      "weight": 10000
    }
  ]
}
2019/01/31 02:40:45
parent authorbennettitalia
parent permlinku9uuppil
authorandy2046
permlinkre-bennettitalia-u9uuppil-20190131t024043713z
title
bodyChef Smurf
json metadata{"tags":["dtube"],"app":"steemit/0.1"}
Transaction InfoBlock #29925545/Trx d3b0ef3da401c9432e50f2a1cd370234b1260234
View Raw JSON Data
{
  "trx_id": "d3b0ef3da401c9432e50f2a1cd370234b1260234",
  "block": 29925545,
  "trx_in_block": 14,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-01-31T02:40:45",
  "op": [
    "comment",
    {
      "parent_author": "bennettitalia",
      "parent_permlink": "u9uuppil",
      "author": "andy2046",
      "permlink": "re-bennettitalia-u9uuppil-20190131t024043713z",
      "title": "",
      "body": "Chef Smurf",
      "json_metadata": "{\"tags\":[\"dtube\"],\"app\":\"steemit/0.1\"}"
    }
  ]
}
andy2046upvoted (100.00%) @bennettitalia / u9uuppil
2019/01/31 02:36:45
voterandy2046
authorbennettitalia
permlinku9uuppil
weight10000 (100.00%)
Transaction InfoBlock #29925465/Trx f0d372e763b8b915421433f9b4f7983ddbf0bc2b
View Raw JSON Data
{
  "trx_id": "f0d372e763b8b915421433f9b4f7983ddbf0bc2b",
  "block": 29925465,
  "trx_in_block": 17,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-01-31T02:36:45",
  "op": [
    "vote",
    {
      "voter": "andy2046",
      "author": "bennettitalia",
      "permlink": "u9uuppil",
      "weight": 10000
    }
  ]
}
andy2046custom json: follow
2019/01/31 02:36:33
required auths[]
required posting auths["andy2046"]
idfollow
json["reblog",{"account":"andy2046","author":"shadowlu","permlink":"today-i-share-with-you-a-very-famous-dish-ningbo-china-the-shuttle-crab-fried-rice-cake"}]
Transaction InfoBlock #29925461/Trx b82e9d4f284c571cbf43b62bd5f9893952a4ac7b
View Raw JSON Data
{
  "trx_id": "b82e9d4f284c571cbf43b62bd5f9893952a4ac7b",
  "block": 29925461,
  "trx_in_block": 12,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-01-31T02:36:33",
  "op": [
    "custom_json",
    {
      "required_auths": [],
      "required_posting_auths": [
        "andy2046"
      ],
      "id": "follow",
      "json": "[\"reblog\",{\"account\":\"andy2046\",\"author\":\"shadowlu\",\"permlink\":\"today-i-share-with-you-a-very-famous-dish-ningbo-china-the-shuttle-crab-fried-rice-cake\"}]"
    }
  ]
}
2019/01/31 02:36:27
voterandy2046
authorshadowlu
permlinktoday-i-share-with-you-a-very-famous-dish-ningbo-china-the-shuttle-crab-fried-rice-cake
weight10000 (100.00%)
Transaction InfoBlock #29925459/Trx 9883a1f2c5ab1e0592e1c141e8073f4f2943a836
View Raw JSON Data
{
  "trx_id": "9883a1f2c5ab1e0592e1c141e8073f4f2943a836",
  "block": 29925459,
  "trx_in_block": 1,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-01-31T02:36:27",
  "op": [
    "vote",
    {
      "voter": "andy2046",
      "author": "shadowlu",
      "permlink": "today-i-share-with-you-a-very-famous-dish-ningbo-china-the-shuttle-crab-fried-rice-cake",
      "weight": 10000
    }
  ]
}
2019/01/31 02:36:06
voterandy2046
authorprasant2018
permlinkmy-grandmother-is-working
weight10000 (100.00%)
Transaction InfoBlock #29925452/Trx 48aaf7b11218e4ba1b925859f49f17e9e6f81226
View Raw JSON Data
{
  "trx_id": "48aaf7b11218e4ba1b925859f49f17e9e6f81226",
  "block": 29925452,
  "trx_in_block": 21,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-01-31T02:36:06",
  "op": [
    "vote",
    {
      "voter": "andy2046",
      "author": "prasant2018",
      "permlink": "my-grandmother-is-working",
      "weight": 10000
    }
  ]
}
andy2046upvoted (100.00%) @xueqiucaijing / 5n5saa
2019/01/31 02:35:36
voterandy2046
authorxueqiucaijing
permlink5n5saa
weight10000 (100.00%)
Transaction InfoBlock #29925442/Trx 4e8fab665462eea52c984836f1de83f21aa697c1
View Raw JSON Data
{
  "trx_id": "4e8fab665462eea52c984836f1de83f21aa697c1",
  "block": 29925442,
  "trx_in_block": 12,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-01-31T02:35:36",
  "op": [
    "vote",
    {
      "voter": "andy2046",
      "author": "xueqiucaijing",
      "permlink": "5n5saa",
      "weight": 10000
    }
  ]
}
andy2046upvoted (100.00%) @joy2018t / 6tkejv
2019/01/31 02:35:21
voterandy2046
authorjoy2018t
permlink6tkejv
weight10000 (100.00%)
Transaction InfoBlock #29925437/Trx df33d172d7e51b5ba883695e8b5f014cc97f2341
View Raw JSON Data
{
  "trx_id": "df33d172d7e51b5ba883695e8b5f014cc97f2341",
  "block": 29925437,
  "trx_in_block": 3,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-01-31T02:35:21",
  "op": [
    "vote",
    {
      "voter": "andy2046",
      "author": "joy2018t",
      "permlink": "6tkejv",
      "weight": 10000
    }
  ]
}
2019/01/31 02:35:03
voterandy2046
authorrezoanulvibes
permlinkhow-to-build-a-powerful-personal-brand--gary-vaynerchuk
weight10000 (100.00%)
Transaction InfoBlock #29925431/Trx 7ee3ee750fa8044ea67e571fff35f0bdfac44ef0
View Raw JSON Data
{
  "trx_id": "7ee3ee750fa8044ea67e571fff35f0bdfac44ef0",
  "block": 29925431,
  "trx_in_block": 22,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-01-31T02:35:03",
  "op": [
    "vote",
    {
      "voter": "andy2046",
      "author": "rezoanulvibes",
      "permlink": "how-to-build-a-powerful-personal-brand--gary-vaynerchuk",
      "weight": 10000
    }
  ]
}
2019/01/31 02:31:48
required auths[]
required posting auths["andy2046"]
idfollow
json["follow",{"follower":"andy2046","following":"xdark21","what":["blog"]}]
Transaction InfoBlock #29925366/Trx 87aaf07d3aa2cf3913c6fbda2188affcbc7f5751
View Raw JSON Data
{
  "trx_id": "87aaf07d3aa2cf3913c6fbda2188affcbc7f5751",
  "block": 29925366,
  "trx_in_block": 16,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-01-31T02:31:48",
  "op": [
    "custom_json",
    {
      "required_auths": [],
      "required_posting_auths": [
        "andy2046"
      ],
      "id": "follow",
      "json": "[\"follow\",{\"follower\":\"andy2046\",\"following\":\"xdark21\",\"what\":[\"blog\"]}]"
    }
  ]
}
2019/01/31 02:31:42
voterandy2046
authorxdark21
permlinkkarma-eos-vs-steemit
weight10000 (100.00%)
Transaction InfoBlock #29925364/Trx 7b0641d7d640bddaa76d66b61dcbc56de7ef0eb6
View Raw JSON Data
{
  "trx_id": "7b0641d7d640bddaa76d66b61dcbc56de7ef0eb6",
  "block": 29925364,
  "trx_in_block": 7,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-01-31T02:31:42",
  "op": [
    "vote",
    {
      "voter": "andy2046",
      "author": "xdark21",
      "permlink": "karma-eos-vs-steemit",
      "weight": 10000
    }
  ]
}
2019/01/31 02:24:21
voterandy2046
authorthemarkymark
permlinkannouncing-new-public-full-node
weight10000 (100.00%)
Transaction InfoBlock #29925217/Trx 8ae84a4877634f4e56f5f0e9fb9cf77e5f36ed29
View Raw JSON Data
{
  "trx_id": "8ae84a4877634f4e56f5f0e9fb9cf77e5f36ed29",
  "block": 29925217,
  "trx_in_block": 21,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-01-31T02:24:21",
  "op": [
    "vote",
    {
      "voter": "andy2046",
      "author": "themarkymark",
      "permlink": "announcing-new-public-full-node",
      "weight": 10000
    }
  ]
}
2019/01/30 08:25:06
voterandy2046
authorayenah
permlinkhello-my-steemian-friends-accepts-greeting-from-a-teacher
weight10000 (100.00%)
Transaction InfoBlock #29903641/Trx a6928fcf025ba0bb3f85dd9a969d1d4c50bbe27c
View Raw JSON Data
{
  "trx_id": "a6928fcf025ba0bb3f85dd9a969d1d4c50bbe27c",
  "block": 29903641,
  "trx_in_block": 20,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-01-30T08:25:06",
  "op": [
    "vote",
    {
      "voter": "andy2046",
      "author": "ayenah",
      "permlink": "hello-my-steemian-friends-accepts-greeting-from-a-teacher",
      "weight": 10000
    }
  ]
}
2019/01/30 08:25:03
voterandy2046
authorayenah
permlinkbeauties-of-the-nature
weight10000 (100.00%)
Transaction InfoBlock #29903640/Trx 6f82aed1c20ac05ae9b95f67975d8c39ee67ff46
View Raw JSON Data
{
  "trx_id": "6f82aed1c20ac05ae9b95f67975d8c39ee67ff46",
  "block": 29903640,
  "trx_in_block": 12,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-01-30T08:25:03",
  "op": [
    "vote",
    {
      "voter": "andy2046",
      "author": "ayenah",
      "permlink": "beauties-of-the-nature",
      "weight": 10000
    }
  ]
}
2019/01/30 08:22:09
voterayenah
authorandy2046
permlinkthis-in-javascript
weight10000 (100.00%)
Transaction InfoBlock #29903582/Trx 9f43adc4e5113135591ed50d686d0da905d54299
View Raw JSON Data
{
  "trx_id": "9f43adc4e5113135591ed50d686d0da905d54299",
  "block": 29903582,
  "trx_in_block": 23,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-01-30T08:22:09",
  "op": [
    "vote",
    {
      "voter": "ayenah",
      "author": "andy2046",
      "permlink": "this-in-javascript",
      "weight": 10000
    }
  ]
}
2019/01/30 08:21:57
voterayenah
authorandy2046
permlinkexecution-context-in-javascript
weight10000 (100.00%)
Transaction InfoBlock #29903578/Trx 9a06cb6587b115d3420e86f7d211dbd939906294
View Raw JSON Data
{
  "trx_id": "9a06cb6587b115d3420e86f7d211dbd939906294",
  "block": 29903578,
  "trx_in_block": 17,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-01-30T08:21:57",
  "op": [
    "vote",
    {
      "voter": "ayenah",
      "author": "andy2046",
      "permlink": "execution-context-in-javascript",
      "weight": 10000
    }
  ]
}
2019/01/30 08:20:30
voterandy2046
authorayenah
permlinkdeep-meaning-of-life
weight10000 (100.00%)
Transaction InfoBlock #29903549/Trx 0dbfd266797cd5edd91367fa32880e8060921cec
View Raw JSON Data
{
  "trx_id": "0dbfd266797cd5edd91367fa32880e8060921cec",
  "block": 29903549,
  "trx_in_block": 1,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-01-30T08:20:30",
  "op": [
    "vote",
    {
      "voter": "andy2046",
      "author": "ayenah",
      "permlink": "deep-meaning-of-life",
      "weight": 10000
    }
  ]
}
2019/01/30 08:17:00
required auths[]
required posting auths["andy2046"]
idfollow
json["follow",{"follower":"andy2046","following":"cryptomonitor","what":["blog"]}]
Transaction InfoBlock #29903479/Trx 28a5f8002626c97e10e7a88053b4def8cabde2a0
View Raw JSON Data
{
  "trx_id": "28a5f8002626c97e10e7a88053b4def8cabde2a0",
  "block": 29903479,
  "trx_in_block": 13,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-01-30T08:17:00",
  "op": [
    "custom_json",
    {
      "required_auths": [],
      "required_posting_auths": [
        "andy2046"
      ],
      "id": "follow",
      "json": "[\"follow\",{\"follower\":\"andy2046\",\"following\":\"cryptomonitor\",\"what\":[\"blog\"]}]"
    }
  ]
}
2019/01/30 08:14:24
required auths[]
required posting auths["andy2046"]
idfollow
json["follow",{"follower":"andy2046","following":"ayenah","what":["blog"]}]
Transaction InfoBlock #29903427/Trx 19dec021cd94c512423604e26fd2d919dfd72188
View Raw JSON Data
{
  "trx_id": "19dec021cd94c512423604e26fd2d919dfd72188",
  "block": 29903427,
  "trx_in_block": 15,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-01-30T08:14:24",
  "op": [
    "custom_json",
    {
      "required_auths": [],
      "required_posting_auths": [
        "andy2046"
      ],
      "id": "follow",
      "json": "[\"follow\",{\"follower\":\"andy2046\",\"following\":\"ayenah\",\"what\":[\"blog\"]}]"
    }
  ]
}
2019/01/30 08:13:54
voterayenah
authorandy2046
permlinkvariable-object-in-javascript
weight10000 (100.00%)
Transaction InfoBlock #29903417/Trx 41a0b78be2e34db1afd4721530f7c4a8bd32356f
View Raw JSON Data
{
  "trx_id": "41a0b78be2e34db1afd4721530f7c4a8bd32356f",
  "block": 29903417,
  "trx_in_block": 5,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-01-30T08:13:54",
  "op": [
    "vote",
    {
      "voter": "ayenah",
      "author": "andy2046",
      "permlink": "variable-object-in-javascript",
      "weight": 10000
    }
  ]
}
2019/01/30 08:13:21
voterayenah
authorandy2046
permlinktail-call-optimization-in-javascript
weight10000 (100.00%)
Transaction InfoBlock #29903406/Trx 89ea3635ddb84f8c0f80032b3c5e2b555d1fe00e
View Raw JSON Data
{
  "trx_id": "89ea3635ddb84f8c0f80032b3c5e2b555d1fe00e",
  "block": 29903406,
  "trx_in_block": 12,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-01-30T08:13:21",
  "op": [
    "vote",
    {
      "voter": "ayenah",
      "author": "andy2046",
      "permlink": "tail-call-optimization-in-javascript",
      "weight": 10000
    }
  ]
}
2019/01/30 08:13:12
voterayenah
authorandy2046
permlinkkubernetes-cheat-sheet
weight10000 (100.00%)
Transaction InfoBlock #29903403/Trx 662ca82f9ae0831e3c2f2f6e897eb68b55f45a03
View Raw JSON Data
{
  "trx_id": "662ca82f9ae0831e3c2f2f6e897eb68b55f45a03",
  "block": 29903403,
  "trx_in_block": 7,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-01-30T08:13:12",
  "op": [
    "vote",
    {
      "voter": "ayenah",
      "author": "andy2046",
      "permlink": "kubernetes-cheat-sheet",
      "weight": 10000
    }
  ]
}
2019/01/30 08:12:57
voterayenah
authorandy2046
permlinkkubernetes-api-reference
weight10000 (100.00%)
Transaction InfoBlock #29903398/Trx 413f99a01d74517e33cf50faace00c8f562568f7
View Raw JSON Data
{
  "trx_id": "413f99a01d74517e33cf50faace00c8f562568f7",
  "block": 29903398,
  "trx_in_block": 8,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-01-30T08:12:57",
  "op": [
    "vote",
    {
      "voter": "ayenah",
      "author": "andy2046",
      "permlink": "kubernetes-api-reference",
      "weight": 10000
    }
  ]
}
ayenahupvoted (100.00%) @andy2046 / node-js-666
2019/01/30 08:12:48
voterayenah
authorandy2046
permlinknode-js-666
weight10000 (100.00%)
Transaction InfoBlock #29903395/Trx a84e84cef8e985a3aa9f6e8636dd8c3050c98f22
View Raw JSON Data
{
  "trx_id": "a84e84cef8e985a3aa9f6e8636dd8c3050c98f22",
  "block": 29903395,
  "trx_in_block": 0,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-01-30T08:12:48",
  "op": [
    "vote",
    {
      "voter": "ayenah",
      "author": "andy2046",
      "permlink": "node-js-666",
      "weight": 10000
    }
  ]
}
alirezashaupvoted (100.00%) @andy2046 / node-js-666
2019/01/30 07:09:48
voteralirezasha
authorandy2046
permlinknode-js-666
weight10000 (100.00%)
Transaction InfoBlock #29902135/Trx 643401eaa6bf16641fe8a59a8f2f49f1d791bd6d
View Raw JSON Data
{
  "trx_id": "643401eaa6bf16641fe8a59a8f2f49f1d791bd6d",
  "block": 29902135,
  "trx_in_block": 31,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-01-30T07:09:48",
  "op": [
    "vote",
    {
      "voter": "alirezasha",
      "author": "andy2046",
      "permlink": "node-js-666",
      "weight": 10000
    }
  ]
}
andy2046upvoted (100.00%) @andy2046 / node-js-666
2019/01/30 06:58:15
voterandy2046
authorandy2046
permlinknode-js-666
weight10000 (100.00%)
Transaction InfoBlock #29901904/Trx ba6eca2521e2fd089af82dea22559e9b8db013e5
View Raw JSON Data
{
  "trx_id": "ba6eca2521e2fd089af82dea22559e9b8db013e5",
  "block": 29901904,
  "trx_in_block": 11,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-01-30T06:58:15",
  "op": [
    "vote",
    {
      "voter": "andy2046",
      "author": "andy2046",
      "permlink": "node-js-666",
      "weight": 10000
    }
  ]
}
andy2046published a new post: node-js-666
2019/01/30 06:57:57
parent author
parent permlinknodejs
authorandy2046
permlinknode-js-666
titleNode.js进阶666 等级考试
body# Node.js challenge ![node js](https://user-images.githubusercontent.com/2193706/40960139-61b1a9ba-68d1-11e8-8501-ce10a5933de8.png) ## 四级 > What is the relationship between Node.js and V8? Can Node work without V8? > How come when you declare a global variable in any Node.js file it’s not really global to all modules? > When exporting the API of a Node module, why can we sometimes use exports and other times we have to use module.exports? > Can we require local files without using relative paths? > Can different versions of the same package be used in the same application? > What is the Event Loop? Is it part of V8? > What is the Call Stack? Is it part of V8? > What is the difference between setImmediate and process.nextTick? > How do you make an asynchronous function return a value? > Can callbacks be used with promises or is it one way or the other? > What Node module is implemented by most other Node modules? > What are the major differences between spawn, exec, and fork? > How does the cluster module work? How is it different than using a load balancer? > What are the --harmony-* flags? ## 六级 > How can you read and inspect the memory usage of a Node.js process? > What will Node do when both the call stack and the event loop queue are empty? > What are V8 object and function templates? > What is libuv and how does Node.js use it? > How can you make Node’s REPL always use JavaScript strict mode? > What is process.argv? What type of data does it hold? > How can we do one final operation before a Node process exits? Can that operation be done asynchronously? > What are some of the built-in dot commands that you can use in Node’s REPL? > Besides V8 and libuv, what other external dependencies does Node have? > What’s the problem with the process uncaughtException event? How is it different than the exit event? > What does the _ mean inside of Node’s REPL? > Do Node buffers use V8 memory? Can they be resized? > What’s the difference between Buffer.alloc and Buffer.allocUnsafe? > How is the slice method on buffers different from that on arrays? > What is the string_decoder module useful for? How is it different than casting buffers to strings? > What are the 5 major steps that the require function does? > How can you check for the existence of a local module? > What is the main property in package.json useful for? > What are circular modular dependencies in Node and how can they be avoided? > What are the 3 file extensions that will be automatically tried by the require function? > When creating an http server and writing a response for a request, why is the end() function required? > When is it ok to use the file system *Sync methods? ## 八级 > How can you print only one level of a deeply nested object? > What is the node-gyp package used for? > The objects exports, require, and module are all globally available in every module but they are different in every module. How? > If you execute a node script file that has the single line: console.log(arguments);, what exactly will node print? > How can a module be both requirable by other modules and executable directly using the node command? > What’s an example of a built-in stream in Node that is both readable and writable? > What happens when the line cluster.fork() gets executed in a Node script? > What’s the difference between using event emitters and using simple callback functions to allow for asynchronous handling of code? > What is the console.time function useful for? > What’s the difference between the Paused and the Flowing modes of readable streams? > What does the --inspect argument do for the node command? > How can you read data from a connected socket? > The require function always caches the module it requires. What can you do if you need to execute the code in a required module many times? > When working with streams, when do you use the pipe function and when do you use events? Can those two methods be combined? ## 无极 > Can you rewrite Node.js using Node.js? How?
json metadata{"tags":["nodejs"],"image":["https://user-images.githubusercontent.com/2193706/40960139-61b1a9ba-68d1-11e8-8501-ce10a5933de8.png"],"app":"steemit/0.1","format":"markdown"}
Transaction InfoBlock #29901898/Trx 383df81dd0032f5a0b1683331b2b84f2fe914998
View Raw JSON Data
{
  "trx_id": "383df81dd0032f5a0b1683331b2b84f2fe914998",
  "block": 29901898,
  "trx_in_block": 0,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-01-30T06:57:57",
  "op": [
    "comment",
    {
      "parent_author": "",
      "parent_permlink": "nodejs",
      "author": "andy2046",
      "permlink": "node-js-666",
      "title": "Node.js进阶666 等级考试",
      "body": "# Node.js challenge\n\n![node js](https://user-images.githubusercontent.com/2193706/40960139-61b1a9ba-68d1-11e8-8501-ce10a5933de8.png)\n\n## 四级\n\n> What is the relationship between Node.js and V8? Can Node work without V8?\n\n> How come when you declare a global variable in any Node.js file it’s not really global to all modules?\n\n> When exporting the API of a Node module, why can we sometimes use exports and other times we have to use module.exports?\n\n> Can we require local files without using relative paths?\n\n> Can different versions of the same package be used in the same application?\n\n> What is the Event Loop? Is it part of V8?\n\n> What is the Call Stack? Is it part of V8?\n\n> What is the difference between setImmediate and process.nextTick?\n\n> How do you make an asynchronous function return a value?\n\n> Can callbacks be used with promises or is it one way or the other?\n\n> What Node module is implemented by most other Node modules?\n\n> What are the major differences between spawn, exec, and fork?\n\n> How does the cluster module work? How is it different than using a load balancer?\n\n> What are the --harmony-* flags?\n\n## 六级\n\n> How can you read and inspect the memory usage of a Node.js process?\n\n> What will Node do when both the call stack and the event loop queue are empty?\n\n> What are V8 object and function templates?\n\n> What is libuv and how does Node.js use it?\n\n> How can you make Node’s REPL always use JavaScript strict mode?\n\n> What is process.argv? What type of data does it hold?\n\n> How can we do one final operation before a Node process exits? Can that operation be done asynchronously?\n\n> What are some of the built-in dot commands that you can use in Node’s REPL?\n\n> Besides V8 and libuv, what other external dependencies does Node have?\n\n> What’s the problem with the process uncaughtException event? How is it different than the exit event?\n\n> What does the _ mean inside of Node’s REPL?\n\n> Do Node buffers use V8 memory? Can they be resized?\n\n> What’s the difference between Buffer.alloc and Buffer.allocUnsafe?\n\n> How is the slice method on buffers different from that on arrays?\n\n> What is the string_decoder module useful for? How is it different than casting buffers to strings?\n\n> What are the 5 major steps that the require function does?\n\n> How can you check for the existence of a local module?\n\n> What is the main property in package.json useful for?\n\n> What are circular modular dependencies in Node and how can they be avoided?\n\n> What are the 3 file extensions that will be automatically tried by the require function?\n\n> When creating an http server and writing a response for a request, why is the end() function required?\n\n> When is it ok to use the file system *Sync methods?\n\n## 八级\n\n> How can you print only one level of a deeply nested object?\n\n> What is the node-gyp package used for?\n\n> The objects exports, require, and module are all globally available in every module but they are different in every module. How?\n\n> If you execute a node script file that has the single line: console.log(arguments);, what exactly will node print?\n\n> How can a module be both requirable by other modules and executable directly using the node command?\n\n> What’s an example of a built-in stream in Node that is both readable and writable?\n\n> What happens when the line cluster.fork() gets executed in a Node script?\n\n> What’s the difference between using event emitters and using simple callback functions to allow for asynchronous handling of code?\n\n> What is the console.time function useful for?\n\n> What’s the difference between the Paused and the Flowing modes of readable streams?\n\n> What does the --inspect argument do for the node command?\n\n> How can you read data from a connected socket?\n\n> The require function always caches the module it requires. What can you do if you need to execute the code in a required module many times?\n\n> When working with streams, when do you use the pipe function and when do you use events? Can those two methods be combined?\n\n## 无极\n\n> Can you rewrite Node.js using Node.js? How?",
      "json_metadata": "{\"tags\":[\"nodejs\"],\"image\":[\"https://user-images.githubusercontent.com/2193706/40960139-61b1a9ba-68d1-11e8-8501-ce10a5933de8.png\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
    }
  ]
}
andy2046upvoted (100.00%) @carolinmatthie / cu211bd3
2019/01/29 15:02:30
voterandy2046
authorcarolinmatthie
permlinkcu211bd3
weight10000 (100.00%)
Transaction InfoBlock #29882799/Trx c1ae26de5849eb5577b0047fc2827baf80cee6bb
View Raw JSON Data
{
  "trx_id": "c1ae26de5849eb5577b0047fc2827baf80cee6bb",
  "block": 29882799,
  "trx_in_block": 35,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-01-29T15:02:30",
  "op": [
    "vote",
    {
      "voter": "andy2046",
      "author": "carolinmatthie",
      "permlink": "cu211bd3",
      "weight": 10000
    }
  ]
}
2019/01/29 14:59:18
voterandy2046
authorelizacheng
permlinkmakemesmile-season-2-episode-4-results-makemesmile-q3shbao8
weight10000 (100.00%)
Transaction InfoBlock #29882735/Trx 8324a8282bb2e8935a0bef2c5bb60b871984df1a
View Raw JSON Data
{
  "trx_id": "8324a8282bb2e8935a0bef2c5bb60b871984df1a",
  "block": 29882735,
  "trx_in_block": 18,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-01-29T14:59:18",
  "op": [
    "vote",
    {
      "voter": "andy2046",
      "author": "elizacheng",
      "permlink": "makemesmile-season-2-episode-4-results-makemesmile-q3shbao8",
      "weight": 10000
    }
  ]
}
2019/01/29 14:40:24
required auths[]
required posting auths["andy2046"]
idfollow
json["follow",{"follower":"andy2046","following":"allaz","what":["blog"]}]
Transaction InfoBlock #29882357/Trx 316e421b36b7696e942e5e65e7344292861e21a5
View Raw JSON Data
{
  "trx_id": "316e421b36b7696e942e5e65e7344292861e21a5",
  "block": 29882357,
  "trx_in_block": 21,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-01-29T14:40:24",
  "op": [
    "custom_json",
    {
      "required_auths": [],
      "required_posting_auths": [
        "andy2046"
      ],
      "id": "follow",
      "json": "[\"follow\",{\"follower\":\"andy2046\",\"following\":\"allaz\",\"what\":[\"blog\"]}]"
    }
  ]
}
2019/01/29 14:40:09
required auths[]
required posting auths["andy2046"]
idfollow
json["follow",{"follower":"andy2046","following":"dtube","what":["blog"]}]
Transaction InfoBlock #29882352/Trx 17b1af7ecd6ad27f92255c62facf9abb96309cd7
View Raw JSON Data
{
  "trx_id": "17b1af7ecd6ad27f92255c62facf9abb96309cd7",
  "block": 29882352,
  "trx_in_block": 16,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-01-29T14:40:09",
  "op": [
    "custom_json",
    {
      "required_auths": [],
      "required_posting_auths": [
        "andy2046"
      ],
      "id": "follow",
      "json": "[\"follow\",{\"follower\":\"andy2046\",\"following\":\"dtube\",\"what\":[\"blog\"]}]"
    }
  ]
}
2019/01/29 12:46:42
votersolytica
authorandy2046
permlinkkubernetes-cheat-sheet
weight10000 (100.00%)
Transaction InfoBlock #29880084/Trx 66523562a6bbfbfdd658154efde94ec3ab9d10b5
View Raw JSON Data
{
  "trx_id": "66523562a6bbfbfdd658154efde94ec3ab9d10b5",
  "block": 29880084,
  "trx_in_block": 3,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-01-29T12:46:42",
  "op": [
    "vote",
    {
      "voter": "solytica",
      "author": "andy2046",
      "permlink": "kubernetes-cheat-sheet",
      "weight": 10000
    }
  ]
}
2019/01/29 12:44:09
voterdevsup
authorandy2046
permlinkkubernetes-cheat-sheet
weight69 (0.69%)
Transaction InfoBlock #29880033/Trx a8871ad702ebe9053139675ae4616bf3c664c222
View Raw JSON Data
{
  "trx_id": "a8871ad702ebe9053139675ae4616bf3c664c222",
  "block": 29880033,
  "trx_in_block": 16,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-01-29T12:44:09",
  "op": [
    "vote",
    {
      "voter": "devsup",
      "author": "andy2046",
      "permlink": "kubernetes-cheat-sheet",
      "weight": 69
    }
  ]
}
andy2046updated their account properties
2019/01/29 12:43:09
accountandy2046
memo keySTM5SHxwuBBVQPKNtUaPWTzvRJzNy3Xjc3RzKSkxm79rNEWB4Buma
json metadata{"profile":{"name":"_not_bad_","about":"not bad guy","website":"https://steemit.com/@andy2046","location":"earth","cover_image":"https://cdn.steemitimages.com/DQmXxBFtDixwV2Szuc6uL4HWwSWPnQGDN3cfAQhVVr1bhHU/not-bad.jpeg","profile_image":"https://cdn.steemitimages.com/DQmWDkasLs7zynM8KWwjeVXQMmfhJNN3E4x39QMnsnHbYi6/notbad.jpg"}}
Transaction InfoBlock #29880013/Trx a2d9036a7f746a74df83435eb57c42b04d94e061
View Raw JSON Data
{
  "trx_id": "a2d9036a7f746a74df83435eb57c42b04d94e061",
  "block": 29880013,
  "trx_in_block": 6,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-01-29T12:43:09",
  "op": [
    "account_update",
    {
      "account": "andy2046",
      "memo_key": "STM5SHxwuBBVQPKNtUaPWTzvRJzNy3Xjc3RzKSkxm79rNEWB4Buma",
      "json_metadata": "{\"profile\":{\"name\":\"_not_bad_\",\"about\":\"not bad guy\",\"website\":\"https://steemit.com/@andy2046\",\"location\":\"earth\",\"cover_image\":\"https://cdn.steemitimages.com/DQmXxBFtDixwV2Szuc6uL4HWwSWPnQGDN3cfAQhVVr1bhHU/not-bad.jpeg\",\"profile_image\":\"https://cdn.steemitimages.com/DQmWDkasLs7zynM8KWwjeVXQMmfhJNN3E4x39QMnsnHbYi6/notbad.jpg\"}}"
    }
  ]
}
2019/01/29 12:39:42
voterandy2046
authorandy2046
permlinkkubernetes-api-reference
weight10000 (100.00%)
Transaction InfoBlock #29879944/Trx e7b8ffc7b85c1956d5dbf06f7f4d9494480c77b1
View Raw JSON Data
{
  "trx_id": "e7b8ffc7b85c1956d5dbf06f7f4d9494480c77b1",
  "block": 29879944,
  "trx_in_block": 38,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-01-29T12:39:42",
  "op": [
    "vote",
    {
      "voter": "andy2046",
      "author": "andy2046",
      "permlink": "kubernetes-api-reference",
      "weight": 10000
    }
  ]
}
andy2046published a new post: kubernetes-api-reference
2019/01/29 12:38:33
parent author
parent permlinkkubernetes
authorandy2046
permlinkkubernetes-api-reference
titleKubernetes API reference
body## v1.10 # Container ![kube container](https://user-images.githubusercontent.com/2193706/39179862-00a3623a-47e8-11e8-8811-94392c97700b.png) # Pod ![kube pod](https://user-images.githubusercontent.com/2193706/39179987-52689f4a-47e8-11e8-9d6f-8623809b69ff.png) # Service ![kube service](https://user-images.githubusercontent.com/2193706/39180012-5f9176d8-47e8-11e8-911d-e86cbf549785.png) # Deployment ![kube deployment](https://user-images.githubusercontent.com/2193706/39180022-69d23218-47e8-11e8-9a15-c900b3f5d38e.png) # Ingress ![kube ingress](https://user-images.githubusercontent.com/2193706/39180044-763c9e9e-47e8-11e8-992f-c535709db89a.png) # Job ![kube job](https://user-images.githubusercontent.com/2193706/39344834-6e15c962-4a17-11e8-9af9-801f387095a1.png) # CronJob ![kube cronjob](https://user-images.githubusercontent.com/2193706/39344841-7d525166-4a17-11e8-9f59-6d7fb07b4c4d.png) # NetworkPolicy ![kube networkpolicy](https://user-images.githubusercontent.com/2193706/39344849-87df49f4-4a17-11e8-8d99-cfde9cbfe32a.png)
json metadata{"tags":["kubernetes"],"image":["https://user-images.githubusercontent.com/2193706/39179862-00a3623a-47e8-11e8-8811-94392c97700b.png","https://user-images.githubusercontent.com/2193706/39179987-52689f4a-47e8-11e8-9d6f-8623809b69ff.png","https://user-images.githubusercontent.com/2193706/39180012-5f9176d8-47e8-11e8-911d-e86cbf549785.png","https://user-images.githubusercontent.com/2193706/39180022-69d23218-47e8-11e8-9a15-c900b3f5d38e.png","https://user-images.githubusercontent.com/2193706/39180044-763c9e9e-47e8-11e8-992f-c535709db89a.png","https://user-images.githubusercontent.com/2193706/39344834-6e15c962-4a17-11e8-9af9-801f387095a1.png","https://user-images.githubusercontent.com/2193706/39344841-7d525166-4a17-11e8-9f59-6d7fb07b4c4d.png","https://user-images.githubusercontent.com/2193706/39344849-87df49f4-4a17-11e8-8d99-cfde9cbfe32a.png"],"app":"steemit/0.1","format":"markdown"}
Transaction InfoBlock #29879921/Trx b4d9a2239034ff19faa071c04c7a1e9236408f4d
View Raw JSON Data
{
  "trx_id": "b4d9a2239034ff19faa071c04c7a1e9236408f4d",
  "block": 29879921,
  "trx_in_block": 34,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-01-29T12:38:33",
  "op": [
    "comment",
    {
      "parent_author": "",
      "parent_permlink": "kubernetes",
      "author": "andy2046",
      "permlink": "kubernetes-api-reference",
      "title": "Kubernetes API reference",
      "body": "## v1.10\n\n# Container\n\n![kube container](https://user-images.githubusercontent.com/2193706/39179862-00a3623a-47e8-11e8-8811-94392c97700b.png)\n\n# Pod\n\n![kube pod](https://user-images.githubusercontent.com/2193706/39179987-52689f4a-47e8-11e8-9d6f-8623809b69ff.png)\n\n# Service\n\n![kube service](https://user-images.githubusercontent.com/2193706/39180012-5f9176d8-47e8-11e8-911d-e86cbf549785.png)\n\n# Deployment\n\n![kube deployment](https://user-images.githubusercontent.com/2193706/39180022-69d23218-47e8-11e8-9a15-c900b3f5d38e.png)\n\n# Ingress\n\n![kube ingress](https://user-images.githubusercontent.com/2193706/39180044-763c9e9e-47e8-11e8-992f-c535709db89a.png)\n\n# Job\n\n![kube job](https://user-images.githubusercontent.com/2193706/39344834-6e15c962-4a17-11e8-9af9-801f387095a1.png)\n\n# CronJob\n\n![kube cronjob](https://user-images.githubusercontent.com/2193706/39344841-7d525166-4a17-11e8-9f59-6d7fb07b4c4d.png)\n\n# NetworkPolicy\n\n![kube networkpolicy](https://user-images.githubusercontent.com/2193706/39344849-87df49f4-4a17-11e8-8d99-cfde9cbfe32a.png)",
      "json_metadata": "{\"tags\":[\"kubernetes\"],\"image\":[\"https://user-images.githubusercontent.com/2193706/39179862-00a3623a-47e8-11e8-8811-94392c97700b.png\",\"https://user-images.githubusercontent.com/2193706/39179987-52689f4a-47e8-11e8-9d6f-8623809b69ff.png\",\"https://user-images.githubusercontent.com/2193706/39180012-5f9176d8-47e8-11e8-911d-e86cbf549785.png\",\"https://user-images.githubusercontent.com/2193706/39180022-69d23218-47e8-11e8-9a15-c900b3f5d38e.png\",\"https://user-images.githubusercontent.com/2193706/39180044-763c9e9e-47e8-11e8-992f-c535709db89a.png\",\"https://user-images.githubusercontent.com/2193706/39344834-6e15c962-4a17-11e8-9af9-801f387095a1.png\",\"https://user-images.githubusercontent.com/2193706/39344841-7d525166-4a17-11e8-9f59-6d7fb07b4c4d.png\",\"https://user-images.githubusercontent.com/2193706/39344849-87df49f4-4a17-11e8-8d99-cfde9cbfe32a.png\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
    }
  ]
}
andy2046updated their account properties
2019/01/29 12:37:15
accountandy2046
memo keySTM5SHxwuBBVQPKNtUaPWTzvRJzNy3Xjc3RzKSkxm79rNEWB4Buma
json metadata{"profile":{"name":"_not_bad_","about":"not bad guy","website":"https://steemit.com/@andy2046","location":"earth","cover_image":"https://cdn.steemitimages.com/DQmWDkasLs7zynM8KWwjeVXQMmfhJNN3E4x39QMnsnHbYi6/notbad.jpg","profile_image":"https://cdn.steemitimages.com/DQmWDkasLs7zynM8KWwjeVXQMmfhJNN3E4x39QMnsnHbYi6/notbad.jpg"}}
Transaction InfoBlock #29879895/Trx 0326761be358783d2f4fb57fdf3778e77bfe5c75
View Raw JSON Data
{
  "trx_id": "0326761be358783d2f4fb57fdf3778e77bfe5c75",
  "block": 29879895,
  "trx_in_block": 15,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-01-29T12:37:15",
  "op": [
    "account_update",
    {
      "account": "andy2046",
      "memo_key": "STM5SHxwuBBVQPKNtUaPWTzvRJzNy3Xjc3RzKSkxm79rNEWB4Buma",
      "json_metadata": "{\"profile\":{\"name\":\"_not_bad_\",\"about\":\"not bad guy\",\"website\":\"https://steemit.com/@andy2046\",\"location\":\"earth\",\"cover_image\":\"https://cdn.steemitimages.com/DQmWDkasLs7zynM8KWwjeVXQMmfhJNN3E4x39QMnsnHbYi6/notbad.jpg\",\"profile_image\":\"https://cdn.steemitimages.com/DQmWDkasLs7zynM8KWwjeVXQMmfhJNN3E4x39QMnsnHbYi6/notbad.jpg\"}}"
    }
  ]
}
allazsent 0.001 STEEM to @andy2046- "Promote your post. Your post will be min. 10 resteemed with over 13000 followers and min. 25 Upvote Different account. Your post will be more popular and you will find new friends. Send 0.5 SBD or ..."
2019/01/29 12:33:36
fromallaz
toandy2046
amount0.001 STEEM
memoPromote your post. Your post will be min. 10 resteemed with over 13000 followers and min. 25 Upvote Different account. Your post will be more popular and you will find new friends. Send 0.5 SBD or STEEM to @allaz (post URL as memo ) Service Active.
Transaction InfoBlock #29879822/Trx b0f2b878cbe0c57c152eb39314e5bcebbc31e893
View Raw JSON Data
{
  "trx_id": "b0f2b878cbe0c57c152eb39314e5bcebbc31e893",
  "block": 29879822,
  "trx_in_block": 26,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-01-29T12:33:36",
  "op": [
    "transfer",
    {
      "from": "allaz",
      "to": "andy2046",
      "amount": "0.001 STEEM",
      "memo": "Promote your post. Your post will be min. 10  resteemed with over 13000  followers and min. 25  Upvote Different account. Your post will be more popular and you will find new friends. Send 0.5 SBD or STEEM to @allaz (post URL as memo ) Service Active."
    }
  ]
}
2019/01/29 12:29:27
voterandy2046
authorandy2046
permlinkkubernetes-cheat-sheet
weight10000 (100.00%)
Transaction InfoBlock #29879739/Trx 614f4c7fa202140844012fb644340b339a71c2c7
View Raw JSON Data
{
  "trx_id": "614f4c7fa202140844012fb644340b339a71c2c7",
  "block": 29879739,
  "trx_in_block": 31,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-01-29T12:29:27",
  "op": [
    "vote",
    {
      "voter": "andy2046",
      "author": "andy2046",
      "permlink": "kubernetes-cheat-sheet",
      "weight": 10000
    }
  ]
}
2019/01/29 12:29:27
parent authorandy2046
parent permlinkkubernetes-cheat-sheet
authorcheetah
permlinkcheetah-re-andy2046kubernetes-cheat-sheet
title
bodyHi! I am a robot. I just upvoted you! I found similar content that readers might be interested in: https://gravitational.com/blog/troubleshooting-kubernetes-networking/
json metadata
Transaction InfoBlock #29879739/Trx adff714825230758a96d0592904dccde96828b53
View Raw JSON Data
{
  "trx_id": "adff714825230758a96d0592904dccde96828b53",
  "block": 29879739,
  "trx_in_block": 4,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-01-29T12:29:27",
  "op": [
    "comment",
    {
      "parent_author": "andy2046",
      "parent_permlink": "kubernetes-cheat-sheet",
      "author": "cheetah",
      "permlink": "cheetah-re-andy2046kubernetes-cheat-sheet",
      "title": "",
      "body": "Hi! I am a robot. I just upvoted you! I found similar content that readers might be interested in:\nhttps://gravitational.com/blog/troubleshooting-kubernetes-networking/",
      "json_metadata": ""
    }
  ]
}
2019/01/29 12:29:21
votercheetah
authorandy2046
permlinkkubernetes-cheat-sheet
weight8 (0.08%)
Transaction InfoBlock #29879737/Trx baea4317cb15b66ec27b61f4b9a542e73de6cc9c
View Raw JSON Data
{
  "trx_id": "baea4317cb15b66ec27b61f4b9a542e73de6cc9c",
  "block": 29879737,
  "trx_in_block": 51,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-01-29T12:29:21",
  "op": [
    "vote",
    {
      "voter": "cheetah",
      "author": "andy2046",
      "permlink": "kubernetes-cheat-sheet",
      "weight": 8
    }
  ]
}
andy2046published a new post: kubernetes-cheat-sheet
2019/01/29 12:29:09
parent author
parent permlinkkubernetes
authorandy2046
permlinkkubernetes-cheat-sheet
titleKubernetes cheat sheet
body# Cluster Introspection ```bash kubectl get services # List all services kubectl get pods # List all pods kubectl get nodes -w # Watch nodes continuously kubectl version # Get version information kubectl cluster-info # Get cluster information kubectl config view # Get the configuration kubectl describe node <node> # Output information about a node ``` # Pod and Container Introspection ```bash kubectl get pods # List the current pods kubectl describe pod <name> # Describe pod <name> kubectl get rc # List the replication controllers kubectl get rc --namespace="<namespace>" # List the replication controllers in <namespace> kubectl describe rc <name> # Describe replication controller <name> kubectl get svc # List the services kubectl describe svc <name> # Describe service <name> ``` # Interacting with Pods ```bash kubectl run <name> --image=<image-name> # Launch a pod called <name> # using image <image-name> kubectl create -f <manifest.yaml> # Create a service described # in <manifest.yaml> kubectl scale --replicas=<count> rc <name> # Scale replication controller # <name> to <count> instances kubectl expose rc <name> --port=<external> --target-port=<internal> # Map port <external> to # port <internal> on replication # controller <name> ``` # Stopping Kubernetes ```bash kubectl delete pod <name> # Delete pod <name> kubectl delete rc <name> # Delete replication controller <name> kubectl delete svc <name> # Delete service <name> kubectl drain <n> --delete-local-data --force --ignore-daemonsets # Stop all pods on <n> kubectl delete node <name> # Remove <node> from the cluster ``` # Debugging ```bash kubectl exec <service> <command> [-c <$container>] # execute <command> on <service>, optionally # selecting container <$container> kubectl logs -f <name> [-c <$container>] # Get logs from service <name>, optionally # selecting container <$container> watch -n 2 cat /var/log/kublet.log # Watch the Kublet logs kubectl top node # Show metrics for nodes kubectl top pod # Show metrics for pods ``` # Administration ```bash kubeadm init # Initialize your master node kubeadm join --token <token> <master-ip>:<master-port> # Join a node to your Kubernetes cluster kubectl create namespace <namespace> # Create namespace <name> kubectl taint nodes --all node-role.kubernetes.io/master- # Allow Kubernetes master nodes to run pods kubeadm reset # Reset current state kubectl get secrets # List all secrets ``` # Troubleshooting Networking Issues ## IP forwarding > allows forwarding of the traffic coming from one interface to be routed to another interface. > is necessary for Linux kernel to route traffic from containers to the outside world. > otherwise Pod to service connection times out, tcpdump could show that lots of repeated SYN packets are sent, but no ACK is received. ```bash # check that ipv4 forwarding is enabled sysctl net.ipv4.ip_forward # 0 means that forwarding is disabled net.ipv4.ip_forward = 0 # this will turn things back on a live server sysctl -w net.ipv4.ip_forward=1 # on Centos this will make the setting apply after reboot echo net.ipv4.ip_forward=1 >> /etc/sysconf.d/10-ipv4-forwarding-on.conf ``` ## Bridge-netfilter > enables iptables rules to work on Linux bridges just like the ones set up by Docker and Kubernetes. > is necessary for the Linux kernel to be able to perform address translation in packets going to and from hosted containers. > otherwise network requests to services outside the Pod network will start timing out with destination host unreachable or connection refused errors. ```bash # check that bridge netfilter is enabled sysctl net.bridge.bridge-nf-call-iptables # 0 means that bridging is disabled net.bridge.bridge-nf-call-iptables = 0 # Note some distributions may have this compiled with kernel, # check with cat /lib/modules/$(uname -r)/modules.builtin | grep netfilter modprobe br_netfilter # turn the iptables setting on sysctl -w net.bridge.bridge-nf-call-iptables=1 echo net.bridge.bridge-nf-call-iptables=1 >> /etc/sysconf.d/10-bridge-nf-call-iptables.conf ``` ## Firewall rules block overlay network traffic > one of most common on-premise Kubernetes networking setups leverages a VxLAN overlay network, where IP packets are encapsulated in UDP and sent over port 8472. > there is 100% packet loss between pod IPs either with lost packets or destination host unreachable. > better to use the same protocol to transfer the data, as firewall rules can be protocol specific, e.g. could be blocking UDP traffic. ```bash # on the server side iperf -s -p 8472 -u # on the client side iperf -c 172.28.128.103 -u -p 8472 -b 1K # to fix, update the firewall rule to stop blocking the traffic ``` ## AWS source/destination check > AWS performs source destination check by default. This means that AWS checks if the packets going to the instance have the target address as one of the instance IPs. > many Kubernetes networking backends use target and source IP addresses that are different from the instance IP addresses to create Pod overlay networks. > when problem arise, pod to service connection times out, tcpdump could show that lots of repeated SYN packets are sent, without a corresponding ACK anywhere in sight. ## Pod CIDR conflicts > Kubernetes sets up special overlay network for container to container communication. > with isolated pod network, containers can get unique IPs and avoid port conflicts on a cluster. > problem arise when Pod network subnets start conflicting with host networks, pod to pod communication is disrupted with routing problems. ```bash # start with a quick look at the allocated pod IP addresses kubectl get pods -o wide # compare host IP range with the kubernetes subnets specified in the apiserver ip addr list ``` Kubernetes imposes the following fundamental requirements on any networking implementation (barring any intentional network segmentation policies): * all containers can communicate with all other containers without NAT * all nodes can communicate with all containers (and vice-versa) without NAT * the IP that a container sees itself as is the same IP that others see it as
json metadata{"tags":["kubernetes"],"app":"steemit/0.1","format":"markdown"}
Transaction InfoBlock #29879733/Trx ad5851378760a3c7ce596b7306dcacb015701bc7
View Raw JSON Data
{
  "trx_id": "ad5851378760a3c7ce596b7306dcacb015701bc7",
  "block": 29879733,
  "trx_in_block": 12,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-01-29T12:29:09",
  "op": [
    "comment",
    {
      "parent_author": "",
      "parent_permlink": "kubernetes",
      "author": "andy2046",
      "permlink": "kubernetes-cheat-sheet",
      "title": "Kubernetes cheat sheet",
      "body": "# Cluster Introspection\n```bash\nkubectl get services                # List all services \nkubectl get pods                    # List all pods\nkubectl get nodes -w                # Watch nodes continuously\nkubectl version                     # Get version information\nkubectl cluster-info                # Get cluster information\nkubectl config view                 # Get the configuration\nkubectl describe node <node>        # Output information about a node\n```\n\n# Pod and Container Introspection\n```bash\nkubectl get pods                         # List the current pods\nkubectl describe pod <name>              # Describe pod <name>\nkubectl get rc                           # List the replication controllers\nkubectl get rc --namespace=\"<namespace>\" # List the replication controllers in <namespace>\nkubectl describe rc <name>               # Describe replication controller <name>\nkubectl get svc                          # List the services\nkubectl describe svc <name>              # Describe service <name>\n```\n\n# Interacting with Pods\n```bash\nkubectl run <name> --image=<image-name>\n# Launch a pod called <name>\n# using image <image-name>\n \nkubectl create -f <manifest.yaml>\n# Create a service described\n# in <manifest.yaml>\n\nkubectl scale --replicas=<count> rc <name>\n# Scale replication controller\n# <name> to <count> instances\n \nkubectl expose rc <name> --port=<external> --target-port=<internal>\n# Map port <external> to\n# port <internal> on replication\n# controller <name>\n```\n\n# Stopping Kubernetes\n```bash\nkubectl delete pod <name>                                         # Delete pod <name>\nkubectl delete rc <name>                                          # Delete replication controller <name>\nkubectl delete svc <name>                                         # Delete service <name>\nkubectl drain <n> --delete-local-data --force --ignore-daemonsets # Stop all pods on <n>\nkubectl delete node <name>                                        # Remove <node> from the cluster\n```\n\n# Debugging\n```bash\nkubectl exec <service> <command> [-c <$container>]\n# execute <command> on <service>, optionally \n# selecting container <$container>\n \nkubectl logs -f <name> [-c <$container>]\n# Get logs from service <name>, optionally\n# selecting container <$container>\n \nwatch -n 2 cat /var/log/kublet.log\n# Watch the Kublet logs\nkubectl top node\n# Show metrics for nodes\nkubectl top pod\n# Show metrics for pods\n```\n\n# Administration\n```bash\nkubeadm init    \n# Initialize your master node\nkubeadm join --token <token> <master-ip>:<master-port> \n# Join a node to your Kubernetes cluster\nkubectl create namespace <namespace>  \n# Create namespace <name>\nkubectl taint nodes --all node-role.kubernetes.io/master-\n# Allow Kubernetes master nodes to run pods\nkubeadm reset \n# Reset current state\nkubectl get secrets \n# List all secrets\n```\n\n# Troubleshooting Networking Issues\n\n## IP forwarding\n> allows forwarding of the traffic coming from one interface to be routed to another interface.\n\n> is necessary for Linux kernel to route traffic from containers to the outside world.\n\n> otherwise Pod to service connection times out, tcpdump could show that lots of repeated SYN packets are sent, but no ACK is received.\n```bash\n# check that  ipv4 forwarding is enabled\nsysctl net.ipv4.ip_forward\n# 0 means that forwarding is disabled\nnet.ipv4.ip_forward = 0\n# this will turn things back on a live server\nsysctl -w net.ipv4.ip_forward=1\n# on Centos this will make the setting apply after reboot\necho net.ipv4.ip_forward=1 >> /etc/sysconf.d/10-ipv4-forwarding-on.conf\n```\n\n## Bridge-netfilter\n> enables iptables rules to work on Linux bridges just like the ones set up by Docker and Kubernetes.\n\n> is necessary for the Linux kernel to be able to perform address translation in packets going to and from hosted containers.\n\n> otherwise network requests to services outside the Pod network will start timing out with destination host unreachable or connection refused errors.\n```bash\n# check that bridge netfilter is enabled\nsysctl net.bridge.bridge-nf-call-iptables\n# 0 means that bridging is disabled\nnet.bridge.bridge-nf-call-iptables = 0\n# Note some distributions may have this compiled with kernel,\n# check with cat /lib/modules/$(uname -r)/modules.builtin | grep netfilter\nmodprobe br_netfilter\n# turn the iptables setting on\nsysctl -w net.bridge.bridge-nf-call-iptables=1\necho net.bridge.bridge-nf-call-iptables=1 >> /etc/sysconf.d/10-bridge-nf-call-iptables.conf\n```\n\n## Firewall rules block overlay network traffic\n> one of most common on-premise Kubernetes networking setups leverages a VxLAN overlay network, where IP packets are encapsulated in UDP and sent over port 8472.\n\n> there is 100% packet loss between pod IPs either with lost packets or destination host unreachable.\n\n> better to use the same protocol to transfer the data, as firewall rules can be protocol specific, e.g. could be blocking UDP traffic.\n```bash\n#  on the server side\niperf -s -p 8472 -u\n# on the client side \niperf -c 172.28.128.103 -u -p 8472 -b 1K\n# to fix, update the firewall rule to stop blocking the traffic\n```\n\n## AWS source/destination check\n> AWS performs source destination check by default. This means that AWS checks if the packets going to the instance have the target address as one of the instance IPs.\n\n> many Kubernetes networking backends use target and source IP addresses that are different from the instance IP addresses to create Pod overlay networks.\n\n> when problem arise, pod to service connection times out, tcpdump could show that lots of repeated SYN packets are sent, without a corresponding ACK anywhere in sight.\n\n## Pod CIDR conflicts\n> Kubernetes sets up special overlay network for container to container communication.\n\n> with isolated pod network, containers can get unique IPs and avoid port conflicts on a cluster.\n\n> problem arise when Pod network subnets start conflicting with host networks, pod to pod communication is disrupted with routing problems.\n```bash\n# start with a quick look at the allocated pod IP addresses\nkubectl get pods -o wide\n# compare host IP range with the kubernetes subnets specified in the apiserver\nip addr list\n```\n\nKubernetes imposes the following fundamental requirements on any networking implementation (barring any intentional network segmentation policies):\n* all containers can communicate with all other containers without NAT\n* all nodes can communicate with all containers (and vice-versa) without NAT\n* the IP that a container sees itself as is the same IP that others see it as",
      "json_metadata": "{\"tags\":[\"kubernetes\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}"
    }
  ]
}
2019/01/29 12:27:00
required auths[]
required posting auths["andy2046"]
idfollow
json["follow",{"follower":"andy2046","following":"followbtcnews","what":["blog"]}]
Transaction InfoBlock #29879690/Trx d4d42553577162f39238896407e3a11b0818aa9a
View Raw JSON Data
{
  "trx_id": "d4d42553577162f39238896407e3a11b0818aa9a",
  "block": 29879690,
  "trx_in_block": 22,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-01-29T12:27:00",
  "op": [
    "custom_json",
    {
      "required_auths": [],
      "required_posting_auths": [
        "andy2046"
      ],
      "id": "follow",
      "json": "[\"follow\",{\"follower\":\"andy2046\",\"following\":\"followbtcnews\",\"what\":[\"blog\"]}]"
    }
  ]
}
2019/01/29 12:24:45
required auths[]
required posting auths["andy2046"]
idfollow
json["follow",{"follower":"andy2046","following":"timcliff","what":["blog"]}]
Transaction InfoBlock #29879645/Trx 2469ab275ef2bc44e7835d2866c2cedf069ac803
View Raw JSON Data
{
  "trx_id": "2469ab275ef2bc44e7835d2866c2cedf069ac803",
  "block": 29879645,
  "trx_in_block": 26,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-01-29T12:24:45",
  "op": [
    "custom_json",
    {
      "required_auths": [],
      "required_posting_auths": [
        "andy2046"
      ],
      "id": "follow",
      "json": "[\"follow\",{\"follower\":\"andy2046\",\"following\":\"timcliff\",\"what\":[\"blog\"]}]"
    }
  ]
}
2019/01/29 12:24:12
required auths[]
required posting auths["andy2046"]
idfollow
json["follow",{"follower":"andy2046","following":"aggroed","what":["blog"]}]
Transaction InfoBlock #29879634/Trx 2eb781dd5773867ca9089bcc86c7ff71bc082575
View Raw JSON Data
{
  "trx_id": "2eb781dd5773867ca9089bcc86c7ff71bc082575",
  "block": 29879634,
  "trx_in_block": 4,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-01-29T12:24:12",
  "op": [
    "custom_json",
    {
      "required_auths": [],
      "required_posting_auths": [
        "andy2046"
      ],
      "id": "follow",
      "json": "[\"follow\",{\"follower\":\"andy2046\",\"following\":\"aggroed\",\"what\":[\"blog\"]}]"
    }
  ]
}
2019/01/29 12:23:15
required auths[]
required posting auths["andy2046"]
idfollow
json["follow",{"follower":"andy2046","following":"good-karma","what":["blog"]}]
Transaction InfoBlock #29879615/Trx 387fc2df2edf278abc04b9af3ea25331e8427e5e
View Raw JSON Data
{
  "trx_id": "387fc2df2edf278abc04b9af3ea25331e8427e5e",
  "block": 29879615,
  "trx_in_block": 25,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-01-29T12:23:15",
  "op": [
    "custom_json",
    {
      "required_auths": [],
      "required_posting_auths": [
        "andy2046"
      ],
      "id": "follow",
      "json": "[\"follow\",{\"follower\":\"andy2046\",\"following\":\"good-karma\",\"what\":[\"blog\"]}]"
    }
  ]
}
2019/01/29 10:07:09
voterandy2046
authorandy2046
permlinktail-call-optimization-in-javascript
weight10000 (100.00%)
Transaction InfoBlock #29876895/Trx 54460903f8af1d3e84e728009eef81bdf49dbd87
View Raw JSON Data
{
  "trx_id": "54460903f8af1d3e84e728009eef81bdf49dbd87",
  "block": 29876895,
  "trx_in_block": 32,
  "op_in_trx": 0,
  "virtual_op": 0,
  "timestamp": "2019-01-29T10:07:09",
  "op": [
    "vote",
    {
      "voter": "andy2046",
      "author": "andy2046",
      "permlink": "tail-call-optimization-in-javascript",
      "weight": 10000
    }
  ]
}

Account Metadata

POSTING JSON METADATA
profile{"name":"_not_bad_","about":"not bad guy","website":"https://steemit.com/@andy2046","location":"earth","cover_image":"https://cdn.steemitimages.com/DQmXxBFtDixwV2Szuc6uL4HWwSWPnQGDN3cfAQhVVr1bhHU/not-bad.jpeg","profile_image":"https://cdn.steemitimages.com/DQmWDkasLs7zynM8KWwjeVXQMmfhJNN3E4x39QMnsnHbYi6/notbad.jpg"}
JSON METADATA
profile{"name":"_not_bad_","about":"not bad guy","website":"https://steemit.com/@andy2046","location":"earth","cover_image":"https://cdn.steemitimages.com/DQmXxBFtDixwV2Szuc6uL4HWwSWPnQGDN3cfAQhVVr1bhHU/not-bad.jpeg","profile_image":"https://cdn.steemitimages.com/DQmWDkasLs7zynM8KWwjeVXQMmfhJNN3E4x39QMnsnHbYi6/notbad.jpg"}
{
  "posting_json_metadata": {
    "profile": {
      "name": "_not_bad_",
      "about": "not bad guy",
      "website": "https://steemit.com/@andy2046",
      "location": "earth",
      "cover_image": "https://cdn.steemitimages.com/DQmXxBFtDixwV2Szuc6uL4HWwSWPnQGDN3cfAQhVVr1bhHU/not-bad.jpeg",
      "profile_image": "https://cdn.steemitimages.com/DQmWDkasLs7zynM8KWwjeVXQMmfhJNN3E4x39QMnsnHbYi6/notbad.jpg"
    }
  },
  "json_metadata": {
    "profile": {
      "name": "_not_bad_",
      "about": "not bad guy",
      "website": "https://steemit.com/@andy2046",
      "location": "earth",
      "cover_image": "https://cdn.steemitimages.com/DQmXxBFtDixwV2Szuc6uL4HWwSWPnQGDN3cfAQhVVr1bhHU/not-bad.jpeg",
      "profile_image": "https://cdn.steemitimages.com/DQmWDkasLs7zynM8KWwjeVXQMmfhJNN3E4x39QMnsnHbYi6/notbad.jpg"
    }
  }
}

Auth Keys

Owner
Single Signature
Public Keys
STM8D2NjDDxfct3fWLYCngVYVLtAsNwi6sYkrr1AoS7vjf9mqVGaX1/1
Active
Single Signature
Public Keys
STM7HHVR5qA3nCzsPoSVsKXJQP2SLvcg5EpT23EeAbqBbfg2Qo94t1/1
Posting
Single Signature
Public Keys
STM7RuL4vh7gyyvYnAXCLg9v5hL27un22uVzJQ9GXKLNp5kNjdtNe1/1
Memo
STM5SHxwuBBVQPKNtUaPWTzvRJzNy3Xjc3RzKSkxm79rNEWB4Buma
{
  "owner": {
    "account_auths": [],
    "key_auths": [
      [
        "STM8D2NjDDxfct3fWLYCngVYVLtAsNwi6sYkrr1AoS7vjf9mqVGaX",
        1
      ]
    ],
    "weight_threshold": 1
  },
  "active": {
    "account_auths": [],
    "key_auths": [
      [
        "STM7HHVR5qA3nCzsPoSVsKXJQP2SLvcg5EpT23EeAbqBbfg2Qo94t",
        1
      ]
    ],
    "weight_threshold": 1
  },
  "posting": {
    "account_auths": [],
    "key_auths": [
      [
        "STM7RuL4vh7gyyvYnAXCLg9v5hL27un22uVzJQ9GXKLNp5kNjdtNe",
        1
      ]
    ],
    "weight_threshold": 1
  },
  "memo": "STM5SHxwuBBVQPKNtUaPWTzvRJzNy3Xjc3RzKSkxm79rNEWB4Buma"
}

Witness Votes

0 / 30
No active witness votes.
[]