Getting Started
From Burstcoin security to wallet selection, the Getting Started guide provides the information needed to succeed.
Software
The definitive collection of open-source and easy to use software is located in the Burstcoin Software Library.
Documentation
Visit the Burstcoin Documentation Project for more information. Contribute new documentation or recommend improvements.
Faucets
Activate a new wallet for mining or to receive a transfer from Bittrex. Visit the Burstcoin Community Faucet list.
FAQs
Supporting new users, this section contains Frequently Asked Questions. Help curate by visiting the documentation section.
Burstcoin Core Features
Burstcoin’s core features are the distinct and extensible sections of it code base upon which real world applications can be built. While each has stand alone functionality, their full potential lies in the real world applications that can be built upon the collection. Expand sections below for documentation of each core feature.
Alias System
The Burstcoin alias system is an open-ended feature that provides a basis for any system that requires mapping or translating alphanumeric text into any string of Latin-character numbers and letters. For example, it could be used as the basis for a decentralized DNS system, an online shopping cart application, etc. It essentially allows one piece of text to be substituted for another so that keywords or passphrases can be used to represent other things – names, telephone numbers, physical addresses, web sites, account numbers, email addresses, product SKU codes, etc. A simple application would be to create easy-to-remember aliases for Burstcoin account numbers.
There are 2 main ways to use Burstcoin aliases without relying on third-party browser plugins.
- Server-side: A web server analyzes the Burstcoin blockchain and replaces “burst-links” with corresponding addresses before sending HTML documents to users.
- Client-side: A web browser runs JavaScript code that connects to Burstcoin bootstrapping nodes and replaces “burst-links” with their addresses. This requires embedding a small script which is executed in an “on-load” event. The script will use CORS, JSON, and other techniques.
Creating
- To create an alias, send a transaction that states “This Text = That Text”. Use the ‘Aliases’ menu and click ‘Register Alias’.
- To change an alias, send another transaction with a new definition. Use the ‘Aliases’ menu and click ‘Edit’. Only the account that created an alias can change it.
Registering
- Click on ‘Register Alias’ in the upper right corner.
- Select the ‘Type’: “URI”, “Account” or “Other”.
- In the ‘Alias’ field, enter the name without blank spaces.
- Depending on the selected ‘Type’, the text input field is named ‘URI’, ‘Account ID’ or ‘Data’. The ‘Data’ field can contain any text. The maximum length is 1,000 bytes.
- Enter your ‘Passphrase’ and click ‘Register’. It is listed in italics on the page.
- After the network has processed your message, it will be listed in normal font.
Editing
- Click on ‘Edit’ behind the alias you want to change.
- You can modify the ‘Type’ and ‘Data’, but you can not rename the ‘Alias’.
- Enter your ‘Passphrase’ and click ‘Update’.
Transferring
An alias can be transferred for the minimum Burstcoin fee.
- Click on the ‘Transfer’ button behind the alias to be transferred.
- Enter the ‘Recipient’ account id and a message (optional).
- Enter your ‘Passphrase’ and click ‘Transfer Alias’.
Selling
Aliases can be sold to specific Burstcoin accounts or to the general public. When selling aliases, the prices can be set individually.
- Click on ‘Sell’ behind the alias to be sold.
- You can sell it to a specific user or offer it on the Burstcoin network.
- Enter the price and the corresponding data.
- Confirm with your passphrase and click on ‘Sell Alias’.
Figure 1: Example of the wallet interface for procedures working with aliases.
Asset Exchange
The Burstcoin asset exchange builds upon the concept of colored coins, a class of methods for representing and managing real-world assets on top of a blockchain. A particular coin can be colored with the designation of assets such as property, stocks, bonds, shares, or even intellectual property. The asset exchange is particularly useful for exchanging digital assets and can be used to trade almost anything of value without relying on agencies or other organizations. The Burstcoin blockchain is immutable, impossible to counterfeit, and transparent. These strengths make it a trustworthy record of transactions.
Assets listed on the asset exchange are liquid by nature. They can be easily purchased, resold, or traded. Applying standard business analysis in evaluating the offerings can lead to capital growth for investors while providing the necessary capital for startups or growing businesses. In addition to share price increases, other potential ways that creators of assets can reward investors is through dividends and distributions of net profits.
Using the Burstcoin asset exchange is inherently simple. Below you will find the information necessary for using all of the important asset exchange features.
Example:
I want to run a business. I issue an asset (let’s call it ABCD). I set the quantity to 1000. I announce that I will sell ABCD for 20 Burstcoin each and will pay 5 BURST of monthly interest within the next six months. I create an ask order — 1000 ABCD for 20,000 Burstcoin.
You create a transaction that sends me 500 Burstcoin for 25 ABCD. It’s up to you what you do with your 25 ABCD. You could place an ask order and sell them for 27 BURST realizing a profit. Regardless, each month I will check the blockchain to see who owns ABCD. I will send each current owner 5 Burstcoin for each ABCD that they hold.
Wallet Interface
The asset exchange is accessible within the Burstcoin wallet. If your wallet was installed using QBundle you need only to start the wallet and connect to your Burstcoin account. If you are using a standalone wallet (currently all wallets installed without using QBundle), the exchange is accessed using a standard web browser to connect to your localhost (wallet). To connect, enter 127.0.0.1:8125 into the address bar.
By default, the asset exchange does not list any assets. You must locate and add the assets that you wish to follow by selecting asset exchange
By selecting an asset, the interface area will automatically display the corresponding information. This includes the number of tokens that have been created (“quantity”), how divisible is the token (“asset decimals”), a brief description of the asset, who created the asset (“account”) and the asset identifier (“asset ID”). This information is critical because there can be multiple assets that have the same name.
The cost of issuing an asset (1000 BURST) should discourage people from spamming the exchange with assets whose only purpose is confusion and abuse. Without entering this worst-case scenario, it is reasonable to assume that perfectly legitimate users may create assets of the same name. Therefore a good degree of vigilance before buying is always beneficial.
BUYING ASSETS:
- Select the asset from the list.
- Click on “Buy *Asset Name* with BURST“
- Quantity: define the number of assets that you are interested in buying.
- Price: set the amount you are willing to pay. Warning: “price” refers to the cost of a unit of tokens. So, by entering 10, you are willing to pay 10 BURST per token.
- Fee: define the fee (the minimum fee is .00735 BURST).
- Select buy.
- Inter your passphrase and select buy asset.
- For illustration, see figure 1 at end of document.
TRANSFERRING ASSETS:
- Find the asset you wish to transfer under My Assets,
- Click ‘transfer’.
- Type the recipient. This is the account to which you wish to transfer the assets. This field is mandatory.
- Select the quantity that you want to transfer. This field is mandatory. You can transfer all or part of your assets as there is no upper limit. The minimum amount that you can transfer depends on what has been defined as decimals. For 0 decimals, the minimum would be .0075 Burst. For 1 decimal, it would be 0.1 tokens and so on. (research tag).
- Set the fee you are willing to pay for the transaction. This field is mandatory. There is no upper limit. However, the minimum fee is .00735 BURST.
- Set the deadline. This is how long (expressed in hours) you are willing to wait before the request gets automatically deleted. This field is mandatory.
- Add a brief message if appropriate. This field is optional. It can contain any Unicode characters but should be URL-encoded. The maximum length is 1000 characters.
- Enter your secret passphrase. This field is mandatory.
- For illustration, see figure 2 at end of document.
- Note: You can check the transfer history of your issued and purchased assets in this section.
CANCELLING ASSET ORDERS
- You can cancel an order at any time for the minimum fee.
- Cancellation is not instantaneous. Your order may be accepted before your cancellation propagates through the network.
- An order that is in the process of being canceled will appear in red in the ‘Open Orders’ menu.
- You can check that status of an open order or cancel an open order by selecting open orders.
- For illustration, see figure 4 at end of document.
ISSUING ASSETS:
Note: Incognito mode (or its equivalent) is not supported for adding assets to your watch list. In order for your list to retain the asset that you add to it, your browser must be in normal mode.
- Select issue asset. A form for entering the asset information will appear. NOTE: When you issue an asset, you will not be able to modify any of the fields, ever. Be certain that all of the information is correct. When this process is complete, the issued asset will be publicly available on the Asset Exchange where it can be traded for Burstcoin.
- Enter an asset name that will allows your asset to be found by others. This field is mandatory. You cannot issue an unnamed asset, however, multiple assets can be issued with the same name. For this reason, it is important to pay close attention when buying or selling. The length must be between 3 and 10 characters. Only uppercase letters, lowercase letters, and numbers are allowed.
- Enter a brief description to describe the asset being issued. This field is mandatory. It can contain any Unicode characters but should be URL-encoded. Maximum length of 1,000 characters.
- Specify the quantify of tokens you intend to create. This field is mandatory. Must be a whole number.
- Specify the number of decimals that will define the divisibility of the token. As an example, by defining 2 decimals, the minimum amount of tokens you can sell or buy is 0.01. This field is mandatory. Limits: 0 to 8 decimals. The latter corresponds to the minimum of 0.00000001 tokens.
- Define the fee related to issuing the asset. 1,000 BURST is the minimum required to issue an asset (to avoid spam assets). This field is mandatory.
- Enter your own passphrase to identify the account to which the asset belongs. It will not be broadcast. This field is mandatory.
Note: There are several mechanisms for paying and rewarding your investor. To do so, you will use one of three asset distribution modules: dividends, automatic asset distribution, or share swap. Select payout dividends to choose one of the three modules.
Figure 1: The main asset exchange area showing a list of assets being tracked and menu items for interacting with these assets. (If you owned any shares in these assets, they would be highlighted in yellow (not shown here).
Figure 2: Transfer Asset
Figure 3: Issue Asset
Figure 4: My Assets
In this menu, all of your confirmed assets will be displayed including the assets you have issued and those you have obtained through trading.
Figure 5: Open Orders
Arbitrary Messages
Burstcoin can transmit data messages of up to 1000 bytes in length from one account to another account. These messages can be encrypted or plain text. Because they can be any type of data, they are referred to as Arbitrary messages.
Arbitrary messages are limited only by length. Any string can be transmitted, using any data structure or form of data encryption. Encoding, decoding, linked messages, data structures, and more can be implemented by any application that uses the system.
The base implementation allows for the transmission of simple, unencrypted text messages between accounts, but since the messages are truly “arbitrary” the range of possible applications is vast: Secure messaging, torrent applications, voting systems, data storage systems, simple distributed applications, even higher level Burstcoin function are possible.
Sending messages
- Select the Messages option from the left-hand menu or click on the messages icon as shown below and click on ‘Send Message’.
- In the Recipient field, enter the Burstcoin address for the message recipient account.
- In the Message field, you can enter any text with a length of up to 1000 bytes. When sending, you receive a corresponding error message if you enter longer text.
- You can select the checkbox ‘Encrypt Message’ or send the data in plain text. The recipient needs his passphrase to read encrypted messages.
- In the Passphrase field, enter your ‘Passphrase’ and click on Send Message.
- When you have sent the message it is listed in italics on the transactions page.
- After the network has processed your message (usually after a few minutes), it will be listed in normal font.
Receiving messages
- Select the Messages option from the left-hand menu or click on the messages icon as shown below and click on ‘Inbox’.
- Here you can find all the received messages sorted by Burstcoin account. Select one of the sending accounts and all of the messages sent from that account will be displayed. If the message has been encrypted, you will see a padlock symbol and a prompt to enter your passphrase in order to decrypt the messages:
- Selecting one of the messages allows you to enter your passphrase. You can also select the checkbox to remember your passphrase for decryption.
- Once you enter your passphrase the message content will be shown.
- Below the messages, you will find input fields to respond directly to the sender.
Using the Burstcoin API with arbitrary messages
- The Burst API is also available to encrypt, send, decrypt and read messages: see High-Level API calls for implementing arbitrary messages. (Section for Arbitrary Message System Operations)
Colored Coins
Related to Burstcoin, the concept of colored coins refers to a method for tracking the origin of Burstcoins so that a certain set of coins can be set aside and conserved, allowing a party to acknowledge them in various ways. Such coins can be used to represent arbitrary digital tokens, such as stocks, bonds, smart property and so on. They can even represent real-world objects.
When a coin is “colored”, it can be traded on the Burstcoin network just as any other coin in the system. This allows Burstcoin to be exchanged for whatever object the colored coin represents.
This concept forms the basis for the Burstcoin Asset Exchange.
For an excellent white paper on the concept of colored coins, as written for the Bitcoin project, see https://bitcoil.co.il/BitcoinX.pdf
Crowdfunding
Burstcoin implements a crowdfunding system which allows every Burstcoin user to set up crowdfunding campaigns to raise money for causes and projects.
Crowdfunding is the practice of funding a project or venture by raising monetary contributions from a large number of people. The Burstcoin crowdfunding feature allows you to create a decentralized crowdfund in a few clicks, and to donate just as easily. Creating a crowdfund is simple.
The crowdfund system is a useful addition to the Burst ecosystem and emphasizes the community spirit that drives all Burstcoin users. Many successful crowdfundings have been organized by Burstcoin developers and users alike.
Crowdfunding also provides the producer with a number of non-financial benefits:
- Profile: A compelling project can raise a producer’s profile and provide a boost to their reputation.
- Marketing: Project initiators can show that there is an audience and a market for their project. If a campaign is unsuccessful, valuable feedback can be provided.
- Audience engagement: Crowdfunding can create a forum where project initiators can engage with their audience. The audience can engage in the production process by following progress and sharing feedback.
Encrypted Messaging - Secured communication on the blockchain
The Burstcoin messaging system allows you to send and receive data directly on the Burstcoin Blockchain, thus allowing any Burstcoin account holder to communicate directly with any other account holder.
Messages can be attached to any Burstcoin transaction, making bookkeeping easy, as you can tag all your transactions with a description.
Messaging is securely encrypted by default, but text or data can also be sent unencrypted. The recipient of an encrypted message can easily decrypt it by entering the passphrase of his account.
Marketplace – The future of peer-to-peer buying and selling
The Burstcoin Marketplace provides a protocol for decentralized, peer-to-peer selling. It is no longer necessary to rely on external market sites that charge commissions for facilitating your business. Any type of merchandise can bought and sold. The marketplace is particularly suited for digital goods such as software, music, and videos. Buyers shop for seller’s products, place an order, and are provided with instructions for receiving or downloading their purchased products — no intermediaries, no fees, and no delays. All transactions between the buyer and the seller are transacted directly on the blockchain using Burstcoin.
With server running, access the local Burstcoin wallet by visiting http://localhost:8125/. On the sidebar, find menus for marketplace and my store. Following are descriptions of each sub menu:
- Search marketplace: Enter a seller’s address to view their products.
- Purchased products: See all of your previous purchases.
- My products for sale: See your items for sale and make updates to your offers.
- My pending orders: Here you will see pending orders from users who want to buy a product.
- My completed orders: Shows all finished orders and feedback from your customers.
- List product for sale: Here you add a new digital good in the marketplace.
How to buy products on the marketplace
- Open your Burstcoin wallet and select marketplace.
- Select marketplace from the menu and then select search marketplace.
- Enter a seller’s Burstcoin address to see a list of items that they have for sale.
- Click the name of a product to open a purchase dialog. Enter quantity and delivery deadline (in hours). The delivery deadline defines the amount of time you are willing to wait for the seller to deliver before the transaction will be canceled. Verify your data, enter your passphrase, and click purchase.
- Orders that have been placed successfully appear in the purchased products menu with an initial order status of tentative. After network confirmation (block generation) the order status changes to pending. When the product has been delivered, the status changes to complete.
- Click the name to open the marketplace delivery dialog. Enter your passphrase to decrypt the seller’s message. Here you will find the information on how you can receive your digital product.
- You now have the option of leaving feedback for the seller.
How to sell products on the marketplace
- Open your Burstcoin wallet and select my store.
- Click list product for Sale in the top right-hand corner.
- Describe your product.
Name: The name of the product.
Description: Details about the product. You can add a link to our promotional website where you can present the product in full detail.
Tags: (optional) – Enter up to three tags separated by commas.
Price: The product price per unit in Burstcoin.
Quantity: The number of the items that you have in stock. This will decrease automatically each time a sale is made.
Passphrase: Your wallet’s passphrase. - Confirm the offer by clicking on put For sale. It will then be listed in italics under my products for sale.
- After your offer has been confirmed in a block, usually after a few minutes, it will be listed in normal font as a link.
- When someone places an order to buy goods from you, it will show up in my pending orders. To complete the sale, press the deliver goods button.
- In the pop-up window, enter your passphrase to decrypt the buyer’s message. You can check remember passphrase for decryption for future sales.
- Enter details on how the buyer can download or receive their merchandise in data. You can optionally give your buyer a discount.
- Enter your passphrase and select deliver purchase to finalize.
- The completed order appears in my completed orders. For details, click on the product’s name. If they buyer has provided any feedback, you will find it here. This section is also where you would issue a refund if applicable.
Escrow Account - Internal AT (automated transaction)
The internal AT (automated transaction) and escrow account is used for execution of automated transactions and escrow payments. As an internal intermediary party it cannot be the sender or recipient of a transaction.
The account information is visible when it is accessed through the Block Explorer, using the following link: https://explore.burst.cryptoguru.org/account/0. The account has the numeric ID 0 and a Burst address BURST-2222-2222-2222-22222.
The account information shows a number of historic transactions, ordinary and multi-outs, which are indicative of the transactions executed using this account. However, the balance of the account shown in Block Explorer is a result of the Block Explorer’s interpretation of the intermediary states of the account, and therefore doesn’t affect the total supply of Burstcoin.
Smart Contracts (automated transactions)
The concept of smart contracts was introduced to advance blockchain technology. This technology involves presetting the rules of transactions that both parties in a contract must meet. Burstcoin adopted smart contracts in 2014 and referred to them as Automated Transactions (AT). The automated transactions are Turing-complete and designed to facilitate simple applications in many areas.
A blockchain can be seen as a distributed database that is ensuring consistency and validity by verification work done by a majority of participating nodes in the blockchain’s network. A smart contract is a procedural way to facilitate, verify, or enforce the negotiation or performance of a contract. Compared to their paper-based ancestors, smart contracts fulfill the role of otherwise needed lawyers for verification, notaries for validation, and executors for enforcement. For this reason, smart contracts are a disruptive technology to future digital economies.
The formalism used in Burstcoin’s implementation of smart contracts is called AT (Automated Transaction) and has been proposed and implemented by CIYAM. As Turing-complete formalism, ATs are both powerful (expressiveness) and dangerous (verifiability) and have been used only as templates to facilitate simpler smart contracts such as lotteries, crowdfunding, and an asset exchange. Because of the expressiveness of the formalism, the potential for advanced applications is basically limitless. They have to be designed with great care in order to avoid situations such as the DAO debacle that led to the hard fork and community split between Ethereum and Ethereum Classic.
From Wikipedia: With present implementations, based on blockchains, smart contracts are mostly used in the sense of general purpose computation taking place on a blockchain or distributed ledger. In this interpretation, a smart contract is not necessarily related to the classical concept of a contract, but can be any kind of computer program.
In 2018, a US Senate report said: “While smart contracts might sound new, the concept is rooted in basic contract law. Usually, the judicial system adjudicates contractual disputes and enforces terms, but it is also common to have another arbitration method, especially for international transactions. With smart contracts, a program enforces the contract terms which are built into the code.
A smart contract is a computer protocol intended to facilitate, verify, or enforce the negotiation or performance of a contract. Smart contracts were first proposed by Nick Szabo in 1996.
We are converting contracts to computer code, stored and replicated on the blockchain and supervised by the network of miners.
What are smart contracts?
Smart contracts are computer programs that can automatically execute the terms of a contract. Anyone familiar with computer programming would be aware of what is known as an if-then-else statement, where a program executes a certain task if certain conditions are met and does not execute the task if the conditions are not met. Smart contracts implement this on the blockchain in a completely decentralized and trustless way.
Smart contracts help you exchange money, property, shares, or anything of value in a transparent, conflict-free way while avoiding the services of a middleman.
Smart Contracts allow people to agree on a piece of code ahead of time and trustlessly know that if they submit the code to the network, then it will be completed as requested. The code’s arguments can be modified as desired, before its submission to the network.
- A contract is written as public code into the blockchain
- A triggering event is hit and the contract executes itself
- Regulators can use the blockchain to track the activity
How it works
With Burstcoin, smart contracts are implemented using Automated Transactions (AT), a technology created by CIYAM Developers. Automated Transactions are Turing-complete and thus have a potentially infinite number of use cases.
If you are interested in Burstcoin smart contracts and want to learn how to create one yourself, please have a look at the documentation provided by CIYAM and at the wiki created by a Burstcoin community member.
Unparalleled benefits
- Autonomy – You are the one making the agreement. There is no need to rely on a broker, lawyer or other intermediaries to confirm. Incidentally, this also removes the danger of manipulation by a third party, since execution is managed automatically by the network.
- Speed – You would ordinarily have to spend substantial amounts of time and paperwork to manually process documents. Smart contracts use software code to automate tasks, thereby saving hours for most business processes.
- Trust – Your documents are encrypted and duplicated many times over on a shared ledger. There is no way that someone can say they lost it.
- Safety – Smart contracts are kept safe by the highest grade cryptography. The blockchain is immutable, and no hacker can modify the data it contains.
- Savings – Smart contracts save you money since they knock out the presence of intermediaries. You would, for instance, have to pay a notary to witness your transaction.
Use cases examples
- Atomic cross-chain transactions (ACCT) – ACCTs allow for truly decentralized trading between cryptocurrencies. For example, trade your burstcoins with a coin that provides a mixing service for the purposes of privacy, then send it right back to a new Burst account. With the Dymaxion, ACCTs (or ACTTs) are used to connect the colored tangles and the Burstcoin blockchain together.
- Decentralized crowdfunding – Smart contracts make decentralized crowdfunding possible: supporting a project is as easy as sending funds to an account. If the account receives enough funds by a certain block, then the project funds are released to the crowdfund initiator; otherwise, the money is returned to the senders.
- Decentralized gambling – A good example of automated gambling consists of decentralized lotteries. You send Burstcoins to a smart contract programmed to randomly choose a winner and distribute the reward to that account.
- Decentralized auctions – You can auction an item or a service off at a certain starting price – participants will send money to the smart contract, and anytime one sends more than the previous participant, the latter’s money is automatically refunded. ‘Buy Now’ option can also be supported.
- Other – There are countless other possibilities, such as autonomous corporations (entities holding internal capital, autonomously acting on the market through sets of trustless rules), gaming, self-mixing, smart property, and much more. The sky is the limit!
In 2014, Burst was the first cryptocurrency ever to implement working, Turing-complete smart contracts in a live environment in the form of Automated Transactions (ATs). In January 2015, the world’s first decentralized Burst lottery became the first program ever to run on top of a blockchain in a trustless decentralized manner.
Offline Transaction Signing
Offline Transaction Signing [offline device]
The term “offline transaction” refers to the practice of keeping the private keys on an offline device (not connected to the internet) and signing on individuals transactions. The signature is then copy-pasted from this device into a connected device, and broadcast into the network. Assuming the offline computer is malware-free, then this practice is virtually risk-free of theft.
Online transaction signing [local device]
In addition to signing your transactions from an offline device, the signing can also be done on an online device but still performed locally. Assuming the computer is malware-free, this is the most convenient option while still keeping your private keys secret. For example, the BRS (Burst Reference Software) wallet uses this form of signing for its wallet interface through locally run JavaScript.
Online transaction signing [server side]
Just don’t do it. Although it is possible, it would only be considered “safe” to do this using a local host. Especially if you are developing/distributing software; don’t present online signing as an option to your clients. You will make them a potential target for malicious actions.
Implementing transaction signing
Any transaction needs to be signed before it can be broadcast and accepted into the memory pool. You use one of the API functions to request transactionBytes
from a node. This API call returns a JSON containing the transactionBytes
. These bytes represent the transaction you want to make.
It is important to use the publicKey
argument and not the secretPhrase
for the transactionBytes
request. And set the broadcast
argument to false to prevent broadcasting the transaction to the network.
Now to sign the transactionBytes locally. Refer to these sources below to include the signing functions in your code.
Code sources
- Javascript / Burst Reference Software
- Java / Burst Reference Software
- Swift/Obj-C / BurstKit
- C++ / CloudBurst
Pseudo code:
function signTX(unsignedTransactionBytes) { myBytes = unsignedTransactionBytes // keep a copy signature = crypto.sign(unsignedTransactionBytes, passPhrase) // make the signature myBytes.copy(96, signature); // copy the signature over the unsignedTransactionBytes with a offset of 96 bytes return myBytes}
Note: add signature and TransactionBytes length
Compare and verify your implementation with the requestType: Sign Transaction.
The transaction is now signed and can now be broadcast (through POST only): Broadcast the transaction
Slot Based Transaction Fees
Minimum transaction fee
- The minimum transaction fee for all types of Burstcoin transactions is .00735 burst (735.000 Plancks).
At block height 500,200 Burstcoin changed its transaction fee structure from “1 burst per transaction” to a progressive slot-based structure. Burstcoin’s slot based transaction fee system is described in the Burst Dymaxion whitepaper.
The slot-based transaction fee system allows for variable fees depending on the blockchain’s transaction load. This prevents spamming blocks with minimum fee transactions. Transactions that are only created because they require little or no investment consume space on the blockchain. It is important to conserve blockchain space in order to keep the cost of operating a public node at a minimum.
Technical Information
A block is divided into 1,020 slots that can each hold one transaction. The fees for the slots increase progressively in a linear fashion. The fee for each slot is calculated by multiplying the slot number by the lowest minimum fee (slot# * 0.00735 burst). The lowest minimum fee is referred to as ‘fee quant’. Ordinary transactions and multi-out transactions use the same fee structure. The highest fee is 7.497 burst. The total fees collected for a block where all of slots are filled with the minimal required fee is 3827.2185 BURST.
Assignment of transactions to slots
When a new block is generated, new (currently unconfirmed) transactions are assigned to the available slots. Here, each transaction is assigned to the most costly slot it fits in. If no slot is available, the transaction is not included in the block and remains unconfirmed in the mempool of the node. For included transactions, left-over funds for the slot are not refunded. This means if a transaction specifies a fee of 0.01 BURST and is assigned to the first slot which costs 0.00735 BURST, it will still cost 0.01 BURST to process the transaction. It is up to the user to choose a reasonable fee that does not waste funds.
Examples:
- A (legacy) fee of 1 Burst guarantees inclusion into a block with less than 136 transactions.
- A fee of 0.1 Burst guarantees inclusion into a block with less than 13 transactions.
- A more complex example of transaction assignment to slots is shown in the following:
Fee Quantum: 0.00735
Block Capacity: 10
Fee slots:
10: 0.0735
9: 0.06615
8: 0.0588
7: 0.05145
6: 0.0441
5: 0.03675
4: 0.0294
3: 0.02205
2: 0.0147
1: 0.00735
Pending Tx fees (descending-sorted and filtered too low):
$VAR1 = [
‘0.3’,
‘0.2’,
‘0.1’,
‘0.008’
];
Distributing as follows:
0.3 has slot @ 10 -> added
0.2 has slot @ 9 -> added
0.1 has slot @ 8 -> added
skipped slot @ 7 (0.008 too low for 0.05145).
skipped slot @ 6 (0.008 too low for 0.0441).
skipped slot @ 5 (0.008 too low for 0.03675).
skipped slot @ 4 (0.008 too low for 0.0294).
skipped slot @ 3 (0.008 too low for 0.02205).
skipped slot @ 2 (0.008 too low for 0.0147).
0.008 has slot @ 1 -> added
Fee types
Unconfirmed transactions can be issued with arbitrary fees, with the lowest possible fee being 0.00735000 Burst (735.000 Plancks). Depending on the fee amount, unconfirmed transactions will either execute or be delayed until a slot for that fee amount is available.
The Burstcoin wallet is equipped with a fee suggestion tool which suggests the fee amount to be used for a transaction based on the transaction load on the chain in the last 10 blocks. The fee suggestion tool offers three fee amounts:
- Standard: 50% probability the transaction will be included in the next block
- Cheap: 50% probability the transaction will be included in the next 10 blocks
- Priority: 90% probability the transaction will be included in the next block, 99% probability the transaction will be included in the next two blocks.
The fee suggestion tool can also be used using The Burst API.
Support for ERC20 Tokens
Introduction
ERC20 is a popular Ethereum standard for token management, explained here https://github.com/ethereum/EIPs/issues/20
The BURST asset exchange already supports most of the ERC20 operations out of the box without the need to issue a smart contract.
This document explains how to implement the ERC20 APIs using the equivalent BURST APIs.
Issuing tokens
Each ERC20 token is represented as a BURST asset.
Issue the asset using the issueAsset API.
Each asset is identified by a unique asset id set to the transaction id of the issueAsset transaction.
For more details, please take a look at The Burst API.
Implementing the ERC20 APIs
totalSupply
To get the total token supply, invoke the getAsset API and supply the asset id. The total supply is provided by the initialQuantityQNT
attribute, the existing supply, after possible share deletes, is specified by the quantityQNT
attribute. Quantity values are always provided as integer values, the number of decimal positions to apply to these quantities is specified by the “decimals” attribute.
balanceOf
To get the account balance of another account with a given address, invoke the getAssetAccounts API and provide the BURST address as the account
parameter and the asset id as the asset
parameter. The unconfirmedQuantityQNT
attribute in the response represents the current account balance. The quantityQNT
attribute represents the quantity available for use at the moment after taking into account balance locked by open asset orders.
transfer
To send tokens from your address to another address use the TransferAsset API, specify the recipient address, the asset id and the quantity to transfer as well as your account passphrase, the transaction fee, and transaction deadline. The transferAsset transaction is recorded on the BURST blockchain. You can later track token transfers using the Get Asset Transfers API.
Transaction Types
Burstcoin supports sending Burstcoin from one account to multiple recipients in a single transaction for a single minimum fee. This new transaction type, referred to as a multi-out transaction, as well as ordinary transactions and advanced transaction types, are documented below.
Note: All transaction types use the same slot-based transaction fee schedule. For more information, see “Transaction Fees” which can be accessed from the menu item above.
Transaction types are as follows:
- send money
- create alias
- transmit message
- issue asset
- order asset
Each transaction type has a unique set of required details. However, the following details are common to all transaction types:
- sending account’s secret passphrase (required)
- specified transaction fee (required)
- transaction deadline (required, default is 24 hours))
- “referenced” transaction (optional)
Ordinary transactions
- Ordinary Burstcoin transactions are one-to-one transactions where one account sends Burstcoin to one recipient. Ordinary transactions can be initiated from both local or web-based wallets.
Issue an ordinary transaction
- Specify a Burstcoin account as the recipient, the amount of the transaction, and a transaction fee.
- An optional message can be added. The sender can elect to encrypt the message so that it only visible to the recipient, or send the message in plain text.
- The transaction is issued when the “Send BURST” button is clicked.
Advanced options for ordinary transactions
- custom deadlines
- conditional execution
- offline transaction signing
Custom deadlines
- Deadlines set the duration of transaction’s pre-confirmation validity. The default deadline is the maximum allowed deadline of 24 hours. If a transaction is not confirmed within the configured deadline, it will be deleted from the mempool. Transactions deleted due to deadline expiration can of course be reissued.
Conditional execution
Referenced transaction hash represents a condition that has to be met before the transaction that is being issued can be confirmed. This mechanism works as follows: a transaction with hash txhash1 has been issued. The user is currently creating transaction tx2. If the txhash1 is provided as the “References Transaction Hash”, transaction tx2 will be executed only after the transaction with txhash1 has been confirmed.
Do not broadcast option
The “Do Not Broadcast” option prevents a signed but unconfirmed transaction fom being broadcast to the network. After signing a transaction offline, it can be broadcast to the network at a later time. When the “Do Not Broadcast” option is checked, the user can see the raw transaction details, as shown in the example image: Raw transaction details. To broadcast the signed transaction later, the user has to save the raw transaction details in a separate file.
Add note to self
This option allows entry of an encrypted note for the transaction.
Offline transaction signing
To broadcast a transaction that has been previously signed offline, access “Transaction Operations”.
“Advanced Transaction Operations” allows for the signed transaction bytes to be broadcast to the network:
Multi-out transactions
Multi-out transactions allow the sender to send Burstcoin to up to 64 unique recipient accounts as a single transaction with a considerably lower fee than would be required if sending the same amount using 64 ordinary transactions.
If the amount to be sent to each recipient is the same, the “Same amount” option should be checked. The number of recipients in Multi-out Same transaction can be up to 128.
Multi-out transactions can be issued from both local and web-based wallets.
Multi-out transactions lookup – multi-out reverse
Due to design optimizations, recipients of multi-out and multi-out same transactions do not see transaction details in their transaction record. Their account balance are increased by the correct amount however.
To see the details of multi-out transactions, recipients use the block explorer, available at https://explore.burst.cryptoguru.org/. Enter a Burstcoin account into the search box and then access the “Multi-out Reverse” tab. All of the multi-out transaction details will be displayed.
Note: Due to the less than optimal procedure for accessing multi-out transaction details, multi-out transactions may not be ideal for certain situations. They are currently used mostly for the distribution of mining pool proceeds. An effort is being made to develop this transaction type further so that its transaction details will appear in the receiving wallet automatically.
The Reed-Solomon Address Format
The Burstcoin account numbers (addresses) are of the form: BURST-XXXX-XXXX-XXXX-XXXXX
This format is referred to as a Reed-Solomon address. This is the default format in the official client. where X is a non-ambiguous number or alphabetic character (the letters O and I are not used; nor are the numbers 1 and 0). Addresses are always prefixed with “BURST-“, and hyphens are used to separate the address into groups of 4, 4, 4, and then 5 characters. The addresses are NOT case-sensitive.
This form of address improves reliability by introducing redundancy that can detect and correct errors when entering and using Burst account numbers.
Background
The internal format for Burst account numbers is a completely numeric 64-bit identifier that is derived from the account’s private key. This format is error-prone because a single error when typing a character can result in transactions being unintentionally sent to the wrong account.
Reed-Solomon error-correction codes largely remedy this issue by adding redundancy to addresses. Reed-Solomon format was chosen because:
- the account collision rate is the same as the default address format;
- the system’s basic error correction can be used to assist users in typing addresses;
- some programming languages do not have a native MD5 hashing function, and the Reed-Solomon implementation is simpler than MD5.
Benefits of Reed-Solomon addresses
- The chance of a random address collision, using Burst’s implementation of 4 “check-bits”, is 1 in a million (20-bit redundancy).
- It allows up to 2 typos in an address to be corrected.
- It guarantees that up to 4 typographical errors can be detected.
- The address length is always 17 characters and is always prefixed with “BURST”. This makes the addresses easily recognizable as belonging to Burst
Encoding of Burstcoin Reed-Solomon addresses
- Case is not enforced in this format, but for unification, all addresses are displayed using upper case.
- Addresses are split by dashes into groups of 4 characters and a final group of 5 characters, but this is not enforced during address input.
- The old numeric addresses are also recognized and supported for backward compatibility.
Example RS Addresses:
- BURST-3DH5-DSAE-4WQ7-3LPSE
- BURST-K4G2-FF32-WLL3-QBGEL
Technical details
The first and most important rule is that no error-correction scheme is infallible: You cannot rely on error correction, period.
The problem is somewhat counter-intuitive: either you can do a simple yes/no check of address validity, which will give you one in a million collision, or you can try and correct errors. You cannot do both.
The problem here is that the Reed-Solomon algorithm is only guaranteed to correct up to 2 errors. If there are more than 2 errors present in an address entry, it will produce false positives with a probability of around 10% and transactions will still be sent to incorrect addresses.
Think of the algorithm as error-guessing, instead, to assist users with spotting errors.
Reed-Solomon (RS) addresses for Burst are encoded as follows:
- Take the original 64-bit account ID, add 1 zero bit to get 65 and then split it into thirteen 5-bit “symbols” (65 / 5 = 13).
- Order the symbols from lowest bit to highest bits, in little-endian order, i.e. bits 0-4, 5-9, 10-14, etc. up to 60-64.
- Append 4 symbols of parity (20 bits), produced by the Reed-Solomon encoding of our 13 symbols from step one (which are left untouched). This produces a 13 + 4 = 17 symbol codeword.
- Scramble the codeword symbols in a predefined order and encode them 1-to-1 with an alphabet of 32 characters, splitting them into groups by dashes.