rpc

package module
v0.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 7, 2016 License: MIT Imports: 2 Imported by: 0

README

go-steem/rpc

GoDoc

Golang RPC client library for Steem.

Compatibility

steemd 0.8.0

Usage

  1. import "github.com/go-steem/rpc"
  2. Use rpc.Dial to get the RPC client.
  3. PROFIT!

Example

This is just a code snippet. Please check the examples directory for more complete and ready to use examples.

// Instantiate a new client.
client, _ := rpc.Dial("ws://localhost:8090")
defer client.Close()

// Call "get_config".
config, _ := client.GetConfig()

// Start processing blocks.
lastBlock := 1800000
for {
	// Call "get_dynamic_global_properties".
	props, _ := client.GetDynamicGlobalProperties()

	for props.LastIrreversibleBlockNum-lastBlock > 0 {
		// Call "get_block".
		block, _ := client.GetBlock(lastBlock)

		// Process the transactions.
		for _, tx := range block.Transactions {
			for _, op := range tx.Operations {
				switch body := op.Body.(type) {
					// Comment operation.
					case *rpc.CommentOperation:
						content, _ := client.GetContent(body.Author, body.Permlink)
						fmt.Printf("COMMENT @%v %v\n", content.Author, content.URL)

					// Vote operation.
					case *rpc.VoteOperation:
						fmt.Printf("VOTE @%v @%v/%v\n", body.Voter, body.Author, body.Permlink)

					// You can add more cases, it depends on what
					// operations you actually need to process.
				}
			}
		}

		lastBlock++
	}

	time.Sleep(time.Duration(config.SteemitBlockInterval) * time.Second)
}

Package Organisation

Once you create a Client object, you can start calling the methods exported via steemd's RPC endpoint by invoking associated methods on the client object. It is enough to just turn the method names into CamelCase, e.g. get_config becomes Client.GetConfig.

There are two methods implemented for the Client object for every method exported via the RPC endpoint. The regular version and the raw version. Let's see an example for get_config:

func (client *Client) GetConfig() (*Config, error) {
	...
}

func (client *Client) GetConfigRaw() (*json.RawMessage, error) {
	...
}

As we can see, the difference is that the raw version returns *json.RawMessage, so it is not trying to unmarshall the response into a properly typed response.

There are two reasons for this:

  1. To be able to see raw data.
  2. To be able to call most of the remote methods even though the response object is not yet known or specified.

It is already benefitial to just have the raw version because at least the method parameters are statically typed.

Status

This package is still under rapid development and it is by no means complete. For now there is no promise considering API stability. Some response objects maybe be typed incorrectly. The package is already usable, though. See the examples directory.

The following subsections document the API completion. The method names are taken from database_api.hpp in steemit/steem.

TODO: Verify that these are actually the methods available over RPC :D

Subscriptions

TODO: Is this actually callable over the RPC endpoint? It is a bit confusing to see set_ prefix. Needs research.

   (set_subscribe_callback)
   (set_pending_transaction_callback)
   (set_block_applied_callback)
   (cancel_all_subscriptions)
Tags
Method Name Raw Version Full Version
get_trending_tags DONE
get_discussions_by_trending DONE
get_discussions_by_created DONE
get_discussions_by_active DONE
get_discussions_by_cashout DONE
get_discussions_by_payout DONE
get_discussions_by_votes DONE
get_discussions_by_children DONE
get_discussions_by_hot DONE
get_recommended_for DONE
Blocks and Transactions
Method Name Raw Version Full Version
get_block_header DONE
get_block DONE PARTIALLY DONE
get_state DONE
get_trending_categories DONE
get_best_categories DONE
get_active_categories DONE
get_recent_categories DONE
Globals
Method Name Raw Version Full Version
get_config DONE PARTIALLY DONE
get_dynamic_global_properties DONE DONE
get_chain_properties DONE
get_feed_history DONE
get_current_median_history_price DONE
get_witness_schedule DONE
get_hardfork_version DONE DONE
get_next_scheduled_hardfork DONE
Keys
Method Name Raw Version Full Version
get_key_reference
Accounts
Method Name Raw Version Full Version
get_accounts DONE
get_account_references
lookup_account_names DONE
lookup_accounts DONE
get_account_count DONE
get_conversation_requests DONE
get_account_history DONE
Market
Method Name Raw Version Full Version
get_order_book
get_open_orders
Authority / Validation
Method Name Raw Version Full Version
get_transaction_hex
get_transaction
get_required_signatures
get_potential_signatures
verify_authority
verity_account_authority
Votes
Method Name Raw Version Full Version
get_active_votes DONE
get_account_votes DONE
Cotent
Method Name Raw Version Full Version
get_content DONE PARTIALLY DONE
get_content_replies DONE PARTIALLY DONE
get_discussions_by_author_before_date
get_replies_by_last_update DONE
Witnesses
Method Name Raw Version Full Version
get_witnesses
get_witness_by_account
get_witnesses_by_vote
lookup_witness_accounts
get_witness_count
get_active_witnesses
get_miner_queue

License

MIT, see the LICENSE file.

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Client

type Client struct {

	// Database represents database_api.
	Database *database.API
	// contains filtered or unexported fields
}

Client can be used to access Steem remote APIs.

There is a public field for every Steem API available, e.g. Client.Database corresponds to database_api.

func NewClient added in v0.2.0

func NewClient(cc interfaces.CallCloser) *Client

NewClient creates a new RPC client that use the given CallCloser internally.

func (*Client) Close

func (client *Client) Close() error

Close should be used to close the client when no longer needed. It simply calls Close() on the underlying CallCloser.

Directories

Path Synopsis
apis
examples
internal
transports

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL