Development

From Ravencoin Wiki
Revision as of 21:19, 11 October 2018 by Jeroz (talk | contribs) (→‎Core Code)
Jump to navigationJump to search


This section of the wiki aims to help document the development work done related to the Ravencoin network.

Future dev chats will be available on discord - #irc-ravencoin-dev

Historic dev chats on IRC, now moved to Discord.

Open weekly or fortnightly dev chat on IRC check https://www.ravencointalk.org/post/ravencoin-open-developer-meeting-9816968?pid=1305079154

IRC: https://webchat.freenode.net/?channels=ravencoin-dev

Archive of the conversation on the 10th Aug 2018 on Reddit https://www.reddit.com/r/Ravencoin/comments/96at36/irc_log_from_ravencoin_open_developer_meeting_aug/


Ravencoin protocol development

Currently organized into the phases of the roadmap - this structure will probably change as the project matures.

Phase 1

In addition to the X16R algorithm, most of the core code changes are in the chainparams file.

The details are broken down on the wiki page: Chainparams.

If you are looking to port existing Bitcoin applications to include Ravencoin - there are some useful parameters available from work done in the Ledger integration code on GitHub.

Summarised on the wiki page: Ledger integration

If you are looking for typical parameters needed for wallet integration - there is a summary on the Wallet integration page.

It's worth mentioning, whilst we all try to keep these pages up to date, the RavenProject code on GitHub could change and these pages could become out of sync. Please validate on https://github.com/RavenProject/Ravencoin.

Phase 2 - Assets

Asset testnet live. Check testnet for more details, and Testnet-technical for details about the anatomy of a Ravencoin asset transaction script.

Asset FAQ written by Tron on Medium https://medium.com/@tronblack/ravencoin-asset-faq-e0d04d460e9b

(20 Aug 2018) In addition to asset functionality being on available to test on testnet - Ravencoin is forking to include Dark Gravity Wave to protect itself against hash rate attacks - exchanges and mining pools need to upgrade as soon as possible to the latest wallet release, users as soon as they want to use their coins. Forks_and_updates

Phase 3

Rewards

@Tron on discord: Divided support can be done without modifying the protocol. We can add it to a version of the software that can be used by the payer, without requiring others to upgrade. So we did phase 1,2,4


If you require this functionality ask in #dev channel on discord as there is a python script to get owners of assets, and someone could write code to loop through owners paying to their address.

Phase 4

Unique assets

Complete part of 2.1 release - being tested at time of writing.

Phase 5

Messaging

Phase 6

Voting


Appendix

From the roadmap document - RPC commands for working with assets:

issue(to_address, asset_name, qty, units=1, reissuable=false)

Issue an asset with unique name. Unit as 1 for whole units, or 0.00000001 for satoshi-like units. Qty should be whole number. Reissuable is true/false for whether additional units can be issued by the original issuer.

issuefrom(from_address, to_address, qty, units, units=1, reissuable=false)

Issue an asset with unique name from a specific address -- allows control of which address/private_key is used to issue the asset. Unit as 1 for whole units, or 0.00000001 for satoshi-like units. Qty should be whole number. Reissuable is true/false for whether additional units can be issued by the original issuer.

issuemore(to_address, asset_name, qty)

Issue more of a specific asset. This is only allowed by the original issuer of the asset and if the reissuable flag was set to true at the time of original issuance.

makeuniqueasset(address, asset_name, unique_id)

Creates a unique asset from a pool of assets with a specific name. Example: If the asset name is SOFTLICENSE, then this could make unique assets like SOFTLICENSE:38293 and SOFTLICENSE:48382 This would be called once per unique asset needed.

listassets(assets=*, verbose=false, count=MAX, start=0)

This lists assets that have already been created. It does not distinguish unique assets.

listuniqueassets(asset)

This lists the assets that have been made unique, and the address that owns the asset.

sendasset(to_address, asset, amount)

This sends assets from one asset holder to another.

sendassetfrom(from_address, to_address, asset, amount)

This sends asset from one asset holder to another, but allows specifying which address to send from, so that if a wallet that has multiple addresses holding a given asset, the send can disambiguate the address from which to send.

getassettransaction(asset, txid)

This returns details for a specific asset transaction.

listassettransactions(asset, verbose=false, count=100, start=0)

This returns a list of transactions for a given asset.

reward(from_address, asset, amount, except=[])

Sends RVN to holders of the the specified asset. The Raven is split pro-rata to holders of the asset. Any remainder that cannot be evenly divided to the satoshi (1/100,000,000 RVN) level will be added to the mining fee. ​except​ is a list of addresses to exclude from the distribution - used so that you could exclude treasury shares that do not participate in the reward.

send_asset(from_address, from_asset, to_asset, amount, except=[])

Sends an asset to holders of the the specified to_asset. This can be used to send a voting token to holders of an asset. Combined with a messaging protocol explaining the vote, it could act as a distributed voting system.

Community Projects

Brianmct RavenNodes - forked from Bitnodes - project to show all the active Ravencoin nodes

RavencoinRPC-PHP - PHP RPC API for communicating with the Ravencoin Network.

Underdarkskies - various projects including an extended RPC version of Ravencoin.