├── .editorconfig ├── .gitignore ├── README.md ├── app ├── config │ ├── config.template │ ├── loader.php │ ├── routes.php │ └── services.php ├── controllers │ ├── AccountApiController.php │ ├── AccountController.php │ ├── AccountsController.php │ ├── ApiController.php │ ├── AppController.php │ ├── AppsController.php │ ├── BlockController.php │ ├── BlocksController.php │ ├── ChartsController.php │ ├── CommentController.php │ ├── CommentsController.php │ ├── ControllerBase.php │ ├── ForumsController.php │ ├── IndexController.php │ ├── LabsController.php │ ├── LiveController.php │ ├── RwController.php │ ├── SearchController.php │ ├── StatsController.php │ ├── TxController.php │ └── WitnessController.php ├── helpers │ ├── Convert.php │ ├── LargeNumber.php │ ├── Markdown.php │ ├── OpName.php │ ├── Reputation.php │ └── TimeAgo.php ├── libs │ ├── steemd.php │ └── utilities.php ├── models │ ├── Account.php │ ├── AccountHistory.php │ ├── AuthorReward.php │ ├── BSON │ │ ├── Array.php │ │ └── BSON_Document.php │ ├── BSON_Document.php │ ├── BenefactorReward.php │ ├── Block30d.php │ ├── Comment.php │ ├── CommentDiff.php │ ├── Convert.php │ ├── CurationReward.php │ ├── Document.php │ ├── FeedPublish.php │ ├── Follow.php │ ├── FundsHistory.php │ ├── Pow.php │ ├── PropsHistory.php │ ├── Reblog.php │ ├── Statistics.php │ ├── Status.php │ ├── Transfer.php │ ├── VestingDeposit.php │ ├── VestingWithdraw.php │ ├── Vote.php │ ├── Witness.php │ ├── WitnessHistory.php │ ├── WitnessMiss.php │ └── WitnessVote.php └── views │ ├── _elements │ ├── account_list_item.volt │ ├── account_table_row.volt │ ├── cards │ │ ├── account.volt │ │ └── app.volt │ ├── comment_list.volt │ ├── comment_table.volt │ ├── definition_table.volt │ ├── layouts │ │ ├── footer.volt │ │ ├── head.volt │ │ ├── menu.volt │ │ └── scripts.volt │ ├── paginator.volt │ ├── sidebar │ │ ├── commands.volt │ │ ├── earnings.volt │ │ └── readmore.volt │ ├── tx │ │ ├── account_create.volt │ │ ├── account_create_with_delegation.volt │ │ ├── account_update.volt │ │ ├── account_witness_proxy.volt │ │ ├── account_witness_vote.volt │ │ ├── author_reward.volt │ │ ├── cancel_transfer_from_savings.volt │ │ ├── change_recovery_account.volt │ │ ├── claim_reward_balance.volt │ │ ├── comment.volt │ │ ├── comment_benefactor_reward.volt │ │ ├── comment_options.volt │ │ ├── comment_reward.volt │ │ ├── convert.volt │ │ ├── curate_reward.volt │ │ ├── curation_reward.volt │ │ ├── custom.volt │ │ ├── custom_json.volt │ │ ├── delegate_vesting_shares.volt │ │ ├── delete_comment.volt │ │ ├── escrow_approve.volt │ │ ├── escrow_dispute.volt │ │ ├── escrow_release.volt │ │ ├── escrow_transfer.volt │ │ ├── feed_publish.volt │ │ ├── fill_convert_request.volt │ │ ├── fill_order.volt │ │ ├── fill_transfer_from_savings.volt │ │ ├── fill_vesting_withdraw.volt │ │ ├── interest.volt │ │ ├── limit_order_cancel.volt │ │ ├── limit_order_create.volt │ │ ├── pow.volt │ │ ├── pow2.volt │ │ ├── producer_reward.volt │ │ ├── recover_account.volt │ │ ├── request_account_recovery.volt │ │ ├── return_vesting_delegation.volt │ │ ├── set_withdraw_vesting_route.volt │ │ ├── shutdown_witness.volt │ │ ├── transfer.volt │ │ ├── transfer_from_savings.volt │ │ ├── transfer_to_savings.volt │ │ ├── transfer_to_vesting.volt │ │ ├── unknown.volt │ │ ├── vote.volt │ │ ├── withdraw_vesting.volt │ │ └── witness_update.volt │ ├── vesting_shares.volt │ ├── voter_rshares.volt │ ├── voter_weight.volt │ ├── warning.volt │ └── witness_vesting_shares.volt │ ├── account │ ├── _elements │ │ └── followers_navigation.volt │ ├── view.volt │ └── view │ │ ├── authoring.volt │ │ ├── authoringDate.volt │ │ ├── beneficiaries.volt │ │ ├── beneficiariesDate.volt │ │ ├── blocks.volt │ │ ├── curation.volt │ │ ├── curationDate.volt │ │ ├── data.volt │ │ ├── followers.volt │ │ ├── followersWhales.volt │ │ ├── following.volt │ │ ├── missed.volt │ │ ├── posts.volt │ │ ├── powerdown.volt │ │ ├── powerup.volt │ │ ├── props.volt │ │ ├── proxied.volt │ │ ├── reblogged.volt │ │ ├── reblogs.volt │ │ ├── replies.volt │ │ ├── transfers.volt │ │ ├── view.volt │ │ ├── votes.volt │ │ └── witness.volt │ ├── accounts │ └── list.volt │ ├── app │ ├── view.volt │ └── view │ │ ├── earnings.volt │ │ └── view.volt │ ├── apps │ └── index.volt │ ├── block │ ├── comment_options.volt │ └── view.volt │ ├── blocks │ └── index.volt │ ├── charts │ ├── account │ │ ├── authoring.volt │ │ ├── blocks.volt │ │ ├── curation.volt │ │ ├── followers.volt │ │ ├── posts.volt │ │ ├── powerdown.volt │ │ ├── powerup.volt │ │ ├── transfers.volt │ │ ├── view.volt │ │ ├── votes.volt │ │ └── witness.volt │ ├── activity.volt │ ├── authors.volt │ ├── chart │ │ ├── rewards.volt │ │ └── steem.volt │ ├── daily.volt │ ├── growth.volt │ ├── index.volt │ ├── price.volt │ ├── rewards.volt │ ├── steem.volt │ ├── supply.volt │ └── votes.volt │ ├── comment │ ├── curie.volt │ ├── list.volt │ ├── view.volt │ └── view │ │ ├── data.volt │ │ ├── edits.volt │ │ ├── reblogs.volt │ │ ├── replies.volt │ │ ├── reply.volt │ │ ├── tags.volt │ │ ├── view.volt │ │ └── votes.volt │ ├── comments │ ├── curie.volt │ ├── daily.volt │ ├── list.volt │ ├── view.volt │ └── view │ │ ├── data.volt │ │ ├── reblogs.volt │ │ ├── replies.volt │ │ ├── reply.volt │ │ ├── tags.volt │ │ ├── view.volt │ │ └── votes.volt │ ├── forums │ ├── _breadcrumb.volt │ ├── board.volt │ ├── index.volt │ ├── post.volt │ └── view.volt │ ├── index │ ├── homepage.volt │ ├── index.volt │ ├── live.volt │ └── show404.volt │ ├── labs │ ├── author.volt │ ├── benefactors.volt │ ├── clients.volt │ ├── conversions.volt │ ├── curation.volt │ ├── flags.volt │ ├── hf19.volt │ ├── index.volt │ ├── pending.volt │ ├── powerdown.volt │ ├── powerup.volt │ ├── rshares.volt │ └── votefocusing.volt │ ├── layouts │ ├── default.volt │ └── homepage.volt │ ├── search │ └── page.volt │ ├── tx │ └── view.volt │ └── witness │ ├── history.volt │ ├── list.volt │ └── misses.volt ├── bower.json ├── composer.json ├── composer.lock ├── deploy.sh ├── docker-compose.yml ├── docker ├── development │ ├── Dockerfile │ ├── conf │ │ ├── nginx.conf │ │ ├── supervisord.conf │ │ └── vhost.conf │ └── scripts │ │ └── start.sh ├── history │ ├── Dockerfile │ ├── fix.py │ ├── history.py │ └── steemdb_history.service ├── live │ ├── Dockerfile │ ├── live.py │ └── steemdb_live.service ├── production │ └── conf │ │ └── vhost.conf ├── sync │ ├── Dockerfile │ ├── steemdb_sync.service │ └── sync.py └── witnesses │ ├── Dockerfile │ ├── steemdb_witnesses.service │ └── witnesses.py ├── mongodb.md └── public ├── bower ├── css └── style.css ├── examples ├── quotedposts.gif ├── sidebar-stick.gif ├── steemdb-account-history-2.png ├── steemdb-account-missed.png ├── steemdb-account-navigation.png ├── steemdb-account-sidebar.png ├── steemdb-account-viewer.png ├── steemdb-account-witness-chart.png ├── steemdb-authoring.png ├── steemdb-chart-tooltips.png ├── steemdb-curation.png ├── steemdb-follower-history.png ├── steemdb-followers-weight.png ├── steemdb-following-history.png ├── steemdb-forums-forum.png ├── steemdb-forums-home.png ├── steemdb-forums-icons.png ├── steemdb-forums-post.png ├── steemdb-forums-quotes.png ├── steemdb-forums-summary.png ├── steemdb-forums-threads.png ├── steemdb-labs.png ├── steemdb-leaderboard-author.png ├── steemdb-leaderboard-curation.png ├── steemdb-newmenuitems.png ├── steemdb-pagination.png ├── steemdb-post-viewer.png ├── steemdb-posts-by-date.png ├── steemdb-posts-by-tag.png ├── steemdb-powerdown.png ├── steemdb-powerup.png ├── steemdb-reblogged.png ├── steemdb-reblogs.png ├── steemdb-richlist.png ├── steemdb-rshares-explore.png ├── steemdb-transfers.png ├── steemdb-witness-misses.png ├── steemdb-witness-vote-history.png └── steemdb-witnesses.png ├── explorers ├── dct.png ├── golos.jpg ├── krm.png ├── muse.png ├── ppy.png ├── soundac.png └── steem.png ├── index.php ├── js └── semantic-tablesort.js └── robots.txt /.editorconfig: -------------------------------------------------------------------------------- 1 | # This file is for unifying the coding style for different editors and IDEs 2 | # editorconfig.org 3 | 4 | root = true 5 | 6 | [*] 7 | end_of_line = lf 8 | charset = utf-8 9 | trim_trailing_whitespace = true 10 | insert_final_newline = true 11 | indent_style = space 12 | indent_size = 2 13 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | app/config/config.php 2 | cache/ 3 | bower_components/ 4 | vendor/ 5 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## steemdb 2 | 3 | https://steemdb.com 4 | 5 | open source blockchain explorer for the steem blockchain - build on phalcon + mongodb 6 | 7 | ### Prerequisites 8 | 9 | - docker 10 | - bower 11 | 12 | ### Components 13 | 14 | 1. `./app/` steemdb website: phalcon + mongodb application for serving out the website, apis, and MVC structure. 15 | 2. `./docker/sync` sync service (python + piston) for keeping the blockchain synchronized and up to date. Runs on a 3 second delay and triggers updates in the database. 16 | 3. `./docker/history` account history service (python + piston) which runs every 6 hours and analyzes every account on the blockchain. Records historical information as well as a current snapshot. 17 | 4. `./docker/witnesses` witness/mining service (python + piston) which runs every minute to pull current witness information as well as the mining queue. 18 | 5. `./docker/development` development VM with php7, nginx, and phalcon. 19 | 20 | ### Getting it running 21 | 22 | This explorer syncronizes the entire blockchain into a mongodb database. This takes a LOT of time. **I'd highly recommend you run a local instance of steemd** and modify the `docker-compose.yml` to point to it. It's going to be a lot faster of a sync than trying to read the entire blockchain from a public node. 23 | 24 | `docker-compose up` should be all you need to get the development application running. 25 | 26 | If you'd like to run any of the syncronization services for initialization, you will need to uncomment the specific service from the `docker-compose.yml` file. For example: 27 | 28 | - If you're looking to work on the account pages and start recording their history, uncomment the `history` service and start your containers. 29 | 30 | You can uncomment all 3 services to start all applications when docker creates it's containers. 31 | 32 | The initial syncronization run by the sync service will take many hours to complete and process all of the blocks. It will also require an enormous amount of disk space. As time progresses, this data will be trimmed. For now in early alpha it's better to have it all. 33 | -------------------------------------------------------------------------------- /app/config/config.template: -------------------------------------------------------------------------------- 1 | [ 8 | 'host' => 'mongodb://mongo:27017', 9 | 'dbname' => 'steemdb' 10 | ], 11 | 'application' => [ 12 | 'controllersDir' => APP_PATH . '/controllers/', 13 | 'modelsDir' => APP_PATH . '/models/', 14 | 'formsDir' => APP_PATH . '/forms/', 15 | 'viewsDir' => APP_PATH . '/views/', 16 | 'libraryDir' => APP_PATH . '/library/', 17 | 'helpersDir' => APP_PATH . '/helpers/', 18 | 'pluginsDir' => APP_PATH . '/plugins/', 19 | 'cacheDir' => BASE_PATH . '/cache/', 20 | 'baseUri' => '/', 21 | 'publicUrl' => 'steemdb.com', 22 | 'cryptSalt' => 'eEAfR|_&G&f,+vU]:jFr!!A&+71w1Ms9~8_4L!<@[N@DyaIP_2My|:+.u>/6m,$D' 23 | ], 24 | 'logger' => [ 25 | 'path' => BASE_PATH . '/logs/', 26 | 'format' => '%date% [%type%] %message%', 27 | 'date' => 'D j H:i:s', 28 | 'logLevel' => Logger::DEBUG, 29 | 'filename' => 'application.log', 30 | ] 31 | ]); 32 | -------------------------------------------------------------------------------- /app/config/loader.php: -------------------------------------------------------------------------------- 1 | registerNamespaces([ 8 | 'SteemDB\Models' => $config->application->modelsDir, 9 | 'SteemDB\Controllers' => $config->application->controllersDir, 10 | 'SteemDB\Helpers' => $config->application->helpersDir, 11 | 'SteemDB' => $config->application->libraryDir 12 | ]); 13 | 14 | $loader->registerDirs(array( 15 | '../app/helpers' 16 | )); 17 | 18 | $loader->register(); 19 | 20 | // Use composer autoloader to load vendor classes 21 | require_once BASE_PATH . '/vendor/autoload.php'; 22 | -------------------------------------------------------------------------------- /app/controllers/AccountsController.php: -------------------------------------------------------------------------------- 1 | view->filter = $filter = $this->dispatcher->getParam("filter", "string"); 13 | $this->view->page = $page = (int) $this->request->get("page") ?: 1; 14 | $query = array(); 15 | $sort = array( 16 | "vesting_shares" => -1, 17 | ); 18 | if($filter) { 19 | switch($filter) { 20 | case "powerdown": 21 | $sort = array( 22 | "vesting_withdraw_rate" => -1 23 | ); 24 | break; 25 | case "followers_mvest": 26 | $sort = array( 27 | "followers_mvest" => -1, 28 | ); 29 | break; 30 | case "sbd": 31 | $sort = array( 32 | "total_sbd_balance" => -1, 33 | ); 34 | break; 35 | case "steem": 36 | $sort = array( 37 | "total_balance" => -1, 38 | ); 39 | break; 40 | case "reputation": 41 | $query['reputation'] = array('$gt' => 0); 42 | $sort = array( 43 | "reputation" => -1, 44 | ); 45 | break; 46 | case "posts": 47 | $sort = array( 48 | "post_count" => -1, 49 | ); 50 | break; 51 | case "followers": 52 | $sort = array( 53 | "followers_count" => -1, 54 | ); 55 | break; 56 | default: 57 | break; 58 | } 59 | } 60 | $limit = 10; 61 | // Determine how many pages of users we have 62 | $this->view->pages = ceil(Statistics::findFirst(array( 63 | array('key' => 'users'), 64 | "sort" => array('date' => -1) 65 | ))->toArray()['value'] / $limit); 66 | // Load the accounts 67 | $this->view->accounts = Account::find(array( 68 | $query, 69 | "skip" => $limit * ($page - 1), 70 | "sort" => $sort, 71 | "limit" => $limit 72 | )); 73 | } 74 | 75 | } 76 | -------------------------------------------------------------------------------- /app/controllers/BlockController.php: -------------------------------------------------------------------------------- 1 | view->height = $height = $this->dispatcher->getParam("height"); 10 | $this->view->current = $this->steemd->getBlock($height); 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /app/controllers/BlocksController.php: -------------------------------------------------------------------------------- 1 | view->blocks = Block30d::find([ 12 | [], 13 | "skip" => $limit * ($page - 1), 14 | "sort" => ['_id' => -1], 15 | "limit" => 100 16 | ]); 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /app/controllers/ChartsController.php: -------------------------------------------------------------------------------- 1 | response->redirect('/'); 12 | } 13 | public function liveAction() 14 | { 15 | 16 | } 17 | 18 | public function homepageAction() { 19 | $this->view->props = $props = $this->steemd->getProps(); 20 | $this->view->inflation = round(max((978 - $props['head_block_number'] / 250000), 95) / 100, 4); 21 | $this->view->totals = $totals = $this->util->distribution($props); 22 | # Transactions 23 | $tx = $results = Status::findFirst([['_id' => 'transactions-24h']]); 24 | $tx1h = Status::findFirst([['_id' => 'transactions-1h']]); 25 | $this->view->tx = $tx->data; 26 | $this->view->tx_per_sec = round($tx->data / 86400, 3); 27 | $this->view->tx1h = $tx1h->data; 28 | $this->view->tx1h_per_sec = round($tx1h->data / 3600, 3); 29 | # Operations 30 | $op = $results = Status::findFirst([['_id' => 'operations-24h']]); 31 | $op1h = Status::findFirst([['_id' => 'operations-1h']]); 32 | $this->view->op = $op->data; 33 | $this->view->op_per_sec = round($op->data / 86400, 3); 34 | $this->view->op1h = $op1h->data; 35 | $this->view->op1h_per_sec = round($op1h->data / 3600, 3); 36 | $this->view->funds = FundsHistory::find([ 37 | ['name' => 'post'], 38 | 'sort' => ['last_update' => -1], 39 | 'limit' => 1 40 | ])[0]; 41 | } 42 | 43 | public function show404Action() { 44 | 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /app/controllers/LiveController.php: -------------------------------------------------------------------------------- 1 | view->disable(); 11 | ini_set('precision', 20); 12 | } 13 | 14 | public function propsAction() 15 | { 16 | echo json_encode($this->steemd->getProps(), JSON_PRETTY_PRINT); 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /app/controllers/RwController.php: -------------------------------------------------------------------------------- 1 | [ 11 | 'curator' => 'randowhale' 12 | ]], 13 | ['$sort' => [ 14 | '_ts' => -1 15 | ]], 16 | ['$group' => [ 17 | '_id' => [ 18 | 'doy' => ['$dayOfYear' => '$_ts'], 19 | 'year' => ['$year' => '$_ts'], 20 | 'month' => ['$month' => '$_ts'], 21 | 'day' => ['$dayOfMonth' => '$_ts'], 22 | 'dow' => ['$dayOfWeek' => '$_ts'], 23 | ], 24 | 'reward' => ['$sum' => '$reward'], 25 | 'count' => ['$sum' => 1] 26 | ]], 27 | ['$sort' => [ 28 | '_id.year' => 1, 29 | '_id.doy' => 1, 30 | 'reward' => -1 31 | ]], 32 | ['$limit' => 10] 33 | ])->toArray(); 34 | var_dump($rewards); exit; 35 | } 36 | 37 | } 38 | -------------------------------------------------------------------------------- /app/controllers/SearchController.php: -------------------------------------------------------------------------------- 1 | request->get("q", "string"); 14 | $accounts = Account::find(array( 15 | array( 16 | 'name' => new Regex('^'.$query, 'i') 17 | ), 18 | "sort" => [ 19 | "followers" => -1 20 | ], 21 | "fields" => [ 22 | 'name' => 1 23 | ], 24 | "limit" => 5 25 | )); 26 | $data = [ 27 | 'results' => [ 28 | 'accounts' => [ 29 | 'name' => 'Accounts', 30 | 'results' => array_map(function($account) { 31 | return [ 32 | 'title' => $account->name, 33 | 'url' => '/@'.$account->name 34 | ]; 35 | }, $accounts) 36 | ] 37 | ] 38 | ]; 39 | $this->view->disable(); 40 | $this->response->setContentType('application/json', 'UTF-8'); 41 | $this->response->setJsonContent($data); 42 | return $this->response; 43 | } 44 | public function pageAction() 45 | { 46 | $this->view->q = $q = $this->request->get("q"); 47 | if($q) { 48 | $this->view->results = $results = Comment::agg(array( 49 | [ '$match' => [ '$text' => [ '$search' => $q ] ] ], 50 | [ '$sort' => [ 'score' => [ '$meta' => "textScore" ] ] ], 51 | [ '$limit' => 100 ], 52 | // [ '$project' => [ 'title' => 1, '_id' => 0 , '_ts' => 1] ], 53 | )); 54 | } 55 | 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /app/controllers/StatsController.php: -------------------------------------------------------------------------------- 1 | view->props = $props = $this->steemd->getProps(); 15 | $this->view->totals = $totals = $this->util->distribution($props); 16 | var_dump($totals); exit; 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /app/controllers/TxController.php: -------------------------------------------------------------------------------- 1 | view->id = $id = $this->dispatcher->getParam("id"); 10 | $this->view->current = $this->steemd->getTx($id); 11 | // var_dump($this->view->current); exit; 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /app/helpers/Convert.php: -------------------------------------------------------------------------------- 1 | getShared('memcached'); 11 | } 12 | 13 | static private function getProps() { 14 | return static::getDI()->getShared('steemd')->getProps(); 15 | } 16 | 17 | static public function getConversionRate($key) { 18 | $cache = static::getCache(); 19 | $cached = $cache->get($key); 20 | if($cached === null) { 21 | $props = static::getProps(); 22 | $values = array( 23 | 'total_vests' => (float) $props['total_vesting_shares'], 24 | 'total_vest_steem' => (float) $props['total_vesting_fund_steem'], 25 | ); 26 | $cache->save($key, $values); 27 | return $values; 28 | } 29 | return $cached; 30 | } 31 | 32 | static public function vest2sp($value, $label = ' SP', $round = 3) 33 | { 34 | $values = static::getConversionRate('convert_vest2sp'); 35 | $return = $values['total_vest_steem'] * ($value / $values['total_vests']); 36 | if($label === false) { 37 | return round($return, $round); 38 | } 39 | return number_format($return, $round, '.', ',') . $label; 40 | } 41 | 42 | static public function sp2vest($value, $label = ' VEST') 43 | { 44 | $values = static::getConversionRate('convert_vest2sp'); 45 | $return = (($value) / $values['total_vest_steem']) * $values['total_vests']; 46 | if($label === false) { 47 | return $return; 48 | } 49 | return number_format($return, 3, '.', ',') . $label; 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /app/helpers/LargeNumber.php: -------------------------------------------------------------------------------- 1 | 1000000000000000) 20 | return number_format(($n/1000000000000000),$dec,".",",").' P'.$unit.''; 21 | else if($n>1000000000000) 22 | return number_format(($n/1000000000000),$dec,".",",").' T'.$unit.''; 23 | else if($n>1000000000) 24 | return number_format(($n/1000000000),$dec,".",",").' G'.$unit.''; 25 | else if($n>1000000) 26 | return number_format(($n/1000000),$dec,".",",").' M'.$unit.''; 27 | else if($n>1000) 28 | return number_format(($n/1000),$dec,".",",").' k'.$unit.''; 29 | return number_format($n, $dec); 30 | } 31 | 32 | static public function color($n) 33 | { 34 | if($n >= 1000000000) { 35 | return "orange"; 36 | } elseif($n >= 1000000) { 37 | return "purple"; 38 | } elseif($n >= 1000) { 39 | return "blue"; 40 | } elseif($n > 0) { 41 | return "green"; 42 | } else { 43 | return ""; 44 | } 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /app/helpers/OpName.php: -------------------------------------------------------------------------------- 1 | "Account Create", 10 | "account_update" => "Account Update", 11 | "account_witness_proxy" => "Witness Proxy", 12 | "account_witness_vote" => "Witness Vote", 13 | "author_reward" => "Author Reward", 14 | "cancel_transfer_from_savings" => "Cancel Savings Withdrawal", 15 | "comment" => "Post", 16 | "comment_reward" => "Post Reward", 17 | "convert" => "Convert", 18 | "curate_reward" => "Curate Reward", 19 | "curation_reward" => "Curation Reward", 20 | "delete_comment" => "Post Delete", 21 | "feed_publish" => "Feed Publish", 22 | "fill_order" => "Fill Order", 23 | "fill_vesting_withdraw" => "Power Down", 24 | "interest" => "SBD Interest", 25 | "limit_order_create" => "Limit Order Create", 26 | "limit_order_cancel" => "Limit Order Cancel", 27 | "pow" => "Mining", 28 | "pow2" => "Mining", 29 | "transfer" => "Transfer", 30 | "transfer_to_savings" => "Transfer to Savings", 31 | "transfer_from_savings" => "Transfer from Savings", 32 | "transfer_to_vesting" => "Power Up", 33 | "vote" => "Vote", 34 | "witness_update" => "Witness Update", 35 | ); 36 | 37 | public static function string($op, $account = null) { 38 | $name = $op[0]; 39 | if(isset(static::$index[$op[0]])) { 40 | $name = static::$index[$op[0]]; 41 | } 42 | // This should be more robust logic as more situations occur 43 | if($op[0] === "vote" && $account) { 44 | if($op[1]['voter'] === $account->name) { 45 | $name = "Outgoing Vote"; 46 | } else { 47 | $name = "Incoming Vote"; 48 | } 49 | } 50 | if($op[0] === "comment" && is_array($op[1]) && $op[1]['author'] !== $account->name) { 51 | $name = "Reply"; 52 | } 53 | return $name; 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /app/helpers/Reputation.php: -------------------------------------------------------------------------------- 1 | = 0) ? 1 : -1) * 9 + 25 : 0 ); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /app/helpers/TimeAgo.php: -------------------------------------------------------------------------------- 1 | setTimestamp($datetime); 13 | $diff = $now->diff($ago); 14 | $diff->w = floor($diff->d / 7); 15 | $diff->d -= $diff->w * 7; 16 | 17 | $string = array( 18 | 'y' => 'year', 19 | 'm' => 'month', 20 | 'w' => 'week', 21 | 'd' => 'day', 22 | 'h' => 'hour', 23 | 'i' => 'minute', 24 | 's' => 'second', 25 | ); 26 | foreach ($string as $k => &$v) { 27 | if ($diff->$k) { 28 | $v = $diff->$k . ' ' . $v . ($diff->$k > 1 ? 's' : ''); 29 | } else { 30 | unset($string[$k]); 31 | } 32 | } 33 | if (!$full) $string = array_slice($string, 0, 1); 34 | return $string ? implode(', ', $string) . (($diff->invert) ? ' ago' : '') : 'just now'; 35 | } 36 | 37 | public static function mongo($mongodate) { 38 | return self::timestamp((string) $mongodate / 1000); 39 | } 40 | 41 | public static function string($string) { 42 | return self::timestamp(strtotime($string)); 43 | } 44 | 45 | public function secondsToString($seconds, $full = false) { 46 | $now = new DateTime; 47 | $future = new DateTime(); 48 | $future->setTimestamp(time() + $seconds); 49 | $diff = $now->diff($future); 50 | 51 | $diff->w = floor($diff->d / 7); 52 | $diff->d -= $diff->w * 7; 53 | 54 | $string = array( 55 | 'y' => 'year', 56 | 'm' => 'month', 57 | 'w' => 'week', 58 | 'd' => 'day', 59 | 'h' => 'hour', 60 | 'i' => 'minute', 61 | 's' => 'second', 62 | ); 63 | foreach ($string as $k => &$v) { 64 | if ($diff->$k) { 65 | $v = $diff->$k . ' ' . $v . ($diff->$k > 1 ? 's' : ''); 66 | } else { 67 | unset($string[$k]); 68 | } 69 | } 70 | 71 | if (!$full) $string = array_slice($string, 0, 1); 72 | return $string ? implode(', ', $string) : ''; 73 | } 74 | 75 | public static function age($age) { 76 | $i = time() - $age; 77 | $m = time()-$i; $o='just now'; 78 | $t = array('year'=>31556926,'month'=>2629744,'week'=>604800,'day'=>86400,'hour'=>3600,'minute'=>60,'second'=>1); 79 | foreach($t as $u=>$s){ 80 | if($s<=$m){$v=floor($m/$s); $o="$v $u".($v==1?'':'s'); break;} 81 | } 82 | return $o; 83 | } 84 | } 85 | -------------------------------------------------------------------------------- /app/libs/steemd.php: -------------------------------------------------------------------------------- 1 | host = $host; 17 | $httpClient = new HttpClient($host); 18 | $httpClient->withoutSslVerification(); 19 | $this->client = new Client($host, false, $httpClient); 20 | } 21 | 22 | public function getState($path = "") 23 | { 24 | try { 25 | return $this->client->call(0, 'get_state', [$path]); 26 | } catch (Exception $e) { 27 | return array(); 28 | } 29 | } 30 | 31 | public function getBlock($height) 32 | { 33 | try { 34 | return $this->client->call(0, 'get_block', [$height]); 35 | } catch (Exception $e) { 36 | return array(); 37 | } 38 | } 39 | 40 | public function getTx($txid) 41 | { 42 | try { 43 | return $this->client->call(0, 'get_transaction', [$txid]); 44 | } catch (Exception $e) { 45 | return array(); 46 | } 47 | } 48 | 49 | public function getAccount($account) 50 | { 51 | try { 52 | $return = $this->client->call(0, 'get_accounts', [[$account]]); 53 | try { 54 | foreach($return as $index => $account) { 55 | $return[$index]['profile'] = json_decode($account['json_metadata'], true)['profile']; 56 | } 57 | } catch (Exception $e) { 58 | 59 | } 60 | return $return; 61 | } catch (Exception $e) { 62 | return array(); 63 | } 64 | } 65 | public function getAccountHistory($username, $limit = 100, $skip = -1) 66 | { 67 | try { 68 | return $this->client->call(0, 'get_account_history', [$username, $skip, $limit]); 69 | } catch (Exception $e) { 70 | return array(); 71 | } 72 | } 73 | 74 | public function getProps() 75 | { 76 | try { 77 | return Status::findFirst([['_id' => 'props']])->toArray()['props']; 78 | $return = $this->client->call(0, 'get_dynamic_global_properties', []); 79 | $return['steem_per_mvests'] = Status::findFirst([['_id' => 'steem_per_mvests']])->value; 80 | return $return; 81 | } catch (Exception $e) { 82 | return array(); 83 | } 84 | } 85 | 86 | public function getApi($name) 87 | { 88 | return $this->client->call(1, 'get_api_by_name', [$name]); 89 | } 90 | 91 | public function getFollowing($username, $limit = 100, $skip = -1) 92 | { 93 | $api = $this->getApi('follow_api'); 94 | return $this->client->call($api, 'get_following', [$username, $skip, $limit]); 95 | } 96 | } 97 | -------------------------------------------------------------------------------- /app/libs/utilities.php: -------------------------------------------------------------------------------- 1 | di = $di; 12 | } 13 | 14 | public function distribution($props) { 15 | $cacheKey = 'distribution-30d'; 16 | $cached = $this->di->get('memcached')->get($cacheKey); 17 | if($cached !== null) { 18 | return $cached; 19 | } 20 | $totals = [ 21 | 'curation' => 0, 22 | 'authors' => 0, 23 | 'interest' => $this->di->get('convert')->sp2vest($props['virtual_supply'] * 0.095 * 0.15 / 12, false), 24 | 'witnesses' => $this->di->get('convert')->sp2vest($props['virtual_supply'] * 0.095 * 0.1 / 12, false), 25 | ]; 26 | // Set Date Range 27 | $start = new UTCDateTime(strtotime("-30 days") * 1000); 28 | $end = new UTCDateTime(strtotime("midnight") * 1000); 29 | // Author Rewards 30 | // Author Rewards 31 | $authors = AuthorReward::aggregate([ 32 | ['$match' => [ 33 | '_ts' => [ 34 | '$gte' => $start, 35 | '$lte' => $end, 36 | ] 37 | ]], 38 | ['$project' => [ 39 | 'prefix' => ['$substr' => ['$permlink', 0, 3]], 40 | 'steem_payout' => '$steem_payout', 41 | 'vesting_payout' => '$vesting_payout', 42 | 'sbd_payout' => '$sbd_payout', 43 | ]], 44 | ['$group' => [ 45 | '_id' => 'author', 46 | 'steem' => ['$sum' => '$steem_payout'], 47 | 'vests' => ['$sum' => '$vesting_payout'], 48 | 'sbd' => ['$sum' => 'sbd_payout'], 49 | 'op' => [ 50 | '$sum' => ['$cond' => [ 51 | ['$eq' => ['$prefix', 're-']], 52 | 0, 53 | '$vesting_payout', 54 | ]], 55 | ], 56 | 're' => [ 57 | '$sum' => ['$cond' => [ 58 | ['$eq' => ['$prefix', 're-']], 59 | '$vesting_payout', 60 | 0, 61 | ]], 62 | ] 63 | ]], 64 | // ['$sort' => [ 65 | // 'vests' => -1 66 | // ]], 67 | ])->toArray(); 68 | $totals['authors'] = $authors[0]['vests'] * 2; 69 | $totals['author_rewards'] = array( 70 | 'replies' => $authors[0]['re'] * 2, 71 | 'posts' => $authors[0]['op'] * 2, 72 | ); 73 | // Curator Rewards 74 | $curators = CurationReward::aggregate([ 75 | ['$match' => [ 76 | '_ts' => [ 77 | '$gte' => $start, 78 | '$lte' => $end, 79 | ] 80 | ]], 81 | ['$group' => [ 82 | '_id' => '$curator', 83 | 'vests' => ['$sum' => '$reward'], 84 | ]], 85 | ['$sort' => [ 86 | 'vests' => -1 87 | ]], 88 | ])->toArray(); 89 | foreach($curators as $curator) { 90 | $totals['curation'] += $curator['vests']; 91 | } 92 | $this->di->get('memcached')->save($cacheKey, $totals, 60); 93 | return $totals; 94 | } 95 | 96 | } 97 | -------------------------------------------------------------------------------- /app/models/Account.php: -------------------------------------------------------------------------------- 1 | json_metadata)) { 9 | $this->json_metadata = json_decode($this->json_metadata, true); 10 | } 11 | if(property_exists($this, 'json_metadata') && isset($this->json_metadata['profile']) && isset($this->json_metadata['profile']['profile_image'])) { 12 | return $this->json_metadata['profile']['profile_image']; 13 | } 14 | return null; 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /app/models/AccountHistory.php: -------------------------------------------------------------------------------- 1 | [ 11 | '_ts' => -1 12 | ]], 13 | ['$group' => [ 14 | '_id' => [ 15 | 'benefactor' => '$benefactor', 16 | 'doy' => ['$dayOfYear' => '$_ts'], 17 | 'year' => ['$year' => '$_ts'], 18 | 'month' => ['$month' => '$_ts'], 19 | 'day' => ['$dayOfMonth' => '$_ts'], 20 | 'dow' => ['$dayOfWeek' => '$_ts'], 21 | ], 22 | 'reward' => ['$sum' => '$reward'], 23 | 'count' => ['$sum' => 1] 24 | ]], 25 | ['$group' => [ 26 | '_id' => [ 27 | 'doy' => '$_id.doy', 28 | 'year' => '$_id.year', 29 | 'month' => '$_id.month', 30 | 'day' => '$_id.day', 31 | 'dow' => '$_id.dow', 32 | ], 33 | 'benefactors' => [ 34 | '$push' => [ 35 | 'benefactor' => '$_id.benefactor', 36 | 'count' => '$count', 37 | 'reward' => '$reward' 38 | ] 39 | ], 40 | 'reward' => [ 41 | '$sum' => '$reward' 42 | ], 43 | 'total' => [ 44 | '$sum' => '$count' 45 | ] 46 | ]], 47 | ['$sort' => [ 48 | '_id.year' => -1, 49 | '_id.doy' => -1, 50 | 'reward' => -1 51 | ]], 52 | ['$limit' => 30] 53 | ], [ 54 | 'allowDiskUse' => true, 55 | 'cursor' => [ 56 | 'batchSize' => 0 57 | ] 58 | ])->toArray(); 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /app/models/Block30d.php: -------------------------------------------------------------------------------- 1 | active_votes) { 15 | // foreach($results->active_votes as $idx => $data) { 16 | // $results->active_votes[$idx]->time = (int) (string) $data->time; 17 | // } 18 | // } 19 | // if(is_array($results)) { 20 | // foreach($results as $idx => $result) { 21 | // foreach($result as $key => $data) { 22 | // if(get_class($data) == 'MongoDB\BSON\UTCDateTime') { 23 | // $results[$idx]->$key = (int) (string) $data; 24 | // } 25 | // } 26 | // } 27 | // } 28 | return $results; 29 | } 30 | 31 | public function toArray() { 32 | if($this instanceOf Document) return parent::toArray(); 33 | foreach($this as $key => $data) { 34 | if(get_class($data) == 'MongoDB\BSON\UTCDateTime') { 35 | $this->$key = (int) (string) $data; 36 | } 37 | } 38 | return parent::toArray(); 39 | } 40 | 41 | public function export() { 42 | $toRemove = ['_dependencyInjector','_modelsManager','_source','_operationMade','_connection', '_errorMessages', '_skipped']; 43 | $data = array_diff_key(get_object_vars($this), array_flip($toRemove)); 44 | return $data; 45 | } 46 | 47 | public static function agg($pipeline, $options = []) { 48 | $className = get_called_class(); 49 | $collection = new $className(); 50 | $connection = $collection->getConnection(); 51 | return $connection->selectCollection($collection->getSource())->aggregate($pipeline, $options); 52 | } 53 | 54 | } 55 | -------------------------------------------------------------------------------- /app/models/FeedPublish.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | {{ current }} 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/views/_elements/account_table_row.volt: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 |
5 | reputation::number($current->reputation) ?> 6 |
7 | {{ link_to("/@" ~ current.name, current.name) }} 8 |
9 | 10 | 11 | {{ current.followers_count }} 12 | 13 | 14 | {{ current.post_count }} 15 | 16 | 17 | {{ partial("_elements/vesting_shares", ['current': current]) }} 18 | 19 | 20 | -------------------------------------------------------------------------------- /app/views/_elements/cards/account.volt: -------------------------------------------------------------------------------- 1 |
2 |
3 | {% if live[0] is defined and live[0] is defined and live[0]['profile'] is defined and live[0]['profile']['profile_image'] is defined %} 4 | 5 | {% endif %} 6 |
7 | 8 | reputation::number($account->reputation) ?> 9 | 10 | 11 | {{ account.name }} 12 | 13 |
14 |
15 | joined timeAgo::mongo($account->created); ?> 16 |
17 | {% if live[0] is defined and live[0] is defined and live[0]['profile'] is defined and live[0]['profile']['about'] is defined %} 18 |
19 | {{ live[0]['profile']['about'] | e }} 20 |
21 | {% endif %} 22 | {% if live[0] is defined and live[0] is defined and live[0]['profile'] is defined and live[0]['profile']['website'] is defined %} 23 | 29 | {% endif %} 30 | 31 |
32 |
33 | 34 | {% if live[0] is defined and live[0] is defined and live[0]['profile'] is defined and live[0]['profile']['location'] is defined %} 35 | 36 | {{ live[0]['profile']['location'] | e }} 37 | {% endif %} 38 | 39 | 40 | 41 | {{ account.followers | length }} Followers 42 | 43 |
44 |
45 | -------------------------------------------------------------------------------- /app/views/_elements/cards/app.volt: -------------------------------------------------------------------------------- 1 |
2 |
3 | {##} 4 | 9 | {% if meta and meta['created'] %} 10 |
11 | created timeAgo::mongo($meta[$app]['created']); ?> 12 |
13 | {% endif %} 14 | {% if meta and meta['description'] %} 15 |
16 | {{ meta['description'] }} 17 |
18 | {% endif %} 19 | {% if meta and meta['link'] %} 20 | 26 | {% endif %} 27 |
28 | {#
29 | 30 | {% if live[0] is defined and live[0] is defined and live[0]['profile'] is defined and live[0]['profile']['location'] is defined %} 31 | 32 | {{ live[0]['profile']['location'] }} 33 | {% endif %} 34 | 35 | 36 | 37 | {{ account.followers | length }} Followers 38 | 39 |
#} 40 |
41 | -------------------------------------------------------------------------------- /app/views/_elements/comment_table.volt: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | {% for comment in comments %} 13 | 14 | 17 | 22 | 27 | 30 | 33 | 34 | {% endfor %} 35 | 36 |
WhenWhatWhoVotesEarnings
15 | {{ comment.created.toDateTime().format('Y-m-d H:i') }} 16 | 18 | 19 | {{ comment.title }} 20 | 21 | 23 | 24 | {{ comment.author }} 25 | 26 | 28 | {{ comment.net_votes }} 29 | 31 | {{ comment.total_payout_value }} 32 |
37 | -------------------------------------------------------------------------------- /app/views/_elements/definition_table.volt: -------------------------------------------------------------------------------- 1 | 2 | 3 | {% for key, value in data %} 4 | 5 | 8 | 28 | 29 | {% endfor %} 30 | 31 |
6 | {{ key }} 7 | 9 | toDateTime()->format('Y-m-d H:i'); 15 | } else { 16 | echo "
" . json_encode($value, JSON_PRETTY_PRINT) . "
"; 17 | } 18 | break; 19 | case "double": 20 | echo number_format($value, 3, '.', ','); 21 | break; 22 | default: 23 | echo htmlspecialchars($value); 24 | break; 25 | } 26 | ?> 27 |
32 | -------------------------------------------------------------------------------- /app/views/_elements/layouts/footer.volt: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | 5 | * All Steem Power & VEST calculations are done using the current conversion rate, not a historical rate. This may cause some calculations to be incorrect. 6 | 7 |
8 |
9 |
10 | 24 | -------------------------------------------------------------------------------- /app/views/_elements/layouts/scripts.volt: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | {% block scripts %}{% endblock %} 9 | 57 | 67 | -------------------------------------------------------------------------------- /app/views/_elements/paginator.volt: -------------------------------------------------------------------------------- 1 |
2 |
3 | {% if hide_count is not defined %} 4 | 7 | {% endif %} 8 |
9 | 56 |
57 |
58 |
59 | -------------------------------------------------------------------------------- /app/views/_elements/sidebar/commands.volt: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | 11 | 16 | 17 | 18 |
5 | 6 | vote your-acct "{{ comment.author }}" "{{ comment.permlink }}" 100 true 7 | 8 |
12 | 13 | post_comment your-acct "re-{{ comment.author }}-{{ comment.permlink }}-" "{{ comment.author }}" "{{ comment.permlink }}" "" "your reply.." "{}" true 14 | 15 |
19 |
20 | 
21 | -------------------------------------------------------------------------------- /app/views/_elements/sidebar/earnings.volt: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
Earnings${{ comment.total_payout_value }}
PendingEST largeNumber::format($comment->total_pending_payout_value); ?>
13 | -------------------------------------------------------------------------------- /app/views/_elements/sidebar/readmore.volt: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 | More posts by 5 | 6 | {{ comment.author }} 7 | 8 | 9 |
10 | {% for post in posts %} 11 | {% if post.url === comment.url %} 12 | {% continue %} 13 | {% endif %} 14 |
15 | timeAgo::mongo($post->created); ?>
16 | 17 | {{ post.title }} 18 | 19 | 20 |
21 | {% endfor %} 22 |
23 | -------------------------------------------------------------------------------- /app/views/_elements/tx/account_create.volt: -------------------------------------------------------------------------------- 1 | 2 | 3 | {{ item[1]['op'][1]['creator'] }} 4 | 5 | 6 | {{ item[1]['op'][1]['new_account_name'] }} 7 | 8 | 9 | New account ({{ item[1]['op'][1]['new_account_name'] }}) created, initial fee of {{ item[1]['op'][1]['fee'] }} 10 | -------------------------------------------------------------------------------- /app/views/_elements/tx/account_create_with_delegation.volt: -------------------------------------------------------------------------------- 1 | {% include "_elements/definition_table" with ['data': item[1]['op'][1]] %} 2 | -------------------------------------------------------------------------------- /app/views/_elements/tx/account_update.volt: -------------------------------------------------------------------------------- 1 | {% include "_elements/definition_table" with ['data': item[1]['op'][1]] %} 2 | -------------------------------------------------------------------------------- /app/views/_elements/tx/account_witness_proxy.volt: -------------------------------------------------------------------------------- 1 | 2 | 3 | {{ item[1]['op'][1]['account'] }} 4 | 5 | 6 | {{ item[1]['op'][1]['proxy'] }} 7 | 8 | 9 | Witness voting power proxied from 10 | {{ item[1]['op'][1]['account'] }} 11 | to 12 | {{ item[1]['op'][1]['proxy'] }} 13 | -------------------------------------------------------------------------------- /app/views/_elements/tx/account_witness_vote.volt: -------------------------------------------------------------------------------- 1 | 2 | {% if item[1]['op'][1]['approve'] %} 3 | 4 | Approval of 5 | 6 | {% else %} 7 | 8 | Unapproved 9 | 10 | {% endif %} 11 | 12 | {{ item[1]['op'][1]['witness'] }} 13 | 14 | 15 | from 16 | 17 | {{ item[1]['op'][1]['account'] }} 18 | 19 | -------------------------------------------------------------------------------- /app/views/_elements/tx/author_reward.volt: -------------------------------------------------------------------------------- 1 | 2 | +largeNumber::format($item[1]['op'][1]['steem_payout']); ?> STEEM 3 | 4 | 5 | +convert::vest2sp($item[1]['op'][1]['vesting_payout']); ?> 6 | 7 | 8 | +largeNumber::format($item[1]['op'][1]['sbd_payout']); ?> 9 | SBD 10 | 11 | for 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /app/views/_elements/tx/cancel_transfer_from_savings.volt: -------------------------------------------------------------------------------- 1 | {% include "_elements/definition_table" with ['data': item[1]['op'][1]] %} 2 | -------------------------------------------------------------------------------- /app/views/_elements/tx/change_recovery_account.volt: -------------------------------------------------------------------------------- 1 | {% include "_elements/definition_table" with ['data': item[1]['op'][1]] %} 2 | -------------------------------------------------------------------------------- /app/views/_elements/tx/claim_reward_balance.volt: -------------------------------------------------------------------------------- 1 | {% include "_elements/definition_table" with ['data': item[1]['op'][1]] %} 2 | -------------------------------------------------------------------------------- /app/views/_elements/tx/comment.volt: -------------------------------------------------------------------------------- 1 | 2 | {{ item[1]['op'][1]['author'] }} 3 | 4 | {% if item[1]['op'][1]['title'] == '' %} 5 | replied to 6 | {% else %} 7 | posted 8 | {% endif %} 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /app/views/_elements/tx/comment_benefactor_reward.volt: -------------------------------------------------------------------------------- 1 | {% include "_elements/definition_table" with ['data': item[1]['op'][1]] %} 2 | -------------------------------------------------------------------------------- /app/views/_elements/tx/comment_options.volt: -------------------------------------------------------------------------------- 1 | {% include "_elements/definition_table" with ['data': item[1]['op'][1]] %} 2 | -------------------------------------------------------------------------------- /app/views/_elements/tx/comment_reward.volt: -------------------------------------------------------------------------------- 1 | 2 | +convert::vest2sp($item[1]['op'][1]['vesting_payout']); ?> 3 | 4 | 5 | +largeNumber::format($item[1]['op'][1]['sbd_payout']); ?> 6 | SBD 7 | 8 | for 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /app/views/_elements/tx/convert.volt: -------------------------------------------------------------------------------- 1 |
2 | Converted {{ item[1]['op'][1]['amount'] }} to STEEM 3 |
4 | Request ID #{{ item[1]['op'][1]['requestid'] }} 5 |
6 |
7 | -------------------------------------------------------------------------------- /app/views/_elements/tx/curate_reward.volt: -------------------------------------------------------------------------------- 1 | 2 | +convert::vest2sp($item[1]['op'][1]['reward']); ?> 3 | 4 | for 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/views/_elements/tx/curation_reward.volt: -------------------------------------------------------------------------------- 1 | 2 | +convert::vest2sp($item[1]['op'][1]['reward']); ?> 3 | 4 | for 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/views/_elements/tx/custom.volt: -------------------------------------------------------------------------------- 1 | {% include "_elements/definition_table" with ['data': item[1]['op'][1]] %} 2 | -------------------------------------------------------------------------------- /app/views/_elements/tx/custom_json.volt: -------------------------------------------------------------------------------- 1 | {% include "_elements/definition_table" with ['data': item[1]['op'][1]] %} 2 | -------------------------------------------------------------------------------- /app/views/_elements/tx/delegate_vesting_shares.volt: -------------------------------------------------------------------------------- 1 | {% include "_elements/definition_table" with ['data': item[1]['op'][1]] %} 2 | -------------------------------------------------------------------------------- /app/views/_elements/tx/delete_comment.volt: -------------------------------------------------------------------------------- 1 | {% include "_elements/definition_table" with ['data': item[1]['op'][1]] %} 2 | -------------------------------------------------------------------------------- /app/views/_elements/tx/escrow_approve.volt: -------------------------------------------------------------------------------- 1 | {% include "_elements/definition_table" with ['data': item[1]['op'][1]] %} 2 | -------------------------------------------------------------------------------- /app/views/_elements/tx/escrow_dispute.volt: -------------------------------------------------------------------------------- 1 | {% include "_elements/definition_table" with ['data': item[1]['op'][1]] %} 2 | -------------------------------------------------------------------------------- /app/views/_elements/tx/escrow_release.volt: -------------------------------------------------------------------------------- 1 | {% include "_elements/definition_table" with ['data': item[1]['op'][1]] %} 2 | -------------------------------------------------------------------------------- /app/views/_elements/tx/escrow_transfer.volt: -------------------------------------------------------------------------------- 1 | {% include "_elements/definition_table" with ['data': item[1]['op'][1]] %} 2 | -------------------------------------------------------------------------------- /app/views/_elements/tx/feed_publish.volt: -------------------------------------------------------------------------------- 1 | 2 | {{ item[1]['op'][1]['publisher'] }} 3 | 4 | published a price of 5 | 6 | {{ item[1]['op'][1]['exchange_rate']['base'] }} 7 | 8 | -------------------------------------------------------------------------------- /app/views/_elements/tx/fill_convert_request.volt: -------------------------------------------------------------------------------- 1 | {% include "_elements/definition_table" with ['data': item[1]['op'][1]] %} 2 | -------------------------------------------------------------------------------- /app/views/_elements/tx/fill_order.volt: -------------------------------------------------------------------------------- 1 | {% include "_elements/definition_table" with ['data': item[1]['op'][1]] %} 2 | -------------------------------------------------------------------------------- /app/views/_elements/tx/fill_transfer_from_savings.volt: -------------------------------------------------------------------------------- 1 | {% include "_elements/definition_table" with ['data': item[1]['op'][1]] %} 2 | -------------------------------------------------------------------------------- /app/views/_elements/tx/fill_vesting_withdraw.volt: -------------------------------------------------------------------------------- 1 | 2 | 3 | Power Down 4 | 5 | 6 | {{ item[1]['op'][1]['withdrawn'] }} 7 | 8 | 9 | ~convert::vest2sp($item[1]['op'][1]['withdrawn']); ?>* 10 | 11 | 12 |
13 | from 14 | 15 | {{ item[1]['op'][1]['from_account'] }} 16 | 17 | to 18 | 19 | {{ item[1]['op'][1]['to_account'] }} 20 | 21 | -------------------------------------------------------------------------------- /app/views/_elements/tx/interest.volt: -------------------------------------------------------------------------------- 1 | 2 | +{{ item[1]['op'][1]['interest'] }} 3 | 4 | Interest Payment 5 | -------------------------------------------------------------------------------- /app/views/_elements/tx/limit_order_cancel.volt: -------------------------------------------------------------------------------- 1 | {% include "_elements/definition_table" with ['data': item[1]['op'][1]] %} 2 | -------------------------------------------------------------------------------- /app/views/_elements/tx/limit_order_create.volt: -------------------------------------------------------------------------------- 1 | {% include "_elements/definition_table" with ['data': item[1]['op'][1]] %} 2 | -------------------------------------------------------------------------------- /app/views/_elements/tx/pow.volt: -------------------------------------------------------------------------------- 1 | 2 | +1 SP 3 | 4 | {{ item[1]['op'][1]['work'][1]['input']['worker_account'] }} found a block 5 | -------------------------------------------------------------------------------- /app/views/_elements/tx/pow2.volt: -------------------------------------------------------------------------------- 1 | 2 | {% if item[1]['block'] >= 7353250 %} 3 | + SP 4 | {% else %} 5 | +1 SP 6 | {% endif %} 7 | 8 | {{ item[1]['op'][1]['work'][1]['input']['worker_account'] }} found a block 9 | -------------------------------------------------------------------------------- /app/views/_elements/tx/producer_reward.volt: -------------------------------------------------------------------------------- 1 | {% include "_elements/definition_table" with ['data': item[1]['op'][1]] %} 2 | -------------------------------------------------------------------------------- /app/views/_elements/tx/recover_account.volt: -------------------------------------------------------------------------------- 1 | {% include "_elements/definition_table" with ['data': item[1]['op'][1]] %} 2 | -------------------------------------------------------------------------------- /app/views/_elements/tx/request_account_recovery.volt: -------------------------------------------------------------------------------- 1 | {% include "_elements/definition_table" with ['data': item[1]['op'][1]] %} 2 | -------------------------------------------------------------------------------- /app/views/_elements/tx/return_vesting_delegation.volt: -------------------------------------------------------------------------------- 1 | {% include "_elements/definition_table" with ['data': item[1]['op'][1]] %} 2 | -------------------------------------------------------------------------------- /app/views/_elements/tx/set_withdraw_vesting_route.volt: -------------------------------------------------------------------------------- 1 | {% include "_elements/definition_table" with ['data': item[1]['op'][1]] %} 2 | -------------------------------------------------------------------------------- /app/views/_elements/tx/shutdown_witness.volt: -------------------------------------------------------------------------------- 1 | {% include "_elements/definition_table" with ['data': item[1]['op'][1]] %} 2 | -------------------------------------------------------------------------------- /app/views/_elements/tx/transfer.volt: -------------------------------------------------------------------------------- 1 | 2 | 3 | {{ item[1]['op'][1]['from'] }} 4 | 5 | 6 | {{ item[1]['op'][1]['to'] }} 7 | 8 | 9 | 10 | {{ item[1]['op'][1]['amount'] }} 11 | 12 | {% if item[1]['op'][1]['memo'] %} 13 |
14 | {{ item[1]['op'][1]['memo'] }} 15 |
16 | {% endif %} 17 | -------------------------------------------------------------------------------- /app/views/_elements/tx/transfer_from_savings.volt: -------------------------------------------------------------------------------- 1 | {% include "_elements/definition_table" with ['data': item[1]['op'][1]] %} 2 | -------------------------------------------------------------------------------- /app/views/_elements/tx/transfer_to_savings.volt: -------------------------------------------------------------------------------- 1 | {% include "_elements/definition_table" with ['data': item[1]['op'][1]] %} 2 | -------------------------------------------------------------------------------- /app/views/_elements/tx/transfer_to_vesting.volt: -------------------------------------------------------------------------------- 1 | 2 | 3 | Power Up 4 | 5 | 6 | {{ item[1]['op'][1]['amount'] }} 7 | 8 | 9 | from 10 | 11 | {{ item[1]['op'][1]['from'] }} 12 | 13 | to 14 | 15 | {{ item[1]['op'][1]['to'] }} 16 | 17 | -------------------------------------------------------------------------------- /app/views/_elements/tx/unknown.volt: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /app/views/_elements/tx/vote.volt: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 | 5 |
6 |
7 | 8 | ↳ 9 | by: 10 | 11 | @{{ item[1]['op'][1]['author'] }} 12 | 13 | 14 | 15 | voter: 16 | 17 | @{{ item[1]['op'][1]['voter'] }} 18 | 19 | ({{ item[1]['op'][1]['weight'] / 100 }}%) 20 | 21 | 22 | steemit.com 23 | 24 | 25 | all votes 26 | 27 |
28 |
29 |
30 | -------------------------------------------------------------------------------- /app/views/_elements/tx/withdraw_vesting.volt: -------------------------------------------------------------------------------- 1 | {% include "_elements/definition_table" with ['data': item[1]['op'][1]] %} 2 | -------------------------------------------------------------------------------- /app/views/_elements/tx/witness_update.volt: -------------------------------------------------------------------------------- 1 | {% include "_elements/definition_table" with ['data': item[1]['op'][1]] %} 2 | -------------------------------------------------------------------------------- /app/views/_elements/vesting_shares.volt: -------------------------------------------------------------------------------- 1 |
VESTS" data-variation="inverted" data-position="left center"> 2 | largeNumber::format($current->vesting_shares); ?> 3 |
4 | -------------------------------------------------------------------------------- /app/views/_elements/voter_rshares.volt: -------------------------------------------------------------------------------- 1 |
{{ voter.rshares }}
2 |
Reward Shares" data-variation="inverted" data-position="left center"> 3 | largeNumber::format($voter->rshares, 'RS'); ?> 4 |
5 | -------------------------------------------------------------------------------- /app/views/_elements/voter_weight.volt: -------------------------------------------------------------------------------- 1 |
weight, 0, "", "") ?>
2 |
VESTS" data-variation="inverted" data-position="left center"> 3 | largeNumber::format($voter->weight); ?> 4 |
5 | -------------------------------------------------------------------------------- /app/views/_elements/warning.volt: -------------------------------------------------------------------------------- 1 | {#
2 |
3 | 4 |
5 |
6 | STEEM blockchain upgrade in progress 7 |
8 |

9 | The upgrade to v0.18.0 has been started and some data will be out of date until it's completed. This message will be removed once completed. 10 |

11 |
12 |
13 |
#} 14 | -------------------------------------------------------------------------------- /app/views/_elements/witness_vesting_shares.volt: -------------------------------------------------------------------------------- 1 |
VESTS" data-variation="inverted" data-position="left center"> 2 | largeNumber::format($weight); ?> 3 |
4 | -------------------------------------------------------------------------------- /app/views/account/_elements/followers_navigation.volt: -------------------------------------------------------------------------------- 1 | 9 | -------------------------------------------------------------------------------- /app/views/account/view/beneficiariesDate.volt: -------------------------------------------------------------------------------- 1 |

2 | Beneficiary Rewards for {{ date }} 3 |
4 | The rewards @{{ account.name }} has earned from beneficiaries on {{ date }}. 5 |
6 |

7 | 8 | 9 | Back to All Dates 10 | 11 | 12 | 13 | 14 | {% for reward in beneficiaries %} 15 | 16 | 21 | 24 | 53 | 54 | {% else %} 55 | 56 | 61 | 62 | {% endfor %} 63 | 64 |
17 |
VESTS" data-variation="inverted" data-position="left center"> 18 | largeNumber::format($reward->reward); ?> 19 |
20 |
22 | ~convert::vest2sp($reward->reward, ""); ?> SP* 23 | 25 |
26 | 27 | comment_permlink) ?> 28 | 29 |
30 |
31 | 32 | ↳ 33 | by: 34 | 35 | @{{ reward.comment_author }} 36 | 37 | 38 | 39 | steemit.com 40 | 41 | 42 | all votes 43 | 44 | 45 | 46 | timeAgo::mongo($reward->_ts); ?> 47 | 48 | 49 |
50 |
51 |
52 |
57 |
58 | No curation rewards found 59 |
60 |
65 | -------------------------------------------------------------------------------- /app/views/account/view/blocks.volt: -------------------------------------------------------------------------------- 1 |

2 | Blocks 3 |
4 | Blocks witnessed or mined by @{{ account.name }}. 5 |
6 |

7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | {% for b in mining %} 17 | 18 | 23 | 26 | 27 | 28 | 29 | {% endfor %} 30 |
BlockDateAccount Name
19 | 20 | _id ?> 21 | 22 | 24 | _ts / 1000) ?> 25 | {{ b.witness }}
31 | -------------------------------------------------------------------------------- /app/views/account/view/curationDate.volt: -------------------------------------------------------------------------------- 1 |

2 | Curation Rewards for {{ date }} 3 |
4 | The rewards @{{ account.name }} has earned from curation on {{ date }}. 5 |
6 |

7 | 8 | 9 | Back to All Dates 10 | 11 | 12 | 13 | 14 | {% for reward in curation %} 15 | 16 | 21 | 24 | 34 | 35 | {% else %} 36 | 37 | 42 | 43 | {% endfor %} 44 | 45 |
17 |
VESTS" data-variation="inverted" data-position="left center"> 18 | largeNumber::format($reward->reward); ?> 19 |
20 |
22 | ~convert::vest2sp($reward->reward, ""); ?> SP* 23 | 25 | 26 | {{ reward.comment_permlink }} 27 | 28 |
29 | by {{ reward.comment_author }}, 30 | 31 | timeAgo::mongo($reward->_ts); ?> 32 | 33 |
38 |
39 | No curation rewards found 40 |
41 |
46 | -------------------------------------------------------------------------------- /app/views/account/view/data.volt: -------------------------------------------------------------------------------- 1 |

2 | Account Raw Data 3 |
4 | Snapshot of blockchain information cached timeAgo::mongo($account->scanned); ?> 5 |
6 |

7 | {% include '_elements/definition_table' with ['data': account] %} 8 | -------------------------------------------------------------------------------- /app/views/account/view/followers.volt: -------------------------------------------------------------------------------- 1 |

2 | @{{ account.name }}'s followers 3 |
4 | Newest followers displayed first 5 |
6 |

7 | {% include 'account/_elements/followers_navigation' with ['active': 'recent'] %} 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | {% for current in followers %} 18 | 19 | 22 | 27 | 38 | 39 | {% else %} 40 | 41 | 49 | 50 | {% endfor %} 51 | 52 |
WhenAccountWhat
20 | timeAgo::mongo($current->_ts); ?> 21 | 23 | 24 | {{ current.follower }} 25 | 26 | 28 | {% if current.what[0] !== "ignore" %} 29 |
30 | Follow 31 |
32 | {% else %} 33 |
34 | Unfollow 35 |
36 | {% endif %} 37 |
42 |
43 | No accounts found 44 |
45 | SteemDB has no record of any accounts following this user. 46 |
47 |
48 |
53 | -------------------------------------------------------------------------------- /app/views/account/view/followersWhales.volt: -------------------------------------------------------------------------------- 1 |

2 | @{{ account.name }}'s followers 3 |
4 | Sorted by total vests 5 |
6 |

7 | {% include 'account/_elements/followers_navigation' with ['active': 'whales'] %} 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | {% for current in followers %} 19 | {% include '_elements/account_table_row' with ['current': current] %} 20 | {% else %} 21 | 22 | 30 | 31 | {% endfor %} 32 | 33 |
AccountFollowersPostsVests
23 |
24 | No accounts found 25 |
26 | SteemDB has no record of any accounts following this user. 27 |
28 |
29 |
34 | -------------------------------------------------------------------------------- /app/views/account/view/following.volt: -------------------------------------------------------------------------------- 1 |

2 | @{{ account.name }} is following 3 |
4 | Most recently followed accounts displayed first 5 |
6 |

7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | {% for current in followers %} 17 | 18 | 21 | 26 | 37 | 38 | {% else %} 39 | 40 | 48 | 49 | {% endfor %} 50 | 51 |
WhenAccountWhat
19 | timeAgo::mongo($current->_ts); ?> 20 | 22 | 23 | {{ current.following }} 24 | 25 | 27 | {% if current.what[0] %} 28 |
29 | Follow 30 |
31 | {% else %} 32 |
33 | Unfollow 34 |
35 | {% endif %} 36 |
41 |
42 | No accounts found 43 |
44 | SteemDB has no record of this account following others. 45 |
46 |
47 |
52 | -------------------------------------------------------------------------------- /app/views/account/view/missed.volt: -------------------------------------------------------------------------------- 1 |

2 | Missed Blocks 3 |
4 | Blocks that @{{ account.name }} has missed via witnessing 5 |
6 |

7 |

Date/time is approximate within 1 minutes

8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | {% for b in mining %} 17 | 18 | 21 | 22 | 23 | 24 | {% else %} 25 | 26 | 27 | 32 | 33 | 34 | {% endfor %} 35 |
DateAccount Name
19 | date->toDateTime()->format('Y-m-d\TH:i:s.u'); ?> 20 | {{ b.witness }}
28 |
29 | No missing blocks recorded 30 |
31 |
36 | -------------------------------------------------------------------------------- /app/views/account/view/posts.volt: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | SBD 5 |
6 |
7 | Total Payouts 8 |
9 |
10 |
11 |
12 | SBD 13 |
14 |
15 | Pending Payouts 16 |
17 |
18 |
19 |
20 | Root Posts 21 |
22 |
23 | {% include "_elements/comment_list.volt" %} 24 |
25 | -------------------------------------------------------------------------------- /app/views/account/view/powerdown.volt: -------------------------------------------------------------------------------- 1 | 6 |

7 | Power Downs 8 |
9 | The VESTS/SP of @{{ account.name }} converted to liquid STEEM. 10 |
11 |

12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | {% for power in powerdown %} 24 | 25 | 28 | 33 | 38 | 43 | 48 | 49 | 50 | {% else %} 51 | 52 | 53 | 58 | 59 | 60 | {% endfor %} 61 |
WhenFromToSPSTEEM
26 | timeAgo::mongo($power->_ts); ?> 27 | 29 | 30 | {{ power.from_account }} 31 | 32 | 34 | 35 | {{ power.to_account }} 36 | 37 | 39 |
40 | -largeNumber::format($power->withdrawn); ?> 41 |
42 |
44 |
45 | +deposited; ?> STEEM 46 |
47 |
54 |
55 | No powerdown transfers found 56 |
57 |
62 | -------------------------------------------------------------------------------- /app/views/account/view/powerup.volt: -------------------------------------------------------------------------------- 1 | 6 |

7 | Power Ups 8 |
9 | The STEEM powered up to @{{ account.name }}. 10 |
11 |

12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | {% for power in powerup %} 23 | 24 | 27 | 32 | 37 | 40 | 41 | 42 | {% else %} 43 | 44 | 45 | 50 | 51 | 52 | {% endfor %} 53 |
WhenFromToSTEEM
25 | timeAgo::mongo($power->_ts); ?> 26 | 28 | 29 | {{ power.from }} 30 | 31 | 33 | 34 | {{ power.to }} 35 | 36 | 38 | {{ power.amount }} STEEM 39 |
46 |
47 | No powerup transfers found 48 |
49 |
54 | -------------------------------------------------------------------------------- /app/views/account/view/props.volt: -------------------------------------------------------------------------------- 1 |

2 | Witness Props History 3 |
4 | The history of the account's witness properties. 5 |
6 |

7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | {% for props in history %} 21 | 22 | 25 | 28 | 31 | 36 | 39 | 42 | 45 | 46 | {% endfor %} 47 | 48 |
DateQuoteBaseBiasCreation FeeSBD InterestBlock Size
23 | {{ props.created.toDateTime().format('Y-m-d') }} 24 | 26 | {{ props.sbd_exchange_rate.quote }} 27 | 29 | {{ props.sbd_exchange_rate.base }} 30 | 32 | {% if props.sbd_exchange_rate.quote != "1.000 STEEM" %} 33 | sbd_exchange_rate->quote)[0]) * 100, 1) ?>% 34 | {% endif %} 35 | 37 | {{ props.props.account_creation_fee }} 38 | 40 | {{ props.props.sbd_interest_rate }} 41 | 43 | {{ props.props.maximum_block_size }} 44 |
49 | -------------------------------------------------------------------------------- /app/views/account/view/proxied.volt: -------------------------------------------------------------------------------- 1 |

2 | Witness Voting Proxies 3 |
4 | The following accounts have their weight proxied to @{{ account.name }} for witness voting. 5 |
6 |

7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | {% for proxy in proxied %} 19 | 20 | 28 | 36 | 39 | 42 | 50 | 51 | {% endfor %} 52 | 53 |
AccountFollowersPostsVestsBalances
21 |
22 |
23 | reputation::number($proxy->reputation) ?> 24 |
25 | {{ link_to("/@" ~ proxy.name, proxy.name) }} 26 |
27 |
29 |
30 | {{ proxy.followers_count }} 31 |
32 | largeNumber::format($proxy->followers_mvest); ?> 33 |
34 |
35 |
37 | {{ proxy.post_count }} 38 | 40 | {{ partial("_elements/vesting_shares", ['current': proxy]) }} 41 | 43 |
44 | total_sbd_balance, 3, ".", ",") ?> SBD 45 |
46 | total_balance, 3, ".", ",") ?> STEEM 47 |
48 |
49 |
54 | -------------------------------------------------------------------------------- /app/views/account/view/reblogged.volt: -------------------------------------------------------------------------------- 1 |

2 | @{{ account.name }}'s content reblogged by others 3 |
4 | The content that @{{ account.name }} has created, and reblogged by others 5 |
6 |

7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | {% for reblog in reblogs %} 17 | 18 | 21 | 26 | 31 | 32 | 33 | {% else %} 34 | 35 | 36 | 41 | 42 | 43 | {% endfor %} 44 |
DateAuthorContent
19 | timeAgo::mongo($reblog->_ts); ?> 20 | 22 | 23 | {{ reblog.account }} 24 | 25 | 27 | 28 | {{ reblog.permlink }} 29 | 30 |
37 |
38 | No reblogs recorded 39 |
40 |
45 | {% if reblogs | length == 100 and reblogs | length > 0 %} 46 | 47 | Next Page 48 | 49 | {% endif %} 50 | -------------------------------------------------------------------------------- /app/views/account/view/reblogs.volt: -------------------------------------------------------------------------------- 1 |

2 | Reblogged Content 3 |
4 | The content that @{{ account.name }} has reblogged 5 |
6 |

7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | {% for reblog in reblogs %} 17 | 18 | 21 | 26 | 31 | 32 | 33 | {% else %} 34 | 35 | 36 | 41 | 42 | 43 | {% endfor %} 44 |
DateAuthorContent
19 | timeAgo::mongo($reblog->_ts); ?> 20 | 22 | 23 | {{ reblog.author }} 24 | 25 | 27 | 28 | {{ reblog.permlink }} 29 | 30 |
37 |
38 | No reblogs recorded 39 |
40 |
45 | {% if reblogs | length == 100 and reblogs | length > 0 %} 46 | 47 | Next Page 48 | 49 | {% endif %} 50 | -------------------------------------------------------------------------------- /app/views/account/view/replies.volt: -------------------------------------------------------------------------------- 1 |

2 | Replies 3 |
4 | Posts that @{{ account.name }} has replied to 5 |
6 |

7 |
8 | {% for comment in replies %} 9 |
10 |
11 | 12 | 13 | 14 |
15 | 25 | 30 |
31 |

32 | {{ markdown(comment.body) }} 33 |

34 |
35 | 43 |
44 |
45 |
46 | {% endfor %} 47 |
48 | -------------------------------------------------------------------------------- /app/views/account/view/transfers.volt: -------------------------------------------------------------------------------- 1 | 6 |

7 | Transfers 8 |
9 | Transfers to and from @{{ account.name }} of both STEEM and SBD. 10 |
11 |

12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | {% for transfer in transfers %} 25 | 26 | 29 | 34 | 39 | 44 | 47 | 54 | 55 | 56 | {% else %} 57 | 58 | 59 | 64 | 65 | 66 | {% endfor %} 67 |
WhenFromToAmountTypeMemo
27 | _ts / 1000) ?> 28 | 30 | 31 | {{ transfer.from }} 32 | 33 | 35 | 36 | {{ transfer.to }} 37 | 38 | 40 |
41 | amount, 3, ".", ",") ?> 42 |
43 |
45 | {{ transfer.type }} 46 | 48 | {% if transfer.memo %} 49 |
50 | 51 |
52 | {% endif %} 53 |
60 |
61 | No powerdown transfers found 62 |
63 |
68 | {% include "_elements/paginator.volt" %} 69 | -------------------------------------------------------------------------------- /app/views/account/view/view.volt: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | {{ account.followers | length }} 5 |
6 |
7 | Followers 8 |
9 |
10 |
11 |
12 | {{ account.post_count }} 13 |
14 |
15 | Posts 16 |
17 |
18 |
19 |
20 | {{ account.following | length }} 21 |
22 |
23 | Following 24 |
25 |
26 |
27 |

28 | Recent History 29 |
30 | All recent activity involving @{{ account.name }}. 31 |
32 |

33 | 34 | 35 | 36 | 37 | {% for item in activity %} 38 | 39 | 48 | 51 | 52 | {% else %} 53 | 54 | 57 | 58 | {% endfor %} 59 | 60 |
40 |
41 | opName::string($item[1]['op'], $account) ?> 42 |
43 | timeAgo::string($item[1]['timestamp']); ?> 44 |
Block #{{ item[1]['block' ]}} 45 |
46 |
47 |
49 | {% include "_elements/tx/" ~ item[1]['op'][0] %} 50 |
55 | Unable to connect to steemd for to load recent history. 56 |
61 | -------------------------------------------------------------------------------- /app/views/account/view/votes.volt: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | {% for vote in votes %} 8 | 9 | 22 | 41 | 43 | 44 | {% else %} 45 | 46 | 54 | 55 | {% endfor %} 56 | 57 |
10 | {% if vote.weight > 0 %} 11 | 12 | {% elseif vote.weight < 0 %} 13 | 14 | {% else %} 15 | 16 | {% endif %} 17 | weight / 100) ?>% 18 | 19 |
20 | timeAgo::mongo($vote->_ts); ?> 21 |
23 |
24 | 25 | @{{ vote.voter }} 26 | 27 | voted on 28 | 33 | 39 |
40 |
42 |
47 |
48 | No votes found 49 |
50 | SteemDB has no record of any votes by this user. 51 |
52 |
53 |
58 | -------------------------------------------------------------------------------- /app/views/app/view.volt: -------------------------------------------------------------------------------- 1 | {% extends 'layouts/default.volt' %} 2 | 3 | {% block content %} 4 |
5 |
6 |
7 |
8 | 12 |
13 | {% include "app/view/" ~ router.getActionName() %} 14 |
15 |
16 |
17 |
18 | {% include '_elements/cards/app.volt' %} 19 |
20 |
21 |
22 |
23 |
24 | {% endblock %} 25 | 26 | {% block scripts %} 27 | {% if chart is defined %} 28 | {% include 'charts/account/' ~ router.getActionName() %} 29 | {% endif %} 30 | 46 | {% endblock %} 47 | -------------------------------------------------------------------------------- /app/views/app/view/earnings.volt: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |

5 | Benefactor Rewards 6 |
7 | All recent earnings awarded to the {{ app }} platform. 8 |
9 |

10 |
11 |
12 |
13 |
14 | +largeNumber::format($this->convert->vest2sp($stats[0]->week, false), '') ?> SP 15 |
Last Week
16 |
17 |
18 |
19 |
20 |
21 |
22 | +largeNumber::format($this->convert->vest2sp($stats[0]->month, false), '') ?> SP 23 |
Last Month
24 |
25 |
26 |
27 |
28 |
29 |
30 | +largeNumber::format($this->convert->vest2sp($stats[0]->quarter, false), '') ?> SP 31 |
Last Quarter
32 |
33 |
34 |
35 |
36 |
37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | {% for item in rewards %} 48 | 49 | 54 | 62 | 65 | 66 | {% else %} 67 | 68 | 71 | 72 | {% endfor %} 73 | 74 |
DateRewardsPosts
50 |
51 | {{ item._id['year']}}-{{ item._id['month']}}-{{ item._id['day']}} 52 |
53 |
55 |
56 | convert->vest2sp($item->reward, null) ?> SP 57 |
58 | {{ item.reward }} VESTS 59 |
60 |
61 |
63 | {{ item.count }} 64 |
69 | No rewards found. 70 |
75 | -------------------------------------------------------------------------------- /app/views/app/view/view.volt: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |

5 | Platform Leaderboard (30-Days) 6 |
7 | The most rewarded authors using the {{ app }} platform to create content. 8 |
9 |

10 |
11 |
12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | {% for item in leaderboard %} 27 | 28 | 31 | 38 | 43 | 48 | 56 | 59 | 60 | {% else %} 61 | 62 | 65 | 66 | {% endfor %} 67 | 68 |
DatePostsSBDVESTSSTEEM
29 | {{ loop.index }} 30 | 32 | 37 | 39 | 40 | {{ item.count }} 41 | 42 | 44 |
45 | {{ item.sbd }} SBD 46 |
47 |
49 |
50 | convert->vest2sp($item->vests, null) ?> SP 51 |
52 | {{ item.vests }} VESTS 53 |
54 |
55 |
57 | {{ item.steem }} STEEM 58 |
63 | No rewards found. 64 |
69 | -------------------------------------------------------------------------------- /app/views/block/comment_options.volt: -------------------------------------------------------------------------------- 1 | {% include "_elements/definition_table" with ['data': item[1]['op'][1]] %} 2 | -------------------------------------------------------------------------------- /app/views/blocks/index.volt: -------------------------------------------------------------------------------- 1 | {% extends 'layouts/default.volt' %} 2 | 3 | {% block header %} 4 | 5 | {% endblock %} 6 | 7 | {% block content %} 8 |
9 |
10 |
11 |
12 |

13 | Recent Blocks 14 |

15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | {% for current in blocks %} 27 | 28 | 33 | 36 | 41 | 44 | 52 | 53 | {% endfor %} 54 | 55 |
HeightTimeWitnessTransactionsOperations
29 | 30 | {{ current._id }} 31 | 32 | 34 | {{ current._ts.toDateTime().format("Y-m-d H:i:s") }} UTC 35 | 37 | 38 | {{ current.witness }} 39 | 40 | 42 | {{ current.transactions | length }} 43 | 45 | transactions, 'operations') as $ops) { 48 | $count += count($ops); 49 | } ?> 50 | {{ count }} 51 |
56 |
57 |
58 |
59 |
60 | 61 | 62 | {% endblock %} 63 | -------------------------------------------------------------------------------- /app/views/charts/account/authoring.volt: -------------------------------------------------------------------------------- 1 | 77 | -------------------------------------------------------------------------------- /app/views/charts/account/blocks.volt: -------------------------------------------------------------------------------- 1 | 69 | -------------------------------------------------------------------------------- /app/views/charts/account/curation.volt: -------------------------------------------------------------------------------- 1 | 64 | -------------------------------------------------------------------------------- /app/views/charts/account/followers.volt: -------------------------------------------------------------------------------- 1 | 59 | -------------------------------------------------------------------------------- /app/views/charts/account/posts.volt: -------------------------------------------------------------------------------- 1 | 71 | -------------------------------------------------------------------------------- /app/views/charts/account/powerdown.volt: -------------------------------------------------------------------------------- 1 | 59 | -------------------------------------------------------------------------------- /app/views/charts/account/powerup.volt: -------------------------------------------------------------------------------- 1 | 59 | -------------------------------------------------------------------------------- /app/views/charts/account/transfers.volt: -------------------------------------------------------------------------------- 1 | 64 | -------------------------------------------------------------------------------- /app/views/charts/account/view.volt: -------------------------------------------------------------------------------- 1 | 82 | -------------------------------------------------------------------------------- /app/views/charts/account/witness.volt: -------------------------------------------------------------------------------- 1 | 60 | -------------------------------------------------------------------------------- /app/views/charts/authors.volt: -------------------------------------------------------------------------------- 1 | 75 | -------------------------------------------------------------------------------- /app/views/charts/chart/rewards.volt: -------------------------------------------------------------------------------- 1 | 77 | -------------------------------------------------------------------------------- /app/views/charts/chart/steem.volt: -------------------------------------------------------------------------------- 1 | 81 | -------------------------------------------------------------------------------- /app/views/charts/index.volt: -------------------------------------------------------------------------------- 1 | {% extends 'layouts/default.volt' %} 2 | 3 | {% block header %} 4 | 5 | {% endblock %} 6 | 7 | {% block content %} 8 | 14 |
15 |
16 |
17 |
18 |
19 | 20 |
21 |
22 | 23 |
24 |
25 | 26 |
27 |
28 | 29 |
30 |
31 | 32 |
33 |
34 |
35 |
36 |
37 | {# 38 |
39 |
40 |
41 |
42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | {% for account in accounts %} 51 | 52 | 55 | 56 | 57 | {% endfor %} 58 | 59 |
AccountVesting
53 | {{ link_to("/@" ~ account.name, account.name) }} 54 | {{ account.vesting_shares }}
60 |
61 |
62 |
63 |
64 | #} 65 | 66 | {% endblock %} 67 | 68 | {% block scripts %} 69 | {% include 'charts/supply.volt' %} 70 | {% include 'charts/activity.volt' %} 71 | {% include 'charts/growth.volt' %} 72 | {% include 'charts/authors.volt' %} 73 | {% include 'charts/votes.volt' %} 74 | {% endblock %} 75 | -------------------------------------------------------------------------------- /app/views/charts/price.volt: -------------------------------------------------------------------------------- 1 | 60 | -------------------------------------------------------------------------------- /app/views/charts/rewards.volt: -------------------------------------------------------------------------------- 1 | {% extends 'layouts/default.volt' %} 2 | 3 | {% block header %} 4 | 5 | {% endblock %} 6 | 7 | {% block content %} 8 | 14 |
15 |
16 |
17 |
18 |
19 | 20 |
21 |
22 |
23 |
24 |
25 | 26 | {% endblock %} 27 | 28 | {% block scripts %} 29 | {% include 'charts/chart/rewards.volt' %} 30 | {% endblock %} 31 | -------------------------------------------------------------------------------- /app/views/charts/steem.volt: -------------------------------------------------------------------------------- 1 | {% extends 'layouts/default.volt' %} 2 | 3 | {% block header %} 4 | 5 | {% endblock %} 6 | 7 | {% block content %} 8 | 14 |
15 |
16 |
17 |
18 |
19 | 20 |
21 |
22 |
23 |
24 |
25 | {# 26 |
27 |
28 |
29 |
30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | {% for account in accounts %} 39 | 40 | 43 | 44 | 45 | {% endfor %} 46 | 47 |
AccountVesting
41 | {{ link_to("/@" ~ account.name, account.name) }} 42 | {{ account.vesting_shares }}
48 |
49 |
50 |
51 |
52 | #} 53 | 54 | {% endblock %} 55 | 56 | {% block scripts %} 57 | {% include 'charts/chart/steem.volt' %} 58 | {% endblock %} 59 | -------------------------------------------------------------------------------- /app/views/charts/supply.volt: -------------------------------------------------------------------------------- 1 | 81 | -------------------------------------------------------------------------------- /app/views/charts/votes.volt: -------------------------------------------------------------------------------- 1 | 60 | -------------------------------------------------------------------------------- /app/views/comment/list.volt: -------------------------------------------------------------------------------- 1 | {% extends 'layouts/default.volt' %} 2 | 3 | {% block header %} 4 | 5 | {% endblock %} 6 | 7 | {% block content %} 8 | {% include "_elements/comment_list.volt" %} 9 | {% endblock %} 10 | -------------------------------------------------------------------------------- /app/views/comment/view/data.volt: -------------------------------------------------------------------------------- 1 | View JSON 2 | {% include '_elements/definition_table' with ['data': comment.toArray()] %} 3 | -------------------------------------------------------------------------------- /app/views/comment/view/edits.volt: -------------------------------------------------------------------------------- 1 |

Edit History

2 |
3 | {% for diff in edits %} 4 |
5 | Edit {{ diffs.length - loop.index0 + 1 }} - {{ diff._ts.toDateTime().format("Y-m-d H:i:s") }} UTC 6 |
7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 24 | 25 | 26 |
Title{{ diff.title }}
Body
{{ diff.body }}
JSON 20 |
21 | json_metadata, true), JSON_PRETTY_PRINT); ?>
22 | 
23 |
27 | {% endfor %} 28 |
29 | -------------------------------------------------------------------------------- /app/views/comment/view/reblogs.volt: -------------------------------------------------------------------------------- 1 |

Users Reblogging

2 |
3 | {% for reblog in reblogs %} 4 |
5 | timeAgo::mongo($reblog->_ts); ?> 6 | by 7 | 8 | @{{ reblog.account }} 9 | 10 |
11 | {% endfor %} 12 |
13 | -------------------------------------------------------------------------------- /app/views/comment/view/replies.volt: -------------------------------------------------------------------------------- 1 |
2 |

Replies

3 | {% for reply in replies %} 4 | {% include "comment/view/reply.volt" %} 5 | {% endfor %} 6 |
7 | -------------------------------------------------------------------------------- /app/views/comment/view/reply.volt: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 | 5 |
6 | 7 | {{ reply.author }} 8 | 9 | 14 |
15 | {{ markdown(reply.body) }} 16 |
17 | 25 |
26 | {% if reply.children > 0 %} 27 |
28 | {% for child in reply.getChildren() %} 29 | {% include "comment/view/reply" with ['reply': child] %} 30 | {% endfor %} 31 |
32 | {% endif %} 33 |
34 | -------------------------------------------------------------------------------- /app/views/comment/view/tags.volt: -------------------------------------------------------------------------------- 1 |

Tags

2 |
3 | {% for tag in comment.metadata('tags') %} 4 |
5 | {{ tag }} 6 |
7 | {% endfor %} 8 |
9 | -------------------------------------------------------------------------------- /app/views/comment/view/view.volt: -------------------------------------------------------------------------------- 1 |
2 | {{ markdown(comment.body) }} 3 |
4 | 5 | -------------------------------------------------------------------------------- /app/views/comment/view/votes.volt: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | {% for voter in votes %} 13 | 14 | 17 | 22 | 25 | 28 | 31 | 32 | {% endfor %} 33 | 34 |
VoterReward Shares
18 | 19 | {{ voter.voter }} 20 | 21 | 29 | {% include "_elements/voter_rshares.volt" %} 30 |
35 | -------------------------------------------------------------------------------- /app/views/comments/list.volt: -------------------------------------------------------------------------------- 1 | {% extends 'layouts/default.volt' %} 2 | 3 | {% block header %} 4 | 5 | {% endblock %} 6 | 7 | {% block content %} 8 | {% include "_elements/comment_list.volt" %} 9 | {% endblock %} 10 | -------------------------------------------------------------------------------- /app/views/comments/view/data.volt: -------------------------------------------------------------------------------- 1 | View JSON 2 | {% include '_elements/definition_table' with ['data': comment] %} 3 | -------------------------------------------------------------------------------- /app/views/comments/view/reblogs.volt: -------------------------------------------------------------------------------- 1 |

Users Reblogging

2 |
3 | {% for reblog in reblogs %} 4 |
5 | timeAgo::mongo($reblog->_ts); ?> 6 | by 7 | 8 | @{{ reblog.account }} 9 | 10 |
11 | {% endfor %} 12 |
13 | -------------------------------------------------------------------------------- /app/views/comments/view/replies.volt: -------------------------------------------------------------------------------- 1 |
2 |

Replies

3 | {% for reply in replies %} 4 | {% include "comment/view/reply.volt" %} 5 | {% endfor %} 6 |
7 | -------------------------------------------------------------------------------- /app/views/comments/view/reply.volt: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 | 5 |
6 | 7 | {{ reply.author }} 8 | 9 | 14 |
15 | {{ markdown(reply.body) }} 16 |
17 | 25 |
26 | {% if reply.children > 0 %} 27 |
28 | {% for child in reply.getChildren() %} 29 | {% include "comment/view/reply" with ['reply': child] %} 30 | {% endfor %} 31 |
32 | {% endif %} 33 |
34 | -------------------------------------------------------------------------------- /app/views/comments/view/tags.volt: -------------------------------------------------------------------------------- 1 |

Tags

2 |
3 | {% for tag in comment.metadata('tags') %} 4 |
5 | {{ tag }} 6 |
7 | {% endfor %} 8 |
9 | -------------------------------------------------------------------------------- /app/views/comments/view/view.volt: -------------------------------------------------------------------------------- 1 |
2 | {{ markdown(comment.body) }} 3 |
4 | 5 | -------------------------------------------------------------------------------- /app/views/comments/view/votes.volt: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | {% for voter in votes %} 13 | 14 | 17 | 22 | 25 | 28 | 31 | 32 | 33 | {% endfor %} 34 |
VoterReward Shares
18 | 19 | {{ voter.voter }} 20 | 21 | 29 | {% include "_elements/voter_rshares.volt" %} 30 |
35 | -------------------------------------------------------------------------------- /app/views/forums/_breadcrumb.volt: -------------------------------------------------------------------------------- 1 |
2 |
3 | 34 |
35 |
36 | -------------------------------------------------------------------------------- /app/views/index/index.volt: -------------------------------------------------------------------------------- 1 | {% extends 'layouts/default.volt' %} 2 | 3 | {% block header %} 4 | 5 | {% endblock %} 6 | 7 | {% block content %} 8 | 14 |
15 |
16 |
17 |
18 |
19 | 20 |
21 |
22 | 23 |
24 |
25 | 26 |
27 |
28 |
29 |
30 |
31 | {# 32 |
33 |
34 |
35 |
36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | {% for account in accounts %} 45 | 46 | 49 | 50 | 51 | {% endfor %} 52 | 53 |
AccountVesting
47 | {{ link_to("/@" ~ account.name, account.name) }} 48 | {{ account.vesting_shares }}
54 |
55 |
56 |
57 |
58 | #} 59 | 60 | {% endblock %} 61 | 62 | {% block scripts %} 63 | 64 | {% endblock %} 65 | -------------------------------------------------------------------------------- /app/views/index/live.volt: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 60 | 61 | 62 |
63 |

64 | Subscribe to account 65 | 66 |

67 |
68 | 69 |

70 |    
71 | 
72 | 


--------------------------------------------------------------------------------
/app/views/index/show404.volt:
--------------------------------------------------------------------------------
 1 | {% extends 'layouts/default.volt' %}
 2 | 
 3 | {% block header %}
 4 | 
 5 | {% endblock %}
 6 | 
 7 | {% block content %}
 8 | 
14 | 
15 |
16 |
17 |
18 |
19 | Page Not Found 20 |
21 | The page you're requesting could not be loaded. 22 |
23 |
24 |
25 |
26 | {% endblock %} 27 | 28 | {% block scripts %} 29 | {% endblock %} 30 | -------------------------------------------------------------------------------- /app/views/labs/benefactors.volt: -------------------------------------------------------------------------------- 1 | {% extends 'layouts/default.volt' %} 2 | 3 | {% block header %} 4 | 5 | {% endblock %} 6 | 7 | {% block content %} 8 |
9 |
10 |
11 |
12 |
13 | Steem Benefactors 14 |
15 | Top Earning Benefactors by Date 16 |
17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | {% for day in dates %} 28 | 29 | 32 | 35 | 38 | 64 | 65 | {% endfor %} 66 | 67 |
DateVESTSPosts
30 | {{ day._id.year }}-{{ day._id.month }}-{{ day._id.day }} 31 | 33 | {{ day.reward }} 34 | 36 | {{ day.total }} 37 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | {% for benefactor in day.benefactors %} 49 | 50 | 53 | 56 | 59 | 60 | {% endfor %} 61 | 62 |
BenefactorPostsVESTS
51 | {{ (benefactor.benefactor) ? benefactor.benefactor : 'unknown' }} 52 | 54 | count / $day->total * 100, 2); ?>% ({{ benefactor.count }}) 55 | 57 | reward / $day->reward * 100, 2); ?>% ({{ benefactor.reward }}) 58 |
63 |
68 |
69 |
70 |
71 |
72 | {% endblock %} 73 | -------------------------------------------------------------------------------- /app/views/labs/conversions.volt: -------------------------------------------------------------------------------- 1 | {% extends 'layouts/default.volt' %} 2 | 3 | {% block header %} 4 | 5 | {% endblock %} 6 | 7 | {% block content %} 8 |
9 |
10 |
11 |
12 |
13 | Recent SBD -> STEEM Conversions 14 |
15 | Ordered chronologically, limited to 1000 conversions. 16 |
17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | {% for current in conversions %} 29 | 30 | 35 | 40 | 43 | 46 | 47 | {% endfor %} 48 | 49 |
DateAccountAmountRequestID
31 |
32 | _ts / 1000) ?> 33 |
34 |
36 | 37 | {{ current.owner }} 38 | 39 | 41 | amount, 3, ".", ",") ?> SBD 42 | 44 | {{ current.requestid }} 45 |
50 |
51 |
52 |
53 |
54 | {% endblock %} 55 | -------------------------------------------------------------------------------- /app/views/labs/flags.volt: -------------------------------------------------------------------------------- 1 | {% extends 'layouts/default.volt' %} 2 | 3 | {% block header %} 4 | 5 | {% endblock %} 6 | 7 | {% block content %} 8 |
9 |
10 |
11 |
12 |
13 | Account List by Flags Received 14 |
15 | Displaying the top 200 most-flagged accounts 16 |
17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | {% for account in accounts %} 29 | 30 | 35 | 38 | 41 | 46 | 47 | {% endfor %} 48 | 49 |
AccountTotal FlagsPosts FlaggedProminent Flaggers
31 | 32 | {{ account['_id'] }} 33 | 34 | 36 | {{ account['count'] }} 37 | 39 | {{ account['posts'] | length }} 40 | 42 | {% for voter, count in account['voters'] %} 43 | {{ voter }} ({{ count }}){% if not loop.last %},{% endif %} 44 | {% endfor %} 45 |
50 |
51 |
52 |
53 |
54 | 55 | {% endblock %} 56 | 57 | {% block scripts %} 58 | 59 | {% endblock %} 60 | -------------------------------------------------------------------------------- /app/views/labs/hf19.volt: -------------------------------------------------------------------------------- 1 | {% extends 'layouts/default.volt' %} 2 | 3 | {% block header %} 4 | 5 | {% endblock %} 6 | 7 | {% block content %} 8 |
9 |
10 |
11 |
12 |
13 | Voting Data 14 |
15 | 16 |
17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | {% for result in results %} 30 | 31 | 34 | 37 | 40 | 43 | 46 | 47 | {% endfor %} 48 | 49 |
DateVotesAverage WeightSelf-votesAverage Weight (Self-Votes)
32 | {{ result._id.year }}-{{ result._id.month }}-{{ result._id.day }} 33 | 35 | {{ result['count'] }} 36 | 38 | % 39 | 41 | {{ result['self'] }} 42 | 44 | % 45 |
50 |
51 |
52 |
53 |
54 | 55 | {% endblock %} 56 | 57 | {% block scripts %} 58 | 59 | {% endblock %} 60 | -------------------------------------------------------------------------------- /app/views/labs/powerup.volt: -------------------------------------------------------------------------------- 1 | {% extends 'layouts/default.volt' %} 2 | 3 | {% block header %} 4 | 5 | {% endblock %} 6 | 7 | {% block content %} 8 |
9 |
10 |
11 |
12 |
13 | Biggest Account Power Ups 14 |
15 | Largest total steem powered up per account 16 |
17 |
18 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | {% for powerup in powerups %} 33 | 34 | 42 | 45 | 53 | 54 | {% endfor %} 55 | 56 |
Power UpVestsAccount
35 |
36 | +largeNumber::format($powerup->total, ''); ?> 37 |
38 | {{ powerup.count }}x Power Ups 39 |
40 |
41 |
43 | {{ partial("_elements/vesting_shares", ['current': powerup.account[0]]) }} 44 | 46 |
47 |
48 | reputation::number($powerup->account[0]->reputation) ?> 49 |
50 | {{ link_to("/@" ~ powerup.account[0].name, powerup.account[0].name) }} 51 |
52 |
57 |
58 |
59 |
60 |
61 | {% endblock %} 62 | -------------------------------------------------------------------------------- /app/views/labs/votefocusing.volt: -------------------------------------------------------------------------------- 1 | {% extends 'layouts/default.volt' %} 2 | 3 | {% block header %} 4 | 5 | {% endblock %} 6 | 7 | {% block content %} 8 | 9 |
10 |
11 |
12 |
13 |
14 | Vote Focusing 15 |
16 | Voters who focus their votes on specific authors in the last 30 days. 17 |
18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | {% for focused in focus %} 31 | 32 | 37 | 42 | 47 | 50 | 53 | 54 | {% endfor %} 55 | 56 |
Account WeightVoterAuthorVotesAverage Weight
33 |
VESTS" data-variation="inverted" data-position="left center"> 34 | largeNumber::format($focused['account'][0]['vesting_shares']); ?> 35 |
36 |
38 | 39 | {{ focused._id.voter }} 40 | 41 | 43 | 44 | {{ focused._id.author }} 45 | 46 | 48 | {{ focused.count }} 49 | 51 | weight / 100) ?>% 52 |
57 |
58 |
59 |
60 |
61 | 62 | {% endblock %} 63 | 64 | {% block scripts %} 65 | 66 | {% endblock %} 67 | -------------------------------------------------------------------------------- /app/views/layouts/default.volt: -------------------------------------------------------------------------------- 1 | 2 | 3 | {% include '_elements/layouts/head.volt' %} 4 | 5 | 6 | {% include '_elements/layouts/menu.volt' %} 7 | 8 | 9 |
10 | 11 | {% include "_elements/warning.volt" %} 12 | 13 | {% block header %}{% endblock %} 14 | 15 | {% if this.flashSession.has() %} 16 |
17 |
18 | flashSession->output() ?> 19 |
20 |
21 | {% endif %} 22 | 23 | {% block content %}{% endblock %} 24 | 25 | {% include '_elements/layouts/footer.volt' %} 26 | 27 |
28 | 29 | {% include '_elements/layouts/scripts.volt' %} 30 | {% block scripts %}{% endblock %} 31 | 32 | 33 | -------------------------------------------------------------------------------- /app/views/layouts/homepage.volt: -------------------------------------------------------------------------------- 1 | 2 | 3 | {% include '_elements/layouts/head.volt' %} 4 | 5 | 6 | {% include '_elements/layouts/menu.volt' %} 7 | 8 | 9 |
10 | 11 | {% include "_elements/warning.volt" %} 12 | 13 | {% block content %}{% endblock %} 14 | 15 | {% include '_elements/layouts/footer.volt' %} 16 | 17 |
18 | 19 | {% include '_elements/layouts/scripts.volt' %} 20 | {% block scripts %}{% endblock %} 21 | 22 | 23 | -------------------------------------------------------------------------------- /app/views/search/page.volt: -------------------------------------------------------------------------------- 1 | {% extends 'layouts/default.volt' %} 2 | 3 | {% block header %} 4 | 5 | {% endblock %} 6 | 7 | {% block content %} 8 | 9 |
10 |
11 |
12 |
13 |
14 |
15 | 16 |
17 | 18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 | {% for result in results %} 26 |
27 |
28 | 29 | {{ (result.title) ? result.title : result.root_title }} 30 | 31 |
32 | by 33 | 34 | {{ result.author}} 35 | 36 | — 37 | timeAgo::mongo($result->created); ?> 38 |
39 |
40 |
41 | 42 | {% endfor %} 43 |
44 |
45 |
46 |
47 |
48 |
49 | 50 | {% endblock %} 51 | 52 | {% block scripts %} 53 | {% endblock %} 54 | -------------------------------------------------------------------------------- /app/views/tx/view.volt: -------------------------------------------------------------------------------- 1 | {% extends 'layouts/default.volt' %} 2 | 3 | {% block content %} 4 | 5 |
6 |
7 |
8 |
9 |
10 | Transaction {{ id }} 11 |
12 |
13 |
14 | {% if current %} 15 |
16 |
17 |
18 | {% include '_elements/definition_table' with ['data': current] %} 19 |
20 |
21 |
22 | {% else %} 23 |
24 |
25 |
26 |
This block has not yet been imported into SteemDB. Refresh the page to try again.
27 | Reload Page 28 |
29 |
30 |
31 | {% endif %} 32 |
33 |
34 | {% endblock %} 35 | 36 | {% block scripts %} 37 | {% if chart is defined %} 38 | {% include 'charts/account/' ~ router.getActionName() %} 39 | {% endif %} 40 | 46 | {% endblock %} 47 | -------------------------------------------------------------------------------- /app/views/witness/misses.volt: -------------------------------------------------------------------------------- 1 | {% extends 'layouts/default.volt' %} 2 | 3 | {% block content %} 4 |
5 |
6 |
7 |
8 |
9 | 14 |
15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | {% for miss in history %} 27 | 28 | 31 | 36 | 39 | 42 | 43 | {% endfor %} 44 | 45 |
Date/Time (Approximately)WitnessMissedTotal Misses
29 | {{ miss.date.toDateTime().format("Y-m-d H:i:s") }} UTC 30 | 32 | 33 | {{ miss.witness }} 34 | 35 | 37 | +{{ miss.increase }} 38 | 40 | {{ miss.total }} 41 |
46 |
47 |
48 |
49 |
50 |
51 |
52 | Most Misses (7-Day) 53 |
54 |
55 | {% for witness in misses %} 56 |
57 |
58 | +{{ witness.total }} 59 |
60 | 61 | {{ witness._id }} 62 | 63 |
64 | {% endfor %} 65 |
66 |
67 |
68 |
69 |
70 | {% endblock %} 71 | -------------------------------------------------------------------------------- /bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "steemdb", 3 | "homepage": "https://github.com/aaroncox/steemdb", 4 | "authors": [ 5 | "Aaron Cox " 6 | ], 7 | "description": "", 8 | "main": "", 9 | "license": "MIT", 10 | "private": true, 11 | "ignore": [ 12 | "**/.*", 13 | "node_modules", 14 | "bower_components", 15 | "test", 16 | "tests" 17 | ], 18 | "dependencies": { 19 | "plottable": "^2.6.0", 20 | "d3": "^4.2.1", 21 | "glidejs": "^2.0.9" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "require": { 3 | "mongodb/mongodb": "^1.0.0", 4 | "phalcon/incubator": "~3.0", 5 | "fguillot/json-rpc": "^1.2", 6 | "ezyang/htmlpurifier": "~4.8.0", 7 | "league/commonmark": "^0.11" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /deploy.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | rsync ./ steemdb:/var/www/com_steemdb/ --rsh ssh --rsync-path="sudo rsync" --recursive --perms --delete --verbose --exclude=.git* --exclude=docker/**/*.service --exclude=cache --exclude=vendor/ezyang/htmlpurifier/library/HTMLPurifier/DefinitionCache/Serializer/ --exclude=vendor --exclude=app/config --exclude=app/storage/views/*.php --checksum -a 3 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '2' 2 | services: 3 | history: 4 | build: ./docker/history 5 | restart: on-failure 6 | volumes: 7 | - ./docker/history:/src 8 | # links: 9 | # - mongo 10 | live: 11 | build: ./docker/live 12 | restart: on-failure 13 | # links: 14 | # - mongo 15 | ports: 16 | - "8888:8888" 17 | sync: 18 | build: ./docker/sync 19 | restart: on-failure 20 | # external_links: 21 | # - mongo:steemdb_mongo_1 22 | volumes: 23 | - ./docker/sync:/src 24 | witnesses: 25 | build: ./docker/witnesses 26 | # links: 27 | # - mongo 28 | # lucky: 29 | # build: ./docker/lucky 30 | # environment: 31 | # steemnode: "steemd.steemit.com" 32 | development: 33 | build: ./docker/development 34 | # links: 35 | # - mongo 36 | external_links: 37 | - mongo:steemdb_mongo_1 38 | volumes: 39 | - .:/var/www/html 40 | ports: 41 | - "8880:80" 42 | # mongodata: 43 | # image: mongo:3.3.10 44 | # volumes: 45 | # - /data/db 46 | # command: --break-mongo 47 | # mongo: 48 | # image: mongo:3.3.10 49 | # volumes_from: 50 | # - mongodata 51 | # # ports: 52 | # # - "27017:27017" 53 | # command: --smallfiles --rest 54 | 55 | networks: 56 | dockernet: 57 | external: true 58 | -------------------------------------------------------------------------------- /docker/development/conf/nginx.conf: -------------------------------------------------------------------------------- 1 | #user nobody; 2 | worker_processes 5; 3 | 4 | #error_log logs/error.log; 5 | #error_log logs/error.log notice; 6 | #error_log logs/error.log info; 7 | 8 | #pid run/nginx.pid; 9 | 10 | 11 | events { 12 | worker_connections 1024; 13 | } 14 | 15 | 16 | http { 17 | include mime.types; 18 | default_type application/octet-stream; 19 | 20 | #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 21 | # '$status $body_bytes_sent "$http_referer" ' 22 | # '"$http_user_agent" "$http_x_forwarded_for"'; 23 | 24 | #access_log logs/access.log main; 25 | 26 | sendfile on; 27 | #tcp_nopush on; 28 | 29 | #keepalive_timeout 0; 30 | keepalive_timeout 2; 31 | client_max_body_size 100m; 32 | 33 | server_tokens off; 34 | #gzip on; 35 | 36 | include /etc/nginx/sites-enabled/*; 37 | } 38 | daemon off; 39 | -------------------------------------------------------------------------------- /docker/development/conf/supervisord.conf: -------------------------------------------------------------------------------- 1 | [supervisord] 2 | logfile=/tmp/supervisord.log ; (main log file;default $CWD/supervisord.log) 3 | logfile_maxbytes=50MB ; (max main logfile bytes b4 rotation;default 50MB) 4 | logfile_backups=10 ; (num of main logfile rotation backups;default 10) 5 | loglevel=info ; (log level;default info; others: debug,warn,trace) 6 | pidfile=/tmp/supervisord.pid ; (supervisord pidfile;default supervisord.pid) 7 | nodaemon=false ; (start in foreground if true;default false) 8 | minfds=1024 ; (min. avail startup file descriptors;default 1024) 9 | minprocs=200 ; (min. avail process descriptors;default 200) 10 | user=root ; 11 | 12 | [program:php-fpm7.0] 13 | command=/usr/sbin/php-fpm7.0 -c /etc/php/7.0/fpm/php-fpm.conf 14 | autostart=true 15 | autorestart=true 16 | priority=5 17 | stdout_logfile=/dev/stdout 18 | stdout_logfile_maxbytes=0 19 | stderr_logfile=/dev/stderr 20 | stderr_logfile_maxbytes=0 21 | 22 | [program:nginx] 23 | command=/usr/sbin/nginx 24 | autostart=true 25 | autorestart=true 26 | priority=10 27 | stdout_logfile=/dev/stdout 28 | stdout_logfile_maxbytes=0 29 | stderr_logfile=/dev/stderr 30 | stderr_logfile_maxbytes=0 31 | stdout_events_enabled=true 32 | stderr_events_enabled=true 33 | 34 | [program:memcached] 35 | command=/usr/bin/memcached -p 11211 -u www-data -m 256 -c 1024 -t 4 36 | autostart=true 37 | autorestart=true 38 | user=root 39 | priority=100 40 | redirect_stderr=true 41 | stdout_logfile=/var/log/memcached.log 42 | -------------------------------------------------------------------------------- /docker/development/conf/vhost.conf: -------------------------------------------------------------------------------- 1 | server { 2 | 3 | listen 80; 4 | server_name _; 5 | root /var/www/html/public; 6 | index index.php; 7 | 8 | error_log /dev/stdout info; 9 | access_log /dev/stdout; 10 | 11 | location / { 12 | if (-f $request_filename) { 13 | break; 14 | } 15 | if (!-e $request_filename) { 16 | rewrite ^(.+)$ /index.php?_url=$1 last; 17 | break; 18 | } 19 | } 20 | 21 | location ~ \.php$ { 22 | default_type text/html; 23 | try_files $uri =404; 24 | fastcgi_split_path_info ^(.+\.php)(/.+)$; 25 | fastcgi_pass unix:/run/php/php7.0-fpm.sock; 26 | fastcgi_index index.php; 27 | fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 28 | include fastcgi_params; 29 | fastcgi_param APPLICATION_ENV development; 30 | fastcgi_pass_header Authorization; 31 | } 32 | 33 | } -------------------------------------------------------------------------------- /docker/development/scripts/start.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | sed -i -e "s/memory_limit = 128M/memory_limit = 512M/" /etc/php/7.0/fpm/php.ini 4 | sed -i -e "s/memory_limit = 128M/memory_limit = 512M/" /etc/php/7.0/fpm/conf.d/php.ini 5 | echo '* Working around permission errors locally by making sure that "nginx" uses the same uid and gid as the host volume' 6 | TARGET_UID=$(stat -c "%u" /var/lib/nginx) 7 | echo '-- Setting nginx user to use uid '$TARGET_UID 8 | usermod -o -u $TARGET_UID nginx || true 9 | TARGET_GID=$(stat -c "%g" /var/lib/nginx) 10 | echo '-- Setting nginx group to use gid '$TARGET_GID 11 | groupmod -o -g $TARGET_GID nginx || true 12 | 13 | echo '-- Updating composer libraries' 14 | composer -d=/var/www/html install 15 | composer -d=/var/www/html update 16 | 17 | echo '* Starting nginx' 18 | /usr/bin/supervisord -n -c /etc/supervisord.conf 19 | -------------------------------------------------------------------------------- /docker/history/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM python:3.6.2-slim 2 | 3 | RUN apt-get update && \ 4 | apt-get install -y git make gcc libssl-dev libgmp-dev python-dev libxml2-dev libxslt1-dev zlib1g-dev 5 | 6 | RUN pip3 install steem pymongo apscheduler 7 | 8 | # COPY . /src 9 | 10 | CMD ["python", "/src/history.py"] 11 | -------------------------------------------------------------------------------- /docker/history/fix.py: -------------------------------------------------------------------------------- 1 | from datetime import datetime 2 | from pymongo import MongoClient 3 | from bson.objectid import ObjectId 4 | from pprint import pprint 5 | import collections 6 | import time 7 | import sys 8 | import os 9 | 10 | mongo = MongoClient("mongodb://mongo") 11 | db = mongo.steemdb 12 | 13 | if __name__ == '__main__': 14 | records = db.account_history.find({"account": {"$exists": False}}) 15 | for record in records: 16 | try: 17 | oldid = str(record['_id']) 18 | s1 = oldid[0:-9] 19 | s2 = datetime.strptime(oldid[-8:], "%Y%m%d") 20 | newDocument = record.copy() 21 | newDocument['date'] = s2 22 | newDocument['account'] = s1 23 | del newDocument['_id'] 24 | pprint("Adding new record for account " + newDocument['account']) 25 | pprint("Removing ID " + record['_id']) 26 | db.account_history.insert(newDocument) 27 | db.account_history.remove({'_id': record['_id']}) 28 | sys.stdout.flush() 29 | except OSError as err: 30 | print("OS error: {0}".format(err)) 31 | except ValueError: 32 | print("Could not convert data to an integer.") 33 | except: 34 | print("Unexpected error:", sys.exc_info()[0]) 35 | raise 36 | -------------------------------------------------------------------------------- /docker/history/steemdb_history.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=SteemDB.com History Service 3 | 4 | [Service] 5 | Environment=steemnode=node.steem.ws 6 | WorkingDirectory=/var/www/com_steemdb/docker/history 7 | ExecStart=/usr/bin/python3 history.py 8 | Restart=always 9 | 10 | [Install] 11 | WantedBy=multi-user.target 12 | -------------------------------------------------------------------------------- /docker/live/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM python:3.6.2-slim 2 | 3 | RUN apt-get update && \ 4 | apt-get install -y git make gcc libssl-dev libgmp-dev python-dev libxml2-dev libxslt1-dev zlib1g-dev 5 | 6 | RUN pip3 install steem pymongo autobahn 7 | 8 | RUN pip3 install twisted 9 | 10 | COPY . /src 11 | 12 | CMD ["python", "/src/live.py"] 13 | -------------------------------------------------------------------------------- /docker/live/steemdb_live.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=SteemDB.com Live Service 3 | 4 | [Service] 5 | Environment=steemnode=node.steem.ws 6 | WorkingDirectory=/var/www/com_steemdb/docker/live 7 | ExecStart=/usr/bin/python3 live.py 8 | Restart=always 9 | 10 | [Install] 11 | WantedBy=multi-user.target 12 | -------------------------------------------------------------------------------- /docker/production/conf/vhost.conf: -------------------------------------------------------------------------------- 1 | fastcgi_cache_path /etc/nginx/cache levels=1:2 keys_zone=steemdb:10m inactive=60m; 2 | fastcgi_cache_key "$scheme$request_method$host$request_uri"; 3 | add_header X-Cache $upstream_cache_status; 4 | 5 | server { 6 | 7 | listen 80; 8 | server_name _; 9 | root /var/www/com_steemdb/public; 10 | index index.php; 11 | 12 | error_log /var/log/nginx/steemdb.error.log; 13 | access_log /var/log/nginx/steemdb.access.log; 14 | 15 | location / { 16 | if (-f $request_filename) { 17 | break; 18 | } 19 | if (!-e $request_filename) { 20 | rewrite ^(.+)$ /index.php?_url=$1 last; 21 | break; 22 | } 23 | } 24 | 25 | location ~ \.php$ { 26 | 27 | default_type text/html; 28 | try_files $uri =404; 29 | fastcgi_split_path_info ^(.+\.php)(/.+)$; 30 | fastcgi_pass unix:/run/php/php7.0-fpm.sock; 31 | fastcgi_index index.php; 32 | fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 33 | include fastcgi_params; 34 | fastcgi_param APPLICATION_ENV production; 35 | fastcgi_pass_header Authorization; 36 | 37 | fastcgi_cache steemdb; 38 | fastcgi_cache_valid 200 5m; 39 | 40 | } 41 | 42 | } 43 | -------------------------------------------------------------------------------- /docker/sync/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM python:3.6.2-slim 2 | 3 | RUN apt-get update && apt-get install -y make gcc libssl-dev 4 | 5 | RUN pip3 install steem pymongo 6 | 7 | CMD ["python", "/src/sync.py"] 8 | -------------------------------------------------------------------------------- /docker/sync/steemdb_sync.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=SteemDB.com Sync Service 3 | 4 | [Service] 5 | Environment=steemnode=node.steem.ws 6 | WorkingDirectory=/var/www/com_steemdb/docker/sync 7 | ExecStart=/usr/bin/python3 sync.py 8 | Restart=always 9 | 10 | [Install] 11 | WantedBy=multi-user.target 12 | -------------------------------------------------------------------------------- /docker/witnesses/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM python:3.6.2-slim 2 | 3 | RUN apt-get update && \ 4 | apt-get install -y git make gcc libssl-dev libgmp-dev python-dev libxml2-dev libxslt1-dev zlib1g-dev 5 | 6 | RUN pip3 install steem apscheduler pymongo 7 | 8 | COPY . /src 9 | 10 | CMD ["python", "/src/witnesses.py"] 11 | -------------------------------------------------------------------------------- /docker/witnesses/steemdb_witnesses.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=SteemDB.com Witnesses Service 3 | 4 | [Service] 5 | Environment=steemnode=node.steem.ws 6 | WorkingDirectory=/var/www/com_steemdb/docker/witnesses 7 | ExecStart=/usr/bin/python3 witnesses.py 8 | Restart=always 9 | 10 | [Install] 11 | WantedBy=multi-user.target 12 | -------------------------------------------------------------------------------- /mongodb.md: -------------------------------------------------------------------------------- 1 | 2 | db.createCollection("block_30d", {capped: true, max: 864000, size: 2147483648}) 3 | 4 | 5 | db.comment.createIndex({parent_permlink: 1}) 6 | db.comment.createIndex({scanned: 1, created: 1}); 7 | db.comment.createIndex({depth: 1, created: 1}); 8 | db.comment.createIndex({author: 1, depth: 1, created: 1}); 9 | db.comment.createIndex({pending_payout_value: 1, mode: 1, cashout_time: 1, depth: 1}) 10 | 11 | db.comment.createIndex({ 12 | pending_payout_value: 1, 13 | cashout_time: 1 14 | }, {sparse: true}); 15 | 16 | db.block.createIndex({witness: 1, _ts: 1}) 17 | db.block_30d.createIndex({witness: 1, _ts: 1}) 18 | 19 | db.vote.createIndex({voter: 1, author: 1, _ts: 1}); 20 | db.vote.createIndex({voter: 1, _ts: 1}); 21 | 22 | db.account.createIndex({name: 1}); 23 | db.account.createIndex({created: 1}); 24 | db.account.createIndex({vesting_shares: 1}); 25 | db.account.createIndex({reputation: 1}); 26 | db.account.createIndex({post_count: 1}); 27 | db.account.createIndex({followers: 1}); 28 | db.account.createIndex({witness_votes: 1}); 29 | db.account.createIndex({name: 1, vesting_shares: 1}); 30 | 31 | db.account_history.createIndex({date: 1, name: 1}); 32 | 33 | 34 | db.follow.createIndex({follower: 1, following: 1, _block: 1}); 35 | 36 | db.comment.createIndex({depth: 1, category: 1, last_reply: 1}, {sparse: true}); 37 | 38 | db.curation_reward.createIndex({curator: 1}) 39 | db.curation_reward.createIndex({_ts: 1}, {background: true}) 40 | db.comment_diff.createIndex({author: 1, permlink: 1}) 41 | db.vote.createIndex({_ts: 1, weight: 1}, {background: true}); 42 | -------------------------------------------------------------------------------- /public/bower: -------------------------------------------------------------------------------- 1 | ../bower_components -------------------------------------------------------------------------------- /public/css/style.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaroncox/steemdb/d91d2ecee9b3ec5dcddcec84324d24e3f907cf39/public/css/style.css -------------------------------------------------------------------------------- /public/examples/quotedposts.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaroncox/steemdb/d91d2ecee9b3ec5dcddcec84324d24e3f907cf39/public/examples/quotedposts.gif -------------------------------------------------------------------------------- /public/examples/sidebar-stick.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaroncox/steemdb/d91d2ecee9b3ec5dcddcec84324d24e3f907cf39/public/examples/sidebar-stick.gif -------------------------------------------------------------------------------- /public/examples/steemdb-account-history-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaroncox/steemdb/d91d2ecee9b3ec5dcddcec84324d24e3f907cf39/public/examples/steemdb-account-history-2.png -------------------------------------------------------------------------------- /public/examples/steemdb-account-missed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaroncox/steemdb/d91d2ecee9b3ec5dcddcec84324d24e3f907cf39/public/examples/steemdb-account-missed.png -------------------------------------------------------------------------------- /public/examples/steemdb-account-navigation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaroncox/steemdb/d91d2ecee9b3ec5dcddcec84324d24e3f907cf39/public/examples/steemdb-account-navigation.png -------------------------------------------------------------------------------- /public/examples/steemdb-account-sidebar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaroncox/steemdb/d91d2ecee9b3ec5dcddcec84324d24e3f907cf39/public/examples/steemdb-account-sidebar.png -------------------------------------------------------------------------------- /public/examples/steemdb-account-viewer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaroncox/steemdb/d91d2ecee9b3ec5dcddcec84324d24e3f907cf39/public/examples/steemdb-account-viewer.png -------------------------------------------------------------------------------- /public/examples/steemdb-account-witness-chart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaroncox/steemdb/d91d2ecee9b3ec5dcddcec84324d24e3f907cf39/public/examples/steemdb-account-witness-chart.png -------------------------------------------------------------------------------- /public/examples/steemdb-authoring.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaroncox/steemdb/d91d2ecee9b3ec5dcddcec84324d24e3f907cf39/public/examples/steemdb-authoring.png -------------------------------------------------------------------------------- /public/examples/steemdb-chart-tooltips.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaroncox/steemdb/d91d2ecee9b3ec5dcddcec84324d24e3f907cf39/public/examples/steemdb-chart-tooltips.png -------------------------------------------------------------------------------- /public/examples/steemdb-curation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaroncox/steemdb/d91d2ecee9b3ec5dcddcec84324d24e3f907cf39/public/examples/steemdb-curation.png -------------------------------------------------------------------------------- /public/examples/steemdb-follower-history.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaroncox/steemdb/d91d2ecee9b3ec5dcddcec84324d24e3f907cf39/public/examples/steemdb-follower-history.png -------------------------------------------------------------------------------- /public/examples/steemdb-followers-weight.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaroncox/steemdb/d91d2ecee9b3ec5dcddcec84324d24e3f907cf39/public/examples/steemdb-followers-weight.png -------------------------------------------------------------------------------- /public/examples/steemdb-following-history.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaroncox/steemdb/d91d2ecee9b3ec5dcddcec84324d24e3f907cf39/public/examples/steemdb-following-history.png -------------------------------------------------------------------------------- /public/examples/steemdb-forums-forum.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaroncox/steemdb/d91d2ecee9b3ec5dcddcec84324d24e3f907cf39/public/examples/steemdb-forums-forum.png -------------------------------------------------------------------------------- /public/examples/steemdb-forums-home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaroncox/steemdb/d91d2ecee9b3ec5dcddcec84324d24e3f907cf39/public/examples/steemdb-forums-home.png -------------------------------------------------------------------------------- /public/examples/steemdb-forums-icons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaroncox/steemdb/d91d2ecee9b3ec5dcddcec84324d24e3f907cf39/public/examples/steemdb-forums-icons.png -------------------------------------------------------------------------------- /public/examples/steemdb-forums-post.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaroncox/steemdb/d91d2ecee9b3ec5dcddcec84324d24e3f907cf39/public/examples/steemdb-forums-post.png -------------------------------------------------------------------------------- /public/examples/steemdb-forums-quotes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaroncox/steemdb/d91d2ecee9b3ec5dcddcec84324d24e3f907cf39/public/examples/steemdb-forums-quotes.png -------------------------------------------------------------------------------- /public/examples/steemdb-forums-summary.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaroncox/steemdb/d91d2ecee9b3ec5dcddcec84324d24e3f907cf39/public/examples/steemdb-forums-summary.png -------------------------------------------------------------------------------- /public/examples/steemdb-forums-threads.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaroncox/steemdb/d91d2ecee9b3ec5dcddcec84324d24e3f907cf39/public/examples/steemdb-forums-threads.png -------------------------------------------------------------------------------- /public/examples/steemdb-labs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaroncox/steemdb/d91d2ecee9b3ec5dcddcec84324d24e3f907cf39/public/examples/steemdb-labs.png -------------------------------------------------------------------------------- /public/examples/steemdb-leaderboard-author.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaroncox/steemdb/d91d2ecee9b3ec5dcddcec84324d24e3f907cf39/public/examples/steemdb-leaderboard-author.png -------------------------------------------------------------------------------- /public/examples/steemdb-leaderboard-curation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaroncox/steemdb/d91d2ecee9b3ec5dcddcec84324d24e3f907cf39/public/examples/steemdb-leaderboard-curation.png -------------------------------------------------------------------------------- /public/examples/steemdb-newmenuitems.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaroncox/steemdb/d91d2ecee9b3ec5dcddcec84324d24e3f907cf39/public/examples/steemdb-newmenuitems.png -------------------------------------------------------------------------------- /public/examples/steemdb-pagination.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaroncox/steemdb/d91d2ecee9b3ec5dcddcec84324d24e3f907cf39/public/examples/steemdb-pagination.png -------------------------------------------------------------------------------- /public/examples/steemdb-post-viewer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaroncox/steemdb/d91d2ecee9b3ec5dcddcec84324d24e3f907cf39/public/examples/steemdb-post-viewer.png -------------------------------------------------------------------------------- /public/examples/steemdb-posts-by-date.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaroncox/steemdb/d91d2ecee9b3ec5dcddcec84324d24e3f907cf39/public/examples/steemdb-posts-by-date.png -------------------------------------------------------------------------------- /public/examples/steemdb-posts-by-tag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaroncox/steemdb/d91d2ecee9b3ec5dcddcec84324d24e3f907cf39/public/examples/steemdb-posts-by-tag.png -------------------------------------------------------------------------------- /public/examples/steemdb-powerdown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaroncox/steemdb/d91d2ecee9b3ec5dcddcec84324d24e3f907cf39/public/examples/steemdb-powerdown.png -------------------------------------------------------------------------------- /public/examples/steemdb-powerup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaroncox/steemdb/d91d2ecee9b3ec5dcddcec84324d24e3f907cf39/public/examples/steemdb-powerup.png -------------------------------------------------------------------------------- /public/examples/steemdb-reblogged.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaroncox/steemdb/d91d2ecee9b3ec5dcddcec84324d24e3f907cf39/public/examples/steemdb-reblogged.png -------------------------------------------------------------------------------- /public/examples/steemdb-reblogs.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaroncox/steemdb/d91d2ecee9b3ec5dcddcec84324d24e3f907cf39/public/examples/steemdb-reblogs.png -------------------------------------------------------------------------------- /public/examples/steemdb-richlist.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaroncox/steemdb/d91d2ecee9b3ec5dcddcec84324d24e3f907cf39/public/examples/steemdb-richlist.png -------------------------------------------------------------------------------- /public/examples/steemdb-rshares-explore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaroncox/steemdb/d91d2ecee9b3ec5dcddcec84324d24e3f907cf39/public/examples/steemdb-rshares-explore.png -------------------------------------------------------------------------------- /public/examples/steemdb-transfers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaroncox/steemdb/d91d2ecee9b3ec5dcddcec84324d24e3f907cf39/public/examples/steemdb-transfers.png -------------------------------------------------------------------------------- /public/examples/steemdb-witness-misses.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaroncox/steemdb/d91d2ecee9b3ec5dcddcec84324d24e3f907cf39/public/examples/steemdb-witness-misses.png -------------------------------------------------------------------------------- /public/examples/steemdb-witness-vote-history.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaroncox/steemdb/d91d2ecee9b3ec5dcddcec84324d24e3f907cf39/public/examples/steemdb-witness-vote-history.png -------------------------------------------------------------------------------- /public/examples/steemdb-witnesses.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaroncox/steemdb/d91d2ecee9b3ec5dcddcec84324d24e3f907cf39/public/examples/steemdb-witnesses.png -------------------------------------------------------------------------------- /public/explorers/dct.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaroncox/steemdb/d91d2ecee9b3ec5dcddcec84324d24e3f907cf39/public/explorers/dct.png -------------------------------------------------------------------------------- /public/explorers/golos.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaroncox/steemdb/d91d2ecee9b3ec5dcddcec84324d24e3f907cf39/public/explorers/golos.jpg -------------------------------------------------------------------------------- /public/explorers/krm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaroncox/steemdb/d91d2ecee9b3ec5dcddcec84324d24e3f907cf39/public/explorers/krm.png -------------------------------------------------------------------------------- /public/explorers/muse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaroncox/steemdb/d91d2ecee9b3ec5dcddcec84324d24e3f907cf39/public/explorers/muse.png -------------------------------------------------------------------------------- /public/explorers/ppy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaroncox/steemdb/d91d2ecee9b3ec5dcddcec84324d24e3f907cf39/public/explorers/ppy.png -------------------------------------------------------------------------------- /public/explorers/soundac.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaroncox/steemdb/d91d2ecee9b3ec5dcddcec84324d24e3f907cf39/public/explorers/soundac.png -------------------------------------------------------------------------------- /public/explorers/steem.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/aaroncox/steemdb/d91d2ecee9b3ec5dcddcec84324d24e3f907cf39/public/explorers/steem.png -------------------------------------------------------------------------------- /public/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Disallow: / 3 | --------------------------------------------------------------------------------