Hive Developers logo

Hive Developer Portal

Submit Comment Reply

How to post a simple comment to Hive.

Full, runnable src of Submit Comment Reply can be downloaded as part of: tutorials/ruby (or download just this tutorial: devportal-master-tutorials-ruby-11_submit_comment_reply.zip).

Intro

This example will broadcast a reply to the blockchain using the values provided. To create a post in ruby, we will use a Radiator::Transaction containing a comment operation, which is how all content is stored internally.

A reply is differentiated from a post by whether or not a parent_author exists. When there is no parent_author, then it’s a post, otherwise it’s a comment (like in this example).

Also see:

Script

submit_comment_reply.rb

You should change wif to the posting key that matches your author. This script will pass along the values as a comment operation:

Final code:

require 'rubygems'
require 'bundler/setup'

Bundler.require

options = {
  url: 'https://testnet.openhive.network',
  wif: '5JrvPrQeBBvCRdjv29iDvkwn3EQYZ9jqfAHzrCyUvfbEbRkrYFC'
}
tx = Radiator::Transaction.new(options)

tags = %w(tag1)
metadata = {
  tags: tags
}

tx.operations << {
  type: :comment,
  author: 'social',
  permlink: 'test-post-reply',
  parent_author: 'social',
  parent_permlink: 'test-post',
  title: '',
  body: 'Reply',
  json_metadata: metadata.to_json
}

response = tx.process(true)

if !!response.error
  puts response.error.message
else
  puts JSON.pretty_generate response
end

To Run

First, set up your workstation using the steps provided in Getting Started. Then you can create and execute the script (or clone from this repository):

You can launch a local testnet, with port 8090 mapped locally to the docker container:

docker run -d -p 8090:8090 inertia/tintoy:latest

For details on running a local testnet, see: Setting Up a Testnet

git clone https://gitlab.syncad.com/hive/devportal.git
cd devportal/tutorials/ruby/11_submit_comment_reply
bundle install
ruby submit_comment_reply.rb

Example Output

{
  "jsonrpc": "2.0",
  "result": {
    "id": "3fef14cac921e9baa7b31e43245e5380f3fb4332",
    "block_num": 23355115,
    "trx_num": 13,
    "expired": false
  },
  "id": 3
}

The response we get after broadcasting the transaction gives us the transaction id (3fef14c...), block number (22867626), and the transaction number of that block (13).

Error Handling

We’re checking the result for error in case the remote node has an issue to raise. Normally, it will be nil, but if it’s populated, output error.message and exit.