Development
This section of the wiki aims to help document the development work done related to the Ravencoin network.
Open weekly or fortnightly dev chats are live and available on Discord - #development-meetings
Archive of the dev chat of the 10th Aug 2018 on Reddit https://www.reddit.com/r/Ravencoin/comments/96at36/irc_log_from_ravencoin_open_developer_meeting_aug/
Contents
- 1 Ravencoin platform development
- 2 Using the Ravencoin platform
- 3 Testnet
- 4 Bug bounty
- 5 Community Projects
Ravencoin platform development
Currently organized and based on Tron his talk at the Ravencoin NH meetup (October 11, 2018): [1]
Developer meetings can be found on the freenode IRC network #ravencoin-dev, on the Ravencoin Community discord server #development-meetings channel (https://discord.gg/jn6uhur), and the Raven discord #dev-irc channel (https://discord.gg/uh6PrWh).
Phase 1 - Ravencoin launch & mining algorithm - April 3rd, 2018
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.
Summarized 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.
Dark Gravity Wave - Aug 20th, 2018
Ravencoin forked to include the Dark Gravity Wave difficulty adjustment to protect itself against hash rate attacks. The problem and solution to the problem was explained here.
Phase 2&4 - Assets, Subassets & Unique assets - Nov 5th, 2018
Asset FAQ written by Tron on Medium
Asset info for Main Net
Assets (cost 500 RVN):
- Burn address: https://ravencoin.network/address/RXissueAssetXXXXXXXXXXXXXXXXXhhZGt
- Token name - Must be unique
- Number of tokens - From 1 to 21 billion
- How divisible? - From not divisible to 8 decimal places (0.00000001)
- Reissuable (yes/no)
- Include meta-data (agreement, company, contact, etc)
Subassets (cost 100 RVN):
- Burn address: https://ravencoin.network/address/RXissueSubAssetXXXXXXXXXXXXXWcwhwL
- Token name - Must be unique when combined with token
- Number of tokens - From 1 to 21 billion
- How divisible? - From not divisible to 8 decimal places (0.00000001)
- Reissuable (yes/no)
Unique Assets (cost 5 RVN) - create one-of-a-kind assets:
- Burn address: https://ravencoin.network/address/RXissueUniqueAssetXXXXXXXXXXWEAe58
- ART#VenusDeMilo
- CAR#<VIN number>
- COOLGAME#SwordOfThor
Reissuing an Asset (cost 100 RVN):
- Burn address: https://ravencoin.network/address/RXReissueAssetXXXXXXXXXXXXXXVEFAWu
- Reissuing an asset lets you issue more, change decimal places, change ipfs hash, and/or change reissuability.
Global burn address
If you want to get rid of for example assets you do not want. You can send them to a global burn address:
https://ravencoin.network/address/RXBurnXXXXXXXXXXXXXXXXXXXXXXWUo9FV
Phase 3 - Dividends/Rewards
Pay your token holders in RVN. Turn your profits into RVN and send out to all holders of your token by percentage held.
Dividend 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 (i.e., a soft fork).
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 5 - Messaging
Details by Tron black here: Ravencoin — KAAAWWW!.
Broadcast a message to all of your token holders.
- Messaging will support IPFS.
- Send information about your token.
- Send alerts relevant to your project.
- Send information about a shareholder vote.
- Use Raven messaging for other systems.
Phase 6 - Voting
Issue a special vote token to every holder of your token.
- Send to <address X> to vote for X proposal
- Send to <address Y> to vote for Y proposal
Second tier web voting can be built on top of this protocol.
Phase 7 - Compatible Mode
Allows newly created assets to appear exactly like RVN, LTC, or Bitcoin for easy integration into exchanges, wallets, explorers, etc. This speeds adoption into the larger crypto ecosystem.
Using the Ravencoin platform
Dev Kit
The Ravencoin Dev Kit is available and maintained at https://github.com/RavenDevKit. The dev kit contains e.g.,
- A JavaScript Ravencoin library,
- An Extensible full node,
- A full stack for Ravencoin blockchain-based applications,
- A Ravencoin blockchain explorer UI,
- A Ravencoin blockchain API for web wallets,
- Ravencoin Message Verification and Signing for Ravencore,
- Interface to the bitcoin P2P network for Ravencore,
- Tools for running a local Ravencore development node,
- Website for https://ravencoin.com,
- A client library to connect to Ravencoin RPC in JavaScript,
- Debian packaging for Ravencore,
- A helper to add tasks to gulp,
- x16r library for Ravencore,
- Treat a collection of Buffers as a single contiguous partially mutable Buffer.
Asset control
Current commands are as of v2.2.0. Be sure to check the QT wallet on github for up to date commands
issue (asset_name, qty, to_address, change_address, units, reissuable, has_ipfs, ipfs_hash)
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.
issueunique (root_name, asset_tags, ipfs_hash, to_address, change_address)
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.
reissue (reissue asset_name, qty, to_address, change_address, reissuable, new_unit, new_ipfs )
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.
transfer (asset_name, qty, to_address)
This sends assets from one asset holder to another.
listassets (assets, verbose, count, start)
This lists assets that have already been created.
listmyassets ( asset, verbose, count, start )
Lists your assets.
listassetbalancesbyaddress (address)
Lists asset balance by address.
listaddressesbyasset (asset_name)
Lists addresses by asset.
getassetdata (asset_name)
Lists asset data of an asset.
Detailed Asset Support
General
The Ravencoin network consists of nodes communicating on port 8767.
The asset information is available by request on the network. Specify a list of asset names to request information about each asset. Requests for information on up to 512 assets can be made per request. Return messages will be sent separately. Asset not found information may be grouped together for optimization.
Information about each asset is important for:
- Asset creation because assets must be unique
- Asset display because the asset information contains the number of decimal places to display.
- Asset meta-data display - Requires the IPFS hash to show additional information about the asset.
- Asset re-issue status to prevent reissuance attempts on a locked asset.
- Asset qty issued to prevent reissuance attempts on a fully issued (21 billion) asset.
There are three networks:
Mainnet which uses a network identifier RAVN
Testnet which uses a network identifier RVNT
RegTest which uses a network identifier CROW
An additional command has been added to the network for asset support. This can be used by SPV nodes to get information about assets without interacting with a centralized API or a Remote Procedure Call.
Network call getassetdata()
The following is the specification for this new network call - available starting with network version 70018
Example 1: Request for asset name that doesn't exist
Request -> getassetdata HEADER: 43524f5767657461737365746461746110000000571db430 DATA: 010e4241445f41535345545f4e414d45 Data Breakdown: 01 - Varint size of the vector 0e - Size of element = e.g. 14 Bytes 4241445f41535345545f4e414d45 - Name of asset = e.g. "BAD_ASSET_NAME" -------------------------------------------------------------------- Response -> asstnotfound HEADER: 43524f57617373746e6f74666f756e6410000000571db430 DATA: 010e4241445f41535345545f4e414d45 Data Breakdown: 01 - Varint size of the vector Oe - Size of element = e.g. 14 Bytes 4241445f41535345545f4e414d45 - Name of asset = e.g. "BAD_ASSET_NAME"
Example 2: Request for asset name that does exist, and an asset that doesn't exist
Request -> getassetdata HEADER: 43524f576765746173736574646174611d0000004a54c291 DATA: 020c41535345545f4a4552454d590e4241445f41535345545f4e414d45 Data Breakdown: 02 - Varint size of the vector 0c - Size of element = e.g. 12 Bytes 41535345545f4a4552454d59 - Name of asset = e.g. "ASSET_JEREMY" 0e - Size of element = e.g. 14 Bytes 4241445f41535345545f4e414d45 - Name of asset = e.g. "BAD_ASSET_NAME" -------------------------------------------------------------------- First Response -> assetdata HEADER: 43524f576173736574646174610000001d000000200a58aa DATA: 0c41535345545f4a4552454d5900e1f50500000000 00010000f5010000 Data Breakdown: 0c - Size of name = e.g. 12 Bytes 41535345545f4a4552454d59 - Name of asset = e.g. "ASSET_JEREMY" 00e1f50500000000 - Amount = e.g. 100000000 00 - Units = e.g. 0 01 - Reissuable = e.g. 1 00 - hasIPFS = e.g. 0 00 - Size of IPFS hash f5010000 - Block height Second Response -> asstnotfound HEADER: 43524f57617373746e6f74666f756e6410000000571db430 DATA: 010e4241445f41535345545f4e414d45 Data Breakdown: 01 - Varint size of the vector Oe - Size of element = e.g. 14 Bytes 4241445f41535345545f4e414d45 - Name of asset = e.g. "BAD_ASSET_NAME"
Examples 3: Request for asset name that contains an IPFS HASH
Request -> getassetdata HEADER: 43524f5767657461737365746461746118000000e6218523 DATA: 011641535345545f4a4552454d595f574954485f49504653 Data Breakdown: 01 - Varint size of the vector 16 - Size of element = e.g. 22 Bytes 41535345545f4a4552454d595f574954485f49504653 - Name of asset = e.g. "ASSET_JEREMY_WITH_IPFS" -------------------------------------------------------------------- Response -> assetdata HEADER: 43524f5761737365746461746100000049000000cb345766 DATA: 1641535345545f4a4552454d595f574954485f4950465300e1f50500000000000101221220da203afd5eda1f45deeafb70ae9d5c15907cd32ec2cd747c641fc1e9ab55b8e8f6010000 Data Breakdown: 16 - Size of name = e.g. 22 Bytes 41535345545f4a4552454d595f574954485f49504653 - Name of asset = e.g. "ASSET_JEREMY_WITH_IPFS" 00e1f50500000000 - Amount = e.g. 100000000 00 - Units = e.g. 0 01 - Reissuable = e.g. 1 01 - hasIPFS = e.g. 0 22 - Size of IPFS hash - 34 Bytes 1220da203afd5eda1f45deeafb70ae9d5c15907cd32ec2cd747c641fc1e9ab55b8e8 - IPFS hash data f6010000 - Block height
IPFS - InterPlanetary File System
You can add a document to an asset as metadata for any purpose, such as instructions, a low-res image of a piece of art that is represented by the token, your website, etc. Messaging will also support IPFS.
Currently, there is not (yet) IPFS support directly in the Raven wallet. However, you can upload content to e.g., https://globalupload.io/ and add the hash of the content to the asset that you are creating.
Other documentation
Atomic swaps: https://github.com/RavenProject/Ravencoin/blob/master/doc/atomicswaps.md
Issue assets in bulk: https://github.com/RavenProject/Ravencoin/tree/master/assets/tools
Testnet
This testnet network will be a completely independent secondary blockchain for testing purposes only, in which all tokens will have no intrinsic value and will not be traded on exchanges. The purpose of a testnet is to test features and functionality before introducing those features and functionality to the main blockchain. It is a playground to experiment and test different features with almost no cost to transact or mine blocks. During this testing phase, the Ravencoin blockchain itself will continue to maintain the same operation and functionality it has today.
To run your current wallet in testnet mode (Windows):
- First shutdown your current full client wallet.
- Create a shortcut to your raven-qt.exe
- Right click the shortcut, choose details and add '-testnet' to the target field. Example:
"C:\Users\<username>\Path\to\executable\raven-qt.exe" –testnet
- Open the wallet by clicking on the shortcut you just made, and let the blockchain sync fully
Read this section carefully: BE SAFE AND DON'T CONFUSE YOUR MAINNET WALLET WITH THE TESTNET WALLET! |
---|
Don't worry, this will not interfere with your regular Raven wallet, just make sure both wallets are not running at the same time. For those who are technically inclined, running in testnet mode does not overwrite any of the blockchain data or wallet files of Ravencoin’s main network. Instead, it will create a subfolder named testnet3 inside your data folder where all testnet related data and wallets reside.
If you would prefer to err on the side of caution, consider running your testnet wallet on a different computer. |
If you have additional questions about testnet, please see this subreddit thread or the #testnet channel in Discord.
There are currently a couple of tools available to assist you with testnet testing.
- A fully functional block explorer for testnet Ravencoin is available at https://testnet.ravencoin.network/.
- A faucet which will issue you 5000 free testnet Ravencoin per click, is also at https://testnet.ravencoin.network/ or http://ravencoin.asset-explorer.net/faucet
- A testnet version of the Pocket Raven Web Wallet is at https://testnet.pocketraven.com/
- You can GPU mine for testnet RVN on MinerMore's testnet pool at https://minermore.com/pool/RVNt/
Testnet Technical Information: Technical Information
Bug bounty
There is a 100k RVN bug bounty available if you can find bugs that fork the chain.
And here is an example of a bug found that got paid a bounty - happy bug hunting!
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.