<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.bitmessage.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Thomas</id>
	<title>Bitmessage Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.bitmessage.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Thomas"/>
	<link rel="alternate" type="text/html" href="https://wiki.bitmessage.org/index.php/Special:Contributions/Thomas"/>
	<updated>2026-06-14T11:04:37Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.34.0</generator>
	<entry>
		<id>https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24957</id>
		<title>Protocol specification v3</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24957"/>
		<updated>2014-09-04T06:55:26Z</updated>

		<summary type="html">&lt;p&gt;Thomas: /* error */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Stub}}&lt;br /&gt;
&lt;br /&gt;
{{Template:Proposal}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
This is a DRAFT for the protocol version 3. It describes the changes in protocol version 3 versus version 2. Things which are unchanged from version 2 are not described in detail. So you should use the [[Protocol specification|version 2 protocol specification]] as a reference for all formats which are not mentioned in this description.&lt;br /&gt;
&lt;br /&gt;
== New features in version 3 ==&lt;br /&gt;
&lt;br /&gt;
Here are the new features of the version 3 of Bitmessage protocol in keywords:&lt;br /&gt;
&lt;br /&gt;
* object type is now coded inside the message&lt;br /&gt;
* objects may have a variable time to live&lt;br /&gt;
* The POW is more difficult but can be easier if you lower the time to live&lt;br /&gt;
* The protocol is tolerant for further message extension&lt;br /&gt;
* The protocol is tolerant for further object extension&lt;br /&gt;
* A lower maximum object size&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Common structures ==&lt;br /&gt;
&lt;br /&gt;
=== Variable length integer ===&lt;br /&gt;
&lt;br /&gt;
The shortest possible encoding MUST be used. In version 2 the decimal value 10 could be encoded as 0x0A, 0xFD000A, 0xFE0000000A, or 0xFF000000000000000A. In version 3 only the shortest representation, 0x0A, is allowed. The 9-byte form is no longer useful and SHOULD NOT be used.&lt;br /&gt;
&lt;br /&gt;
Here is an example address which uses malformed varints: BM-CVA3RC7Mvy7JDNSpQChktwrSe4KNMaEdDdcymfUo. This address is invalid.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Message types ==&lt;br /&gt;
&lt;br /&gt;
Most message types are unchanged from version 2 to version 3. Only the four &amp;quot;objecttype&amp;quot; messages are not valid any more. They are summarized into one single message.&lt;br /&gt;
&lt;br /&gt;
=== version ===&lt;br /&gt;
&lt;br /&gt;
The version message is identical to [[Protocol specification#version|version 2 version message]].&lt;br /&gt;
&lt;br /&gt;
=== verack ===&lt;br /&gt;
&lt;br /&gt;
The verack message is identical to [[Protocol specification#verack|version 2 verack message]].&lt;br /&gt;
&lt;br /&gt;
=== addr ===&lt;br /&gt;
&lt;br /&gt;
The addr message is identical to [[Protocol specification#addr|version 2 addr message]].&lt;br /&gt;
&lt;br /&gt;
=== inv ===&lt;br /&gt;
&lt;br /&gt;
The inv message is identical to [[Protocol specification#inv|version 2 inv message]].&lt;br /&gt;
&lt;br /&gt;
=== getdata ===&lt;br /&gt;
&lt;br /&gt;
The getdata message is identical to [[Protocol specification#getdata|version 2 getdata message]].&lt;br /&gt;
&lt;br /&gt;
=== error ===&lt;br /&gt;
&lt;br /&gt;
Version 3 of the protocol defined a special error (or debug) message. This message may be silently ignored (and therefor handled like any other &amp;quot;unknown&amp;quot; message).&lt;br /&gt;
The message is intended to inform the other node about protocol errors and can be used for debugging and improving code.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 1+||fatal||var_int||&lt;br /&gt;
This qualifies the error. If set to 0, than its just a &amp;quot;warning&amp;quot;. You can expect, everything still worked fine. If set to 1, than it's an error, so you may expect, something was going wrong (e.g. an object got lost). If set to 2, it's a fatal error. The node will drop the line for that error and maybe ban you for some time.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 1+||ban time||var_int||&lt;br /&gt;
If the error is fatal, you can specify the ban time in seconds, here. You inform the other node, that you will not accept further connections for this number of seconds. For non fatal errors this field has no meaning and should be zero.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 1+||inventory vector||var_str||&lt;br /&gt;
If the error is related to an object, this Variable length string contains the inventory vector of that object. If the error is not related to an object, this string is empty. &lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 1+||error text||var_str||&lt;br /&gt;
A human readable string in English, which describes the error. &lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Unsupported messages ===&lt;br /&gt;
If a node receives an unknown message it &amp;lt;u&amp;gt;must&amp;lt;/u&amp;gt; silently ignore it. This is for further extensions of the protocol with other messages. Nodes that don't understand such a new message type shall be able to work correct with the message types they understand.&lt;br /&gt;
&lt;br /&gt;
Maybe some version 2 nodes did already implement it that way, but in version 3 it is '''part of the protocol specification''', that a node &amp;lt;u&amp;gt;must&amp;lt;/u&amp;gt; silently ignore unsupported messages.&lt;br /&gt;
&lt;br /&gt;
== Object type ==&lt;br /&gt;
&lt;br /&gt;
The four former object types &amp;quot;getpubkey&amp;quot;, &amp;quot;pubkey&amp;quot;, &amp;quot;msg&amp;quot; and &amp;quot;broadcast&amp;quot; are summarized into a single Message type &amp;quot;object&amp;quot;. The four Messages as they did exist in version 2 protocol are not valid any more.&lt;br /&gt;
&lt;br /&gt;
Objects are shared throughout a stream.  A client should advertise objects until their end of life time is reached. To be a valid object, the [[Proof of work|Proof Of Work]] has to be done.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8||POW nonce||uint64_t||&lt;br /&gt;
Random nonce used for the [[Proof of work|Proof Of Work]]&lt;br /&gt;
|-&lt;br /&gt;
| 8||time||uint64_t||&lt;br /&gt;
The &amp;quot;end of life&amp;quot; time of this object (be aware, in version 2 of the protocol this was the generation time). Objects shall be broadcast until its end of life time has been reached. The node shall store the inventory vector of that object for at least another hour to avoid reloading it from another node with a small time delay.&lt;br /&gt;
The maximum value for the &amp;quot;time to life&amp;quot; of an object is 28 days. so the &amp;quot;end of life time&amp;quot; is 28 days in the future at maximum.&lt;br /&gt;
|-&lt;br /&gt;
| 4||object type||uint32_t||&lt;br /&gt;
This field specifies the content of the object.&lt;br /&gt;
Valid values are (at the moment) 0-&amp;quot;getpubkey&amp;quot;, 1-&amp;quot;pubkey&amp;quot;, 2-&amp;quot;msg&amp;quot;, 3-&amp;quot;broadcast&amp;quot;. all other values are reserved. Nodes shall transport objects with unknown types, too. This will make further protocol changes more easy.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| ?||payload||uchar[]||&lt;br /&gt;
This field varies depending on the object type. For a detailed description of their content refer to [[Protocol specification#Object_types|version 2 object types]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Proof of Work ==&lt;br /&gt;
&lt;br /&gt;
Generally the POW is done exactly like in [[Proof of work|version 2]]&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;target&amp;quot; (the difficulty of the POW) is defined a little bit lower (more difficult) in version 3. This is, because practice did show, it is to easy to flood the network with data.&lt;br /&gt;
In addition to that it is possible in version 3 to lower the time to live of a message (for example when doing a live chat) and getting an easier POW for that.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:POW forumla 2.png|none|caption]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
payloadLengthExtraBytes = 1000&lt;br /&gt;
&lt;br /&gt;
nonceTrialsPerByte = 1000&lt;br /&gt;
&lt;br /&gt;
== Maximum object size ==&lt;br /&gt;
&lt;br /&gt;
In version 2 the maximum object size was defined to be 170 MBytes. This object size is totally unrealistic for a normal use (POW), but is perfectly for a network attack. It will be to big to handle for clients with low bandwidth.&lt;br /&gt;
Currently an average bitmessage &amp;quot;msg&amp;quot; object has the size of 2 kBytes.&lt;br /&gt;
So version 3 limits the objects to a maximum size of 256 KiB(the payload of the object, starting from the POW nonce can have 262144 bytes at maximum).&lt;/div&gt;</summary>
		<author><name>Thomas</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24956</id>
		<title>Protocol specification v3</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24956"/>
		<updated>2014-09-04T06:54:53Z</updated>

		<summary type="html">&lt;p&gt;Thomas: /* error */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Stub}}&lt;br /&gt;
&lt;br /&gt;
{{Template:Proposal}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
This is a DRAFT for the protocol version 3. It describes the changes in protocol version 3 versus version 2. Things which are unchanged from version 2 are not described in detail. So you should use the [[Protocol specification|version 2 protocol specification]] as a reference for all formats which are not mentioned in this description.&lt;br /&gt;
&lt;br /&gt;
== New features in version 3 ==&lt;br /&gt;
&lt;br /&gt;
Here are the new features of the version 3 of Bitmessage protocol in keywords:&lt;br /&gt;
&lt;br /&gt;
* object type is now coded inside the message&lt;br /&gt;
* objects may have a variable time to live&lt;br /&gt;
* The POW is more difficult but can be easier if you lower the time to live&lt;br /&gt;
* The protocol is tolerant for further message extension&lt;br /&gt;
* The protocol is tolerant for further object extension&lt;br /&gt;
* A lower maximum object size&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Common structures ==&lt;br /&gt;
&lt;br /&gt;
=== Variable length integer ===&lt;br /&gt;
&lt;br /&gt;
The shortest possible encoding MUST be used. In version 2 the decimal value 10 could be encoded as 0x0A, 0xFD000A, 0xFE0000000A, or 0xFF000000000000000A. In version 3 only the shortest representation, 0x0A, is allowed. The 9-byte form is no longer useful and SHOULD NOT be used.&lt;br /&gt;
&lt;br /&gt;
Here is an example address which uses malformed varints: BM-CVA3RC7Mvy7JDNSpQChktwrSe4KNMaEdDdcymfUo. This address is invalid.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Message types ==&lt;br /&gt;
&lt;br /&gt;
Most message types are unchanged from version 2 to version 3. Only the four &amp;quot;objecttype&amp;quot; messages are not valid any more. They are summarized into one single message.&lt;br /&gt;
&lt;br /&gt;
=== version ===&lt;br /&gt;
&lt;br /&gt;
The version message is identical to [[Protocol specification#version|version 2 version message]].&lt;br /&gt;
&lt;br /&gt;
=== verack ===&lt;br /&gt;
&lt;br /&gt;
The verack message is identical to [[Protocol specification#verack|version 2 verack message]].&lt;br /&gt;
&lt;br /&gt;
=== addr ===&lt;br /&gt;
&lt;br /&gt;
The addr message is identical to [[Protocol specification#addr|version 2 addr message]].&lt;br /&gt;
&lt;br /&gt;
=== inv ===&lt;br /&gt;
&lt;br /&gt;
The inv message is identical to [[Protocol specification#inv|version 2 inv message]].&lt;br /&gt;
&lt;br /&gt;
=== getdata ===&lt;br /&gt;
&lt;br /&gt;
The getdata message is identical to [[Protocol specification#getdata|version 2 getdata message]].&lt;br /&gt;
&lt;br /&gt;
=== error ===&lt;br /&gt;
&lt;br /&gt;
Version 3 of the protocol defined a special error (or debug) message. This message may be silently ignored (and therefor handled like any other &amp;quot;unknown&amp;quot; message).&lt;br /&gt;
The message is intended to inform the other node about protocol errors and can be used for debugging and improving code.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 1+||fatal||var_int||&lt;br /&gt;
This qualifies the error. If set to 0, than its just a &amp;quot;warning&amp;quot;. You can expect, everything still worked fine. If set to 1, than it's an error, so you may expect, something was going wrong (e.g. an object got lost). If set to 2, it's a fatal error. The node will drop the line for that error and maybe ban you for some time.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 1+||ban time||var_int||&lt;br /&gt;
If the error is fatal, you can specify the ban time in seconds, here. You inform the other node, that you will not accept further connections for this number of seconds. For non fatal errors this field has no meaning and should be zero.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 1+||inventory vector||var_str||&lt;br /&gt;
If the error is related to an object, this Variable length string contains the inventory vector of that object. Ff the error is not related to an object, this string is empty. &lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 1+||error text||var_str||&lt;br /&gt;
A human readable string in English, which describes the error. &lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Unsupported messages ===&lt;br /&gt;
If a node receives an unknown message it &amp;lt;u&amp;gt;must&amp;lt;/u&amp;gt; silently ignore it. This is for further extensions of the protocol with other messages. Nodes that don't understand such a new message type shall be able to work correct with the message types they understand.&lt;br /&gt;
&lt;br /&gt;
Maybe some version 2 nodes did already implement it that way, but in version 3 it is '''part of the protocol specification''', that a node &amp;lt;u&amp;gt;must&amp;lt;/u&amp;gt; silently ignore unsupported messages.&lt;br /&gt;
&lt;br /&gt;
== Object type ==&lt;br /&gt;
&lt;br /&gt;
The four former object types &amp;quot;getpubkey&amp;quot;, &amp;quot;pubkey&amp;quot;, &amp;quot;msg&amp;quot; and &amp;quot;broadcast&amp;quot; are summarized into a single Message type &amp;quot;object&amp;quot;. The four Messages as they did exist in version 2 protocol are not valid any more.&lt;br /&gt;
&lt;br /&gt;
Objects are shared throughout a stream.  A client should advertise objects until their end of life time is reached. To be a valid object, the [[Proof of work|Proof Of Work]] has to be done.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8||POW nonce||uint64_t||&lt;br /&gt;
Random nonce used for the [[Proof of work|Proof Of Work]]&lt;br /&gt;
|-&lt;br /&gt;
| 8||time||uint64_t||&lt;br /&gt;
The &amp;quot;end of life&amp;quot; time of this object (be aware, in version 2 of the protocol this was the generation time). Objects shall be broadcast until its end of life time has been reached. The node shall store the inventory vector of that object for at least another hour to avoid reloading it from another node with a small time delay.&lt;br /&gt;
The maximum value for the &amp;quot;time to life&amp;quot; of an object is 28 days. so the &amp;quot;end of life time&amp;quot; is 28 days in the future at maximum.&lt;br /&gt;
|-&lt;br /&gt;
| 4||object type||uint32_t||&lt;br /&gt;
This field specifies the content of the object.&lt;br /&gt;
Valid values are (at the moment) 0-&amp;quot;getpubkey&amp;quot;, 1-&amp;quot;pubkey&amp;quot;, 2-&amp;quot;msg&amp;quot;, 3-&amp;quot;broadcast&amp;quot;. all other values are reserved. Nodes shall transport objects with unknown types, too. This will make further protocol changes more easy.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| ?||payload||uchar[]||&lt;br /&gt;
This field varies depending on the object type. For a detailed description of their content refer to [[Protocol specification#Object_types|version 2 object types]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Proof of Work ==&lt;br /&gt;
&lt;br /&gt;
Generally the POW is done exactly like in [[Proof of work|version 2]]&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;target&amp;quot; (the difficulty of the POW) is defined a little bit lower (more difficult) in version 3. This is, because practice did show, it is to easy to flood the network with data.&lt;br /&gt;
In addition to that it is possible in version 3 to lower the time to live of a message (for example when doing a live chat) and getting an easier POW for that.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:POW forumla 2.png|none|caption]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
payloadLengthExtraBytes = 1000&lt;br /&gt;
&lt;br /&gt;
nonceTrialsPerByte = 1000&lt;br /&gt;
&lt;br /&gt;
== Maximum object size ==&lt;br /&gt;
&lt;br /&gt;
In version 2 the maximum object size was defined to be 170 MBytes. This object size is totally unrealistic for a normal use (POW), but is perfectly for a network attack. It will be to big to handle for clients with low bandwidth.&lt;br /&gt;
Currently an average bitmessage &amp;quot;msg&amp;quot; object has the size of 2 kBytes.&lt;br /&gt;
So version 3 limits the objects to a maximum size of 256 KiB(the payload of the object, starting from the POW nonce can have 262144 bytes at maximum).&lt;/div&gt;</summary>
		<author><name>Thomas</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24955</id>
		<title>Protocol specification v3</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24955"/>
		<updated>2014-09-04T06:53:07Z</updated>

		<summary type="html">&lt;p&gt;Thomas: /* Unsupported messages */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Stub}}&lt;br /&gt;
&lt;br /&gt;
{{Template:Proposal}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
This is a DRAFT for the protocol version 3. It describes the changes in protocol version 3 versus version 2. Things which are unchanged from version 2 are not described in detail. So you should use the [[Protocol specification|version 2 protocol specification]] as a reference for all formats which are not mentioned in this description.&lt;br /&gt;
&lt;br /&gt;
== New features in version 3 ==&lt;br /&gt;
&lt;br /&gt;
Here are the new features of the version 3 of Bitmessage protocol in keywords:&lt;br /&gt;
&lt;br /&gt;
* object type is now coded inside the message&lt;br /&gt;
* objects may have a variable time to live&lt;br /&gt;
* The POW is more difficult but can be easier if you lower the time to live&lt;br /&gt;
* The protocol is tolerant for further message extension&lt;br /&gt;
* The protocol is tolerant for further object extension&lt;br /&gt;
* A lower maximum object size&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Common structures ==&lt;br /&gt;
&lt;br /&gt;
=== Variable length integer ===&lt;br /&gt;
&lt;br /&gt;
The shortest possible encoding MUST be used. In version 2 the decimal value 10 could be encoded as 0x0A, 0xFD000A, 0xFE0000000A, or 0xFF000000000000000A. In version 3 only the shortest representation, 0x0A, is allowed. The 9-byte form is no longer useful and SHOULD NOT be used.&lt;br /&gt;
&lt;br /&gt;
Here is an example address which uses malformed varints: BM-CVA3RC7Mvy7JDNSpQChktwrSe4KNMaEdDdcymfUo. This address is invalid.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Message types ==&lt;br /&gt;
&lt;br /&gt;
Most message types are unchanged from version 2 to version 3. Only the four &amp;quot;objecttype&amp;quot; messages are not valid any more. They are summarized into one single message.&lt;br /&gt;
&lt;br /&gt;
=== version ===&lt;br /&gt;
&lt;br /&gt;
The version message is identical to [[Protocol specification#version|version 2 version message]].&lt;br /&gt;
&lt;br /&gt;
=== verack ===&lt;br /&gt;
&lt;br /&gt;
The verack message is identical to [[Protocol specification#verack|version 2 verack message]].&lt;br /&gt;
&lt;br /&gt;
=== addr ===&lt;br /&gt;
&lt;br /&gt;
The addr message is identical to [[Protocol specification#addr|version 2 addr message]].&lt;br /&gt;
&lt;br /&gt;
=== inv ===&lt;br /&gt;
&lt;br /&gt;
The inv message is identical to [[Protocol specification#inv|version 2 inv message]].&lt;br /&gt;
&lt;br /&gt;
=== getdata ===&lt;br /&gt;
&lt;br /&gt;
The getdata message is identical to [[Protocol specification#getdata|version 2 getdata message]].&lt;br /&gt;
&lt;br /&gt;
=== error ===&lt;br /&gt;
&lt;br /&gt;
Version 3 of the protocol defined a special error (or debug) message. This message may be silently ignored (and therefor handled like any other &amp;quot;unknown&amp;quot; message).&lt;br /&gt;
The message is intended to inform the other node about protocol errors and can be used for debugging and improving code.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 1+||fatal||var_int||&lt;br /&gt;
This qualifies the error. If set to 0, than its just a &amp;quot;warning&amp;quot;. You can expect, everything worked fine, anyway. If set to 1, than its an error, so you may expect, something is going wrong (e.g. an object got lost). If set to 2, it's a fatal error. The node will drop the line for that error and maybe bann you for some time.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 1+||ban time||var_int||&lt;br /&gt;
If the error is fatal, you can specify the ban time in seconds, here. You inform the other node, that you will not accept further connections for this number of seconds.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 1+||inventory vector||var_str||&lt;br /&gt;
If the error is related to an object, this Variable length string contains the inventory vector of that object. Ff the error is not related to an object, this string is empty. &lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 1+||error text||var_str||&lt;br /&gt;
A human readable string in English, which describes the error. &lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Unsupported messages ===&lt;br /&gt;
If a node receives an unknown message it &amp;lt;u&amp;gt;must&amp;lt;/u&amp;gt; silently ignore it. This is for further extensions of the protocol with other messages. Nodes that don't understand such a new message type shall be able to work correct with the message types they understand.&lt;br /&gt;
&lt;br /&gt;
Maybe some version 2 nodes did already implement it that way, but in version 3 it is '''part of the protocol specification''', that a node &amp;lt;u&amp;gt;must&amp;lt;/u&amp;gt; silently ignore unsupported messages.&lt;br /&gt;
&lt;br /&gt;
== Object type ==&lt;br /&gt;
&lt;br /&gt;
The four former object types &amp;quot;getpubkey&amp;quot;, &amp;quot;pubkey&amp;quot;, &amp;quot;msg&amp;quot; and &amp;quot;broadcast&amp;quot; are summarized into a single Message type &amp;quot;object&amp;quot;. The four Messages as they did exist in version 2 protocol are not valid any more.&lt;br /&gt;
&lt;br /&gt;
Objects are shared throughout a stream.  A client should advertise objects until their end of life time is reached. To be a valid object, the [[Proof of work|Proof Of Work]] has to be done.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8||POW nonce||uint64_t||&lt;br /&gt;
Random nonce used for the [[Proof of work|Proof Of Work]]&lt;br /&gt;
|-&lt;br /&gt;
| 8||time||uint64_t||&lt;br /&gt;
The &amp;quot;end of life&amp;quot; time of this object (be aware, in version 2 of the protocol this was the generation time). Objects shall be broadcast until its end of life time has been reached. The node shall store the inventory vector of that object for at least another hour to avoid reloading it from another node with a small time delay.&lt;br /&gt;
The maximum value for the &amp;quot;time to life&amp;quot; of an object is 28 days. so the &amp;quot;end of life time&amp;quot; is 28 days in the future at maximum.&lt;br /&gt;
|-&lt;br /&gt;
| 4||object type||uint32_t||&lt;br /&gt;
This field specifies the content of the object.&lt;br /&gt;
Valid values are (at the moment) 0-&amp;quot;getpubkey&amp;quot;, 1-&amp;quot;pubkey&amp;quot;, 2-&amp;quot;msg&amp;quot;, 3-&amp;quot;broadcast&amp;quot;. all other values are reserved. Nodes shall transport objects with unknown types, too. This will make further protocol changes more easy.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| ?||payload||uchar[]||&lt;br /&gt;
This field varies depending on the object type. For a detailed description of their content refer to [[Protocol specification#Object_types|version 2 object types]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Proof of Work ==&lt;br /&gt;
&lt;br /&gt;
Generally the POW is done exactly like in [[Proof of work|version 2]]&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;target&amp;quot; (the difficulty of the POW) is defined a little bit lower (more difficult) in version 3. This is, because practice did show, it is to easy to flood the network with data.&lt;br /&gt;
In addition to that it is possible in version 3 to lower the time to live of a message (for example when doing a live chat) and getting an easier POW for that.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:POW forumla 2.png|none|caption]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
payloadLengthExtraBytes = 1000&lt;br /&gt;
&lt;br /&gt;
nonceTrialsPerByte = 1000&lt;br /&gt;
&lt;br /&gt;
== Maximum object size ==&lt;br /&gt;
&lt;br /&gt;
In version 2 the maximum object size was defined to be 170 MBytes. This object size is totally unrealistic for a normal use (POW), but is perfectly for a network attack. It will be to big to handle for clients with low bandwidth.&lt;br /&gt;
Currently an average bitmessage &amp;quot;msg&amp;quot; object has the size of 2 kBytes.&lt;br /&gt;
So version 3 limits the objects to a maximum size of 256 KiB(the payload of the object, starting from the POW nonce can have 262144 bytes at maximum).&lt;/div&gt;</summary>
		<author><name>Thomas</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24954</id>
		<title>Protocol specification v3</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24954"/>
		<updated>2014-09-04T06:52:55Z</updated>

		<summary type="html">&lt;p&gt;Thomas: /* error */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Stub}}&lt;br /&gt;
&lt;br /&gt;
{{Template:Proposal}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
This is a DRAFT for the protocol version 3. It describes the changes in protocol version 3 versus version 2. Things which are unchanged from version 2 are not described in detail. So you should use the [[Protocol specification|version 2 protocol specification]] as a reference for all formats which are not mentioned in this description.&lt;br /&gt;
&lt;br /&gt;
== New features in version 3 ==&lt;br /&gt;
&lt;br /&gt;
Here are the new features of the version 3 of Bitmessage protocol in keywords:&lt;br /&gt;
&lt;br /&gt;
* object type is now coded inside the message&lt;br /&gt;
* objects may have a variable time to live&lt;br /&gt;
* The POW is more difficult but can be easier if you lower the time to live&lt;br /&gt;
* The protocol is tolerant for further message extension&lt;br /&gt;
* The protocol is tolerant for further object extension&lt;br /&gt;
* A lower maximum object size&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Common structures ==&lt;br /&gt;
&lt;br /&gt;
=== Variable length integer ===&lt;br /&gt;
&lt;br /&gt;
The shortest possible encoding MUST be used. In version 2 the decimal value 10 could be encoded as 0x0A, 0xFD000A, 0xFE0000000A, or 0xFF000000000000000A. In version 3 only the shortest representation, 0x0A, is allowed. The 9-byte form is no longer useful and SHOULD NOT be used.&lt;br /&gt;
&lt;br /&gt;
Here is an example address which uses malformed varints: BM-CVA3RC7Mvy7JDNSpQChktwrSe4KNMaEdDdcymfUo. This address is invalid.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Message types ==&lt;br /&gt;
&lt;br /&gt;
Most message types are unchanged from version 2 to version 3. Only the four &amp;quot;objecttype&amp;quot; messages are not valid any more. They are summarized into one single message.&lt;br /&gt;
&lt;br /&gt;
=== version ===&lt;br /&gt;
&lt;br /&gt;
The version message is identical to [[Protocol specification#version|version 2 version message]].&lt;br /&gt;
&lt;br /&gt;
=== verack ===&lt;br /&gt;
&lt;br /&gt;
The verack message is identical to [[Protocol specification#verack|version 2 verack message]].&lt;br /&gt;
&lt;br /&gt;
=== addr ===&lt;br /&gt;
&lt;br /&gt;
The addr message is identical to [[Protocol specification#addr|version 2 addr message]].&lt;br /&gt;
&lt;br /&gt;
=== inv ===&lt;br /&gt;
&lt;br /&gt;
The inv message is identical to [[Protocol specification#inv|version 2 inv message]].&lt;br /&gt;
&lt;br /&gt;
=== getdata ===&lt;br /&gt;
&lt;br /&gt;
The getdata message is identical to [[Protocol specification#getdata|version 2 getdata message]].&lt;br /&gt;
&lt;br /&gt;
=== error ===&lt;br /&gt;
&lt;br /&gt;
Version 3 of the protocol defined a special error (or debug) message. This message may be silently ignored (and therefor handled like any other &amp;quot;unknown&amp;quot; message).&lt;br /&gt;
The message is intended to inform the other node about protocol errors and can be used for debugging and improving code.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 1+||fatal||var_int||&lt;br /&gt;
This qualifies the error. If set to 0, than its just a &amp;quot;warning&amp;quot;. You can expect, everything worked fine, anyway. If set to 1, than its an error, so you may expect, something is going wrong (e.g. an object got lost). If set to 2, it's a fatal error. The node will drop the line for that error and maybe bann you for some time.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 1+||ban time||var_int||&lt;br /&gt;
If the error is fatal, you can specify the ban time in seconds, here. You inform the other node, that you will not accept further connections for this number of seconds.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 1+||inventory vector||var_str||&lt;br /&gt;
If the error is related to an object, this Variable length string contains the inventory vector of that object. Ff the error is not related to an object, this string is empty. &lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 1+||error text||var_str||&lt;br /&gt;
A human readable string in English, which describes the error. &lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Unsupported messages ===&lt;br /&gt;
If a node receives an unknown message it &amp;lt;u&amp;gt;must&amp;lt;/u&amp;gt; silently ignore it. This is for further extensions of the protocol with other messages. Nodes that don't understand such a new message type shall be able to work correct with the message types they understand.&lt;br /&gt;
&lt;br /&gt;
Maybe some version 2 nodes did already implement it that way, but in version 3 it is '''part of the protocol specification''', that a node &amp;lt;u&amp;gt;must&amp;lt;/u&amp;gt; silently ignore unsupported messages.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 1+||fatal||var_int||&lt;br /&gt;
This qualifies the error. If set to 0, than its just a &amp;quot;warning&amp;quot;. You can expect, everything worked fine, anyway. If set to 1, than its an error, so you may expect, something is going wrong (e.g. an object got lost). If set to 2, it's a fatal error. The node will drop the line for that error and maybe bann you for some time.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 1+||ban time||var_int||&lt;br /&gt;
If the error is fatal, you can specify the ban time in seconds, here. You inform the other node, that you will not accept further connections for this number of seconds.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 1+||inventory vector||var_str||&lt;br /&gt;
If the error is related to an object, this Variable length string contains the inventory vector of that object. Ff the error is not related to an object, this string is empty. &lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 1+||error text||var_str||&lt;br /&gt;
A human readable string in English, which describes the error. &lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Object type ==&lt;br /&gt;
&lt;br /&gt;
The four former object types &amp;quot;getpubkey&amp;quot;, &amp;quot;pubkey&amp;quot;, &amp;quot;msg&amp;quot; and &amp;quot;broadcast&amp;quot; are summarized into a single Message type &amp;quot;object&amp;quot;. The four Messages as they did exist in version 2 protocol are not valid any more.&lt;br /&gt;
&lt;br /&gt;
Objects are shared throughout a stream.  A client should advertise objects until their end of life time is reached. To be a valid object, the [[Proof of work|Proof Of Work]] has to be done.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8||POW nonce||uint64_t||&lt;br /&gt;
Random nonce used for the [[Proof of work|Proof Of Work]]&lt;br /&gt;
|-&lt;br /&gt;
| 8||time||uint64_t||&lt;br /&gt;
The &amp;quot;end of life&amp;quot; time of this object (be aware, in version 2 of the protocol this was the generation time). Objects shall be broadcast until its end of life time has been reached. The node shall store the inventory vector of that object for at least another hour to avoid reloading it from another node with a small time delay.&lt;br /&gt;
The maximum value for the &amp;quot;time to life&amp;quot; of an object is 28 days. so the &amp;quot;end of life time&amp;quot; is 28 days in the future at maximum.&lt;br /&gt;
|-&lt;br /&gt;
| 4||object type||uint32_t||&lt;br /&gt;
This field specifies the content of the object.&lt;br /&gt;
Valid values are (at the moment) 0-&amp;quot;getpubkey&amp;quot;, 1-&amp;quot;pubkey&amp;quot;, 2-&amp;quot;msg&amp;quot;, 3-&amp;quot;broadcast&amp;quot;. all other values are reserved. Nodes shall transport objects with unknown types, too. This will make further protocol changes more easy.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| ?||payload||uchar[]||&lt;br /&gt;
This field varies depending on the object type. For a detailed description of their content refer to [[Protocol specification#Object_types|version 2 object types]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Proof of Work ==&lt;br /&gt;
&lt;br /&gt;
Generally the POW is done exactly like in [[Proof of work|version 2]]&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;target&amp;quot; (the difficulty of the POW) is defined a little bit lower (more difficult) in version 3. This is, because practice did show, it is to easy to flood the network with data.&lt;br /&gt;
In addition to that it is possible in version 3 to lower the time to live of a message (for example when doing a live chat) and getting an easier POW for that.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:POW forumla 2.png|none|caption]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
payloadLengthExtraBytes = 1000&lt;br /&gt;
&lt;br /&gt;
nonceTrialsPerByte = 1000&lt;br /&gt;
&lt;br /&gt;
== Maximum object size ==&lt;br /&gt;
&lt;br /&gt;
In version 2 the maximum object size was defined to be 170 MBytes. This object size is totally unrealistic for a normal use (POW), but is perfectly for a network attack. It will be to big to handle for clients with low bandwidth.&lt;br /&gt;
Currently an average bitmessage &amp;quot;msg&amp;quot; object has the size of 2 kBytes.&lt;br /&gt;
So version 3 limits the objects to a maximum size of 256 KiB(the payload of the object, starting from the POW nonce can have 262144 bytes at maximum).&lt;/div&gt;</summary>
		<author><name>Thomas</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24953</id>
		<title>Protocol specification v3</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24953"/>
		<updated>2014-09-04T06:52:18Z</updated>

		<summary type="html">&lt;p&gt;Thomas: /* Unsupported messages */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Stub}}&lt;br /&gt;
&lt;br /&gt;
{{Template:Proposal}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
This is a DRAFT for the protocol version 3. It describes the changes in protocol version 3 versus version 2. Things which are unchanged from version 2 are not described in detail. So you should use the [[Protocol specification|version 2 protocol specification]] as a reference for all formats which are not mentioned in this description.&lt;br /&gt;
&lt;br /&gt;
== New features in version 3 ==&lt;br /&gt;
&lt;br /&gt;
Here are the new features of the version 3 of Bitmessage protocol in keywords:&lt;br /&gt;
&lt;br /&gt;
* object type is now coded inside the message&lt;br /&gt;
* objects may have a variable time to live&lt;br /&gt;
* The POW is more difficult but can be easier if you lower the time to live&lt;br /&gt;
* The protocol is tolerant for further message extension&lt;br /&gt;
* The protocol is tolerant for further object extension&lt;br /&gt;
* A lower maximum object size&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Common structures ==&lt;br /&gt;
&lt;br /&gt;
=== Variable length integer ===&lt;br /&gt;
&lt;br /&gt;
The shortest possible encoding MUST be used. In version 2 the decimal value 10 could be encoded as 0x0A, 0xFD000A, 0xFE0000000A, or 0xFF000000000000000A. In version 3 only the shortest representation, 0x0A, is allowed. The 9-byte form is no longer useful and SHOULD NOT be used.&lt;br /&gt;
&lt;br /&gt;
Here is an example address which uses malformed varints: BM-CVA3RC7Mvy7JDNSpQChktwrSe4KNMaEdDdcymfUo. This address is invalid.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Message types ==&lt;br /&gt;
&lt;br /&gt;
Most message types are unchanged from version 2 to version 3. Only the four &amp;quot;objecttype&amp;quot; messages are not valid any more. They are summarized into one single message.&lt;br /&gt;
&lt;br /&gt;
=== version ===&lt;br /&gt;
&lt;br /&gt;
The version message is identical to [[Protocol specification#version|version 2 version message]].&lt;br /&gt;
&lt;br /&gt;
=== verack ===&lt;br /&gt;
&lt;br /&gt;
The verack message is identical to [[Protocol specification#verack|version 2 verack message]].&lt;br /&gt;
&lt;br /&gt;
=== addr ===&lt;br /&gt;
&lt;br /&gt;
The addr message is identical to [[Protocol specification#addr|version 2 addr message]].&lt;br /&gt;
&lt;br /&gt;
=== inv ===&lt;br /&gt;
&lt;br /&gt;
The inv message is identical to [[Protocol specification#inv|version 2 inv message]].&lt;br /&gt;
&lt;br /&gt;
=== getdata ===&lt;br /&gt;
&lt;br /&gt;
The getdata message is identical to [[Protocol specification#getdata|version 2 getdata message]].&lt;br /&gt;
&lt;br /&gt;
=== error ===&lt;br /&gt;
&lt;br /&gt;
Version 3 of the protocol defined a special error (or debug) message. This message may be silently ignored (and therefor handled like any other &amp;quot;unknown&amp;quot; message).&lt;br /&gt;
The message is intended to inform the other node about protocol errors and can be used for debugging and improving code.&lt;br /&gt;
&lt;br /&gt;
=== Unsupported messages ===&lt;br /&gt;
If a node receives an unknown message it &amp;lt;u&amp;gt;must&amp;lt;/u&amp;gt; silently ignore it. This is for further extensions of the protocol with other messages. Nodes that don't understand such a new message type shall be able to work correct with the message types they understand.&lt;br /&gt;
&lt;br /&gt;
Maybe some version 2 nodes did already implement it that way, but in version 3 it is '''part of the protocol specification''', that a node &amp;lt;u&amp;gt;must&amp;lt;/u&amp;gt; silently ignore unsupported messages.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 1+||fatal||var_int||&lt;br /&gt;
This qualifies the error. If set to 0, than its just a &amp;quot;warning&amp;quot;. You can expect, everything worked fine, anyway. If set to 1, than its an error, so you may expect, something is going wrong (e.g. an object got lost). If set to 2, it's a fatal error. The node will drop the line for that error and maybe bann you for some time.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 1+||ban time||var_int||&lt;br /&gt;
If the error is fatal, you can specify the ban time in seconds, here. You inform the other node, that you will not accept further connections for this number of seconds.&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 1+||inventory vector||var_str||&lt;br /&gt;
If the error is related to an object, this Variable length string contains the inventory vector of that object. Ff the error is not related to an object, this string is empty. &lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| 1+||error text||var_str||&lt;br /&gt;
A human readable string in English, which describes the error. &lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Object type ==&lt;br /&gt;
&lt;br /&gt;
The four former object types &amp;quot;getpubkey&amp;quot;, &amp;quot;pubkey&amp;quot;, &amp;quot;msg&amp;quot; and &amp;quot;broadcast&amp;quot; are summarized into a single Message type &amp;quot;object&amp;quot;. The four Messages as they did exist in version 2 protocol are not valid any more.&lt;br /&gt;
&lt;br /&gt;
Objects are shared throughout a stream.  A client should advertise objects until their end of life time is reached. To be a valid object, the [[Proof of work|Proof Of Work]] has to be done.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8||POW nonce||uint64_t||&lt;br /&gt;
Random nonce used for the [[Proof of work|Proof Of Work]]&lt;br /&gt;
|-&lt;br /&gt;
| 8||time||uint64_t||&lt;br /&gt;
The &amp;quot;end of life&amp;quot; time of this object (be aware, in version 2 of the protocol this was the generation time). Objects shall be broadcast until its end of life time has been reached. The node shall store the inventory vector of that object for at least another hour to avoid reloading it from another node with a small time delay.&lt;br /&gt;
The maximum value for the &amp;quot;time to life&amp;quot; of an object is 28 days. so the &amp;quot;end of life time&amp;quot; is 28 days in the future at maximum.&lt;br /&gt;
|-&lt;br /&gt;
| 4||object type||uint32_t||&lt;br /&gt;
This field specifies the content of the object.&lt;br /&gt;
Valid values are (at the moment) 0-&amp;quot;getpubkey&amp;quot;, 1-&amp;quot;pubkey&amp;quot;, 2-&amp;quot;msg&amp;quot;, 3-&amp;quot;broadcast&amp;quot;. all other values are reserved. Nodes shall transport objects with unknown types, too. This will make further protocol changes more easy.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| ?||payload||uchar[]||&lt;br /&gt;
This field varies depending on the object type. For a detailed description of their content refer to [[Protocol specification#Object_types|version 2 object types]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Proof of Work ==&lt;br /&gt;
&lt;br /&gt;
Generally the POW is done exactly like in [[Proof of work|version 2]]&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;target&amp;quot; (the difficulty of the POW) is defined a little bit lower (more difficult) in version 3. This is, because practice did show, it is to easy to flood the network with data.&lt;br /&gt;
In addition to that it is possible in version 3 to lower the time to live of a message (for example when doing a live chat) and getting an easier POW for that.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:POW forumla 2.png|none|caption]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
payloadLengthExtraBytes = 1000&lt;br /&gt;
&lt;br /&gt;
nonceTrialsPerByte = 1000&lt;br /&gt;
&lt;br /&gt;
== Maximum object size ==&lt;br /&gt;
&lt;br /&gt;
In version 2 the maximum object size was defined to be 170 MBytes. This object size is totally unrealistic for a normal use (POW), but is perfectly for a network attack. It will be to big to handle for clients with low bandwidth.&lt;br /&gt;
Currently an average bitmessage &amp;quot;msg&amp;quot; object has the size of 2 kBytes.&lt;br /&gt;
So version 3 limits the objects to a maximum size of 256 KiB(the payload of the object, starting from the POW nonce can have 262144 bytes at maximum).&lt;/div&gt;</summary>
		<author><name>Thomas</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24952</id>
		<title>Protocol specification v3</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24952"/>
		<updated>2014-09-04T06:37:53Z</updated>

		<summary type="html">&lt;p&gt;Thomas: /* error */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Stub}}&lt;br /&gt;
&lt;br /&gt;
{{Template:Proposal}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
This is a DRAFT for the protocol version 3. It describes the changes in protocol version 3 versus version 2. Things which are unchanged from version 2 are not described in detail. So you should use the [[Protocol specification|version 2 protocol specification]] as a reference for all formats which are not mentioned in this description.&lt;br /&gt;
&lt;br /&gt;
== New features in version 3 ==&lt;br /&gt;
&lt;br /&gt;
Here are the new features of the version 3 of Bitmessage protocol in keywords:&lt;br /&gt;
&lt;br /&gt;
* object type is now coded inside the message&lt;br /&gt;
* objects may have a variable time to live&lt;br /&gt;
* The POW is more difficult but can be easier if you lower the time to live&lt;br /&gt;
* The protocol is tolerant for further message extension&lt;br /&gt;
* The protocol is tolerant for further object extension&lt;br /&gt;
* A lower maximum object size&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Common structures ==&lt;br /&gt;
&lt;br /&gt;
=== Variable length integer ===&lt;br /&gt;
&lt;br /&gt;
The shortest possible encoding MUST be used. In version 2 the decimal value 10 could be encoded as 0x0A, 0xFD000A, 0xFE0000000A, or 0xFF000000000000000A. In version 3 only the shortest representation, 0x0A, is allowed. The 9-byte form is no longer useful and SHOULD NOT be used.&lt;br /&gt;
&lt;br /&gt;
Here is an example address which uses malformed varints: BM-CVA3RC7Mvy7JDNSpQChktwrSe4KNMaEdDdcymfUo. This address is invalid.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Message types ==&lt;br /&gt;
&lt;br /&gt;
Most message types are unchanged from version 2 to version 3. Only the four &amp;quot;objecttype&amp;quot; messages are not valid any more. They are summarized into one single message.&lt;br /&gt;
&lt;br /&gt;
=== version ===&lt;br /&gt;
&lt;br /&gt;
The version message is identical to [[Protocol specification#version|version 2 version message]].&lt;br /&gt;
&lt;br /&gt;
=== verack ===&lt;br /&gt;
&lt;br /&gt;
The verack message is identical to [[Protocol specification#verack|version 2 verack message]].&lt;br /&gt;
&lt;br /&gt;
=== addr ===&lt;br /&gt;
&lt;br /&gt;
The addr message is identical to [[Protocol specification#addr|version 2 addr message]].&lt;br /&gt;
&lt;br /&gt;
=== inv ===&lt;br /&gt;
&lt;br /&gt;
The inv message is identical to [[Protocol specification#inv|version 2 inv message]].&lt;br /&gt;
&lt;br /&gt;
=== getdata ===&lt;br /&gt;
&lt;br /&gt;
The getdata message is identical to [[Protocol specification#getdata|version 2 getdata message]].&lt;br /&gt;
&lt;br /&gt;
=== error ===&lt;br /&gt;
&lt;br /&gt;
Version 3 of the protocol defined a special error (or debug) message. This message may be silently ignored (and therefor handled like any other &amp;quot;unknown&amp;quot; message).&lt;br /&gt;
The message is intended to inform the other node about protocol errors and can be used for debugging and improving code.&lt;br /&gt;
&lt;br /&gt;
=== Unsupported messages ===&lt;br /&gt;
If a node receives an unknown message it &amp;lt;u&amp;gt;must&amp;lt;/u&amp;gt; silently ignore it. This is for further extensions of the protocol with other messages. Nodes that don't understand such a new message type shall be able to work correct with the message types they understand.&lt;br /&gt;
&lt;br /&gt;
Maybe some version 2 nodes did already implement it that way, but in version 3 it is '''part of the protocol specification''', that a node &amp;lt;u&amp;gt;must&amp;lt;/u&amp;gt; silently ignore unsupported messages.&lt;br /&gt;
&lt;br /&gt;
== Object type ==&lt;br /&gt;
&lt;br /&gt;
The four former object types &amp;quot;getpubkey&amp;quot;, &amp;quot;pubkey&amp;quot;, &amp;quot;msg&amp;quot; and &amp;quot;broadcast&amp;quot; are summarized into a single Message type &amp;quot;object&amp;quot;. The four Messages as they did exist in version 2 protocol are not valid any more.&lt;br /&gt;
&lt;br /&gt;
Objects are shared throughout a stream.  A client should advertise objects until their end of life time is reached. To be a valid object, the [[Proof of work|Proof Of Work]] has to be done.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8||POW nonce||uint64_t||&lt;br /&gt;
Random nonce used for the [[Proof of work|Proof Of Work]]&lt;br /&gt;
|-&lt;br /&gt;
| 8||time||uint64_t||&lt;br /&gt;
The &amp;quot;end of life&amp;quot; time of this object (be aware, in version 2 of the protocol this was the generation time). Objects shall be broadcast until its end of life time has been reached. The node shall store the inventory vector of that object for at least another hour to avoid reloading it from another node with a small time delay.&lt;br /&gt;
The maximum value for the &amp;quot;time to life&amp;quot; of an object is 28 days. so the &amp;quot;end of life time&amp;quot; is 28 days in the future at maximum.&lt;br /&gt;
|-&lt;br /&gt;
| 4||object type||uint32_t||&lt;br /&gt;
This field specifies the content of the object.&lt;br /&gt;
Valid values are (at the moment) 0-&amp;quot;getpubkey&amp;quot;, 1-&amp;quot;pubkey&amp;quot;, 2-&amp;quot;msg&amp;quot;, 3-&amp;quot;broadcast&amp;quot;. all other values are reserved. Nodes shall transport objects with unknown types, too. This will make further protocol changes more easy.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| ?||payload||uchar[]||&lt;br /&gt;
This field varies depending on the object type. For a detailed description of their content refer to [[Protocol specification#Object_types|version 2 object types]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Proof of Work ==&lt;br /&gt;
&lt;br /&gt;
Generally the POW is done exactly like in [[Proof of work|version 2]]&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;target&amp;quot; (the difficulty of the POW) is defined a little bit lower (more difficult) in version 3. This is, because practice did show, it is to easy to flood the network with data.&lt;br /&gt;
In addition to that it is possible in version 3 to lower the time to live of a message (for example when doing a live chat) and getting an easier POW for that.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:POW forumla 2.png|none|caption]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
payloadLengthExtraBytes = 1000&lt;br /&gt;
&lt;br /&gt;
nonceTrialsPerByte = 1000&lt;br /&gt;
&lt;br /&gt;
== Maximum object size ==&lt;br /&gt;
&lt;br /&gt;
In version 2 the maximum object size was defined to be 170 MBytes. This object size is totally unrealistic for a normal use (POW), but is perfectly for a network attack. It will be to big to handle for clients with low bandwidth.&lt;br /&gt;
Currently an average bitmessage &amp;quot;msg&amp;quot; object has the size of 2 kBytes.&lt;br /&gt;
So version 3 limits the objects to a maximum size of 256 KiB(the payload of the object, starting from the POW nonce can have 262144 bytes at maximum).&lt;/div&gt;</summary>
		<author><name>Thomas</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24951</id>
		<title>Protocol specification v3</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24951"/>
		<updated>2014-09-04T06:35:24Z</updated>

		<summary type="html">&lt;p&gt;Thomas: /* getdata */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Stub}}&lt;br /&gt;
&lt;br /&gt;
{{Template:Proposal}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
This is a DRAFT for the protocol version 3. It describes the changes in protocol version 3 versus version 2. Things which are unchanged from version 2 are not described in detail. So you should use the [[Protocol specification|version 2 protocol specification]] as a reference for all formats which are not mentioned in this description.&lt;br /&gt;
&lt;br /&gt;
== New features in version 3 ==&lt;br /&gt;
&lt;br /&gt;
Here are the new features of the version 3 of Bitmessage protocol in keywords:&lt;br /&gt;
&lt;br /&gt;
* object type is now coded inside the message&lt;br /&gt;
* objects may have a variable time to live&lt;br /&gt;
* The POW is more difficult but can be easier if you lower the time to live&lt;br /&gt;
* The protocol is tolerant for further message extension&lt;br /&gt;
* The protocol is tolerant for further object extension&lt;br /&gt;
* A lower maximum object size&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Common structures ==&lt;br /&gt;
&lt;br /&gt;
=== Variable length integer ===&lt;br /&gt;
&lt;br /&gt;
The shortest possible encoding MUST be used. In version 2 the decimal value 10 could be encoded as 0x0A, 0xFD000A, 0xFE0000000A, or 0xFF000000000000000A. In version 3 only the shortest representation, 0x0A, is allowed. The 9-byte form is no longer useful and SHOULD NOT be used.&lt;br /&gt;
&lt;br /&gt;
Here is an example address which uses malformed varints: BM-CVA3RC7Mvy7JDNSpQChktwrSe4KNMaEdDdcymfUo. This address is invalid.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Message types ==&lt;br /&gt;
&lt;br /&gt;
Most message types are unchanged from version 2 to version 3. Only the four &amp;quot;objecttype&amp;quot; messages are not valid any more. They are summarized into one single message.&lt;br /&gt;
&lt;br /&gt;
=== version ===&lt;br /&gt;
&lt;br /&gt;
The version message is identical to [[Protocol specification#version|version 2 version message]].&lt;br /&gt;
&lt;br /&gt;
=== verack ===&lt;br /&gt;
&lt;br /&gt;
The verack message is identical to [[Protocol specification#verack|version 2 verack message]].&lt;br /&gt;
&lt;br /&gt;
=== addr ===&lt;br /&gt;
&lt;br /&gt;
The addr message is identical to [[Protocol specification#addr|version 2 addr message]].&lt;br /&gt;
&lt;br /&gt;
=== inv ===&lt;br /&gt;
&lt;br /&gt;
The inv message is identical to [[Protocol specification#inv|version 2 inv message]].&lt;br /&gt;
&lt;br /&gt;
=== getdata ===&lt;br /&gt;
&lt;br /&gt;
The getdata message is identical to [[Protocol specification#getdata|version 2 getdata message]].&lt;br /&gt;
&lt;br /&gt;
=== error ===&lt;br /&gt;
&lt;br /&gt;
Version 3 of the protocol defined a special error (or debug) message.&lt;br /&gt;
&lt;br /&gt;
=== Unsupported messages ===&lt;br /&gt;
If a node receives an unknown message it &amp;lt;u&amp;gt;must&amp;lt;/u&amp;gt; silently ignore it. This is for further extensions of the protocol with other messages. Nodes that don't understand such a new message type shall be able to work correct with the message types they understand.&lt;br /&gt;
&lt;br /&gt;
Maybe some version 2 nodes did already implement it that way, but in version 3 it is '''part of the protocol specification''', that a node &amp;lt;u&amp;gt;must&amp;lt;/u&amp;gt; silently ignore unsupported messages.&lt;br /&gt;
&lt;br /&gt;
== Object type ==&lt;br /&gt;
&lt;br /&gt;
The four former object types &amp;quot;getpubkey&amp;quot;, &amp;quot;pubkey&amp;quot;, &amp;quot;msg&amp;quot; and &amp;quot;broadcast&amp;quot; are summarized into a single Message type &amp;quot;object&amp;quot;. The four Messages as they did exist in version 2 protocol are not valid any more.&lt;br /&gt;
&lt;br /&gt;
Objects are shared throughout a stream.  A client should advertise objects until their end of life time is reached. To be a valid object, the [[Proof of work|Proof Of Work]] has to be done.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8||POW nonce||uint64_t||&lt;br /&gt;
Random nonce used for the [[Proof of work|Proof Of Work]]&lt;br /&gt;
|-&lt;br /&gt;
| 8||time||uint64_t||&lt;br /&gt;
The &amp;quot;end of life&amp;quot; time of this object (be aware, in version 2 of the protocol this was the generation time). Objects shall be broadcast until its end of life time has been reached. The node shall store the inventory vector of that object for at least another hour to avoid reloading it from another node with a small time delay.&lt;br /&gt;
The maximum value for the &amp;quot;time to life&amp;quot; of an object is 28 days. so the &amp;quot;end of life time&amp;quot; is 28 days in the future at maximum.&lt;br /&gt;
|-&lt;br /&gt;
| 4||object type||uint32_t||&lt;br /&gt;
This field specifies the content of the object.&lt;br /&gt;
Valid values are (at the moment) 0-&amp;quot;getpubkey&amp;quot;, 1-&amp;quot;pubkey&amp;quot;, 2-&amp;quot;msg&amp;quot;, 3-&amp;quot;broadcast&amp;quot;. all other values are reserved. Nodes shall transport objects with unknown types, too. This will make further protocol changes more easy.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| ?||payload||uchar[]||&lt;br /&gt;
This field varies depending on the object type. For a detailed description of their content refer to [[Protocol specification#Object_types|version 2 object types]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Proof of Work ==&lt;br /&gt;
&lt;br /&gt;
Generally the POW is done exactly like in [[Proof of work|version 2]]&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;target&amp;quot; (the difficulty of the POW) is defined a little bit lower (more difficult) in version 3. This is, because practice did show, it is to easy to flood the network with data.&lt;br /&gt;
In addition to that it is possible in version 3 to lower the time to live of a message (for example when doing a live chat) and getting an easier POW for that.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:POW forumla 2.png|none|caption]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
payloadLengthExtraBytes = 1000&lt;br /&gt;
&lt;br /&gt;
nonceTrialsPerByte = 1000&lt;br /&gt;
&lt;br /&gt;
== Maximum object size ==&lt;br /&gt;
&lt;br /&gt;
In version 2 the maximum object size was defined to be 170 MBytes. This object size is totally unrealistic for a normal use (POW), but is perfectly for a network attack. It will be to big to handle for clients with low bandwidth.&lt;br /&gt;
Currently an average bitmessage &amp;quot;msg&amp;quot; object has the size of 2 kBytes.&lt;br /&gt;
So version 3 limits the objects to a maximum size of 256 KiB(the payload of the object, starting from the POW nonce can have 262144 bytes at maximum).&lt;/div&gt;</summary>
		<author><name>Thomas</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24947</id>
		<title>Protocol specification v3</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24947"/>
		<updated>2014-09-03T07:44:17Z</updated>

		<summary type="html">&lt;p&gt;Thomas: /* Proof of Work */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Stub}}&lt;br /&gt;
&lt;br /&gt;
{{Template:Proposal}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
This is a DRAFT for the protocol version 3. It describes the changes in protocol version 3 versus version 2. Things which are unchanged from version 2 are not described in detail. So you should use the [[Protocol specification|version 2 protocol specification]] as a reference for all formats which are not mentioned in this description.&lt;br /&gt;
&lt;br /&gt;
== New features in version 3 ==&lt;br /&gt;
&lt;br /&gt;
Here are the new features of the version 3 of Bitmessage protocol in keywords:&lt;br /&gt;
&lt;br /&gt;
* object type is now coded inside the message&lt;br /&gt;
* objects may have a variable time to live&lt;br /&gt;
* The POW is more difficult but can be easier if you lower the time to live&lt;br /&gt;
* The protocol is tolerant for further message extension&lt;br /&gt;
* The protocol is tolerant for further object extension&lt;br /&gt;
* A lower maximum object size&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Common structures ==&lt;br /&gt;
&lt;br /&gt;
=== Variable length integer ===&lt;br /&gt;
&lt;br /&gt;
The shortest possible encoding MUST be used. In version 2 the decimal value 10 could be encoded as 0x0A, 0xFD000A, 0xFE0000000A, or 0xFF000000000000000A. In version 3 only the shortest representation, 0x0A, is allowed. The 9-byte form is no longer useful and SHOULD NOT be used.&lt;br /&gt;
&lt;br /&gt;
Here is an example address which uses malformed varints: BM-CVA3RC7Mvy7JDNSpQChktwrSe4KNMaEdDdcymfUo. This address is invalid.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Message types ==&lt;br /&gt;
&lt;br /&gt;
Most message types are unchanged from version 2 to version 3. Only the four &amp;quot;objecttype&amp;quot; messages are not valid any more. They are summarized into one single message.&lt;br /&gt;
&lt;br /&gt;
=== version ===&lt;br /&gt;
&lt;br /&gt;
The version message is identical to [[Protocol specification#version|version 2 version message]].&lt;br /&gt;
&lt;br /&gt;
=== verack ===&lt;br /&gt;
&lt;br /&gt;
The verack message is identical to [[Protocol specification#verack|version 2 verack message]].&lt;br /&gt;
&lt;br /&gt;
=== addr ===&lt;br /&gt;
&lt;br /&gt;
The addr message is identical to [[Protocol specification#addr|version 2 addr message]].&lt;br /&gt;
&lt;br /&gt;
=== inv ===&lt;br /&gt;
&lt;br /&gt;
The inv message is identical to [[Protocol specification#inv|version 2 inv message]].&lt;br /&gt;
&lt;br /&gt;
=== getdata ===&lt;br /&gt;
&lt;br /&gt;
The getdata message is identical to [[Protocol specification#getdata|version 2 getdata message]].&lt;br /&gt;
&lt;br /&gt;
=== Unsupported messages ===&lt;br /&gt;
If a node receives an unknown message it &amp;lt;u&amp;gt;must&amp;lt;/u&amp;gt; silently ignore it. This is for further extensions of the protocol with other messages. Nodes that don't understand such a new message type shall be able to work correct with the message types they understand.&lt;br /&gt;
&lt;br /&gt;
Maybe some version 2 nodes did already implement it that way, but in version 3 it is '''part of the protocol specification''', that a node &amp;lt;u&amp;gt;must&amp;lt;/u&amp;gt; silently ignore unsupported messages.&lt;br /&gt;
&lt;br /&gt;
== Object type ==&lt;br /&gt;
&lt;br /&gt;
The four former object types &amp;quot;getpubkey&amp;quot;, &amp;quot;pubkey&amp;quot;, &amp;quot;msg&amp;quot; and &amp;quot;broadcast&amp;quot; are summarized into a single Message type &amp;quot;object&amp;quot;. The four Messages as they did exist in version 2 protocol are not valid any more.&lt;br /&gt;
&lt;br /&gt;
Objects are shared throughout a stream.  A client should advertise objects until their end of life time is reached. To be a valid object, the [[Proof of work|Proof Of Work]] has to be done.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8||POW nonce||uint64_t||&lt;br /&gt;
Random nonce used for the [[Proof of work|Proof Of Work]]&lt;br /&gt;
|-&lt;br /&gt;
| 8||time||uint64_t||&lt;br /&gt;
The &amp;quot;end of life&amp;quot; time of this object (be aware, in version 2 of the protocol this was the generation time). Objects shall be broadcast until its end of life time has been reached. The node shall store the inventory vector of that object for at least another hour to avoid reloading it from another node with a small time delay.&lt;br /&gt;
The maximum value for the &amp;quot;time to life&amp;quot; of an object is 28 days. so the &amp;quot;end of life time&amp;quot; is 28 days in the future at maximum.&lt;br /&gt;
|-&lt;br /&gt;
| 4||object type||uint32_t||&lt;br /&gt;
This field specifies the content of the object.&lt;br /&gt;
Valid values are (at the moment) 0-&amp;quot;getpubkey&amp;quot;, 1-&amp;quot;pubkey&amp;quot;, 2-&amp;quot;msg&amp;quot;, 3-&amp;quot;broadcast&amp;quot;. all other values are reserved. Nodes shall transport objects with unknown types, too. This will make further protocol changes more easy.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| ?||payload||uchar[]||&lt;br /&gt;
This field varies depending on the object type. For a detailed description of their content refer to [[Protocol specification#Object_types|version 2 object types]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Proof of Work ==&lt;br /&gt;
&lt;br /&gt;
Generally the POW is done exactly like in [[Proof of work|version 2]]&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;target&amp;quot; (the difficulty of the POW) is defined a little bit lower (more difficult) in version 3. This is, because practice did show, it is to easy to flood the network with data.&lt;br /&gt;
In addition to that it is possible in version 3 to lower the time to live of a message (for example when doing a live chat) and getting an easier POW for that.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:POW forumla 2.png|none|caption]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
payloadLengthExtraBytes = 1000&lt;br /&gt;
&lt;br /&gt;
nonceTrialsPerByte = 1000&lt;br /&gt;
&lt;br /&gt;
== Maximum object size ==&lt;br /&gt;
&lt;br /&gt;
In version 2 the maximum object size was defined to be 170 MBytes. This object size is totally unrealistic for a normal use (POW), but is perfectly for a network attack. It will be to big to handle for clients with low bandwidth.&lt;br /&gt;
Currently an average bitmessage &amp;quot;msg&amp;quot; object has the size of 2 kBytes.&lt;br /&gt;
So version 3 limits the objects to a maximum size of 256 KiB(the payload of the object, starting from the POW nonce can have 262144 bytes at maximum).&lt;/div&gt;</summary>
		<author><name>Thomas</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24946</id>
		<title>Protocol specification v3</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24946"/>
		<updated>2014-09-03T06:31:43Z</updated>

		<summary type="html">&lt;p&gt;Thomas: /* Proof of Work */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Stub}}&lt;br /&gt;
&lt;br /&gt;
{{Template:Proposal}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
This is a DRAFT for the protocol version 3. It describes the changes in protocol version 3 versus version 2. Things which are unchanged from version 2 are not described in detail. So you should use the [[Protocol specification|version 2 protocol specification]] as a reference for all formats which are not mentioned in this description.&lt;br /&gt;
&lt;br /&gt;
== New features in version 3 ==&lt;br /&gt;
&lt;br /&gt;
Here are the new features of the version 3 of Bitmessage protocol in keywords:&lt;br /&gt;
&lt;br /&gt;
* object type is now coded inside the message&lt;br /&gt;
* objects may have a variable time to live&lt;br /&gt;
* The POW is more difficult but can be easier if you lower the time to live&lt;br /&gt;
* The protocol is tolerant for further message extension&lt;br /&gt;
* The protocol is tolerant for further object extension&lt;br /&gt;
* A lower maximum object size&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Common structures ==&lt;br /&gt;
&lt;br /&gt;
=== Variable length integer ===&lt;br /&gt;
&lt;br /&gt;
The shortest possible encoding MUST be used. In version 2 the decimal value 10 could be encoded as 0x0A, 0xFD000A, 0xFE0000000A, or 0xFF000000000000000A. In version 3 only the shortest representation, 0x0A, is allowed. The 9-byte form is no longer useful and SHOULD NOT be used.&lt;br /&gt;
&lt;br /&gt;
Here is an example address which uses malformed varints: BM-CVA3RC7Mvy7JDNSpQChktwrSe4KNMaEdDdcymfUo. This address is invalid.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Message types ==&lt;br /&gt;
&lt;br /&gt;
Most message types are unchanged from version 2 to version 3. Only the four &amp;quot;objecttype&amp;quot; messages are not valid any more. They are summarized into one single message.&lt;br /&gt;
&lt;br /&gt;
=== version ===&lt;br /&gt;
&lt;br /&gt;
The version message is identical to [[Protocol specification#version|version 2 version message]].&lt;br /&gt;
&lt;br /&gt;
=== verack ===&lt;br /&gt;
&lt;br /&gt;
The verack message is identical to [[Protocol specification#verack|version 2 verack message]].&lt;br /&gt;
&lt;br /&gt;
=== addr ===&lt;br /&gt;
&lt;br /&gt;
The addr message is identical to [[Protocol specification#addr|version 2 addr message]].&lt;br /&gt;
&lt;br /&gt;
=== inv ===&lt;br /&gt;
&lt;br /&gt;
The inv message is identical to [[Protocol specification#inv|version 2 inv message]].&lt;br /&gt;
&lt;br /&gt;
=== getdata ===&lt;br /&gt;
&lt;br /&gt;
The getdata message is identical to [[Protocol specification#getdata|version 2 getdata message]].&lt;br /&gt;
&lt;br /&gt;
=== Unsupported messages ===&lt;br /&gt;
If a node receives an unknown message it &amp;lt;u&amp;gt;must&amp;lt;/u&amp;gt; silently ignore it. This is for further extensions of the protocol with other messages. Nodes that don't understand such a new message type shall be able to work correct with the message types they understand.&lt;br /&gt;
&lt;br /&gt;
Maybe some version 2 nodes did already implement it that way, but in version 3 it is '''part of the protocol specification''', that a node &amp;lt;u&amp;gt;must&amp;lt;/u&amp;gt; silently ignore unsupported messages.&lt;br /&gt;
&lt;br /&gt;
== Object type ==&lt;br /&gt;
&lt;br /&gt;
The four former object types &amp;quot;getpubkey&amp;quot;, &amp;quot;pubkey&amp;quot;, &amp;quot;msg&amp;quot; and &amp;quot;broadcast&amp;quot; are summarized into a single Message type &amp;quot;object&amp;quot;. The four Messages as they did exist in version 2 protocol are not valid any more.&lt;br /&gt;
&lt;br /&gt;
Objects are shared throughout a stream.  A client should advertise objects until their end of life time is reached. To be a valid object, the [[Proof of work|Proof Of Work]] has to be done.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8||POW nonce||uint64_t||&lt;br /&gt;
Random nonce used for the [[Proof of work|Proof Of Work]]&lt;br /&gt;
|-&lt;br /&gt;
| 8||time||uint64_t||&lt;br /&gt;
The &amp;quot;end of life&amp;quot; time of this object (be aware, in version 2 of the protocol this was the generation time). Objects shall be broadcast until its end of life time has been reached. The node shall store the inventory vector of that object for at least another hour to avoid reloading it from another node with a small time delay.&lt;br /&gt;
The maximum value for the &amp;quot;time to life&amp;quot; of an object is 28 days. so the &amp;quot;end of life time&amp;quot; is 28 days in the future at maximum.&lt;br /&gt;
|-&lt;br /&gt;
| 4||object type||uint32_t||&lt;br /&gt;
This field specifies the content of the object.&lt;br /&gt;
Valid values are (at the moment) 0-&amp;quot;getpubkey&amp;quot;, 1-&amp;quot;pubkey&amp;quot;, 2-&amp;quot;msg&amp;quot;, 3-&amp;quot;broadcast&amp;quot;. all other values are reserved. Nodes shall transport objects with unknown types, too. This will make further protocol changes more easy.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| ?||payload||uchar[]||&lt;br /&gt;
This field varies depending on the object type. For a detailed description of their content refer to [[Protocol specification#Object_types|version 2 object types]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Proof of Work ==&lt;br /&gt;
&lt;br /&gt;
Generally the POW is done exactly like in [[Proof of work|version 2]]&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;target&amp;quot; (the difficulty of the POW) is defined a little bit lower (more difficult) in version 3. This is, because practice did show, it is to easy to flood the network with data.&lt;br /&gt;
In addition to that it is possible in version 3 to lower the time to live of a message (for example when doing a live chat) and getting an easier POW for that.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:POW forumla 2.png|none|caption]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
payloadLengthExtraBytes = 1000&lt;br /&gt;
&lt;br /&gt;
nonceTrialsPerByte = 1000&lt;br /&gt;
&lt;br /&gt;
Comparison:&lt;br /&gt;
Sending a small (487 byte) message on a laptop will take 6 seconds with a short TTL or 3.7 minutes for the longest TTL (28 days). This is 3 times faster and 5 times slower respectively than the formula I posted a few days ago.&lt;br /&gt;
&lt;br /&gt;
== Maximum object size ==&lt;br /&gt;
&lt;br /&gt;
In version 2 the maximum object size was defined to be 170 MBytes. This object size is totally unrealistic for a normal use (POW), but is perfectly for a network attack. It will be to big to handle for clients with low bandwidth.&lt;br /&gt;
Currently an average bitmessage &amp;quot;msg&amp;quot; object has the size of 2 kBytes.&lt;br /&gt;
So version 3 limits the objects to a maximum size of 256 KiB(the payload of the object, starting from the POW nonce can have 262144 bytes at maximum).&lt;/div&gt;</summary>
		<author><name>Thomas</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24945</id>
		<title>Protocol specification v3</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24945"/>
		<updated>2014-09-03T06:31:12Z</updated>

		<summary type="html">&lt;p&gt;Thomas: /* Proof of Work */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Stub}}&lt;br /&gt;
&lt;br /&gt;
{{Template:Proposal}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
This is a DRAFT for the protocol version 3. It describes the changes in protocol version 3 versus version 2. Things which are unchanged from version 2 are not described in detail. So you should use the [[Protocol specification|version 2 protocol specification]] as a reference for all formats which are not mentioned in this description.&lt;br /&gt;
&lt;br /&gt;
== New features in version 3 ==&lt;br /&gt;
&lt;br /&gt;
Here are the new features of the version 3 of Bitmessage protocol in keywords:&lt;br /&gt;
&lt;br /&gt;
* object type is now coded inside the message&lt;br /&gt;
* objects may have a variable time to live&lt;br /&gt;
* The POW is more difficult but can be easier if you lower the time to live&lt;br /&gt;
* The protocol is tolerant for further message extension&lt;br /&gt;
* The protocol is tolerant for further object extension&lt;br /&gt;
* A lower maximum object size&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Common structures ==&lt;br /&gt;
&lt;br /&gt;
=== Variable length integer ===&lt;br /&gt;
&lt;br /&gt;
The shortest possible encoding MUST be used. In version 2 the decimal value 10 could be encoded as 0x0A, 0xFD000A, 0xFE0000000A, or 0xFF000000000000000A. In version 3 only the shortest representation, 0x0A, is allowed. The 9-byte form is no longer useful and SHOULD NOT be used.&lt;br /&gt;
&lt;br /&gt;
Here is an example address which uses malformed varints: BM-CVA3RC7Mvy7JDNSpQChktwrSe4KNMaEdDdcymfUo. This address is invalid.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Message types ==&lt;br /&gt;
&lt;br /&gt;
Most message types are unchanged from version 2 to version 3. Only the four &amp;quot;objecttype&amp;quot; messages are not valid any more. They are summarized into one single message.&lt;br /&gt;
&lt;br /&gt;
=== version ===&lt;br /&gt;
&lt;br /&gt;
The version message is identical to [[Protocol specification#version|version 2 version message]].&lt;br /&gt;
&lt;br /&gt;
=== verack ===&lt;br /&gt;
&lt;br /&gt;
The verack message is identical to [[Protocol specification#verack|version 2 verack message]].&lt;br /&gt;
&lt;br /&gt;
=== addr ===&lt;br /&gt;
&lt;br /&gt;
The addr message is identical to [[Protocol specification#addr|version 2 addr message]].&lt;br /&gt;
&lt;br /&gt;
=== inv ===&lt;br /&gt;
&lt;br /&gt;
The inv message is identical to [[Protocol specification#inv|version 2 inv message]].&lt;br /&gt;
&lt;br /&gt;
=== getdata ===&lt;br /&gt;
&lt;br /&gt;
The getdata message is identical to [[Protocol specification#getdata|version 2 getdata message]].&lt;br /&gt;
&lt;br /&gt;
=== Unsupported messages ===&lt;br /&gt;
If a node receives an unknown message it &amp;lt;u&amp;gt;must&amp;lt;/u&amp;gt; silently ignore it. This is for further extensions of the protocol with other messages. Nodes that don't understand such a new message type shall be able to work correct with the message types they understand.&lt;br /&gt;
&lt;br /&gt;
Maybe some version 2 nodes did already implement it that way, but in version 3 it is '''part of the protocol specification''', that a node &amp;lt;u&amp;gt;must&amp;lt;/u&amp;gt; silently ignore unsupported messages.&lt;br /&gt;
&lt;br /&gt;
== Object type ==&lt;br /&gt;
&lt;br /&gt;
The four former object types &amp;quot;getpubkey&amp;quot;, &amp;quot;pubkey&amp;quot;, &amp;quot;msg&amp;quot; and &amp;quot;broadcast&amp;quot; are summarized into a single Message type &amp;quot;object&amp;quot;. The four Messages as they did exist in version 2 protocol are not valid any more.&lt;br /&gt;
&lt;br /&gt;
Objects are shared throughout a stream.  A client should advertise objects until their end of life time is reached. To be a valid object, the [[Proof of work|Proof Of Work]] has to be done.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8||POW nonce||uint64_t||&lt;br /&gt;
Random nonce used for the [[Proof of work|Proof Of Work]]&lt;br /&gt;
|-&lt;br /&gt;
| 8||time||uint64_t||&lt;br /&gt;
The &amp;quot;end of life&amp;quot; time of this object (be aware, in version 2 of the protocol this was the generation time). Objects shall be broadcast until its end of life time has been reached. The node shall store the inventory vector of that object for at least another hour to avoid reloading it from another node with a small time delay.&lt;br /&gt;
The maximum value for the &amp;quot;time to life&amp;quot; of an object is 28 days. so the &amp;quot;end of life time&amp;quot; is 28 days in the future at maximum.&lt;br /&gt;
|-&lt;br /&gt;
| 4||object type||uint32_t||&lt;br /&gt;
This field specifies the content of the object.&lt;br /&gt;
Valid values are (at the moment) 0-&amp;quot;getpubkey&amp;quot;, 1-&amp;quot;pubkey&amp;quot;, 2-&amp;quot;msg&amp;quot;, 3-&amp;quot;broadcast&amp;quot;. all other values are reserved. Nodes shall transport objects with unknown types, too. This will make further protocol changes more easy.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| ?||payload||uchar[]||&lt;br /&gt;
This field varies depending on the object type. For a detailed description of their content refer to [[Protocol specification#Object_types|version 2 object types]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Proof of Work ==&lt;br /&gt;
&lt;br /&gt;
Generally the POW is done exactly like in [[Proof of work|version 2]]&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;target&amp;quot; (the difficulty of the POW) is defined a little bit lower (more difficult) in version 3. This is, because practice did show, it is to easy to flood the network with data.&lt;br /&gt;
In addition to that it is possible in version 3 to lower the time to live of a message (for example when doing a live chat) and getting an easier POW for that.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:POW forumla 2.png|none|caption]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
payloadLengthExtraBytes = 1000&lt;br /&gt;
nonceTrialsPerByte = 1000&lt;br /&gt;
&lt;br /&gt;
Comparison:&lt;br /&gt;
Sending a small (487 byte) message on a laptop will take 6 seconds with a short TTL or 3.7 minutes for the longest TTL (28 days). This is 3 times faster and 5 times slower respectively than the formula I posted a few days ago.&lt;br /&gt;
&lt;br /&gt;
== Maximum object size ==&lt;br /&gt;
&lt;br /&gt;
In version 2 the maximum object size was defined to be 170 MBytes. This object size is totally unrealistic for a normal use (POW), but is perfectly for a network attack. It will be to big to handle for clients with low bandwidth.&lt;br /&gt;
Currently an average bitmessage &amp;quot;msg&amp;quot; object has the size of 2 kBytes.&lt;br /&gt;
So version 3 limits the objects to a maximum size of 256 KiB(the payload of the object, starting from the POW nonce can have 262144 bytes at maximum).&lt;/div&gt;</summary>
		<author><name>Thomas</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24944</id>
		<title>Protocol specification v3</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24944"/>
		<updated>2014-09-03T06:23:45Z</updated>

		<summary type="html">&lt;p&gt;Thomas: /* Proof of Work */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Stub}}&lt;br /&gt;
&lt;br /&gt;
{{Template:Proposal}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
This is a DRAFT for the protocol version 3. It describes the changes in protocol version 3 versus version 2. Things which are unchanged from version 2 are not described in detail. So you should use the [[Protocol specification|version 2 protocol specification]] as a reference for all formats which are not mentioned in this description.&lt;br /&gt;
&lt;br /&gt;
== New features in version 3 ==&lt;br /&gt;
&lt;br /&gt;
Here are the new features of the version 3 of Bitmessage protocol in keywords:&lt;br /&gt;
&lt;br /&gt;
* object type is now coded inside the message&lt;br /&gt;
* objects may have a variable time to live&lt;br /&gt;
* The POW is more difficult but can be easier if you lower the time to live&lt;br /&gt;
* The protocol is tolerant for further message extension&lt;br /&gt;
* The protocol is tolerant for further object extension&lt;br /&gt;
* A lower maximum object size&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Common structures ==&lt;br /&gt;
&lt;br /&gt;
=== Variable length integer ===&lt;br /&gt;
&lt;br /&gt;
The shortest possible encoding MUST be used. In version 2 the decimal value 10 could be encoded as 0x0A, 0xFD000A, 0xFE0000000A, or 0xFF000000000000000A. In version 3 only the shortest representation, 0x0A, is allowed. The 9-byte form is no longer useful and SHOULD NOT be used.&lt;br /&gt;
&lt;br /&gt;
Here is an example address which uses malformed varints: BM-CVA3RC7Mvy7JDNSpQChktwrSe4KNMaEdDdcymfUo. This address is invalid.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Message types ==&lt;br /&gt;
&lt;br /&gt;
Most message types are unchanged from version 2 to version 3. Only the four &amp;quot;objecttype&amp;quot; messages are not valid any more. They are summarized into one single message.&lt;br /&gt;
&lt;br /&gt;
=== version ===&lt;br /&gt;
&lt;br /&gt;
The version message is identical to [[Protocol specification#version|version 2 version message]].&lt;br /&gt;
&lt;br /&gt;
=== verack ===&lt;br /&gt;
&lt;br /&gt;
The verack message is identical to [[Protocol specification#verack|version 2 verack message]].&lt;br /&gt;
&lt;br /&gt;
=== addr ===&lt;br /&gt;
&lt;br /&gt;
The addr message is identical to [[Protocol specification#addr|version 2 addr message]].&lt;br /&gt;
&lt;br /&gt;
=== inv ===&lt;br /&gt;
&lt;br /&gt;
The inv message is identical to [[Protocol specification#inv|version 2 inv message]].&lt;br /&gt;
&lt;br /&gt;
=== getdata ===&lt;br /&gt;
&lt;br /&gt;
The getdata message is identical to [[Protocol specification#getdata|version 2 getdata message]].&lt;br /&gt;
&lt;br /&gt;
=== Unsupported messages ===&lt;br /&gt;
If a node receives an unknown message it &amp;lt;u&amp;gt;must&amp;lt;/u&amp;gt; silently ignore it. This is for further extensions of the protocol with other messages. Nodes that don't understand such a new message type shall be able to work correct with the message types they understand.&lt;br /&gt;
&lt;br /&gt;
Maybe some version 2 nodes did already implement it that way, but in version 3 it is '''part of the protocol specification''', that a node &amp;lt;u&amp;gt;must&amp;lt;/u&amp;gt; silently ignore unsupported messages.&lt;br /&gt;
&lt;br /&gt;
== Object type ==&lt;br /&gt;
&lt;br /&gt;
The four former object types &amp;quot;getpubkey&amp;quot;, &amp;quot;pubkey&amp;quot;, &amp;quot;msg&amp;quot; and &amp;quot;broadcast&amp;quot; are summarized into a single Message type &amp;quot;object&amp;quot;. The four Messages as they did exist in version 2 protocol are not valid any more.&lt;br /&gt;
&lt;br /&gt;
Objects are shared throughout a stream.  A client should advertise objects until their end of life time is reached. To be a valid object, the [[Proof of work|Proof Of Work]] has to be done.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8||POW nonce||uint64_t||&lt;br /&gt;
Random nonce used for the [[Proof of work|Proof Of Work]]&lt;br /&gt;
|-&lt;br /&gt;
| 8||time||uint64_t||&lt;br /&gt;
The &amp;quot;end of life&amp;quot; time of this object (be aware, in version 2 of the protocol this was the generation time). Objects shall be broadcast until its end of life time has been reached. The node shall store the inventory vector of that object for at least another hour to avoid reloading it from another node with a small time delay.&lt;br /&gt;
The maximum value for the &amp;quot;time to life&amp;quot; of an object is 28 days. so the &amp;quot;end of life time&amp;quot; is 28 days in the future at maximum.&lt;br /&gt;
|-&lt;br /&gt;
| 4||object type||uint32_t||&lt;br /&gt;
This field specifies the content of the object.&lt;br /&gt;
Valid values are (at the moment) 0-&amp;quot;getpubkey&amp;quot;, 1-&amp;quot;pubkey&amp;quot;, 2-&amp;quot;msg&amp;quot;, 3-&amp;quot;broadcast&amp;quot;. all other values are reserved. Nodes shall transport objects with unknown types, too. This will make further protocol changes more easy.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| ?||payload||uchar[]||&lt;br /&gt;
This field varies depending on the object type. For a detailed description of their content refer to [[Protocol specification#Object_types|version 2 object types]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Proof of Work ==&lt;br /&gt;
&lt;br /&gt;
Generally the POW is done exactly like in [[Proof of work|version 2]]&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;target&amp;quot; (the difficulty of the POW) is defined a little bit lower (more difficult) in version 3. This is, because practice did show, it is to easy to flood the network with data.&lt;br /&gt;
In addition to that it is possible in version 3 to lower the time to live of a message (for example when doing a live chat) and getting an easier POW for that.&lt;br /&gt;
&lt;br /&gt;
Setting the live time e.g. to 360 seconds (6 Minutes), which is totally sufficient for a live chat, the POW will be 10 times easier than in version 2.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;time to live&amp;quot; is the difference between the current time and the &amp;quot;end of life&amp;quot; time. For POW check and generation the &amp;quot;time to live&amp;quot; value is considered to be at least 300 seconds, even if the object has to live less than 300 seconds.&lt;br /&gt;
&lt;br /&gt;
[[File:POW_formula_2.png|none|caption]]&lt;br /&gt;
&lt;br /&gt;
== Maximum object size ==&lt;br /&gt;
&lt;br /&gt;
In version 2 the maximum object size was defined to be 170 MBytes. This object size is totally unrealistic for a normal use (POW), but is perfectly for a network attack. It will be to big to handle for clients with low bandwidth.&lt;br /&gt;
Currently an average bitmessage &amp;quot;msg&amp;quot; object has the size of 2 kBytes.&lt;br /&gt;
So version 3 limits the objects to a maximum size of 256 KiB(the payload of the object, starting from the POW nonce can have 262144 bytes at maximum).&lt;/div&gt;</summary>
		<author><name>Thomas</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitmessage.org/index.php?title=File:POW_forumla_2.png&amp;diff=24943</id>
		<title>File:POW forumla 2.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitmessage.org/index.php?title=File:POW_forumla_2.png&amp;diff=24943"/>
		<updated>2014-09-03T06:18:22Z</updated>

		<summary type="html">&lt;p&gt;Thomas: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Thomas</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24568</id>
		<title>Protocol specification v3</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24568"/>
		<updated>2014-07-26T18:26:19Z</updated>

		<summary type="html">&lt;p&gt;Thomas: /* Maximum object size */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Stub}}&lt;br /&gt;
&lt;br /&gt;
{{Template:Proposal}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
This is a DRAFT for the protocol version 3. It describes the changes in protocol version 3 versus version 2. Things which are unchanged from version 2 are not described in detail. So you should use the [[Protocol specification|version 2 protocol specification]] as a reference for all formats which are not mentioned in this description.&lt;br /&gt;
&lt;br /&gt;
== New features in version 3 ==&lt;br /&gt;
&lt;br /&gt;
Here are the new features of the version 3 of Bitmessage protocol in keywords:&lt;br /&gt;
&lt;br /&gt;
* object type is now coded inside the message&lt;br /&gt;
* objects may have a variable time to live&lt;br /&gt;
* The POW is more difficult but can be easier if you lower the time to live&lt;br /&gt;
* The protocol is tolerant for further message extension&lt;br /&gt;
* The protocol is tolerant for further object extension&lt;br /&gt;
* A lower maximum object size&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Common structures ==&lt;br /&gt;
&lt;br /&gt;
=== Variable length integer ===&lt;br /&gt;
&lt;br /&gt;
The shortest possible encoding MUST be used. In version 2 the decimal value 10 could be encoded as 0x0A, 0xFD000A, 0xFE0000000A, or 0xFF000000000000000A. In version 3 only the shortest representation, 0x0A, is allowed. The 9-byte form is no longer useful and SHOULD NOT be used.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Message types ==&lt;br /&gt;
&lt;br /&gt;
Most message types are unchanged from version 2 to version 3. Only the four &amp;quot;objecttype&amp;quot; messages are not valid any more. They are summarized into one single message.&lt;br /&gt;
&lt;br /&gt;
=== version ===&lt;br /&gt;
&lt;br /&gt;
The version message is identical to [[Protocol specification#version|version 2 version message]].&lt;br /&gt;
&lt;br /&gt;
=== verack ===&lt;br /&gt;
&lt;br /&gt;
The verack message is identical to [[Protocol specification#verack|version 2 verack message]].&lt;br /&gt;
&lt;br /&gt;
=== addr ===&lt;br /&gt;
&lt;br /&gt;
The addr message is identical to [[Protocol specification#addr|version 2 addr message]].&lt;br /&gt;
&lt;br /&gt;
=== inv ===&lt;br /&gt;
&lt;br /&gt;
The inv message is identical to [[Protocol specification#inv|version 2 inv message]].&lt;br /&gt;
&lt;br /&gt;
=== getdata ===&lt;br /&gt;
&lt;br /&gt;
The getdata message is identical to [[Protocol specification#getdata|version 2 getdata message]].&lt;br /&gt;
&lt;br /&gt;
=== Unsupported messages ===&lt;br /&gt;
If a node receives an unknown message it &amp;lt;u&amp;gt;must&amp;lt;/u&amp;gt; silently ignore it. This is for further extensions of the protocol with other messages. Nodes that don't understand such a new message type shall be able to work correct with the message types they understand.&lt;br /&gt;
&lt;br /&gt;
Maybe some version 2 nodes did already implement it that way, but in version 3 it is '''part of the protocol specification''', that a node &amp;lt;u&amp;gt;must&amp;lt;/u&amp;gt; silently ignore unsupported messages.&lt;br /&gt;
&lt;br /&gt;
== Object type ==&lt;br /&gt;
&lt;br /&gt;
The four former object types &amp;quot;getpubkey&amp;quot;, &amp;quot;pubkey&amp;quot;, &amp;quot;msg&amp;quot; and &amp;quot;broadcast&amp;quot; are summarized into a single Message type &amp;quot;object&amp;quot;. The four Messages as they did exist in version 2 protocol are not valid any more.&lt;br /&gt;
&lt;br /&gt;
Objects are shared throughout a stream.  A client should advertise objects until their end of life time is reached. To be a valid object, the [[Proof of work|Proof Of Work]] has to be done.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8||POW nonce||uint64_t||&lt;br /&gt;
Random nonce used for the [[Proof of work|Proof Of Work]]&lt;br /&gt;
|-&lt;br /&gt;
| 8||time||uint64_t||&lt;br /&gt;
The &amp;quot;end of life&amp;quot; time of this object (be aware, in version 2 of the protocol this was the generation time). Objects shall be broadcast until its end of life time has been reached. The node shall store the inventory vector of that object for at least another hour to avoid reloading it from another node with a small time delay.&lt;br /&gt;
The maximum value for the &amp;quot;time to life&amp;quot; of an object is 28 days. so the &amp;quot;end of life time&amp;quot; is 28 days in the future at maximum.&lt;br /&gt;
|-&lt;br /&gt;
| 4||object type||uint32_t||&lt;br /&gt;
This field specifies the content of the object.&lt;br /&gt;
Valid values are (at the moment) 0-&amp;quot;getpubkey&amp;quot;, 1-&amp;quot;pubkey&amp;quot;, 2-&amp;quot;msg&amp;quot;, 3-&amp;quot;broadcast&amp;quot;. all other values are reserved. Nodes shall transport objects with unknown types, too. This will make further protocol changes more easy.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| ?||payload||uchar[]||&lt;br /&gt;
This field varies depending on the object type. For a detailed description of their content refer to [[Protocol specification#Object_types|version 2 object types]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Proof of Work ==&lt;br /&gt;
&lt;br /&gt;
Generally the POW is done exactly like in [[Proof of work|version 2]]&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;target&amp;quot; (the difficulty of the POW) is defined a little bit lower (more difficult) in version 3. This is, because practice did show, it is to easy to flood the network with data.&lt;br /&gt;
In addition to that it is possible in version 3 to lower the time to live of a message (for example when doing a live chat) and getting an easier POW for that.&lt;br /&gt;
&lt;br /&gt;
Setting the live time e.g. to 360 seconds (6 Minutes), which is totally sufficient for a live chat, the POW will be 10 times easier than in version 2.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;time to live&amp;quot; is the difference between the current time and the &amp;quot;end of life&amp;quot; time. For POW check and generation the &amp;quot;time to live&amp;quot; value is considered to be at least 300 seconds, even if the object has to live less than 300 seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    payload = EndOfLifeTime + ObjectType + payload&lt;br /&gt;
&lt;br /&gt;
                PayloadLenInBytes * TimeToLiveInSeconds&lt;br /&gt;
    loadvalue = ---------------------------------------  +  payloadLengthExtraBytes + 8&lt;br /&gt;
                                3600&lt;br /&gt;
&lt;br /&gt;
                                2^64 &lt;br /&gt;
    target = ------------------------------------------------&lt;br /&gt;
             loadvalue * averageProofOfWorkNonceTrialsPerByte&lt;br /&gt;
&lt;br /&gt;
== Maximum object size ==&lt;br /&gt;
&lt;br /&gt;
In version 2 the maximum object size was defined to be 170 MBytes. This object size is totally unrealistic for a normal use (POW), but is perfectly for a network attack. It will be to big to handle for clients with low bandwidth.&lt;br /&gt;
Currently an average bitmessage &amp;quot;msg&amp;quot; object has the size of 2 kBytes.&lt;br /&gt;
So version 3 limits the objects to a maximum size of 256 kBytes (the payload of the object, starting from the POW nonce can have 262144 bytes at maximum).&lt;/div&gt;</summary>
		<author><name>Thomas</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24567</id>
		<title>Protocol specification v3</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24567"/>
		<updated>2014-07-26T18:17:54Z</updated>

		<summary type="html">&lt;p&gt;Thomas: /* Maximum object size */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Stub}}&lt;br /&gt;
&lt;br /&gt;
{{Template:Proposal}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
This is a DRAFT for the protocol version 3. It describes the changes in protocol version 3 versus version 2. Things which are unchanged from version 2 are not described in detail. So you should use the [[Protocol specification|version 2 protocol specification]] as a reference for all formats which are not mentioned in this description.&lt;br /&gt;
&lt;br /&gt;
== New features in version 3 ==&lt;br /&gt;
&lt;br /&gt;
Here are the new features of the version 3 of Bitmessage protocol in keywords:&lt;br /&gt;
&lt;br /&gt;
* object type is now coded inside the message&lt;br /&gt;
* objects may have a variable time to live&lt;br /&gt;
* The POW is more difficult but can be easier if you lower the time to live&lt;br /&gt;
* The protocol is tolerant for further message extension&lt;br /&gt;
* The protocol is tolerant for further object extension&lt;br /&gt;
* A lower maximum object size&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Common structures ==&lt;br /&gt;
&lt;br /&gt;
=== Variable length integer ===&lt;br /&gt;
&lt;br /&gt;
The shortest possible encoding MUST be used. In version 2 the decimal value 10 could be encoded as 0x0A, 0xFD000A, 0xFE0000000A, or 0xFF000000000000000A. In version 3 only the shortest representation, 0x0A, is allowed. The 9-byte form is no longer useful and SHOULD NOT be used.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Message types ==&lt;br /&gt;
&lt;br /&gt;
Most message types are unchanged from version 2 to version 3. Only the four &amp;quot;objecttype&amp;quot; messages are not valid any more. They are summarized into one single message.&lt;br /&gt;
&lt;br /&gt;
=== version ===&lt;br /&gt;
&lt;br /&gt;
The version message is identical to [[Protocol specification#version|version 2 version message]].&lt;br /&gt;
&lt;br /&gt;
=== verack ===&lt;br /&gt;
&lt;br /&gt;
The verack message is identical to [[Protocol specification#verack|version 2 verack message]].&lt;br /&gt;
&lt;br /&gt;
=== addr ===&lt;br /&gt;
&lt;br /&gt;
The addr message is identical to [[Protocol specification#addr|version 2 addr message]].&lt;br /&gt;
&lt;br /&gt;
=== inv ===&lt;br /&gt;
&lt;br /&gt;
The inv message is identical to [[Protocol specification#inv|version 2 inv message]].&lt;br /&gt;
&lt;br /&gt;
=== getdata ===&lt;br /&gt;
&lt;br /&gt;
The getdata message is identical to [[Protocol specification#getdata|version 2 getdata message]].&lt;br /&gt;
&lt;br /&gt;
=== Unsupported messages ===&lt;br /&gt;
If a node receives an unknown message it &amp;lt;u&amp;gt;must&amp;lt;/u&amp;gt; silently ignore it. This is for further extensions of the protocol with other messages. Nodes that don't understand such a new message type shall be able to work correct with the message types they understand.&lt;br /&gt;
&lt;br /&gt;
Maybe some version 2 nodes did already implement it that way, but in version 3 it is '''part of the protocol specification''', that a node &amp;lt;u&amp;gt;must&amp;lt;/u&amp;gt; silently ignore unsupported messages.&lt;br /&gt;
&lt;br /&gt;
== Object type ==&lt;br /&gt;
&lt;br /&gt;
The four former object types &amp;quot;getpubkey&amp;quot;, &amp;quot;pubkey&amp;quot;, &amp;quot;msg&amp;quot; and &amp;quot;broadcast&amp;quot; are summarized into a single Message type &amp;quot;object&amp;quot;. The four Messages as they did exist in version 2 protocol are not valid any more.&lt;br /&gt;
&lt;br /&gt;
Objects are shared throughout a stream.  A client should advertise objects until their end of life time is reached. To be a valid object, the [[Proof of work|Proof Of Work]] has to be done.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8||POW nonce||uint64_t||&lt;br /&gt;
Random nonce used for the [[Proof of work|Proof Of Work]]&lt;br /&gt;
|-&lt;br /&gt;
| 8||time||uint64_t||&lt;br /&gt;
The &amp;quot;end of life&amp;quot; time of this object (be aware, in version 2 of the protocol this was the generation time). Objects shall be broadcast until its end of life time has been reached. The node shall store the inventory vector of that object for at least another hour to avoid reloading it from another node with a small time delay.&lt;br /&gt;
The maximum value for the &amp;quot;time to life&amp;quot; of an object is 28 days. so the &amp;quot;end of life time&amp;quot; is 28 days in the future at maximum.&lt;br /&gt;
|-&lt;br /&gt;
| 4||object type||uint32_t||&lt;br /&gt;
This field specifies the content of the object.&lt;br /&gt;
Valid values are (at the moment) 0-&amp;quot;getpubkey&amp;quot;, 1-&amp;quot;pubkey&amp;quot;, 2-&amp;quot;msg&amp;quot;, 3-&amp;quot;broadcast&amp;quot;. all other values are reserved. Nodes shall transport objects with unknown types, too. This will make further protocol changes more easy.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| ?||payload||uchar[]||&lt;br /&gt;
This field varies depending on the object type. For a detailed description of their content refer to [[Protocol specification#Object_types|version 2 object types]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Proof of Work ==&lt;br /&gt;
&lt;br /&gt;
Generally the POW is done exactly like in [[Proof of work|version 2]]&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;target&amp;quot; (the difficulty of the POW) is defined a little bit lower (more difficult) in version 3. This is, because practice did show, it is to easy to flood the network with data.&lt;br /&gt;
In addition to that it is possible in version 3 to lower the time to live of a message (for example when doing a live chat) and getting an easier POW for that.&lt;br /&gt;
&lt;br /&gt;
Setting the live time e.g. to 360 seconds (6 Minutes), which is totally sufficient for a live chat, the POW will be 10 times easier than in version 2.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;time to live&amp;quot; is the difference between the current time and the &amp;quot;end of life&amp;quot; time. For POW check and generation the &amp;quot;time to live&amp;quot; value is considered to be at least 300 seconds, even if the object has to live less than 300 seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    payload = EndOfLifeTime + ObjectType + payload&lt;br /&gt;
&lt;br /&gt;
                PayloadLenInBytes * TimeToLiveInSeconds&lt;br /&gt;
    loadvalue = ---------------------------------------  +  payloadLengthExtraBytes + 8&lt;br /&gt;
                                3600&lt;br /&gt;
&lt;br /&gt;
                                2^64 &lt;br /&gt;
    target = ------------------------------------------------&lt;br /&gt;
             loadvalue * averageProofOfWorkNonceTrialsPerByte&lt;br /&gt;
&lt;br /&gt;
== Maximum object size ==&lt;br /&gt;
&lt;br /&gt;
In version 2 the maximum object size was defined to be 170 MBytes. This object size is totally unrealistic for a normal use (POW), but is perfectly for a network attack. It will be to big to handle for clients with low bandwidth.&lt;br /&gt;
Currently an average bitmessage &amp;quot;msg&amp;quot; object has the size of 2 kBytes.&lt;br /&gt;
So version 3 limits the objects to a maximum size of 256 kBytes.&lt;/div&gt;</summary>
		<author><name>Thomas</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24404</id>
		<title>Protocol specification v3</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24404"/>
		<updated>2014-07-05T08:03:02Z</updated>

		<summary type="html">&lt;p&gt;Thomas: /* Do a POW */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Stub}}&lt;br /&gt;
&lt;br /&gt;
{{Template:Proposal}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
This is a DRAFT for the protocol version 3. It describes the changes in protocol version 3 versus version 2. Things which are unchanged from version 2 are not described in detail. So you should use  [https://bitmessage.org/wiki/Protocol_specification this] as a reference for all formates which are not mentioned in this description.&lt;br /&gt;
&lt;br /&gt;
== new features in version 3 ==&lt;br /&gt;
&lt;br /&gt;
Here are the new features of the version 3 of Bitmessage protocol in keywords:&lt;br /&gt;
&lt;br /&gt;
* object type is now coded inside the message&lt;br /&gt;
* objects may have a variable time to live&lt;br /&gt;
* The POW is more difficult but can be easier if you lower the time to live&lt;br /&gt;
* The protocol is tolerant for further message extension&lt;br /&gt;
* The protocol is tolerant for further object extension&lt;br /&gt;
* A lower maximum object size&lt;br /&gt;
&lt;br /&gt;
== Message types ==&lt;br /&gt;
&lt;br /&gt;
Most message types are unchanged from version 2 to version 3. Only the four &amp;quot;objecttype&amp;quot; messages are not valid any more. They are summerized into one single message.&lt;br /&gt;
&lt;br /&gt;
=== version ===&lt;br /&gt;
&lt;br /&gt;
The version message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#version here]&lt;br /&gt;
&lt;br /&gt;
=== verack ===&lt;br /&gt;
&lt;br /&gt;
The verack message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#verack here]&lt;br /&gt;
&lt;br /&gt;
=== addr ===&lt;br /&gt;
&lt;br /&gt;
The addr message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#addr here]&lt;br /&gt;
&lt;br /&gt;
=== inv ===&lt;br /&gt;
&lt;br /&gt;
The inv message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#inv here]&lt;br /&gt;
&lt;br /&gt;
=== getdata ===&lt;br /&gt;
&lt;br /&gt;
The getdata message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#getdata here]&lt;br /&gt;
&lt;br /&gt;
=== unsupported messages ===&lt;br /&gt;
If a node receives an unknown message it &amp;lt;u&amp;gt;must&amp;lt;/u&amp;gt; silently ignore it. This is for further extensions of the protocol with other messages. Nodes that don't understand such a new message type shall be able to work correct with the message types they understand.&lt;br /&gt;
&lt;br /&gt;
Maybe some version 2 nodes did already implement it that way, but in version 3 it is '''part of the protocol specification''', that a node &amp;lt;u&amp;gt;must&amp;lt;/u&amp;gt; silently ignore unsupported messages.&lt;br /&gt;
&lt;br /&gt;
== Object type ==&lt;br /&gt;
&lt;br /&gt;
The four former object types &amp;quot;getpubkey&amp;quot;, &amp;quot;pubkey&amp;quot;, &amp;quot;msg&amp;quot; and &amp;quot;broadcast&amp;quot; are summarizes into a single Message type &amp;quot;object&amp;quot;. The four Messages as they did exist in version 2 protocol are not valid any more.&lt;br /&gt;
&lt;br /&gt;
Objects are shared throughout a stream.  A client should advertise objects until their end of life time is reached. To be a valid object, the [[Proof of work|Proof Of Work]] has to be done.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8||POW nonce||uint64_t||&lt;br /&gt;
Random nonce used for the [[Proof of work|Proof Of Work]]&lt;br /&gt;
|-&lt;br /&gt;
| 8||time||uint64_t||&lt;br /&gt;
The &amp;quot;end of life&amp;quot; time of this object (be aware, in version 2 of the protocol this was the generation time). Objects shall be broadcast until its end of life time has been reached. The node shall store the inventory vector of that object for at least another hour to avoid reloading it from another node with a small time delay.&lt;br /&gt;
The maximum value for the &amp;quot;time to life&amp;quot; of an object is 28 days. so the &amp;quot;end of life time&amp;quot; is 28 days in the future at maximum.&lt;br /&gt;
|-&lt;br /&gt;
| 4||object type||uint32_t||&lt;br /&gt;
This field specifies the content of the object.&lt;br /&gt;
Valid values are (at the moment) 0-&amp;quot;getpubkey&amp;quot;, 1-&amp;quot;pubkey&amp;quot;, 2-&amp;quot;msg&amp;quot;, 3-&amp;quot;broadcast&amp;quot;. all other values are reserved. Nodes shall transport objects with unknown types, too. This will make further protocol changes more easy.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| ?||payload||uchar[]||&lt;br /&gt;
This field varies depending on the object type. For a detailed description of their content look [https://bitmessage.org/wiki/Protocol_specification#Object_types here]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Do a POW ===&lt;br /&gt;
&lt;br /&gt;
Generally the POW is done exactly like in [[Proof of work|version 2]]&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;target&amp;quot; (the difficulty of the POW) is defined a little bit lower (more difficult) in version 3. This is, because practice did show, it is to easy to float the network with data.&lt;br /&gt;
In addition to that it is possible in version 3 to lower the time to life of a message (for example when doing a life chat) and getting an easier POW for that.&lt;br /&gt;
&lt;br /&gt;
Setting the live time e.g. to 360 seconds (6 Minutes), which is totally suffient for a life chat, the POW will be 10 times easier than in version 2.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;time to live&amp;quot; is the difference between the current time and the &amp;quot;end of life&amp;quot; time. For POW check and generation the &amp;quot;time to live&amp;quot; value is considered to be at least 300 seconds, even if the object has to life less than 300 seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    payload = EndOfLifeTime + ObjectType + payload&lt;br /&gt;
&lt;br /&gt;
                PayloadLenInBytes * TimeToLiveInSeconds&lt;br /&gt;
    loadvalue = ---------------------------------------  +  payloadLengthExtraBytes + 8&lt;br /&gt;
                                3600&lt;br /&gt;
&lt;br /&gt;
                                2^64 &lt;br /&gt;
    target = ------------------------------------------------&lt;br /&gt;
             loadvalue * averageProofOfWorkNonceTrialsPerByte&lt;br /&gt;
&lt;br /&gt;
=== Maximum object size ===&lt;br /&gt;
&lt;br /&gt;
In version 2 the maximum object size was defined to be 170 MBytes. This object size is totally unrealistic for a normal use (POW), but is perfectly for a network attack. It will be to big to handle for clients with low bandwidth.&lt;br /&gt;
Currently an average bitmessage &amp;quot;msg&amp;quot; object has the size of 2 kBytes.&lt;br /&gt;
So version 3 limits the objects to a maximum size of 64 kBytes.&lt;/div&gt;</summary>
		<author><name>Thomas</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24403</id>
		<title>Protocol specification v3</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24403"/>
		<updated>2014-07-05T07:59:32Z</updated>

		<summary type="html">&lt;p&gt;Thomas: /* new features in version 3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Stub}}&lt;br /&gt;
&lt;br /&gt;
{{Template:Proposal}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
This is a DRAFT for the protocol version 3. It describes the changes in protocol version 3 versus version 2. Things which are unchanged from version 2 are not described in detail. So you should use  [https://bitmessage.org/wiki/Protocol_specification this] as a reference for all formates which are not mentioned in this description.&lt;br /&gt;
&lt;br /&gt;
== new features in version 3 ==&lt;br /&gt;
&lt;br /&gt;
Here are the new features of the version 3 of Bitmessage protocol in keywords:&lt;br /&gt;
&lt;br /&gt;
* object type is now coded inside the message&lt;br /&gt;
* objects may have a variable time to live&lt;br /&gt;
* The POW is more difficult but can be easier if you lower the time to live&lt;br /&gt;
* The protocol is tolerant for further message extension&lt;br /&gt;
* The protocol is tolerant for further object extension&lt;br /&gt;
* A lower maximum object size&lt;br /&gt;
&lt;br /&gt;
== Message types ==&lt;br /&gt;
&lt;br /&gt;
Most message types are unchanged from version 2 to version 3. Only the four &amp;quot;objecttype&amp;quot; messages are not valid any more. They are summerized into one single message.&lt;br /&gt;
&lt;br /&gt;
=== version ===&lt;br /&gt;
&lt;br /&gt;
The version message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#version here]&lt;br /&gt;
&lt;br /&gt;
=== verack ===&lt;br /&gt;
&lt;br /&gt;
The verack message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#verack here]&lt;br /&gt;
&lt;br /&gt;
=== addr ===&lt;br /&gt;
&lt;br /&gt;
The addr message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#addr here]&lt;br /&gt;
&lt;br /&gt;
=== inv ===&lt;br /&gt;
&lt;br /&gt;
The inv message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#inv here]&lt;br /&gt;
&lt;br /&gt;
=== getdata ===&lt;br /&gt;
&lt;br /&gt;
The getdata message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#getdata here]&lt;br /&gt;
&lt;br /&gt;
=== unsupported messages ===&lt;br /&gt;
If a node receives an unknown message it &amp;lt;u&amp;gt;must&amp;lt;/u&amp;gt; silently ignore it. This is for further extensions of the protocol with other messages. Nodes that don't understand such a new message type shall be able to work correct with the message types they understand.&lt;br /&gt;
&lt;br /&gt;
Maybe some version 2 nodes did already implement it that way, but in version 3 it is '''part of the protocol specification''', that a node &amp;lt;u&amp;gt;must&amp;lt;/u&amp;gt; silently ignore unsupported messages.&lt;br /&gt;
&lt;br /&gt;
== Object type ==&lt;br /&gt;
&lt;br /&gt;
The four former object types &amp;quot;getpubkey&amp;quot;, &amp;quot;pubkey&amp;quot;, &amp;quot;msg&amp;quot; and &amp;quot;broadcast&amp;quot; are summarizes into a single Message type &amp;quot;object&amp;quot;. The four Messages as they did exist in version 2 protocol are not valid any more.&lt;br /&gt;
&lt;br /&gt;
Objects are shared throughout a stream.  A client should advertise objects until their end of life time is reached. To be a valid object, the [[Proof of work|Proof Of Work]] has to be done.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8||POW nonce||uint64_t||&lt;br /&gt;
Random nonce used for the [[Proof of work|Proof Of Work]]&lt;br /&gt;
|-&lt;br /&gt;
| 8||time||uint64_t||&lt;br /&gt;
The &amp;quot;end of life&amp;quot; time of this object (be aware, in version 2 of the protocol this was the generation time). Objects shall be broadcast until its end of life time has been reached. The node shall store the inventory vector of that object for at least another hour to avoid reloading it from another node with a small time delay.&lt;br /&gt;
The maximum value for the &amp;quot;time to life&amp;quot; of an object is 28 days. so the &amp;quot;end of life time&amp;quot; is 28 days in the future at maximum.&lt;br /&gt;
|-&lt;br /&gt;
| 4||object type||uint32_t||&lt;br /&gt;
This field specifies the content of the object.&lt;br /&gt;
Valid values are (at the moment) 0-&amp;quot;getpubkey&amp;quot;, 1-&amp;quot;pubkey&amp;quot;, 2-&amp;quot;msg&amp;quot;, 3-&amp;quot;broadcast&amp;quot;. all other values are reserved. Nodes shall transport objects with unknown types, too. This will make further protocol changes more easy.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| ?||payload||uchar[]||&lt;br /&gt;
This field varies depending on the object type. For a detailed description of their content look [https://bitmessage.org/wiki/Protocol_specification#Object_types here]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Do a POW ===&lt;br /&gt;
&lt;br /&gt;
Generally the POW is done exactly like in [[Proof of work|version 2]]&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;target&amp;quot; (the difficulty of the POW) is defined a little bit lower (more difficult) in version 3. This is, because practice did show, it is to easy to float the network with data.&lt;br /&gt;
In addition to that it is possible in version 3 to lower the time to life of a message (for example when doing a life chat) and getting an easier POW for that.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;time to live&amp;quot; is the difference between the current time and the &amp;quot;end of life&amp;quot; time. For POW check and generation the &amp;quot;time to live&amp;quot; value is considered to be at least 300 seconds, even if the object has to life less than 300 seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    payload = EndOfLifeTime + ObjectType + payload&lt;br /&gt;
&lt;br /&gt;
                PayloadLenInBytes * TimeToLiveInSeconds&lt;br /&gt;
    loadvalue = ---------------------------------------  +  payloadLengthExtraBytes + 8&lt;br /&gt;
                                3600&lt;br /&gt;
&lt;br /&gt;
                                2^64 &lt;br /&gt;
    target = ------------------------------------------------&lt;br /&gt;
             loadvalue * averageProofOfWorkNonceTrialsPerByte&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Maximum object size ===&lt;br /&gt;
&lt;br /&gt;
In version 2 the maximum object size was defined to be 170 MBytes. This object size is totally unrealistic for a normal use (POW), but is perfectly for a network attack. It will be to big to handle for clients with low bandwidth.&lt;br /&gt;
Currently an average bitmessage &amp;quot;msg&amp;quot; object has the size of 2 kBytes.&lt;br /&gt;
So version 3 limits the objects to a maximum size of 64 kBytes.&lt;/div&gt;</summary>
		<author><name>Thomas</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24402</id>
		<title>Protocol specification v3</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24402"/>
		<updated>2014-07-05T07:58:35Z</updated>

		<summary type="html">&lt;p&gt;Thomas: /* Do a POW */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Stub}}&lt;br /&gt;
&lt;br /&gt;
{{Template:Proposal}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
This is a DRAFT for the protocol version 3. It describes the changes in protocol version 3 versus version 2. Things which are unchanged from version 2 are not described in detail. So you should use  [https://bitmessage.org/wiki/Protocol_specification this] as a reference for all formates which are not mentioned in this description.&lt;br /&gt;
&lt;br /&gt;
== new features in version 3 ==&lt;br /&gt;
&lt;br /&gt;
Here are the new features of the version 3 of Bitmessage protocol in keywords:&lt;br /&gt;
&lt;br /&gt;
* object type is now coded inside the message&lt;br /&gt;
* objects may have a variable time to live&lt;br /&gt;
* The POW is more difficult but can be easier if you lower the time to live&lt;br /&gt;
* The protocol is tolerant for further message extension&lt;br /&gt;
* The protocol is tolerant for further object extension&lt;br /&gt;
&lt;br /&gt;
== Message types ==&lt;br /&gt;
&lt;br /&gt;
Most message types are unchanged from version 2 to version 3. Only the four &amp;quot;objecttype&amp;quot; messages are not valid any more. They are summerized into one single message.&lt;br /&gt;
&lt;br /&gt;
=== version ===&lt;br /&gt;
&lt;br /&gt;
The version message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#version here]&lt;br /&gt;
&lt;br /&gt;
=== verack ===&lt;br /&gt;
&lt;br /&gt;
The verack message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#verack here]&lt;br /&gt;
&lt;br /&gt;
=== addr ===&lt;br /&gt;
&lt;br /&gt;
The addr message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#addr here]&lt;br /&gt;
&lt;br /&gt;
=== inv ===&lt;br /&gt;
&lt;br /&gt;
The inv message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#inv here]&lt;br /&gt;
&lt;br /&gt;
=== getdata ===&lt;br /&gt;
&lt;br /&gt;
The getdata message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#getdata here]&lt;br /&gt;
&lt;br /&gt;
=== unsupported messages ===&lt;br /&gt;
If a node receives an unknown message it &amp;lt;u&amp;gt;must&amp;lt;/u&amp;gt; silently ignore it. This is for further extensions of the protocol with other messages. Nodes that don't understand such a new message type shall be able to work correct with the message types they understand.&lt;br /&gt;
&lt;br /&gt;
Maybe some version 2 nodes did already implement it that way, but in version 3 it is '''part of the protocol specification''', that a node &amp;lt;u&amp;gt;must&amp;lt;/u&amp;gt; silently ignore unsupported messages.&lt;br /&gt;
&lt;br /&gt;
== Object type ==&lt;br /&gt;
&lt;br /&gt;
The four former object types &amp;quot;getpubkey&amp;quot;, &amp;quot;pubkey&amp;quot;, &amp;quot;msg&amp;quot; and &amp;quot;broadcast&amp;quot; are summarizes into a single Message type &amp;quot;object&amp;quot;. The four Messages as they did exist in version 2 protocol are not valid any more.&lt;br /&gt;
&lt;br /&gt;
Objects are shared throughout a stream.  A client should advertise objects until their end of life time is reached. To be a valid object, the [[Proof of work|Proof Of Work]] has to be done.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8||POW nonce||uint64_t||&lt;br /&gt;
Random nonce used for the [[Proof of work|Proof Of Work]]&lt;br /&gt;
|-&lt;br /&gt;
| 8||time||uint64_t||&lt;br /&gt;
The &amp;quot;end of life&amp;quot; time of this object (be aware, in version 2 of the protocol this was the generation time). Objects shall be broadcast until its end of life time has been reached. The node shall store the inventory vector of that object for at least another hour to avoid reloading it from another node with a small time delay.&lt;br /&gt;
The maximum value for the &amp;quot;time to life&amp;quot; of an object is 28 days. so the &amp;quot;end of life time&amp;quot; is 28 days in the future at maximum.&lt;br /&gt;
|-&lt;br /&gt;
| 4||object type||uint32_t||&lt;br /&gt;
This field specifies the content of the object.&lt;br /&gt;
Valid values are (at the moment) 0-&amp;quot;getpubkey&amp;quot;, 1-&amp;quot;pubkey&amp;quot;, 2-&amp;quot;msg&amp;quot;, 3-&amp;quot;broadcast&amp;quot;. all other values are reserved. Nodes shall transport objects with unknown types, too. This will make further protocol changes more easy.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| ?||payload||uchar[]||&lt;br /&gt;
This field varies depending on the object type. For a detailed description of their content look [https://bitmessage.org/wiki/Protocol_specification#Object_types here]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Do a POW ===&lt;br /&gt;
&lt;br /&gt;
Generally the POW is done exactly like in [[Proof of work|version 2]]&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;target&amp;quot; (the difficulty of the POW) is defined a little bit lower (more difficult) in version 3. This is, because practice did show, it is to easy to float the network with data.&lt;br /&gt;
In addition to that it is possible in version 3 to lower the time to life of a message (for example when doing a life chat) and getting an easier POW for that.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;time to live&amp;quot; is the difference between the current time and the &amp;quot;end of life&amp;quot; time. For POW check and generation the &amp;quot;time to live&amp;quot; value is considered to be at least 300 seconds, even if the object has to life less than 300 seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    payload = EndOfLifeTime + ObjectType + payload&lt;br /&gt;
&lt;br /&gt;
                PayloadLenInBytes * TimeToLiveInSeconds&lt;br /&gt;
    loadvalue = ---------------------------------------  +  payloadLengthExtraBytes + 8&lt;br /&gt;
                                3600&lt;br /&gt;
&lt;br /&gt;
                                2^64 &lt;br /&gt;
    target = ------------------------------------------------&lt;br /&gt;
             loadvalue * averageProofOfWorkNonceTrialsPerByte&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Maximum object size ===&lt;br /&gt;
&lt;br /&gt;
In version 2 the maximum object size was defined to be 170 MBytes. This object size is totally unrealistic for a normal use (POW), but is perfectly for a network attack. It will be to big to handle for clients with low bandwidth.&lt;br /&gt;
Currently an average bitmessage &amp;quot;msg&amp;quot; object has the size of 2 kBytes.&lt;br /&gt;
So version 3 limits the objects to a maximum size of 64 kBytes.&lt;/div&gt;</summary>
		<author><name>Thomas</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24401</id>
		<title>Protocol specification v3</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24401"/>
		<updated>2014-07-05T07:50:31Z</updated>

		<summary type="html">&lt;p&gt;Thomas: /* Do a POW */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Stub}}&lt;br /&gt;
&lt;br /&gt;
{{Template:Proposal}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
This is a DRAFT for the protocol version 3. It describes the changes in protocol version 3 versus version 2. Things which are unchanged from version 2 are not described in detail. So you should use  [https://bitmessage.org/wiki/Protocol_specification this] as a reference for all formates which are not mentioned in this description.&lt;br /&gt;
&lt;br /&gt;
== new features in version 3 ==&lt;br /&gt;
&lt;br /&gt;
Here are the new features of the version 3 of Bitmessage protocol in keywords:&lt;br /&gt;
&lt;br /&gt;
* object type is now coded inside the message&lt;br /&gt;
* objects may have a variable time to live&lt;br /&gt;
* The POW is more difficult but can be easier if you lower the time to live&lt;br /&gt;
* The protocol is tolerant for further message extension&lt;br /&gt;
* The protocol is tolerant for further object extension&lt;br /&gt;
&lt;br /&gt;
== Message types ==&lt;br /&gt;
&lt;br /&gt;
Most message types are unchanged from version 2 to version 3. Only the four &amp;quot;objecttype&amp;quot; messages are not valid any more. They are summerized into one single message.&lt;br /&gt;
&lt;br /&gt;
=== version ===&lt;br /&gt;
&lt;br /&gt;
The version message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#version here]&lt;br /&gt;
&lt;br /&gt;
=== verack ===&lt;br /&gt;
&lt;br /&gt;
The verack message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#verack here]&lt;br /&gt;
&lt;br /&gt;
=== addr ===&lt;br /&gt;
&lt;br /&gt;
The addr message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#addr here]&lt;br /&gt;
&lt;br /&gt;
=== inv ===&lt;br /&gt;
&lt;br /&gt;
The inv message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#inv here]&lt;br /&gt;
&lt;br /&gt;
=== getdata ===&lt;br /&gt;
&lt;br /&gt;
The getdata message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#getdata here]&lt;br /&gt;
&lt;br /&gt;
=== unsupported messages ===&lt;br /&gt;
If a node receives an unknown message it &amp;lt;u&amp;gt;must&amp;lt;/u&amp;gt; silently ignore it. This is for further extensions of the protocol with other messages. Nodes that don't understand such a new message type shall be able to work correct with the message types they understand.&lt;br /&gt;
&lt;br /&gt;
Maybe some version 2 nodes did already implement it that way, but in version 3 it is '''part of the protocol specification''', that a node &amp;lt;u&amp;gt;must&amp;lt;/u&amp;gt; silently ignore unsupported messages.&lt;br /&gt;
&lt;br /&gt;
== Object type ==&lt;br /&gt;
&lt;br /&gt;
The four former object types &amp;quot;getpubkey&amp;quot;, &amp;quot;pubkey&amp;quot;, &amp;quot;msg&amp;quot; and &amp;quot;broadcast&amp;quot; are summarizes into a single Message type &amp;quot;object&amp;quot;. The four Messages as they did exist in version 2 protocol are not valid any more.&lt;br /&gt;
&lt;br /&gt;
Objects are shared throughout a stream.  A client should advertise objects until their end of life time is reached. To be a valid object, the [[Proof of work|Proof Of Work]] has to be done.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8||POW nonce||uint64_t||&lt;br /&gt;
Random nonce used for the [[Proof of work|Proof Of Work]]&lt;br /&gt;
|-&lt;br /&gt;
| 8||time||uint64_t||&lt;br /&gt;
The &amp;quot;end of life&amp;quot; time of this object (be aware, in version 2 of the protocol this was the generation time). Objects shall be broadcast until its end of life time has been reached. The node shall store the inventory vector of that object for at least another hour to avoid reloading it from another node with a small time delay.&lt;br /&gt;
The maximum value for the &amp;quot;time to life&amp;quot; of an object is 28 days. so the &amp;quot;end of life time&amp;quot; is 28 days in the future at maximum.&lt;br /&gt;
|-&lt;br /&gt;
| 4||object type||uint32_t||&lt;br /&gt;
This field specifies the content of the object.&lt;br /&gt;
Valid values are (at the moment) 0-&amp;quot;getpubkey&amp;quot;, 1-&amp;quot;pubkey&amp;quot;, 2-&amp;quot;msg&amp;quot;, 3-&amp;quot;broadcast&amp;quot;. all other values are reserved. Nodes shall transport objects with unknown types, too. This will make further protocol changes more easy.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| ?||payload||uchar[]||&lt;br /&gt;
This field varies depending on the object type. For a detailed description of their content look [https://bitmessage.org/wiki/Protocol_specification#Object_types here]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Do a POW ===&lt;br /&gt;
&lt;br /&gt;
Generally the POW is done exactly like in [[Proof of work|version 2]]&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;target&amp;quot; (the difficulty of the POW) is defined a little bit lower (more difficult) in version 3. This is, because practice did show, it is to easy to float the network with data.&lt;br /&gt;
In addition to that it is possible in version 3 to lower the time to life of a message (for example when doing a life chat) and getting an easier POW for that.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;time to live&amp;quot; is the difference between the current time and the &amp;quot;end of life&amp;quot; time. For POW check and generation the &amp;quot;time to live&amp;quot; value is considered to be at least 300 seconds, even if the object has to life less than 300 seconds.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    payload = EndOfLifeTime + ObjectType + payload&lt;br /&gt;
&lt;br /&gt;
                PayloadLenInBytes * TimeToLiveInSeconds&lt;br /&gt;
    loadvalue = ---------------------------------------  +  payloadLengthExtraBytes + 8&lt;br /&gt;
                                3600&lt;br /&gt;
&lt;br /&gt;
                                2^64 &lt;br /&gt;
    target = ------------------------------------------------&lt;br /&gt;
             loadvalue * averageProofOfWorkNonceTrialsPerByte&lt;/div&gt;</summary>
		<author><name>Thomas</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24400</id>
		<title>Protocol specification v3</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24400"/>
		<updated>2014-07-05T07:41:06Z</updated>

		<summary type="html">&lt;p&gt;Thomas: /* unsupported messages */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Stub}}&lt;br /&gt;
&lt;br /&gt;
{{Template:Proposal}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
This is a DRAFT for the protocol version 3. It describes the changes in protocol version 3 versus version 2. Things which are unchanged from version 2 are not described in detail. So you should use  [https://bitmessage.org/wiki/Protocol_specification this] as a reference for all formates which are not mentioned in this description.&lt;br /&gt;
&lt;br /&gt;
== new features in version 3 ==&lt;br /&gt;
&lt;br /&gt;
Here are the new features of the version 3 of Bitmessage protocol in keywords:&lt;br /&gt;
&lt;br /&gt;
* object type is now coded inside the message&lt;br /&gt;
* objects may have a variable time to live&lt;br /&gt;
* The POW is more difficult but can be easier if you lower the time to live&lt;br /&gt;
* The protocol is tolerant for further message extension&lt;br /&gt;
* The protocol is tolerant for further object extension&lt;br /&gt;
&lt;br /&gt;
== Message types ==&lt;br /&gt;
&lt;br /&gt;
Most message types are unchanged from version 2 to version 3. Only the four &amp;quot;objecttype&amp;quot; messages are not valid any more. They are summerized into one single message.&lt;br /&gt;
&lt;br /&gt;
=== version ===&lt;br /&gt;
&lt;br /&gt;
The version message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#version here]&lt;br /&gt;
&lt;br /&gt;
=== verack ===&lt;br /&gt;
&lt;br /&gt;
The verack message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#verack here]&lt;br /&gt;
&lt;br /&gt;
=== addr ===&lt;br /&gt;
&lt;br /&gt;
The addr message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#addr here]&lt;br /&gt;
&lt;br /&gt;
=== inv ===&lt;br /&gt;
&lt;br /&gt;
The inv message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#inv here]&lt;br /&gt;
&lt;br /&gt;
=== getdata ===&lt;br /&gt;
&lt;br /&gt;
The getdata message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#getdata here]&lt;br /&gt;
&lt;br /&gt;
=== unsupported messages ===&lt;br /&gt;
If a node receives an unknown message it &amp;lt;u&amp;gt;must&amp;lt;/u&amp;gt; silently ignore it. This is for further extensions of the protocol with other messages. Nodes that don't understand such a new message type shall be able to work correct with the message types they understand.&lt;br /&gt;
&lt;br /&gt;
Maybe some version 2 nodes did already implement it that way, but in version 3 it is '''part of the protocol specification''', that a node &amp;lt;u&amp;gt;must&amp;lt;/u&amp;gt; silently ignore unsupported messages.&lt;br /&gt;
&lt;br /&gt;
== Object type ==&lt;br /&gt;
&lt;br /&gt;
The four former object types &amp;quot;getpubkey&amp;quot;, &amp;quot;pubkey&amp;quot;, &amp;quot;msg&amp;quot; and &amp;quot;broadcast&amp;quot; are summarizes into a single Message type &amp;quot;object&amp;quot;. The four Messages as they did exist in version 2 protocol are not valid any more.&lt;br /&gt;
&lt;br /&gt;
Objects are shared throughout a stream.  A client should advertise objects until their end of life time is reached. To be a valid object, the [[Proof of work|Proof Of Work]] has to be done.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8||POW nonce||uint64_t||&lt;br /&gt;
Random nonce used for the [[Proof of work|Proof Of Work]]&lt;br /&gt;
|-&lt;br /&gt;
| 8||time||uint64_t||&lt;br /&gt;
The &amp;quot;end of life&amp;quot; time of this object (be aware, in version 2 of the protocol this was the generation time). Objects shall be broadcast until its end of life time has been reached. The node shall store the inventory vector of that object for at least another hour to avoid reloading it from another node with a small time delay.&lt;br /&gt;
The maximum value for the &amp;quot;time to life&amp;quot; of an object is 28 days. so the &amp;quot;end of life time&amp;quot; is 28 days in the future at maximum.&lt;br /&gt;
|-&lt;br /&gt;
| 4||object type||uint32_t||&lt;br /&gt;
This field specifies the content of the object.&lt;br /&gt;
Valid values are (at the moment) 0-&amp;quot;getpubkey&amp;quot;, 1-&amp;quot;pubkey&amp;quot;, 2-&amp;quot;msg&amp;quot;, 3-&amp;quot;broadcast&amp;quot;. all other values are reserved. Nodes shall transport objects with unknown types, too. This will make further protocol changes more easy.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| ?||payload||uchar[]||&lt;br /&gt;
This field varies depending on the object type. For a detailed description of their content look [https://bitmessage.org/wiki/Protocol_specification#Object_types here]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Do a POW ===&lt;br /&gt;
&lt;br /&gt;
Generally the POW is done exactly like in [[Proof of work|version 2]]&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;target&amp;quot; (the difficulty of the POW) is defined a little bit lower (more difficult) in version 3. This is, because practice did show, it is to easy to float the network with data.&lt;br /&gt;
In addition to that it is possible in version 3 to lower the time to life of a message (for example when doing a life chat) and getting an easier POW for that.&lt;br /&gt;
&lt;br /&gt;
    payload = EndOfLifeTime + ObjectType + payload&lt;br /&gt;
&lt;br /&gt;
                PayloadLenInBytes * TimeToLiveInSeconds&lt;br /&gt;
    loadvalue = ---------------------------------------  +  payloadLengthExtraBytes + 8&lt;br /&gt;
                                3600&lt;br /&gt;
&lt;br /&gt;
                                2^64 &lt;br /&gt;
    target = ------------------------------------------------&lt;br /&gt;
             loadvalue * averageProofOfWorkNonceTrialsPerByte&lt;/div&gt;</summary>
		<author><name>Thomas</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24399</id>
		<title>Protocol specification v3</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24399"/>
		<updated>2014-07-05T07:40:36Z</updated>

		<summary type="html">&lt;p&gt;Thomas: /* unsupported messages */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Stub}}&lt;br /&gt;
&lt;br /&gt;
{{Template:Proposal}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
This is a DRAFT for the protocol version 3. It describes the changes in protocol version 3 versus version 2. Things which are unchanged from version 2 are not described in detail. So you should use  [https://bitmessage.org/wiki/Protocol_specification this] as a reference for all formates which are not mentioned in this description.&lt;br /&gt;
&lt;br /&gt;
== new features in version 3 ==&lt;br /&gt;
&lt;br /&gt;
Here are the new features of the version 3 of Bitmessage protocol in keywords:&lt;br /&gt;
&lt;br /&gt;
* object type is now coded inside the message&lt;br /&gt;
* objects may have a variable time to live&lt;br /&gt;
* The POW is more difficult but can be easier if you lower the time to live&lt;br /&gt;
* The protocol is tolerant for further message extension&lt;br /&gt;
* The protocol is tolerant for further object extension&lt;br /&gt;
&lt;br /&gt;
== Message types ==&lt;br /&gt;
&lt;br /&gt;
Most message types are unchanged from version 2 to version 3. Only the four &amp;quot;objecttype&amp;quot; messages are not valid any more. They are summerized into one single message.&lt;br /&gt;
&lt;br /&gt;
=== version ===&lt;br /&gt;
&lt;br /&gt;
The version message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#version here]&lt;br /&gt;
&lt;br /&gt;
=== verack ===&lt;br /&gt;
&lt;br /&gt;
The verack message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#verack here]&lt;br /&gt;
&lt;br /&gt;
=== addr ===&lt;br /&gt;
&lt;br /&gt;
The addr message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#addr here]&lt;br /&gt;
&lt;br /&gt;
=== inv ===&lt;br /&gt;
&lt;br /&gt;
The inv message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#inv here]&lt;br /&gt;
&lt;br /&gt;
=== getdata ===&lt;br /&gt;
&lt;br /&gt;
The getdata message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#getdata here]&lt;br /&gt;
&lt;br /&gt;
=== unsupported messages ===&lt;br /&gt;
If a node receives an unknown message it '''must''' silently ignore it. This is for further extensions of the protocol with other messages. Nodes that don't understand such a new message type shall be able to work correct with the message types they understand.&lt;br /&gt;
&lt;br /&gt;
Maybe some version 2 nodes did already implement it that way, but in version 3 it is '''part of the protocol specification''', that a node &amp;lt;u&amp;gt;must&amp;lt;/u&amp;gt; silently ignore unsupported messages.&lt;br /&gt;
&lt;br /&gt;
== Object type ==&lt;br /&gt;
&lt;br /&gt;
The four former object types &amp;quot;getpubkey&amp;quot;, &amp;quot;pubkey&amp;quot;, &amp;quot;msg&amp;quot; and &amp;quot;broadcast&amp;quot; are summarizes into a single Message type &amp;quot;object&amp;quot;. The four Messages as they did exist in version 2 protocol are not valid any more.&lt;br /&gt;
&lt;br /&gt;
Objects are shared throughout a stream.  A client should advertise objects until their end of life time is reached. To be a valid object, the [[Proof of work|Proof Of Work]] has to be done.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8||POW nonce||uint64_t||&lt;br /&gt;
Random nonce used for the [[Proof of work|Proof Of Work]]&lt;br /&gt;
|-&lt;br /&gt;
| 8||time||uint64_t||&lt;br /&gt;
The &amp;quot;end of life&amp;quot; time of this object (be aware, in version 2 of the protocol this was the generation time). Objects shall be broadcast until its end of life time has been reached. The node shall store the inventory vector of that object for at least another hour to avoid reloading it from another node with a small time delay.&lt;br /&gt;
The maximum value for the &amp;quot;time to life&amp;quot; of an object is 28 days. so the &amp;quot;end of life time&amp;quot; is 28 days in the future at maximum.&lt;br /&gt;
|-&lt;br /&gt;
| 4||object type||uint32_t||&lt;br /&gt;
This field specifies the content of the object.&lt;br /&gt;
Valid values are (at the moment) 0-&amp;quot;getpubkey&amp;quot;, 1-&amp;quot;pubkey&amp;quot;, 2-&amp;quot;msg&amp;quot;, 3-&amp;quot;broadcast&amp;quot;. all other values are reserved. Nodes shall transport objects with unknown types, too. This will make further protocol changes more easy.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| ?||payload||uchar[]||&lt;br /&gt;
This field varies depending on the object type. For a detailed description of their content look [https://bitmessage.org/wiki/Protocol_specification#Object_types here]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Do a POW ===&lt;br /&gt;
&lt;br /&gt;
Generally the POW is done exactly like in [[Proof of work|version 2]]&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;target&amp;quot; (the difficulty of the POW) is defined a little bit lower (more difficult) in version 3. This is, because practice did show, it is to easy to float the network with data.&lt;br /&gt;
In addition to that it is possible in version 3 to lower the time to life of a message (for example when doing a life chat) and getting an easier POW for that.&lt;br /&gt;
&lt;br /&gt;
    payload = EndOfLifeTime + ObjectType + payload&lt;br /&gt;
&lt;br /&gt;
                PayloadLenInBytes * TimeToLiveInSeconds&lt;br /&gt;
    loadvalue = ---------------------------------------  +  payloadLengthExtraBytes + 8&lt;br /&gt;
                                3600&lt;br /&gt;
&lt;br /&gt;
                                2^64 &lt;br /&gt;
    target = ------------------------------------------------&lt;br /&gt;
             loadvalue * averageProofOfWorkNonceTrialsPerByte&lt;/div&gt;</summary>
		<author><name>Thomas</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24398</id>
		<title>Protocol specification v3</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24398"/>
		<updated>2014-07-05T07:39:05Z</updated>

		<summary type="html">&lt;p&gt;Thomas: /* unsupported messages */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Stub}}&lt;br /&gt;
&lt;br /&gt;
{{Template:Proposal}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
This is a DRAFT for the protocol version 3. It describes the changes in protocol version 3 versus version 2. Things which are unchanged from version 2 are not described in detail. So you should use  [https://bitmessage.org/wiki/Protocol_specification this] as a reference for all formates which are not mentioned in this description.&lt;br /&gt;
&lt;br /&gt;
== new features in version 3 ==&lt;br /&gt;
&lt;br /&gt;
Here are the new features of the version 3 of Bitmessage protocol in keywords:&lt;br /&gt;
&lt;br /&gt;
* object type is now coded inside the message&lt;br /&gt;
* objects may have a variable time to live&lt;br /&gt;
* The POW is more difficult but can be easier if you lower the time to live&lt;br /&gt;
* The protocol is tolerant for further message extension&lt;br /&gt;
* The protocol is tolerant for further object extension&lt;br /&gt;
&lt;br /&gt;
== Message types ==&lt;br /&gt;
&lt;br /&gt;
Most message types are unchanged from version 2 to version 3. Only the four &amp;quot;objecttype&amp;quot; messages are not valid any more. They are summerized into one single message.&lt;br /&gt;
&lt;br /&gt;
=== version ===&lt;br /&gt;
&lt;br /&gt;
The version message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#version here]&lt;br /&gt;
&lt;br /&gt;
=== verack ===&lt;br /&gt;
&lt;br /&gt;
The verack message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#verack here]&lt;br /&gt;
&lt;br /&gt;
=== addr ===&lt;br /&gt;
&lt;br /&gt;
The addr message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#addr here]&lt;br /&gt;
&lt;br /&gt;
=== inv ===&lt;br /&gt;
&lt;br /&gt;
The inv message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#inv here]&lt;br /&gt;
&lt;br /&gt;
=== getdata ===&lt;br /&gt;
&lt;br /&gt;
The getdata message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#getdata here]&lt;br /&gt;
&lt;br /&gt;
=== unsupported messages ===&lt;br /&gt;
If a node receives an unknown message it '''must''' silently ignore it. This is for further extensions of the protocol with other messages. Nodes that don't understand such a new message type shall be able to work correct with the message types they understand.&lt;br /&gt;
&lt;br /&gt;
Maybe some version 2 nodes did already implement it that way, but in version 3 it is '''part of the protocol specification''', that a node must silently ignore unsupported messages.&lt;br /&gt;
&lt;br /&gt;
== Object type ==&lt;br /&gt;
&lt;br /&gt;
The four former object types &amp;quot;getpubkey&amp;quot;, &amp;quot;pubkey&amp;quot;, &amp;quot;msg&amp;quot; and &amp;quot;broadcast&amp;quot; are summarizes into a single Message type &amp;quot;object&amp;quot;. The four Messages as they did exist in version 2 protocol are not valid any more.&lt;br /&gt;
&lt;br /&gt;
Objects are shared throughout a stream.  A client should advertise objects until their end of life time is reached. To be a valid object, the [[Proof of work|Proof Of Work]] has to be done.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8||POW nonce||uint64_t||&lt;br /&gt;
Random nonce used for the [[Proof of work|Proof Of Work]]&lt;br /&gt;
|-&lt;br /&gt;
| 8||time||uint64_t||&lt;br /&gt;
The &amp;quot;end of life&amp;quot; time of this object (be aware, in version 2 of the protocol this was the generation time). Objects shall be broadcast until its end of life time has been reached. The node shall store the inventory vector of that object for at least another hour to avoid reloading it from another node with a small time delay.&lt;br /&gt;
The maximum value for the &amp;quot;time to life&amp;quot; of an object is 28 days. so the &amp;quot;end of life time&amp;quot; is 28 days in the future at maximum.&lt;br /&gt;
|-&lt;br /&gt;
| 4||object type||uint32_t||&lt;br /&gt;
This field specifies the content of the object.&lt;br /&gt;
Valid values are (at the moment) 0-&amp;quot;getpubkey&amp;quot;, 1-&amp;quot;pubkey&amp;quot;, 2-&amp;quot;msg&amp;quot;, 3-&amp;quot;broadcast&amp;quot;. all other values are reserved. Nodes shall transport objects with unknown types, too. This will make further protocol changes more easy.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| ?||payload||uchar[]||&lt;br /&gt;
This field varies depending on the object type. For a detailed description of their content look [https://bitmessage.org/wiki/Protocol_specification#Object_types here]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Do a POW ===&lt;br /&gt;
&lt;br /&gt;
Generally the POW is done exactly like in [[Proof of work|version 2]]&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;target&amp;quot; (the difficulty of the POW) is defined a little bit lower (more difficult) in version 3. This is, because practice did show, it is to easy to float the network with data.&lt;br /&gt;
In addition to that it is possible in version 3 to lower the time to life of a message (for example when doing a life chat) and getting an easier POW for that.&lt;br /&gt;
&lt;br /&gt;
    payload = EndOfLifeTime + ObjectType + payload&lt;br /&gt;
&lt;br /&gt;
                PayloadLenInBytes * TimeToLiveInSeconds&lt;br /&gt;
    loadvalue = ---------------------------------------  +  payloadLengthExtraBytes + 8&lt;br /&gt;
                                3600&lt;br /&gt;
&lt;br /&gt;
                                2^64 &lt;br /&gt;
    target = ------------------------------------------------&lt;br /&gt;
             loadvalue * averageProofOfWorkNonceTrialsPerByte&lt;/div&gt;</summary>
		<author><name>Thomas</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24397</id>
		<title>Protocol specification v3</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24397"/>
		<updated>2014-07-05T07:37:55Z</updated>

		<summary type="html">&lt;p&gt;Thomas: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Stub}}&lt;br /&gt;
&lt;br /&gt;
{{Template:Proposal}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
This is a DRAFT for the protocol version 3. It describes the changes in protocol version 3 versus version 2. Things which are unchanged from version 2 are not described in detail. So you should use  [https://bitmessage.org/wiki/Protocol_specification this] as a reference for all formates which are not mentioned in this description.&lt;br /&gt;
&lt;br /&gt;
== new features in version 3 ==&lt;br /&gt;
&lt;br /&gt;
Here are the new features of the version 3 of Bitmessage protocol in keywords:&lt;br /&gt;
&lt;br /&gt;
* object type is now coded inside the message&lt;br /&gt;
* objects may have a variable time to live&lt;br /&gt;
* The POW is more difficult but can be easier if you lower the time to live&lt;br /&gt;
* The protocol is tolerant for further message extension&lt;br /&gt;
* The protocol is tolerant for further object extension&lt;br /&gt;
&lt;br /&gt;
== Message types ==&lt;br /&gt;
&lt;br /&gt;
Most message types are unchanged from version 2 to version 3. Only the four &amp;quot;objecttype&amp;quot; messages are not valid any more. They are summerized into one single message.&lt;br /&gt;
&lt;br /&gt;
=== version ===&lt;br /&gt;
&lt;br /&gt;
The version message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#version here]&lt;br /&gt;
&lt;br /&gt;
=== verack ===&lt;br /&gt;
&lt;br /&gt;
The verack message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#verack here]&lt;br /&gt;
&lt;br /&gt;
=== addr ===&lt;br /&gt;
&lt;br /&gt;
The addr message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#addr here]&lt;br /&gt;
&lt;br /&gt;
=== inv ===&lt;br /&gt;
&lt;br /&gt;
The inv message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#inv here]&lt;br /&gt;
&lt;br /&gt;
=== getdata ===&lt;br /&gt;
&lt;br /&gt;
The getdata message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#getdata here]&lt;br /&gt;
&lt;br /&gt;
=== unsupported messages ===&lt;br /&gt;
If a node receives an unknown message it '''must''' silently ignore it. This is for further extensions of the protocol with other messages. Nodes that don't understand such a new message type shall be able to work correct with the message types it understands.&lt;br /&gt;
&lt;br /&gt;
Maybe some version 2 nodes did already implement it that way, but in version 3 it is '''part of the protocol specification''', that a node must silently ignore unsupported messages.&lt;br /&gt;
&lt;br /&gt;
== Object type ==&lt;br /&gt;
&lt;br /&gt;
The four former object types &amp;quot;getpubkey&amp;quot;, &amp;quot;pubkey&amp;quot;, &amp;quot;msg&amp;quot; and &amp;quot;broadcast&amp;quot; are summarizes into a single Message type &amp;quot;object&amp;quot;. The four Messages as they did exist in version 2 protocol are not valid any more.&lt;br /&gt;
&lt;br /&gt;
Objects are shared throughout a stream.  A client should advertise objects until their end of life time is reached. To be a valid object, the [[Proof of work|Proof Of Work]] has to be done.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8||POW nonce||uint64_t||&lt;br /&gt;
Random nonce used for the [[Proof of work|Proof Of Work]]&lt;br /&gt;
|-&lt;br /&gt;
| 8||time||uint64_t||&lt;br /&gt;
The &amp;quot;end of life&amp;quot; time of this object (be aware, in version 2 of the protocol this was the generation time). Objects shall be broadcast until its end of life time has been reached. The node shall store the inventory vector of that object for at least another hour to avoid reloading it from another node with a small time delay.&lt;br /&gt;
The maximum value for the &amp;quot;time to life&amp;quot; of an object is 28 days. so the &amp;quot;end of life time&amp;quot; is 28 days in the future at maximum.&lt;br /&gt;
|-&lt;br /&gt;
| 4||object type||uint32_t||&lt;br /&gt;
This field specifies the content of the object.&lt;br /&gt;
Valid values are (at the moment) 0-&amp;quot;getpubkey&amp;quot;, 1-&amp;quot;pubkey&amp;quot;, 2-&amp;quot;msg&amp;quot;, 3-&amp;quot;broadcast&amp;quot;. all other values are reserved. Nodes shall transport objects with unknown types, too. This will make further protocol changes more easy.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| ?||payload||uchar[]||&lt;br /&gt;
This field varies depending on the object type. For a detailed description of their content look [https://bitmessage.org/wiki/Protocol_specification#Object_types here]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Do a POW ===&lt;br /&gt;
&lt;br /&gt;
Generally the POW is done exactly like in [[Proof of work|version 2]]&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;target&amp;quot; (the difficulty of the POW) is defined a little bit lower (more difficult) in version 3. This is, because practice did show, it is to easy to float the network with data.&lt;br /&gt;
In addition to that it is possible in version 3 to lower the time to life of a message (for example when doing a life chat) and getting an easier POW for that.&lt;br /&gt;
&lt;br /&gt;
    payload = EndOfLifeTime + ObjectType + payload&lt;br /&gt;
&lt;br /&gt;
                PayloadLenInBytes * TimeToLiveInSeconds&lt;br /&gt;
    loadvalue = ---------------------------------------  +  payloadLengthExtraBytes + 8&lt;br /&gt;
                                3600&lt;br /&gt;
&lt;br /&gt;
                                2^64 &lt;br /&gt;
    target = ------------------------------------------------&lt;br /&gt;
             loadvalue * averageProofOfWorkNonceTrialsPerByte&lt;/div&gt;</summary>
		<author><name>Thomas</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24396</id>
		<title>Protocol specification v3</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24396"/>
		<updated>2014-07-05T07:33:40Z</updated>

		<summary type="html">&lt;p&gt;Thomas: /* Object type */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Stub}}&lt;br /&gt;
&lt;br /&gt;
{{Template:Proposal}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
This is a DRAFT for the protocol version 3. It describes the changes in protocol version 3 versus version 2. Things which are unchanged from version 2 are not described in detail. So you should use  [https://bitmessage.org/wiki/Protocol_specification this] as a reference for all formates which are not mentioned in this description.&lt;br /&gt;
&lt;br /&gt;
== Message types ==&lt;br /&gt;
&lt;br /&gt;
Most message types are unchanged from version 2 to version 3. Only the four &amp;quot;objecttype&amp;quot; messages are not valid any more. They are summerized into one single message.&lt;br /&gt;
&lt;br /&gt;
=== version ===&lt;br /&gt;
&lt;br /&gt;
The version message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#version here]&lt;br /&gt;
&lt;br /&gt;
=== verack ===&lt;br /&gt;
&lt;br /&gt;
The verack message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#verack here]&lt;br /&gt;
&lt;br /&gt;
=== addr ===&lt;br /&gt;
&lt;br /&gt;
The addr message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#addr here]&lt;br /&gt;
&lt;br /&gt;
=== inv ===&lt;br /&gt;
&lt;br /&gt;
The inv message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#inv here]&lt;br /&gt;
&lt;br /&gt;
=== getdata ===&lt;br /&gt;
&lt;br /&gt;
The getdata message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#getdata here]&lt;br /&gt;
&lt;br /&gt;
=== unsupported messages ===&lt;br /&gt;
If a node receives an unknown message it '''must''' silently ignore it. This is for further extensions of the protocol with other messages. Nodes that don't understand such a new message type shall be able to work correct with the message types it understands.&lt;br /&gt;
&lt;br /&gt;
Maybe some version 2 nodes did already implement it that way, but in version 3 it is '''part of the protocol specification''', that a node must silently ignore unsupported messages.&lt;br /&gt;
&lt;br /&gt;
== Object type ==&lt;br /&gt;
&lt;br /&gt;
The four former object types &amp;quot;getpubkey&amp;quot;, &amp;quot;pubkey&amp;quot;, &amp;quot;msg&amp;quot; and &amp;quot;broadcast&amp;quot; are summarizes into a single Message type &amp;quot;object&amp;quot;. The four Messages as they did exist in version 2 protocol are not valid any more.&lt;br /&gt;
&lt;br /&gt;
Objects are shared throughout a stream.  A client should advertise objects until their end of life time is reached. To be a valid object, the [[Proof of work|Proof Of Work]] has to be done.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8||POW nonce||uint64_t||&lt;br /&gt;
Random nonce used for the [[Proof of work|Proof Of Work]]&lt;br /&gt;
|-&lt;br /&gt;
| 8||time||uint64_t||&lt;br /&gt;
The &amp;quot;end of life&amp;quot; time of this object (be aware, in version 2 of the protocol this was the generation time). Objects shall be broadcast until its end of life time has been reached. The node shall store the inventory vector of that object for at least another hour to avoid reloading it from another node with a small time delay.&lt;br /&gt;
The maximum value for the &amp;quot;time to life&amp;quot; of an object is 28 days. so the &amp;quot;end of life time&amp;quot; is 28 days in the future at maximum.&lt;br /&gt;
|-&lt;br /&gt;
| 4||object type||uint32_t||&lt;br /&gt;
This field specifies the content of the object.&lt;br /&gt;
Valid values are (at the moment) 0-&amp;quot;getpubkey&amp;quot;, 1-&amp;quot;pubkey&amp;quot;, 2-&amp;quot;msg&amp;quot;, 3-&amp;quot;broadcast&amp;quot;. all other values are reserved. Nodes shall transport objects with unknown types, too. This will make further protocol changes more easy.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| ?||payload||uchar[]||&lt;br /&gt;
This field varies depending on the object type. For a detailed description of their content look [https://bitmessage.org/wiki/Protocol_specification#Object_types here]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Do a POW ===&lt;br /&gt;
&lt;br /&gt;
Generally the POW is done exactly like in [[Proof of work|version 2]]&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;target&amp;quot; (the difficulty of the POW) is defined a little bit lower (more difficult) in version 3. This is, because practice did show, it is to easy to float the network with data.&lt;br /&gt;
In addition to that it is possible in version 3 to lower the time to life of a message (for example when doing a life chat) and getting an easier POW for that.&lt;br /&gt;
&lt;br /&gt;
    payload = EndOfLifeTime + ObjectType + payload&lt;br /&gt;
&lt;br /&gt;
                PayloadLenInBytes * TimeToLiveInSeconds&lt;br /&gt;
    loadvalue = ---------------------------------------  +  payloadLengthExtraBytes + 8&lt;br /&gt;
                                3600&lt;br /&gt;
&lt;br /&gt;
                                2^64 &lt;br /&gt;
    target = ------------------------------------------------&lt;br /&gt;
             loadvalue * averageProofOfWorkNonceTrialsPerByte&lt;/div&gt;</summary>
		<author><name>Thomas</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24395</id>
		<title>Protocol specification v3</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24395"/>
		<updated>2014-07-05T07:32:58Z</updated>

		<summary type="html">&lt;p&gt;Thomas: /* unsupported messages */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Stub}}&lt;br /&gt;
&lt;br /&gt;
{{Template:Proposal}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
This is a DRAFT for the protocol version 3. It describes the changes in protocol version 3 versus version 2. Things which are unchanged from version 2 are not described in detail. So you should use  [https://bitmessage.org/wiki/Protocol_specification this] as a reference for all formates which are not mentioned in this description.&lt;br /&gt;
&lt;br /&gt;
== Message types ==&lt;br /&gt;
&lt;br /&gt;
Most message types are unchanged from version 2 to version 3. Only the four &amp;quot;objecttype&amp;quot; messages are not valid any more. They are summerized into one single message.&lt;br /&gt;
&lt;br /&gt;
=== version ===&lt;br /&gt;
&lt;br /&gt;
The version message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#version here]&lt;br /&gt;
&lt;br /&gt;
=== verack ===&lt;br /&gt;
&lt;br /&gt;
The verack message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#verack here]&lt;br /&gt;
&lt;br /&gt;
=== addr ===&lt;br /&gt;
&lt;br /&gt;
The addr message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#addr here]&lt;br /&gt;
&lt;br /&gt;
=== inv ===&lt;br /&gt;
&lt;br /&gt;
The inv message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#inv here]&lt;br /&gt;
&lt;br /&gt;
=== getdata ===&lt;br /&gt;
&lt;br /&gt;
The getdata message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#getdata here]&lt;br /&gt;
&lt;br /&gt;
=== unsupported messages ===&lt;br /&gt;
If a node receives an unknown message it '''must''' silently ignore it. This is for further extensions of the protocol with other messages. Nodes that don't understand such a new message type shall be able to work correct with the message types it understands.&lt;br /&gt;
&lt;br /&gt;
Maybe some version 2 nodes did already implement it that way, but in version 3 it is '''part of the protocol specification''', that a node must silently ignore unsupported messages.&lt;br /&gt;
&lt;br /&gt;
== Object type ==&lt;br /&gt;
&lt;br /&gt;
The four former object types &amp;quot;getpubkey&amp;quot;, &amp;quot;pubkey&amp;quot;, &amp;quot;msg&amp;quot; and &amp;quot;broadcast&amp;quot; are summarizes into a single Message type &amp;quot;object&amp;quot;. The four Messages as they did exist in version 2 protocol are not valid any more.&lt;br /&gt;
&lt;br /&gt;
Objects are shared throughout a stream.  A client should advertise objects until their end of life time is reached. To be a valid object, the [[Proof of work|Proof Of Work]] has to be done.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8||POW nonce||uint64_t||&lt;br /&gt;
Random nonce used for the [[Proof of work|Proof Of Work]]&lt;br /&gt;
|-&lt;br /&gt;
| 8||time||uint32_t||&lt;br /&gt;
The &amp;quot;end of life&amp;quot; time of this object (be aware, in version 2 of the protocol this was the generation time). Objects shall be broadcast until its end of life time has been reached. The node shall store the inventory vector of that object for at least another hour to avoid reloading it from another node with a small time delay.&lt;br /&gt;
The maximum value for the &amp;quot;time to life&amp;quot; of an object is 28 days. so the &amp;quot;end of life time&amp;quot; is 28 days in the future at maximum.&lt;br /&gt;
|-&lt;br /&gt;
| 4||object type||uint32_t||&lt;br /&gt;
This field specifies the content of the object.&lt;br /&gt;
Valid values are (at the moment) 0-&amp;quot;getpubkey&amp;quot;, 1-&amp;quot;pubkey&amp;quot;, 2-&amp;quot;msg&amp;quot;, 3-&amp;quot;broadcast&amp;quot;. all other values are reserved. Nodes shall transport objects with unknown types, too. This will make further protocol changes more easy.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| ?||payload||uchar[]||&lt;br /&gt;
This field varies depending on the object type. For a detailed description of their content look [https://bitmessage.org/wiki/Protocol_specification#Object_types here]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Do a POW ===&lt;br /&gt;
&lt;br /&gt;
Generally the POW is done exactly like in [[Proof of work|version 2]]&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;target&amp;quot; (the difficulty of the POW) is defined a little bit lower (more difficult) in version 3. This is, because practice did show, it is to easy to float the network with data.&lt;br /&gt;
In addition to that it is possible in version 3 to lower the time to life of a message (for example when doing a life chat) and getting an easier POW for that.&lt;br /&gt;
&lt;br /&gt;
    payload = EndOfLifeTime + ObjectType + payload&lt;br /&gt;
&lt;br /&gt;
                PayloadLenInBytes * TimeToLiveInSeconds&lt;br /&gt;
    loadvalue = ---------------------------------------  +  payloadLengthExtraBytes + 8&lt;br /&gt;
                                3600&lt;br /&gt;
&lt;br /&gt;
                                2^64 &lt;br /&gt;
    target = ------------------------------------------------&lt;br /&gt;
             loadvalue * averageProofOfWorkNonceTrialsPerByte&lt;/div&gt;</summary>
		<author><name>Thomas</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24394</id>
		<title>Protocol specification v3</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24394"/>
		<updated>2014-07-05T07:30:16Z</updated>

		<summary type="html">&lt;p&gt;Thomas: /* unknown messages */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Stub}}&lt;br /&gt;
&lt;br /&gt;
{{Template:Proposal}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
This is a DRAFT for the protocol version 3. It describes the changes in protocol version 3 versus version 2. Things which are unchanged from version 2 are not described in detail. So you should use  [https://bitmessage.org/wiki/Protocol_specification this] as a reference for all formates which are not mentioned in this description.&lt;br /&gt;
&lt;br /&gt;
== Message types ==&lt;br /&gt;
&lt;br /&gt;
Most message types are unchanged from version 2 to version 3. Only the four &amp;quot;objecttype&amp;quot; messages are not valid any more. They are summerized into one single message.&lt;br /&gt;
&lt;br /&gt;
=== version ===&lt;br /&gt;
&lt;br /&gt;
The version message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#version here]&lt;br /&gt;
&lt;br /&gt;
=== verack ===&lt;br /&gt;
&lt;br /&gt;
The verack message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#verack here]&lt;br /&gt;
&lt;br /&gt;
=== addr ===&lt;br /&gt;
&lt;br /&gt;
The addr message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#addr here]&lt;br /&gt;
&lt;br /&gt;
=== inv ===&lt;br /&gt;
&lt;br /&gt;
The inv message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#inv here]&lt;br /&gt;
&lt;br /&gt;
=== getdata ===&lt;br /&gt;
&lt;br /&gt;
The getdata message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#getdata here]&lt;br /&gt;
&lt;br /&gt;
=== unsupported messages ===&lt;br /&gt;
If a node receives an unknown message is shall silently ignore it. This is for further extensions of the protocol with other messages. Nodes that don't understand such a new message type shall be able to work correct with the message types it understands.&lt;br /&gt;
&lt;br /&gt;
Maybe some version 2 nodes did already implement it that way, but in version 3 it is part of the protocol specification, that a node must silently ignore unsupported messages.&lt;br /&gt;
&lt;br /&gt;
== Object type ==&lt;br /&gt;
&lt;br /&gt;
The four former object types &amp;quot;getpubkey&amp;quot;, &amp;quot;pubkey&amp;quot;, &amp;quot;msg&amp;quot; and &amp;quot;broadcast&amp;quot; are summarizes into a single Message type &amp;quot;object&amp;quot;. The four Messages as they did exist in version 2 protocol are not valid any more.&lt;br /&gt;
&lt;br /&gt;
Objects are shared throughout a stream.  A client should advertise objects until their end of life time is reached. To be a valid object, the [[Proof of work|Proof Of Work]] has to be done.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8||POW nonce||uint64_t||&lt;br /&gt;
Random nonce used for the [[Proof of work|Proof Of Work]]&lt;br /&gt;
|-&lt;br /&gt;
| 8||time||uint32_t||&lt;br /&gt;
The &amp;quot;end of life&amp;quot; time of this object (be aware, in version 2 of the protocol this was the generation time). Objects shall be broadcast until its end of life time has been reached. The node shall store the inventory vector of that object for at least another hour to avoid reloading it from another node with a small time delay.&lt;br /&gt;
The maximum value for the &amp;quot;time to life&amp;quot; of an object is 28 days. so the &amp;quot;end of life time&amp;quot; is 28 days in the future at maximum.&lt;br /&gt;
|-&lt;br /&gt;
| 4||object type||uint32_t||&lt;br /&gt;
This field specifies the content of the object.&lt;br /&gt;
Valid values are (at the moment) 0-&amp;quot;getpubkey&amp;quot;, 1-&amp;quot;pubkey&amp;quot;, 2-&amp;quot;msg&amp;quot;, 3-&amp;quot;broadcast&amp;quot;. all other values are reserved. Nodes shall transport objects with unknown types, too. This will make further protocol changes more easy.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| ?||payload||uchar[]||&lt;br /&gt;
This field varies depending on the object type. For a detailed description of their content look [https://bitmessage.org/wiki/Protocol_specification#Object_types here]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Do a POW ===&lt;br /&gt;
&lt;br /&gt;
Generally the POW is done exactly like in [[Proof of work|version 2]]&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;target&amp;quot; (the difficulty of the POW) is defined a little bit lower (more difficult) in version 3. This is, because practice did show, it is to easy to float the network with data.&lt;br /&gt;
In addition to that it is possible in version 3 to lower the time to life of a message (for example when doing a life chat) and getting an easier POW for that.&lt;br /&gt;
&lt;br /&gt;
    payload = EndOfLifeTime + ObjectType + payload&lt;br /&gt;
&lt;br /&gt;
                PayloadLenInBytes * TimeToLiveInSeconds&lt;br /&gt;
    loadvalue = ---------------------------------------  +  payloadLengthExtraBytes + 8&lt;br /&gt;
                                3600&lt;br /&gt;
&lt;br /&gt;
                                2^64 &lt;br /&gt;
    target = ------------------------------------------------&lt;br /&gt;
             loadvalue * averageProofOfWorkNonceTrialsPerByte&lt;/div&gt;</summary>
		<author><name>Thomas</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24393</id>
		<title>Protocol specification v3</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24393"/>
		<updated>2014-07-05T07:26:42Z</updated>

		<summary type="html">&lt;p&gt;Thomas: /* getdata */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Stub}}&lt;br /&gt;
&lt;br /&gt;
{{Template:Proposal}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
This is a DRAFT for the protocol version 3. It describes the changes in protocol version 3 versus version 2. Things which are unchanged from version 2 are not described in detail. So you should use  [https://bitmessage.org/wiki/Protocol_specification this] as a reference for all formates which are not mentioned in this description.&lt;br /&gt;
&lt;br /&gt;
== Message types ==&lt;br /&gt;
&lt;br /&gt;
Most message types are unchanged from version 2 to version 3. Only the four &amp;quot;objecttype&amp;quot; messages are not valid any more. They are summerized into one single message.&lt;br /&gt;
&lt;br /&gt;
=== version ===&lt;br /&gt;
&lt;br /&gt;
The version message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#version here]&lt;br /&gt;
&lt;br /&gt;
=== verack ===&lt;br /&gt;
&lt;br /&gt;
The verack message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#verack here]&lt;br /&gt;
&lt;br /&gt;
=== addr ===&lt;br /&gt;
&lt;br /&gt;
The addr message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#addr here]&lt;br /&gt;
&lt;br /&gt;
=== inv ===&lt;br /&gt;
&lt;br /&gt;
The inv message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#inv here]&lt;br /&gt;
&lt;br /&gt;
=== getdata ===&lt;br /&gt;
&lt;br /&gt;
The getdata message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#getdata here]&lt;br /&gt;
&lt;br /&gt;
=== unknown messages ===&lt;br /&gt;
If a node receives an unknown message is shall silently ignore it. This is for further extensions of the protocol with other messages. Nodes that don't understand such a new message type shall be able to work correct with the message type it understands.&lt;br /&gt;
&lt;br /&gt;
Maybe some version 2 nodes did already implement it that way, but in version 3 it is part of the protocol specification, that a node must silently ignore unknown messages.&lt;br /&gt;
&lt;br /&gt;
== Object type ==&lt;br /&gt;
&lt;br /&gt;
The four former object types &amp;quot;getpubkey&amp;quot;, &amp;quot;pubkey&amp;quot;, &amp;quot;msg&amp;quot; and &amp;quot;broadcast&amp;quot; are summarizes into a single Message type &amp;quot;object&amp;quot;. The four Messages as they did exist in version 2 protocol are not valid any more.&lt;br /&gt;
&lt;br /&gt;
Objects are shared throughout a stream.  A client should advertise objects until their end of life time is reached. To be a valid object, the [[Proof of work|Proof Of Work]] has to be done.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8||POW nonce||uint64_t||&lt;br /&gt;
Random nonce used for the [[Proof of work|Proof Of Work]]&lt;br /&gt;
|-&lt;br /&gt;
| 8||time||uint32_t||&lt;br /&gt;
The &amp;quot;end of life&amp;quot; time of this object (be aware, in version 2 of the protocol this was the generation time). Objects shall be broadcast until its end of life time has been reached. The node shall store the inventory vector of that object for at least another hour to avoid reloading it from another node with a small time delay.&lt;br /&gt;
The maximum value for the &amp;quot;time to life&amp;quot; of an object is 28 days. so the &amp;quot;end of life time&amp;quot; is 28 days in the future at maximum.&lt;br /&gt;
|-&lt;br /&gt;
| 4||object type||uint32_t||&lt;br /&gt;
This field specifies the content of the object.&lt;br /&gt;
Valid values are (at the moment) 0-&amp;quot;getpubkey&amp;quot;, 1-&amp;quot;pubkey&amp;quot;, 2-&amp;quot;msg&amp;quot;, 3-&amp;quot;broadcast&amp;quot;. all other values are reserved. Nodes shall transport objects with unknown types, too. This will make further protocol changes more easy.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| ?||payload||uchar[]||&lt;br /&gt;
This field varies depending on the object type. For a detailed description of their content look [https://bitmessage.org/wiki/Protocol_specification#Object_types here]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Do a POW ===&lt;br /&gt;
&lt;br /&gt;
Generally the POW is done exactly like in [[Proof of work|version 2]]&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;target&amp;quot; (the difficulty of the POW) is defined a little bit lower (more difficult) in version 3. This is, because practice did show, it is to easy to float the network with data.&lt;br /&gt;
In addition to that it is possible in version 3 to lower the time to life of a message (for example when doing a life chat) and getting an easier POW for that.&lt;br /&gt;
&lt;br /&gt;
    payload = EndOfLifeTime + ObjectType + payload&lt;br /&gt;
&lt;br /&gt;
                PayloadLenInBytes * TimeToLiveInSeconds&lt;br /&gt;
    loadvalue = ---------------------------------------  +  payloadLengthExtraBytes + 8&lt;br /&gt;
                                3600&lt;br /&gt;
&lt;br /&gt;
                                2^64 &lt;br /&gt;
    target = ------------------------------------------------&lt;br /&gt;
             loadvalue * averageProofOfWorkNonceTrialsPerByte&lt;/div&gt;</summary>
		<author><name>Thomas</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24392</id>
		<title>Protocol specification v3</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24392"/>
		<updated>2014-07-05T07:23:13Z</updated>

		<summary type="html">&lt;p&gt;Thomas: /* Object type */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Stub}}&lt;br /&gt;
&lt;br /&gt;
{{Template:Proposal}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
This is a DRAFT for the protocol version 3. It describes the changes in protocol version 3 versus version 2. Things which are unchanged from version 2 are not described in detail. So you should use  [https://bitmessage.org/wiki/Protocol_specification this] as a reference for all formates which are not mentioned in this description.&lt;br /&gt;
&lt;br /&gt;
== Message types ==&lt;br /&gt;
&lt;br /&gt;
Most message types are unchanged from version 2 to version 3. Only the four &amp;quot;objecttype&amp;quot; messages are not valid any more. They are summerized into one single message.&lt;br /&gt;
&lt;br /&gt;
=== version ===&lt;br /&gt;
&lt;br /&gt;
The version message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#version here]&lt;br /&gt;
&lt;br /&gt;
=== verack ===&lt;br /&gt;
&lt;br /&gt;
The verack message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#verack here]&lt;br /&gt;
&lt;br /&gt;
=== addr ===&lt;br /&gt;
&lt;br /&gt;
The addr message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#addr here]&lt;br /&gt;
&lt;br /&gt;
=== inv ===&lt;br /&gt;
&lt;br /&gt;
The inv message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#inv here]&lt;br /&gt;
&lt;br /&gt;
=== getdata ===&lt;br /&gt;
&lt;br /&gt;
The getdata message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#getdata here]&lt;br /&gt;
&lt;br /&gt;
== Object type ==&lt;br /&gt;
&lt;br /&gt;
The four former object types &amp;quot;getpubkey&amp;quot;, &amp;quot;pubkey&amp;quot;, &amp;quot;msg&amp;quot; and &amp;quot;broadcast&amp;quot; are summarizes into a single Message type &amp;quot;object&amp;quot;. The four Messages as they did exist in version 2 protocol are not valid any more.&lt;br /&gt;
&lt;br /&gt;
Objects are shared throughout a stream.  A client should advertise objects until their end of life time is reached. To be a valid object, the [[Proof of work|Proof Of Work]] has to be done.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8||POW nonce||uint64_t||&lt;br /&gt;
Random nonce used for the [[Proof of work|Proof Of Work]]&lt;br /&gt;
|-&lt;br /&gt;
| 8||time||uint32_t||&lt;br /&gt;
The &amp;quot;end of life&amp;quot; time of this object (be aware, in version 2 of the protocol this was the generation time). Objects shall be broadcast until its end of life time has been reached. The node shall store the inventory vector of that object for at least another hour to avoid reloading it from another node with a small time delay.&lt;br /&gt;
The maximum value for the &amp;quot;time to life&amp;quot; of an object is 28 days. so the &amp;quot;end of life time&amp;quot; is 28 days in the future at maximum.&lt;br /&gt;
|-&lt;br /&gt;
| 4||object type||uint32_t||&lt;br /&gt;
This field specifies the content of the object.&lt;br /&gt;
Valid values are (at the moment) 0-&amp;quot;getpubkey&amp;quot;, 1-&amp;quot;pubkey&amp;quot;, 2-&amp;quot;msg&amp;quot;, 3-&amp;quot;broadcast&amp;quot;. all other values are reserved. Nodes shall transport objects with unknown types, too. This will make further protocol changes more easy.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| ?||payload||uchar[]||&lt;br /&gt;
This field varies depending on the object type. For a detailed description of their content look [https://bitmessage.org/wiki/Protocol_specification#Object_types here]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Do a POW ===&lt;br /&gt;
&lt;br /&gt;
Generally the POW is done exactly like in [[Proof of work|version 2]]&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;target&amp;quot; (the difficulty of the POW) is defined a little bit lower (more difficult) in version 3. This is, because practice did show, it is to easy to float the network with data.&lt;br /&gt;
In addition to that it is possible in version 3 to lower the time to life of a message (for example when doing a life chat) and getting an easier POW for that.&lt;br /&gt;
&lt;br /&gt;
    payload = EndOfLifeTime + ObjectType + payload&lt;br /&gt;
&lt;br /&gt;
                PayloadLenInBytes * TimeToLiveInSeconds&lt;br /&gt;
    loadvalue = ---------------------------------------  +  payloadLengthExtraBytes + 8&lt;br /&gt;
                                3600&lt;br /&gt;
&lt;br /&gt;
                                2^64 &lt;br /&gt;
    target = ------------------------------------------------&lt;br /&gt;
             loadvalue * averageProofOfWorkNonceTrialsPerByte&lt;/div&gt;</summary>
		<author><name>Thomas</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24391</id>
		<title>Protocol specification v3</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24391"/>
		<updated>2014-07-05T07:15:41Z</updated>

		<summary type="html">&lt;p&gt;Thomas: /* Do a POW */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Stub}}&lt;br /&gt;
&lt;br /&gt;
{{Template:Proposal}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
This is a DRAFT for the protocol version 3. It describes the changes in protocol version 3 versus version 2. Things which are unchanged from version 2 are not described in detail. So you should use  [https://bitmessage.org/wiki/Protocol_specification this] as a reference for all formates which are not mentioned in this description.&lt;br /&gt;
&lt;br /&gt;
== Message types ==&lt;br /&gt;
&lt;br /&gt;
Most message types are unchanged from version 2 to version 3. Only the four &amp;quot;objecttype&amp;quot; messages are not valid any more. They are summerized into one single message.&lt;br /&gt;
&lt;br /&gt;
=== version ===&lt;br /&gt;
&lt;br /&gt;
The version message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#version here]&lt;br /&gt;
&lt;br /&gt;
=== verack ===&lt;br /&gt;
&lt;br /&gt;
The verack message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#verack here]&lt;br /&gt;
&lt;br /&gt;
=== addr ===&lt;br /&gt;
&lt;br /&gt;
The addr message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#addr here]&lt;br /&gt;
&lt;br /&gt;
=== inv ===&lt;br /&gt;
&lt;br /&gt;
The inv message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#inv here]&lt;br /&gt;
&lt;br /&gt;
=== getdata ===&lt;br /&gt;
&lt;br /&gt;
The getdata message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#getdata here]&lt;br /&gt;
&lt;br /&gt;
== Object type ==&lt;br /&gt;
&lt;br /&gt;
The four former object types &amp;quot;getpubkey&amp;quot;, &amp;quot;pubkey&amp;quot;, &amp;quot;msg&amp;quot; and &amp;quot;broadcast&amp;quot; are summarizes into a single Message type &amp;quot;object&amp;quot;. The four Messages as they did exist in version 2 protocol are not valid any more.&lt;br /&gt;
&lt;br /&gt;
Objects are shared throughout a stream.  A client should advertise objects until their end of life time is reached. To be a valid object, the [[Proof of work|Proof Of Work]] has to be done.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8||POW nonce||uint64_t||&lt;br /&gt;
Random nonce used for the [[Proof of work|Proof Of Work]]&lt;br /&gt;
|-&lt;br /&gt;
| 8||time||uint32_t||&lt;br /&gt;
The &amp;quot;end of life&amp;quot; time of this object (be aware, in version 2 of the protocol this was the generation time). Objects shall be broadcast until its end of life time has been reached. The node shall store the inventory vector of that object for at least another hour to avoid reloading it from another node with a small time delay.&lt;br /&gt;
The maximum value for the end of life time is 28 days in the future.&lt;br /&gt;
|-&lt;br /&gt;
| 4||object type||uint32_t||&lt;br /&gt;
This field specifies the content of the object.&lt;br /&gt;
Valid values are (at the moment) 0-&amp;quot;getpubkey&amp;quot;, 1-&amp;quot;pubkey&amp;quot;, 2-&amp;quot;msg&amp;quot;, 3-&amp;quot;broadcast&amp;quot;. all other values are reserved. Nodes shall transport objects with unknown types, too. This will make further protocol changes more easy.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| ?||payload||uchar[]||&lt;br /&gt;
This field varies depending on the object type. For a detailed description of their content look [https://bitmessage.org/wiki/Protocol_specification#Object_types here]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Do a POW ===&lt;br /&gt;
&lt;br /&gt;
Generally the POW is done exactly like in [[Proof of work|version 2]]&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;target&amp;quot; (the difficulty of the POW) is defined a little bit lower (more difficult) in version 3. This is, because practice did show, it is to easy to float the network with data.&lt;br /&gt;
In addition to that it is possible in version 3 to lower the time to life of a message (for example when doing a life chat) and getting an easier POW for that.&lt;br /&gt;
&lt;br /&gt;
    payload = EndOfLifeTime + ObjectType + payload&lt;br /&gt;
&lt;br /&gt;
                PayloadLenInBytes * TimeToLiveInSeconds&lt;br /&gt;
    loadvalue = ---------------------------------------  +  payloadLengthExtraBytes + 8&lt;br /&gt;
                                3600&lt;br /&gt;
&lt;br /&gt;
                                2^64 &lt;br /&gt;
    target = ------------------------------------------------&lt;br /&gt;
             loadvalue * averageProofOfWorkNonceTrialsPerByte&lt;/div&gt;</summary>
		<author><name>Thomas</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24390</id>
		<title>Protocol specification v3</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24390"/>
		<updated>2014-07-05T07:14:39Z</updated>

		<summary type="html">&lt;p&gt;Thomas: /* Do a POW */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Stub}}&lt;br /&gt;
&lt;br /&gt;
{{Template:Proposal}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
This is a DRAFT for the protocol version 3. It describes the changes in protocol version 3 versus version 2. Things which are unchanged from version 2 are not described in detail. So you should use  [https://bitmessage.org/wiki/Protocol_specification this] as a reference for all formates which are not mentioned in this description.&lt;br /&gt;
&lt;br /&gt;
== Message types ==&lt;br /&gt;
&lt;br /&gt;
Most message types are unchanged from version 2 to version 3. Only the four &amp;quot;objecttype&amp;quot; messages are not valid any more. They are summerized into one single message.&lt;br /&gt;
&lt;br /&gt;
=== version ===&lt;br /&gt;
&lt;br /&gt;
The version message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#version here]&lt;br /&gt;
&lt;br /&gt;
=== verack ===&lt;br /&gt;
&lt;br /&gt;
The verack message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#verack here]&lt;br /&gt;
&lt;br /&gt;
=== addr ===&lt;br /&gt;
&lt;br /&gt;
The addr message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#addr here]&lt;br /&gt;
&lt;br /&gt;
=== inv ===&lt;br /&gt;
&lt;br /&gt;
The inv message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#inv here]&lt;br /&gt;
&lt;br /&gt;
=== getdata ===&lt;br /&gt;
&lt;br /&gt;
The getdata message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#getdata here]&lt;br /&gt;
&lt;br /&gt;
== Object type ==&lt;br /&gt;
&lt;br /&gt;
The four former object types &amp;quot;getpubkey&amp;quot;, &amp;quot;pubkey&amp;quot;, &amp;quot;msg&amp;quot; and &amp;quot;broadcast&amp;quot; are summarizes into a single Message type &amp;quot;object&amp;quot;. The four Messages as they did exist in version 2 protocol are not valid any more.&lt;br /&gt;
&lt;br /&gt;
Objects are shared throughout a stream.  A client should advertise objects until their end of life time is reached. To be a valid object, the [[Proof of work|Proof Of Work]] has to be done.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8||POW nonce||uint64_t||&lt;br /&gt;
Random nonce used for the [[Proof of work|Proof Of Work]]&lt;br /&gt;
|-&lt;br /&gt;
| 8||time||uint32_t||&lt;br /&gt;
The &amp;quot;end of life&amp;quot; time of this object (be aware, in version 2 of the protocol this was the generation time). Objects shall be broadcast until its end of life time has been reached. The node shall store the inventory vector of that object for at least another hour to avoid reloading it from another node with a small time delay.&lt;br /&gt;
The maximum value for the end of life time is 28 days in the future.&lt;br /&gt;
|-&lt;br /&gt;
| 4||object type||uint32_t||&lt;br /&gt;
This field specifies the content of the object.&lt;br /&gt;
Valid values are (at the moment) 0-&amp;quot;getpubkey&amp;quot;, 1-&amp;quot;pubkey&amp;quot;, 2-&amp;quot;msg&amp;quot;, 3-&amp;quot;broadcast&amp;quot;. all other values are reserved. Nodes shall transport objects with unknown types, too. This will make further protocol changes more easy.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| ?||payload||uchar[]||&lt;br /&gt;
This field varies depending on the object type. For a detailed description of their content look [https://bitmessage.org/wiki/Protocol_specification#Object_types here]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Do a POW ===&lt;br /&gt;
&lt;br /&gt;
Generally the POW is done exactly like in [[Proof of work|version 2]]&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;target&amp;quot; (the dificulty of the POW) is defined a little bit lower (more difficult) in version 3. This is, because paractice did show, it is to easy to float the network with data.&lt;br /&gt;
In addition to that it is possible in version 3 to lower the time to life of a message (for example when doing a life chat) and getting a lower POW for that.&lt;br /&gt;
&lt;br /&gt;
    payload = EndOfLifeTime + ObjectType + payload&lt;br /&gt;
&lt;br /&gt;
                PayloadLenInBytes * TimeToLiveInSeconds&lt;br /&gt;
    loadvalue = ---------------------------------------  +  payloadLengthExtraBytes + 8&lt;br /&gt;
                                3600&lt;br /&gt;
&lt;br /&gt;
                                2^64 &lt;br /&gt;
    target = ------------------------------------------------&lt;br /&gt;
             loadvalue * averageProofOfWorkNonceTrialsPerByte&lt;/div&gt;</summary>
		<author><name>Thomas</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24389</id>
		<title>Protocol specification v3</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24389"/>
		<updated>2014-07-05T07:12:51Z</updated>

		<summary type="html">&lt;p&gt;Thomas: /* Do a POW */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Stub}}&lt;br /&gt;
&lt;br /&gt;
{{Template:Proposal}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
This is a DRAFT for the protocol version 3. It describes the changes in protocol version 3 versus version 2. Things which are unchanged from version 2 are not described in detail. So you should use  [https://bitmessage.org/wiki/Protocol_specification this] as a reference for all formates which are not mentioned in this description.&lt;br /&gt;
&lt;br /&gt;
== Message types ==&lt;br /&gt;
&lt;br /&gt;
Most message types are unchanged from version 2 to version 3. Only the four &amp;quot;objecttype&amp;quot; messages are not valid any more. They are summerized into one single message.&lt;br /&gt;
&lt;br /&gt;
=== version ===&lt;br /&gt;
&lt;br /&gt;
The version message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#version here]&lt;br /&gt;
&lt;br /&gt;
=== verack ===&lt;br /&gt;
&lt;br /&gt;
The verack message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#verack here]&lt;br /&gt;
&lt;br /&gt;
=== addr ===&lt;br /&gt;
&lt;br /&gt;
The addr message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#addr here]&lt;br /&gt;
&lt;br /&gt;
=== inv ===&lt;br /&gt;
&lt;br /&gt;
The inv message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#inv here]&lt;br /&gt;
&lt;br /&gt;
=== getdata ===&lt;br /&gt;
&lt;br /&gt;
The getdata message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#getdata here]&lt;br /&gt;
&lt;br /&gt;
== Object type ==&lt;br /&gt;
&lt;br /&gt;
The four former object types &amp;quot;getpubkey&amp;quot;, &amp;quot;pubkey&amp;quot;, &amp;quot;msg&amp;quot; and &amp;quot;broadcast&amp;quot; are summarizes into a single Message type &amp;quot;object&amp;quot;. The four Messages as they did exist in version 2 protocol are not valid any more.&lt;br /&gt;
&lt;br /&gt;
Objects are shared throughout a stream.  A client should advertise objects until their end of life time is reached. To be a valid object, the [[Proof of work|Proof Of Work]] has to be done.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8||POW nonce||uint64_t||&lt;br /&gt;
Random nonce used for the [[Proof of work|Proof Of Work]]&lt;br /&gt;
|-&lt;br /&gt;
| 8||time||uint32_t||&lt;br /&gt;
The &amp;quot;end of life&amp;quot; time of this object (be aware, in version 2 of the protocol this was the generation time). Objects shall be broadcast until its end of life time has been reached. The node shall store the inventory vector of that object for at least another hour to avoid reloading it from another node with a small time delay.&lt;br /&gt;
The maximum value for the end of life time is 28 days in the future.&lt;br /&gt;
|-&lt;br /&gt;
| 4||object type||uint32_t||&lt;br /&gt;
This field specifies the content of the object.&lt;br /&gt;
Valid values are (at the moment) 0-&amp;quot;getpubkey&amp;quot;, 1-&amp;quot;pubkey&amp;quot;, 2-&amp;quot;msg&amp;quot;, 3-&amp;quot;broadcast&amp;quot;. all other values are reserved. Nodes shall transport objects with unknown types, too. This will make further protocol changes more easy.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| ?||payload||uchar[]||&lt;br /&gt;
This field varies depending on the object type. For a detailed description of their content look [https://bitmessage.org/wiki/Protocol_specification#Object_types here]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Do a POW ===&lt;br /&gt;
&lt;br /&gt;
Generally the POW is done exactly like in [[Proof of work|version 2]]&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;target&amp;quot; (the dificulty of the POW) is defined a little bit lower (more difficult) in version 3. This is, because paractice did show, it is to easy to float the network with data.&lt;br /&gt;
&lt;br /&gt;
    payload = EndOfLifeTime + ObjectType + payload&lt;br /&gt;
&lt;br /&gt;
                PayloadLenInBytes * TimeToLiveInSeconds&lt;br /&gt;
    loadvalue = ---------------------------------------  +  payloadLengthExtraBytes + 8)&lt;br /&gt;
                                3600&lt;br /&gt;
&lt;br /&gt;
                                2^64 &lt;br /&gt;
    target = ------------------------------------------------&lt;br /&gt;
             loadvalue * averageProofOfWorkNonceTrialsPerByte&lt;/div&gt;</summary>
		<author><name>Thomas</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24388</id>
		<title>Protocol specification v3</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24388"/>
		<updated>2014-07-05T07:08:20Z</updated>

		<summary type="html">&lt;p&gt;Thomas: /* Do a POW */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Stub}}&lt;br /&gt;
&lt;br /&gt;
{{Template:Proposal}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
This is a DRAFT for the protocol version 3. It describes the changes in protocol version 3 versus version 2. Things which are unchanged from version 2 are not described in detail. So you should use  [https://bitmessage.org/wiki/Protocol_specification this] as a reference for all formates which are not mentioned in this description.&lt;br /&gt;
&lt;br /&gt;
== Message types ==&lt;br /&gt;
&lt;br /&gt;
Most message types are unchanged from version 2 to version 3. Only the four &amp;quot;objecttype&amp;quot; messages are not valid any more. They are summerized into one single message.&lt;br /&gt;
&lt;br /&gt;
=== version ===&lt;br /&gt;
&lt;br /&gt;
The version message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#version here]&lt;br /&gt;
&lt;br /&gt;
=== verack ===&lt;br /&gt;
&lt;br /&gt;
The verack message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#verack here]&lt;br /&gt;
&lt;br /&gt;
=== addr ===&lt;br /&gt;
&lt;br /&gt;
The addr message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#addr here]&lt;br /&gt;
&lt;br /&gt;
=== inv ===&lt;br /&gt;
&lt;br /&gt;
The inv message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#inv here]&lt;br /&gt;
&lt;br /&gt;
=== getdata ===&lt;br /&gt;
&lt;br /&gt;
The getdata message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#getdata here]&lt;br /&gt;
&lt;br /&gt;
== Object type ==&lt;br /&gt;
&lt;br /&gt;
The four former object types &amp;quot;getpubkey&amp;quot;, &amp;quot;pubkey&amp;quot;, &amp;quot;msg&amp;quot; and &amp;quot;broadcast&amp;quot; are summarizes into a single Message type &amp;quot;object&amp;quot;. The four Messages as they did exist in version 2 protocol are not valid any more.&lt;br /&gt;
&lt;br /&gt;
Objects are shared throughout a stream.  A client should advertise objects until their end of life time is reached. To be a valid object, the [[Proof of work|Proof Of Work]] has to be done.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8||POW nonce||uint64_t||&lt;br /&gt;
Random nonce used for the [[Proof of work|Proof Of Work]]&lt;br /&gt;
|-&lt;br /&gt;
| 8||time||uint32_t||&lt;br /&gt;
The &amp;quot;end of life&amp;quot; time of this object (be aware, in version 2 of the protocol this was the generation time). Objects shall be broadcast until its end of life time has been reached. The node shall store the inventory vector of that object for at least another hour to avoid reloading it from another node with a small time delay.&lt;br /&gt;
The maximum value for the end of life time is 28 days in the future.&lt;br /&gt;
|-&lt;br /&gt;
| 4||object type||uint32_t||&lt;br /&gt;
This field specifies the content of the object.&lt;br /&gt;
Valid values are (at the moment) 0-&amp;quot;getpubkey&amp;quot;, 1-&amp;quot;pubkey&amp;quot;, 2-&amp;quot;msg&amp;quot;, 3-&amp;quot;broadcast&amp;quot;. all other values are reserved. Nodes shall transport objects with unknown types, too. This will make further protocol changes more easy.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| ?||payload||uchar[]||&lt;br /&gt;
This field varies depending on the object type. For a detailed description of their content look [https://bitmessage.org/wiki/Protocol_specification#Object_types here]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Do a POW ===&lt;br /&gt;
&lt;br /&gt;
Generally the POW is done exactly like in [[Proof of work|version 2]]&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;target&amp;quot; (the dificulty of the POW) is defined a little bit lower (more difficult) in version 3. This is, because paractice did show, it is to easy to float the network with data.&lt;br /&gt;
&lt;br /&gt;
    payload = EndOfLifeTime + ObjectType + payload&lt;br /&gt;
&lt;br /&gt;
    loadvalue = ((PayloadLenInBytes * TimeToLiveInHours)  +  payloadLengthExtraBytes + 8)&lt;br /&gt;
&lt;br /&gt;
             2^64 &lt;br /&gt;
    target = ------------------------------------------------&lt;br /&gt;
             loadvalue * averageProofOfWorkNonceTrialsPerByte&lt;/div&gt;</summary>
		<author><name>Thomas</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24387</id>
		<title>Protocol specification v3</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24387"/>
		<updated>2014-07-05T07:05:34Z</updated>

		<summary type="html">&lt;p&gt;Thomas: /* Do a POW */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Stub}}&lt;br /&gt;
&lt;br /&gt;
{{Template:Proposal}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
This is a DRAFT for the protocol version 3. It describes the changes in protocol version 3 versus version 2. Things which are unchanged from version 2 are not described in detail. So you should use  [https://bitmessage.org/wiki/Protocol_specification this] as a reference for all formates which are not mentioned in this description.&lt;br /&gt;
&lt;br /&gt;
== Message types ==&lt;br /&gt;
&lt;br /&gt;
Most message types are unchanged from version 2 to version 3. Only the four &amp;quot;objecttype&amp;quot; messages are not valid any more. They are summerized into one single message.&lt;br /&gt;
&lt;br /&gt;
=== version ===&lt;br /&gt;
&lt;br /&gt;
The version message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#version here]&lt;br /&gt;
&lt;br /&gt;
=== verack ===&lt;br /&gt;
&lt;br /&gt;
The verack message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#verack here]&lt;br /&gt;
&lt;br /&gt;
=== addr ===&lt;br /&gt;
&lt;br /&gt;
The addr message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#addr here]&lt;br /&gt;
&lt;br /&gt;
=== inv ===&lt;br /&gt;
&lt;br /&gt;
The inv message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#inv here]&lt;br /&gt;
&lt;br /&gt;
=== getdata ===&lt;br /&gt;
&lt;br /&gt;
The getdata message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#getdata here]&lt;br /&gt;
&lt;br /&gt;
== Object type ==&lt;br /&gt;
&lt;br /&gt;
The four former object types &amp;quot;getpubkey&amp;quot;, &amp;quot;pubkey&amp;quot;, &amp;quot;msg&amp;quot; and &amp;quot;broadcast&amp;quot; are summarizes into a single Message type &amp;quot;object&amp;quot;. The four Messages as they did exist in version 2 protocol are not valid any more.&lt;br /&gt;
&lt;br /&gt;
Objects are shared throughout a stream.  A client should advertise objects until their end of life time is reached. To be a valid object, the [[Proof of work|Proof Of Work]] has to be done.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8||POW nonce||uint64_t||&lt;br /&gt;
Random nonce used for the [[Proof of work|Proof Of Work]]&lt;br /&gt;
|-&lt;br /&gt;
| 8||time||uint32_t||&lt;br /&gt;
The &amp;quot;end of life&amp;quot; time of this object (be aware, in version 2 of the protocol this was the generation time). Objects shall be broadcast until its end of life time has been reached. The node shall store the inventory vector of that object for at least another hour to avoid reloading it from another node with a small time delay.&lt;br /&gt;
The maximum value for the end of life time is 28 days in the future.&lt;br /&gt;
|-&lt;br /&gt;
| 4||object type||uint32_t||&lt;br /&gt;
This field specifies the content of the object.&lt;br /&gt;
Valid values are (at the moment) 0-&amp;quot;getpubkey&amp;quot;, 1-&amp;quot;pubkey&amp;quot;, 2-&amp;quot;msg&amp;quot;, 3-&amp;quot;broadcast&amp;quot;. all other values are reserved. Nodes shall transport objects with unknown types, too. This will make further protocol changes more easy.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| ?||payload||uchar[]||&lt;br /&gt;
This field varies depending on the object type. For a detailed description of their content look [https://bitmessage.org/wiki/Protocol_specification#Object_types here]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Do a POW ===&lt;br /&gt;
&lt;br /&gt;
Generally the POW is done exactly like in [[Proof of work|version 2]]&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;target&amp;quot; (the dificulty of the POW) is defined a little bit lower (more difficult) in version two. This is, because paractice did show, it is to easy to float the network with data.&lt;br /&gt;
&lt;br /&gt;
    payload = EndOfLifeTime + ObjectType + payload&lt;br /&gt;
&lt;br /&gt;
             2^64 &lt;br /&gt;
    target = --------------------------------------------&lt;br /&gt;
             ((PayloadLenInBytes * TimeToLiveInHours)  +  payloadLengthExtraBytes + 8) * averageProofOfWorkNonceTrialsPerByte&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
  \operatorname{erfc}(x) =&lt;br /&gt;
  \frac{2}{\sqrt{\pi}} \int_x^{\infty} e^{-t^2}\,dt =&lt;br /&gt;
  \frac{e^{-x^2}}{x\sqrt{\pi}}\sum_{n=0}^\infty (-1)^n \frac{(2n)!}{n!(2x)^{2n}}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;/div&gt;</summary>
		<author><name>Thomas</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24386</id>
		<title>Protocol specification v3</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24386"/>
		<updated>2014-07-05T07:03:44Z</updated>

		<summary type="html">&lt;p&gt;Thomas: /* Do a POW */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Stub}}&lt;br /&gt;
&lt;br /&gt;
{{Template:Proposal}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
This is a DRAFT for the protocol version 3. It describes the changes in protocol version 3 versus version 2. Things which are unchanged from version 2 are not described in detail. So you should use  [https://bitmessage.org/wiki/Protocol_specification this] as a reference for all formates which are not mentioned in this description.&lt;br /&gt;
&lt;br /&gt;
== Message types ==&lt;br /&gt;
&lt;br /&gt;
Most message types are unchanged from version 2 to version 3. Only the four &amp;quot;objecttype&amp;quot; messages are not valid any more. They are summerized into one single message.&lt;br /&gt;
&lt;br /&gt;
=== version ===&lt;br /&gt;
&lt;br /&gt;
The version message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#version here]&lt;br /&gt;
&lt;br /&gt;
=== verack ===&lt;br /&gt;
&lt;br /&gt;
The verack message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#verack here]&lt;br /&gt;
&lt;br /&gt;
=== addr ===&lt;br /&gt;
&lt;br /&gt;
The addr message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#addr here]&lt;br /&gt;
&lt;br /&gt;
=== inv ===&lt;br /&gt;
&lt;br /&gt;
The inv message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#inv here]&lt;br /&gt;
&lt;br /&gt;
=== getdata ===&lt;br /&gt;
&lt;br /&gt;
The getdata message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#getdata here]&lt;br /&gt;
&lt;br /&gt;
== Object type ==&lt;br /&gt;
&lt;br /&gt;
The four former object types &amp;quot;getpubkey&amp;quot;, &amp;quot;pubkey&amp;quot;, &amp;quot;msg&amp;quot; and &amp;quot;broadcast&amp;quot; are summarizes into a single Message type &amp;quot;object&amp;quot;. The four Messages as they did exist in version 2 protocol are not valid any more.&lt;br /&gt;
&lt;br /&gt;
Objects are shared throughout a stream.  A client should advertise objects until their end of life time is reached. To be a valid object, the [[Proof of work|Proof Of Work]] has to be done.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8||POW nonce||uint64_t||&lt;br /&gt;
Random nonce used for the [[Proof of work|Proof Of Work]]&lt;br /&gt;
|-&lt;br /&gt;
| 8||time||uint32_t||&lt;br /&gt;
The &amp;quot;end of life&amp;quot; time of this object (be aware, in version 2 of the protocol this was the generation time). Objects shall be broadcast until its end of life time has been reached. The node shall store the inventory vector of that object for at least another hour to avoid reloading it from another node with a small time delay.&lt;br /&gt;
The maximum value for the end of life time is 28 days in the future.&lt;br /&gt;
|-&lt;br /&gt;
| 4||object type||uint32_t||&lt;br /&gt;
This field specifies the content of the object.&lt;br /&gt;
Valid values are (at the moment) 0-&amp;quot;getpubkey&amp;quot;, 1-&amp;quot;pubkey&amp;quot;, 2-&amp;quot;msg&amp;quot;, 3-&amp;quot;broadcast&amp;quot;. all other values are reserved. Nodes shall transport objects with unknown types, too. This will make further protocol changes more easy.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| ?||payload||uchar[]||&lt;br /&gt;
This field varies depending on the object type. For a detailed description of their content look [https://bitmessage.org/wiki/Protocol_specification#Object_types here]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Do a POW ===&lt;br /&gt;
&lt;br /&gt;
Generally the POW is done exactly like in [[Proof of work|version 2]]&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;target&amp;quot; (the dificulty of the POW) is defined a little bit lower (more difficult) in version two. This is, because paractice did show, it is to easy to float the network with data.&lt;br /&gt;
&lt;br /&gt;
    payload = EndOfLifeTime + ObjectType + payload&lt;br /&gt;
&lt;br /&gt;
             2^64 &lt;br /&gt;
    target = --------------------------------------------&lt;br /&gt;
             ((PayloadLenInBytes * TimeToLiveInHours)  +  payloadLengthExtraBytes + 8) * averageProofOfWorkNonceTrialsPerByte&lt;/div&gt;</summary>
		<author><name>Thomas</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24385</id>
		<title>Protocol specification v3</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24385"/>
		<updated>2014-07-05T07:00:20Z</updated>

		<summary type="html">&lt;p&gt;Thomas: /* Object type */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Stub}}&lt;br /&gt;
&lt;br /&gt;
{{Template:Proposal}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
This is a DRAFT for the protocol version 3. It describes the changes in protocol version 3 versus version 2. Things which are unchanged from version 2 are not described in detail. So you should use  [https://bitmessage.org/wiki/Protocol_specification this] as a reference for all formates which are not mentioned in this description.&lt;br /&gt;
&lt;br /&gt;
== Message types ==&lt;br /&gt;
&lt;br /&gt;
Most message types are unchanged from version 2 to version 3. Only the four &amp;quot;objecttype&amp;quot; messages are not valid any more. They are summerized into one single message.&lt;br /&gt;
&lt;br /&gt;
=== version ===&lt;br /&gt;
&lt;br /&gt;
The version message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#version here]&lt;br /&gt;
&lt;br /&gt;
=== verack ===&lt;br /&gt;
&lt;br /&gt;
The verack message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#verack here]&lt;br /&gt;
&lt;br /&gt;
=== addr ===&lt;br /&gt;
&lt;br /&gt;
The addr message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#addr here]&lt;br /&gt;
&lt;br /&gt;
=== inv ===&lt;br /&gt;
&lt;br /&gt;
The inv message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#inv here]&lt;br /&gt;
&lt;br /&gt;
=== getdata ===&lt;br /&gt;
&lt;br /&gt;
The getdata message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#getdata here]&lt;br /&gt;
&lt;br /&gt;
== Object type ==&lt;br /&gt;
&lt;br /&gt;
The four former object types &amp;quot;getpubkey&amp;quot;, &amp;quot;pubkey&amp;quot;, &amp;quot;msg&amp;quot; and &amp;quot;broadcast&amp;quot; are summarizes into a single Message type &amp;quot;object&amp;quot;. The four Messages as they did exist in version 2 protocol are not valid any more.&lt;br /&gt;
&lt;br /&gt;
Objects are shared throughout a stream.  A client should advertise objects until their end of life time is reached. To be a valid object, the [[Proof of work|Proof Of Work]] has to be done.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8||POW nonce||uint64_t||&lt;br /&gt;
Random nonce used for the [[Proof of work|Proof Of Work]]&lt;br /&gt;
|-&lt;br /&gt;
| 8||time||uint32_t||&lt;br /&gt;
The &amp;quot;end of life&amp;quot; time of this object (be aware, in version 2 of the protocol this was the generation time). Objects shall be broadcast until its end of life time has been reached. The node shall store the inventory vector of that object for at least another hour to avoid reloading it from another node with a small time delay.&lt;br /&gt;
The maximum value for the end of life time is 28 days in the future.&lt;br /&gt;
|-&lt;br /&gt;
| 4||object type||uint32_t||&lt;br /&gt;
This field specifies the content of the object.&lt;br /&gt;
Valid values are (at the moment) 0-&amp;quot;getpubkey&amp;quot;, 1-&amp;quot;pubkey&amp;quot;, 2-&amp;quot;msg&amp;quot;, 3-&amp;quot;broadcast&amp;quot;. all other values are reserved. Nodes shall transport objects with unknown types, too. This will make further protocol changes more easy.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| ?||payload||uchar[]||&lt;br /&gt;
This field varies depending on the object type. For a detailed description of their content look [https://bitmessage.org/wiki/Protocol_specification#Object_types here]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Do a POW ===&lt;br /&gt;
&lt;br /&gt;
Generally the POW is done exactly like in [[Proof of work|version 2]]&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;target&amp;quot; (the dificulty of the POW) is defined a little bit lower (more difficult) in version two. This is, because paractice did show, it is to easy to float the network with data.&lt;br /&gt;
&lt;br /&gt;
    payload = EndOfLifeTime + ObjectType + payload&lt;br /&gt;
&lt;br /&gt;
    target = 2^64 / (((length of the payload in bytes * TimeToLiveInHours)  +  payloadLengthExtraBytes + 8) * averageProofOfWorkNonceTrialsPerByte)&lt;/div&gt;</summary>
		<author><name>Thomas</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24384</id>
		<title>Protocol specification v3</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24384"/>
		<updated>2014-07-05T06:52:07Z</updated>

		<summary type="html">&lt;p&gt;Thomas: /* Object type */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Stub}}&lt;br /&gt;
&lt;br /&gt;
{{Template:Proposal}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
This is a DRAFT for the protocol version 3. It describes the changes in protocol version 3 versus version 2. Things which are unchanged from version 2 are not described in detail. So you should use  [https://bitmessage.org/wiki/Protocol_specification this] as a reference for all formates which are not mentioned in this description.&lt;br /&gt;
&lt;br /&gt;
== Message types ==&lt;br /&gt;
&lt;br /&gt;
Most message types are unchanged from version 2 to version 3. Only the four &amp;quot;objecttype&amp;quot; messages are not valid any more. They are summerized into one single message.&lt;br /&gt;
&lt;br /&gt;
=== version ===&lt;br /&gt;
&lt;br /&gt;
The version message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#version here]&lt;br /&gt;
&lt;br /&gt;
=== verack ===&lt;br /&gt;
&lt;br /&gt;
The verack message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#verack here]&lt;br /&gt;
&lt;br /&gt;
=== addr ===&lt;br /&gt;
&lt;br /&gt;
The addr message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#addr here]&lt;br /&gt;
&lt;br /&gt;
=== inv ===&lt;br /&gt;
&lt;br /&gt;
The inv message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#inv here]&lt;br /&gt;
&lt;br /&gt;
=== getdata ===&lt;br /&gt;
&lt;br /&gt;
The getdata message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#getdata here]&lt;br /&gt;
&lt;br /&gt;
== Object type ==&lt;br /&gt;
&lt;br /&gt;
The four former object types &amp;quot;getpubkey&amp;quot;, &amp;quot;pubkey&amp;quot;, &amp;quot;msg&amp;quot; and &amp;quot;broadcast&amp;quot; are summarizes into a single Message type &amp;quot;object&amp;quot;. The four Messages as they did exist in version 2 protocol are not valid any more.&lt;br /&gt;
&lt;br /&gt;
Objects are shared throughout a stream.  A client should advertise objects until their end of life time is reached. To be a valid object, the [[Proof of work|Proof Of Work]] has to be done.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8||POW nonce||uint64_t||&lt;br /&gt;
Random nonce used for the [[Proof of work|Proof Of Work]]&lt;br /&gt;
|-&lt;br /&gt;
| 8||time||uint32_t||&lt;br /&gt;
The &amp;quot;end of life&amp;quot; time of this object (be aware, in version 2 of the protocol this was the generation time). Objects shall be broadcast until its end of life time has been reached. The node shall store the inventory vector of that object for at least another hour to avoid reloading it from another node with a small time delay.&lt;br /&gt;
The maximum value for the end of life time is 28 days in the future.&lt;br /&gt;
|-&lt;br /&gt;
| 4||object type||uint32_t||&lt;br /&gt;
This field specifies the content of the object.&lt;br /&gt;
Valid values are (at the moment) 0-&amp;quot;getpubkey&amp;quot;, 1-&amp;quot;pubkey&amp;quot;, 2-&amp;quot;msg&amp;quot;, 3-&amp;quot;broadcast&amp;quot;. all other values are reserved. Nodes shall transport objects with unknown types, too. This will make further protocol changes more easy.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| ?||payload||uchar[]||&lt;br /&gt;
This field varies depending on the object type. For a detailed description of their content look [https://bitmessage.org/wiki/Protocol_specification#Object_types here]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Thomas</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24383</id>
		<title>Protocol specification v3</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24383"/>
		<updated>2014-07-05T06:48:40Z</updated>

		<summary type="html">&lt;p&gt;Thomas: /* Object type */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Stub}}&lt;br /&gt;
&lt;br /&gt;
{{Template:Proposal}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
This is a DRAFT for the protocol version 3. It describes the changes in protocol version 3 versus version 2. Things which are unchanged from version 2 are not described in detail. So you should use  [https://bitmessage.org/wiki/Protocol_specification this] as a reference for all formates which are not mentioned in this description.&lt;br /&gt;
&lt;br /&gt;
== Message types ==&lt;br /&gt;
&lt;br /&gt;
Most message types are unchanged from version 2 to version 3. Only the four &amp;quot;objecttype&amp;quot; messages are not valid any more. They are summerized into one single message.&lt;br /&gt;
&lt;br /&gt;
=== version ===&lt;br /&gt;
&lt;br /&gt;
The version message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#version here]&lt;br /&gt;
&lt;br /&gt;
=== verack ===&lt;br /&gt;
&lt;br /&gt;
The verack message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#verack here]&lt;br /&gt;
&lt;br /&gt;
=== addr ===&lt;br /&gt;
&lt;br /&gt;
The addr message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#addr here]&lt;br /&gt;
&lt;br /&gt;
=== inv ===&lt;br /&gt;
&lt;br /&gt;
The inv message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#inv here]&lt;br /&gt;
&lt;br /&gt;
=== getdata ===&lt;br /&gt;
&lt;br /&gt;
The getdata message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#getdata here]&lt;br /&gt;
&lt;br /&gt;
== Object type ==&lt;br /&gt;
&lt;br /&gt;
The four former object types &amp;quot;getpubkey&amp;quot;, &amp;quot;pubkey&amp;quot;, &amp;quot;msg&amp;quot; and &amp;quot;broadcast&amp;quot; are summarizes into a single Message type &amp;quot;object&amp;quot;. The four Messages as they did exist in version 2 protocol are not valid any more.&lt;br /&gt;
&lt;br /&gt;
Objects are shared throughout a stream.  A client should advertise objects until thair end of life time is reached. To be a valid object, the [[Proof of work|Proof Of Work]] has to be done.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8||POW nonce||uint64_t||&lt;br /&gt;
Random nonce used for the [[Proof of work|Proof Of Work]]&lt;br /&gt;
|-&lt;br /&gt;
| 8||time||uint32_t||&lt;br /&gt;
The &amp;quot;end of life&amp;quot; time of this object (be aware, in version 2 of the protocol this was the generation time). Objects shall be broadcast until its end of life time has been reached. The node shall store the inventory vector of that object for at least another hour to avoid reloading it from another node with a small time delay.&lt;br /&gt;
The maximum value for the end of life time is 28 days in the future.&lt;br /&gt;
|-&lt;br /&gt;
| 4||object type||uint32_t||&lt;br /&gt;
This field specifies the content of the object.&lt;br /&gt;
Valid values are (at the moment) 0-&amp;quot;getpubkey&amp;quot;, 1-&amp;quot;pubkey&amp;quot;, 2-&amp;quot;msg&amp;quot;, 3-&amp;quot;broadcast&amp;quot;. all other values are reserved. Nodes shall transport objects with unknown types, too. This will make further protocol changes more easy.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| ?||payload||uchar[]||&lt;br /&gt;
This field varies depending on the object type. For a detailed description of their content look [https://bitmessage.org/wiki/Protocol_specification#Object_types here]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Thomas</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24382</id>
		<title>Protocol specification v3</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24382"/>
		<updated>2014-07-05T06:48:05Z</updated>

		<summary type="html">&lt;p&gt;Thomas: /* Object type */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Stub}}&lt;br /&gt;
&lt;br /&gt;
{{Template:Proposal}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
This is a DRAFT for the protocol version 3. It describes the changes in protocol version 3 versus version 2. Things which are unchanged from version 2 are not described in detail. So you should use  [https://bitmessage.org/wiki/Protocol_specification this] as a reference for all formates which are not mentioned in this description.&lt;br /&gt;
&lt;br /&gt;
== Message types ==&lt;br /&gt;
&lt;br /&gt;
Most message types are unchanged from version 2 to version 3. Only the four &amp;quot;objecttype&amp;quot; messages are not valid any more. They are summerized into one single message.&lt;br /&gt;
&lt;br /&gt;
=== version ===&lt;br /&gt;
&lt;br /&gt;
The version message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#version here]&lt;br /&gt;
&lt;br /&gt;
=== verack ===&lt;br /&gt;
&lt;br /&gt;
The verack message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#verack here]&lt;br /&gt;
&lt;br /&gt;
=== addr ===&lt;br /&gt;
&lt;br /&gt;
The addr message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#addr here]&lt;br /&gt;
&lt;br /&gt;
=== inv ===&lt;br /&gt;
&lt;br /&gt;
The inv message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#inv here]&lt;br /&gt;
&lt;br /&gt;
=== getdata ===&lt;br /&gt;
&lt;br /&gt;
The getdata message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#getdata here]&lt;br /&gt;
&lt;br /&gt;
== Object type ==&lt;br /&gt;
&lt;br /&gt;
The four former object types &amp;quot;getpubkey&amp;quot;, &amp;quot;pubkey&amp;quot;, &amp;quot;msg&amp;quot; and &amp;quot;broadcast&amp;quot; are summarizes into a single Message type &amp;quot;object&amp;quot;. The four Messages as they did exist in version 2 protocol are not valid any more.&lt;br /&gt;
&lt;br /&gt;
Objects are shared throughout a stream.  A client should advertise objects until thair end of life time is reached. To be a valid object, the [[Proof of work|Proof Of Work]] has to be done.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8||POW nonce||uint64_t||&lt;br /&gt;
Random nonce used for the [[Proof of work|Proof Of Work]]&lt;br /&gt;
|-&lt;br /&gt;
| 8||time||uint32_t||&lt;br /&gt;
The &amp;quot;end of life&amp;quot; time of this object (be aware, in version 2 of the protocol this was the generation time). Objects shall be broadcast until its end of life time has been reached. The node shall store the inventory vector of that object for at least anouther hour to avoid reloading it from another node with a small time delay.&lt;br /&gt;
The maximum value for the end of life time is 28 days in the future.&lt;br /&gt;
|-&lt;br /&gt;
| 4||object type||uint32_t||&lt;br /&gt;
This field specifies the content of the object.&lt;br /&gt;
Valid values are (at the moment) 0-&amp;quot;getpubkey&amp;quot;, 1-&amp;quot;pubkey&amp;quot;, 2-&amp;quot;msg&amp;quot;, 3-&amp;quot;broadcast&amp;quot;. all other values are reserved. Nodes shall transport objects with unknown types, too. This will make further protocol changes more easy.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| ?||payload||uchar[]||&lt;br /&gt;
This field varies depending on the object type. For a detailed description of thair content look [https://bitmessage.org/wiki/Protocol_specification#Object_types here]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Thomas</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24381</id>
		<title>Protocol specification v3</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24381"/>
		<updated>2014-07-05T06:43:49Z</updated>

		<summary type="html">&lt;p&gt;Thomas: /* Object type */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Stub}}&lt;br /&gt;
&lt;br /&gt;
{{Template:Proposal}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
This is a DRAFT for the protocol version 3. It describes the changes in protocol version 3 versus version 2. Things which are unchanged from version 2 are not described in detail. So you should use  [https://bitmessage.org/wiki/Protocol_specification this] as a reference for all formates which are not mentioned in this description.&lt;br /&gt;
&lt;br /&gt;
== Message types ==&lt;br /&gt;
&lt;br /&gt;
Most message types are unchanged from version 2 to version 3. Only the four &amp;quot;objecttype&amp;quot; messages are not valid any more. They are summerized into one single message.&lt;br /&gt;
&lt;br /&gt;
=== version ===&lt;br /&gt;
&lt;br /&gt;
The version message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#version here]&lt;br /&gt;
&lt;br /&gt;
=== verack ===&lt;br /&gt;
&lt;br /&gt;
The verack message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#verack here]&lt;br /&gt;
&lt;br /&gt;
=== addr ===&lt;br /&gt;
&lt;br /&gt;
The addr message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#addr here]&lt;br /&gt;
&lt;br /&gt;
=== inv ===&lt;br /&gt;
&lt;br /&gt;
The inv message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#inv here]&lt;br /&gt;
&lt;br /&gt;
=== getdata ===&lt;br /&gt;
&lt;br /&gt;
The getdata message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#getdata here]&lt;br /&gt;
&lt;br /&gt;
== Object type ==&lt;br /&gt;
&lt;br /&gt;
The four former object types &amp;quot;getpubkey&amp;quot;, &amp;quot;pubkey&amp;quot;, &amp;quot;msg&amp;quot; and &amp;quot;broadcast&amp;quot; are summarizes into a single Message type &amp;quot;object&amp;quot;. The four Messages as they did exist in version 2 protocol are not valid any more.&lt;br /&gt;
&lt;br /&gt;
Objects are shared throughout a stream.  A client should advertise objects until thair end of life time is reached. To be a valid object, the [[Proof of work|Proof Of Work]] has to be done.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8||POW nonce||uint64_t||Random nonce used for the [[Proof of work|Proof Of Work]]&lt;br /&gt;
|-&lt;br /&gt;
| 8||time||uint32_t||The &amp;quot;end of life&amp;quot; time of this object. Objects shall be broadcast until its end of life time has been reached. The node shall store the inventory vector of that object for at least anouther hour to avoid reloading it from another node with a small time delay.&lt;br /&gt;
|-&lt;br /&gt;
| 4||object type||uint32_t||this field specifies the content of the object.&lt;br /&gt;
Valid values are (at the moment) 0-&amp;quot;getpubkey&amp;quot;, 1-&amp;quot;pubkey&amp;quot;, 2-&amp;quot;msg&amp;quot;, 3-&amp;quot;broadcast&amp;quot;. all other values are reserved. Nodes shall transport objects with unknown types, too. This will make further protocol changes more easy.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| ?||payload||uchar[]||this field varies depending on the object type. For a detailed description of thair content look [https://bitmessage.org/wiki/Protocol_specification#Object_types here]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Thomas</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24380</id>
		<title>Protocol specification v3</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24380"/>
		<updated>2014-07-05T06:41:51Z</updated>

		<summary type="html">&lt;p&gt;Thomas: /* Object type */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Stub}}&lt;br /&gt;
&lt;br /&gt;
{{Template:Proposal}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
This is a DRAFT for the protocol version 3. It describes the changes in protocol version 3 versus version 2. Things which are unchanged from version 2 are not described in detail. So you should use  [https://bitmessage.org/wiki/Protocol_specification this] as a reference for all formates which are not mentioned in this description.&lt;br /&gt;
&lt;br /&gt;
== Message types ==&lt;br /&gt;
&lt;br /&gt;
Most message types are unchanged from version 2 to version 3. Only the four &amp;quot;objecttype&amp;quot; messages are not valid any more. They are summerized into one single message.&lt;br /&gt;
&lt;br /&gt;
=== version ===&lt;br /&gt;
&lt;br /&gt;
The version message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#version here]&lt;br /&gt;
&lt;br /&gt;
=== verack ===&lt;br /&gt;
&lt;br /&gt;
The verack message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#verack here]&lt;br /&gt;
&lt;br /&gt;
=== addr ===&lt;br /&gt;
&lt;br /&gt;
The addr message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#addr here]&lt;br /&gt;
&lt;br /&gt;
=== inv ===&lt;br /&gt;
&lt;br /&gt;
The inv message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#inv here]&lt;br /&gt;
&lt;br /&gt;
=== getdata ===&lt;br /&gt;
&lt;br /&gt;
The getdata message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#getdata here]&lt;br /&gt;
&lt;br /&gt;
== Object type ==&lt;br /&gt;
&lt;br /&gt;
The four former object types &amp;quot;getpubkey&amp;quot;, &amp;quot;pubkey&amp;quot;, &amp;quot;msg&amp;quot; and &amp;quot;broadcast&amp;quot; are summarizes into a single Message type &amp;quot;object&amp;quot;. The four Messages as they did exist in version 2 protocol are not valid any more.&lt;br /&gt;
&lt;br /&gt;
Objects are shared throughout a stream.  A client should advertise objects until thair end of life time is reached. To be a valid object, the [[Proof of work|Proof Of Work]] has to be done.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8||POW nonce||uint64_t||Random nonce used for the [[Proof of work|Proof Of Work]]&lt;br /&gt;
|-&lt;br /&gt;
| 8||time||uint32_t||The &amp;quot;end of life&amp;quot; time of this object. Objects shall be broadcast until its end of life time has been reached. The node shall store the inventory vector of that object for at least anouther hour to avoid reloading it from another node with a small time delay.&lt;br /&gt;
|-&lt;br /&gt;
| 4||object type||uint32_t||this field specifies the content of the object.&lt;br /&gt;
Valis valies are (at the moment) 0-&amp;quot;getpubkey&amp;quot;, 1-&amp;quot;pubkey&amp;quot;, 2-&amp;quot;msg&amp;quot;, 3-&amp;quot;broadcast&amp;quot;. all other values are reserved. Nodes shall transport objects with unknown types, too. This will make furter protocol changes more easy.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| ?||payload||uchar[]||this field varies depending on the object type. &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Thomas</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24379</id>
		<title>Protocol specification v3</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24379"/>
		<updated>2014-07-05T06:41:25Z</updated>

		<summary type="html">&lt;p&gt;Thomas: /* Object type */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Stub}}&lt;br /&gt;
&lt;br /&gt;
{{Template:Proposal}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
This is a DRAFT for the protocol version 3. It describes the changes in protocol version 3 versus version 2. Things which are unchanged from version 2 are not described in detail. So you should use  [https://bitmessage.org/wiki/Protocol_specification this] as a reference for all formates which are not mentioned in this description.&lt;br /&gt;
&lt;br /&gt;
== Message types ==&lt;br /&gt;
&lt;br /&gt;
Most message types are unchanged from version 2 to version 3. Only the four &amp;quot;objecttype&amp;quot; messages are not valid any more. They are summerized into one single message.&lt;br /&gt;
&lt;br /&gt;
=== version ===&lt;br /&gt;
&lt;br /&gt;
The version message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#version here]&lt;br /&gt;
&lt;br /&gt;
=== verack ===&lt;br /&gt;
&lt;br /&gt;
The verack message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#verack here]&lt;br /&gt;
&lt;br /&gt;
=== addr ===&lt;br /&gt;
&lt;br /&gt;
The addr message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#addr here]&lt;br /&gt;
&lt;br /&gt;
=== inv ===&lt;br /&gt;
&lt;br /&gt;
The inv message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#inv here]&lt;br /&gt;
&lt;br /&gt;
=== getdata ===&lt;br /&gt;
&lt;br /&gt;
The getdata message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#getdata here]&lt;br /&gt;
&lt;br /&gt;
== Object type ==&lt;br /&gt;
&lt;br /&gt;
The four former object types &amp;quot;getpubkey&amp;quot;, &amp;quot;pubkey&amp;quot;, &amp;quot;msg&amp;quot; and &amp;quot;broadcast&amp;quot; are summarizes into a single Message type &amp;quot;object&amp;quot;. The four Messages as they did exist in version 2 protocol are not valid any more.&lt;br /&gt;
&lt;br /&gt;
Objects are shared throughout a stream.  A client should advertise objects until thair end of life time is reached. To be a valid object, the [[Proof of work|Proof Of Work]] has to be done.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8||POW nonce||uint64_t||Random nonce used for the [[Proof of work|Proof Of Work]]&lt;br /&gt;
|-&lt;br /&gt;
| 8||time||uint32_t||The &amp;quot;end of life&amp;quot; time of this object. Objects shall be broadcast until its end of life time has been reached. The node shall store the inventory vector of that object for at least anouther hour to avoid reloading it from another node with a small time delay.&lt;br /&gt;
|-&lt;br /&gt;
| 4||object type||uint32_t||this field specifies the content of the object.&lt;br /&gt;
Valis valies are (at the moment) 0-&amp;quot;getpubkey&amp;quot;, 1-&amp;quot;pubkey&amp;quot;, 2-&amp;quot;msg&amp;quot;, 3-&amp;quot;broadcast&amp;quot;. all other values are reserved. Nodes shall transport objects with unknown types, too, This will make furter protocol changes more easy.&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| ?||payload||uchar[]||this field varies depending on the object type. &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Thomas</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24378</id>
		<title>Protocol specification v3</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24378"/>
		<updated>2014-07-05T06:37:31Z</updated>

		<summary type="html">&lt;p&gt;Thomas: /* Object type */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Stub}}&lt;br /&gt;
&lt;br /&gt;
{{Template:Proposal}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
This is a DRAFT for the protocol version 3. It describes the changes in protocol version 3 versus version 2. Things which are unchanged from version 2 are not described in detail. So you should use  [https://bitmessage.org/wiki/Protocol_specification this] as a reference for all formates which are not mentioned in this description.&lt;br /&gt;
&lt;br /&gt;
== Message types ==&lt;br /&gt;
&lt;br /&gt;
Most message types are unchanged from version 2 to version 3. Only the four &amp;quot;objecttype&amp;quot; messages are not valid any more. They are summerized into one single message.&lt;br /&gt;
&lt;br /&gt;
=== version ===&lt;br /&gt;
&lt;br /&gt;
The version message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#version here]&lt;br /&gt;
&lt;br /&gt;
=== verack ===&lt;br /&gt;
&lt;br /&gt;
The verack message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#verack here]&lt;br /&gt;
&lt;br /&gt;
=== addr ===&lt;br /&gt;
&lt;br /&gt;
The addr message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#addr here]&lt;br /&gt;
&lt;br /&gt;
=== inv ===&lt;br /&gt;
&lt;br /&gt;
The inv message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#inv here]&lt;br /&gt;
&lt;br /&gt;
=== getdata ===&lt;br /&gt;
&lt;br /&gt;
The getdata message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#getdata here]&lt;br /&gt;
&lt;br /&gt;
== Object type ==&lt;br /&gt;
&lt;br /&gt;
The four former object types &amp;quot;getpubkey&amp;quot;, &amp;quot;pubkey&amp;quot;, &amp;quot;msg&amp;quot; and &amp;quot;broadcast&amp;quot; are summarizes into a single Message type &amp;quot;object&amp;quot;. The four Messages as they did exist in version 2 protocol are not valid any more.&lt;br /&gt;
&lt;br /&gt;
Objects are shared throughout a stream.  A client should advertise objects until thair end of life time is reached. To be a valid object, the [[Proof of work|Proof Of Work]] has to be done.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8||POW nonce||uint64_t||Random nonce used for the [[Proof of work|Proof Of Work]]&lt;br /&gt;
|-&lt;br /&gt;
| 8||time||uint32_t||The &amp;quot;end of life&amp;quot; time of this object. Objects shall be broadcast until its end of life tome has been reached. The node shall store the inventory vector of that object for at least anouther hour to avoid reloading it from another node with a small time delay.&lt;br /&gt;
|-&lt;br /&gt;
| ?||payload||uchar[]||this field varies depending on the object type. &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Thomas</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24377</id>
		<title>Protocol specification v3</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24377"/>
		<updated>2014-07-05T06:36:35Z</updated>

		<summary type="html">&lt;p&gt;Thomas: /* Object type */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Stub}}&lt;br /&gt;
&lt;br /&gt;
{{Template:Proposal}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
This is a DRAFT for the protocol version 3. It describes the changes in protocol version 3 versus version 2. Things which are unchanged from version 2 are not described in detail. So you should use  [https://bitmessage.org/wiki/Protocol_specification this] as a reference for all formates which are not mentioned in this description.&lt;br /&gt;
&lt;br /&gt;
== Message types ==&lt;br /&gt;
&lt;br /&gt;
Most message types are unchanged from version 2 to version 3. Only the four &amp;quot;objecttype&amp;quot; messages are not valid any more. They are summerized into one single message.&lt;br /&gt;
&lt;br /&gt;
=== version ===&lt;br /&gt;
&lt;br /&gt;
The version message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#version here]&lt;br /&gt;
&lt;br /&gt;
=== verack ===&lt;br /&gt;
&lt;br /&gt;
The verack message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#verack here]&lt;br /&gt;
&lt;br /&gt;
=== addr ===&lt;br /&gt;
&lt;br /&gt;
The addr message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#addr here]&lt;br /&gt;
&lt;br /&gt;
=== inv ===&lt;br /&gt;
&lt;br /&gt;
The inv message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#inv here]&lt;br /&gt;
&lt;br /&gt;
=== getdata ===&lt;br /&gt;
&lt;br /&gt;
The getdata message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#getdata here]&lt;br /&gt;
&lt;br /&gt;
== Object type ==&lt;br /&gt;
&lt;br /&gt;
The four former object types &amp;quot;getpubkey&amp;quot;, &amp;quot;pubkey&amp;quot;, &amp;quot;msg&amp;quot; and &amp;quot;broadcast&amp;quot; are summarizes into a single Message type &amp;quot;object&amp;quot;. The four Messages as they did exist in version 2 protocol are not valid any more.&lt;br /&gt;
&lt;br /&gt;
Objects are shared throughout a stream.  A client should advertise objects until thair end of life time is reached. To be a valid object, the [[Proof of work|Proof Of Work]] has to be done.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8||POW nonce||uint64_t||Random nonce used for the [[Proof of work|Proof Of Work]]&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| 8||time||uint32_t||The &amp;quot;end of life&amp;quot; time of this object. Objects shall be broadcast until its end of life tome has been reached. The node shall store the inventory vector of that object for at least anouther hour to avoid reloading it from another node with a small time delay.&lt;br /&gt;
| ?||payload||uchar[]||this field varies depending on the object type. &lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Thomas</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24376</id>
		<title>Protocol specification v3</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24376"/>
		<updated>2014-07-05T06:30:32Z</updated>

		<summary type="html">&lt;p&gt;Thomas: /* getdata */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Stub}}&lt;br /&gt;
&lt;br /&gt;
{{Template:Proposal}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
This is a DRAFT for the protocol version 3. It describes the changes in protocol version 3 versus version 2. Things which are unchanged from version 2 are not described in detail. So you should use  [https://bitmessage.org/wiki/Protocol_specification this] as a reference for all formates which are not mentioned in this description.&lt;br /&gt;
&lt;br /&gt;
== Message types ==&lt;br /&gt;
&lt;br /&gt;
Most message types are unchanged from version 2 to version 3. Only the four &amp;quot;objecttype&amp;quot; messages are not valid any more. They are summerized into one single message.&lt;br /&gt;
&lt;br /&gt;
=== version ===&lt;br /&gt;
&lt;br /&gt;
The version message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#version here]&lt;br /&gt;
&lt;br /&gt;
=== verack ===&lt;br /&gt;
&lt;br /&gt;
The verack message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#verack here]&lt;br /&gt;
&lt;br /&gt;
=== addr ===&lt;br /&gt;
&lt;br /&gt;
The addr message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#addr here]&lt;br /&gt;
&lt;br /&gt;
=== inv ===&lt;br /&gt;
&lt;br /&gt;
The inv message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#inv here]&lt;br /&gt;
&lt;br /&gt;
=== getdata ===&lt;br /&gt;
&lt;br /&gt;
The getdata message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#getdata here]&lt;br /&gt;
&lt;br /&gt;
== Object type ==&lt;br /&gt;
&lt;br /&gt;
The four former object types &amp;quot;getpubkey&amp;quot;, &amp;quot;pubkey&amp;quot;, &amp;quot;msg&amp;quot; and &amp;quot;broadcast&amp;quot; are summarizes into a single Message type &amp;quot;object&amp;quot;. The four Messages as they did exist in version 2 protocol are not valid any more.&lt;br /&gt;
&lt;br /&gt;
Objects are shared throughout a stream.  A client should advertise objects until thair end of life time is reached. To be a valid object, the [[Proof of work|Proof Of Work]] has to be done.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 8||POW nonce||uint64_t||Random nonce used for the [[Proof of work|Proof Of Work]]&lt;br /&gt;
|-&lt;br /&gt;
| 8||time||uint32_t||The &amp;quot;end of life&amp;quot; time of this object. Objects shall be broadcast until its end of life tome has been reached. The node shall store the inventory vector of that object for at least anouther hour to avoid reloading it from another node with a small time delay.&lt;br /&gt;
| ?||payload||uchar[]||this field varies depending on the object type. &lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Thomas</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24375</id>
		<title>Protocol specification v3</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24375"/>
		<updated>2014-07-05T06:18:59Z</updated>

		<summary type="html">&lt;p&gt;Thomas: /* Message types */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Stub}}&lt;br /&gt;
&lt;br /&gt;
{{Template:Proposal}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
This is a DRAFT for the protocol version 3. It describes the changes in protocol version 3 versus version 2. Things which are unchanged from version 2 are not described in detail. So you should use  [https://bitmessage.org/wiki/Protocol_specification this] as a reference for all formates which are not mentioned in this description.&lt;br /&gt;
&lt;br /&gt;
== Message types ==&lt;br /&gt;
&lt;br /&gt;
Most message types are unchanged from version 2 to version 3. Only the four &amp;quot;objecttype&amp;quot; messages are not valid any more. They are summerized into one single message.&lt;br /&gt;
&lt;br /&gt;
=== version ===&lt;br /&gt;
&lt;br /&gt;
The version message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#version here]&lt;br /&gt;
&lt;br /&gt;
=== verack ===&lt;br /&gt;
&lt;br /&gt;
The verack message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#verack here]&lt;br /&gt;
&lt;br /&gt;
=== addr ===&lt;br /&gt;
&lt;br /&gt;
The addr message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#addr here]&lt;br /&gt;
&lt;br /&gt;
=== inv ===&lt;br /&gt;
&lt;br /&gt;
The inv message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#inv here]&lt;br /&gt;
&lt;br /&gt;
=== getdata ===&lt;br /&gt;
&lt;br /&gt;
The getdata message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#getdata here]&lt;/div&gt;</summary>
		<author><name>Thomas</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24374</id>
		<title>Protocol specification v3</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24374"/>
		<updated>2014-07-05T06:15:47Z</updated>

		<summary type="html">&lt;p&gt;Thomas: version&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Stub}}&lt;br /&gt;
&lt;br /&gt;
{{Template:Proposal}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
This is a DRAFT for the protocol version 3. It describes the changes in protocol version 3 versus version 2. Things which are unchanged from version 2 are not described in detail. So you should use  [https://bitmessage.org/wiki/Protocol_specification this] as a reference for all formates which are not mentioned in this description.&lt;br /&gt;
&lt;br /&gt;
== Message types ==&lt;br /&gt;
&lt;br /&gt;
Most message types are unchanged from version 2 to version 3. Only the four &amp;quot;objecttype&amp;quot; messages are not valid any more. They are summerized into one single message.&lt;br /&gt;
&lt;br /&gt;
=== version ===&lt;br /&gt;
&lt;br /&gt;
The version message is identically to protocol version 2. you can lookup details [https://bitmessage.org/wiki/Protocol_specification#version here]&lt;br /&gt;
&lt;br /&gt;
Payload:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || version || int32_t || Identifies protocol version being used by the node&lt;br /&gt;
|-&lt;br /&gt;
| 8 || services || uint64_t || bitfield of features to be enabled for this connection&lt;br /&gt;
|-&lt;br /&gt;
| 8 || timestamp || int64_t || standard UNIX timestamp in seconds&lt;br /&gt;
|-&lt;br /&gt;
| 26 || addr_recv || net_addr || The network address of the node receiving this message (not including the time or stream number)&lt;br /&gt;
|-&lt;br /&gt;
| 26 || addr_from || net_addr || The network address of the node emitting this message (not including the time or stream number and the ip itself is ignored by the receiver)&lt;br /&gt;
|-&lt;br /&gt;
| 8 || nonce || uint64_t || Random nonce used to detect connections to self.&lt;br /&gt;
|-&lt;br /&gt;
| 1+ || user_agent || [[#Variable length string|var_str]] || [[User Agent]] (0x00 if string is 0 bytes long)&lt;br /&gt;
|-&lt;br /&gt;
| 1+ || stream numbers || [[#Variable length list of integers|var_int_list]] || The stream numbers that the emitting node is interested in.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A &amp;quot;verack&amp;quot; packet shall be sent if the version packet was accepted. Once you have sent and received a verack messages with the remote node, send an addr message advertising up to 1000 peers of which you are aware, and one or more inv messages advertising all of the valid objects of which you are aware.&lt;br /&gt;
&lt;br /&gt;
The following services are currently assigned:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 1 || NODE_NETWORK || This is a normal network node.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== verack ===&lt;br /&gt;
&lt;br /&gt;
The ''verack'' message is sent in reply to ''version''.  This message consists of only a [[#Message structure|message header]] with the command string &amp;quot;verack&amp;quot;. The TCP timeout starts out at 20 seconds; after verack messages are exchanged, the timeout is raised to 10 minutes.&lt;br /&gt;
&lt;br /&gt;
=== addr ===&lt;br /&gt;
&lt;br /&gt;
Provide information on known nodes of the network. Non-advertised nodes should be forgotten after typically 3 hours&lt;br /&gt;
&lt;br /&gt;
Payload:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 1+ || count || [[Protocol_specification#Variable_length_integer|var_int]] || Number of address entries (max: 1000)&lt;br /&gt;
|-&lt;br /&gt;
| 34x? || addr_list || [[Protocol_specification#Network_address|net_addr]] || Address of other nodes on the network. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== inv ===&lt;br /&gt;
&lt;br /&gt;
Allows a node to advertise its knowledge of one or more objects. &lt;br /&gt;
Payload (maximum payload length: 50000 items):&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| ? || count || [[Protocol_specification#Variable_length_integer|var_int]] || Number of inventory entries&lt;br /&gt;
|-&lt;br /&gt;
| 32x? || inventory || [[Protocol specification#Inventory Vectors|inv_vect]][] || Inventory vectors&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== getdata ===&lt;br /&gt;
&lt;br /&gt;
getdata is used in response to an ''inv'' message to retrieve the content of a specific object after filtering known elements.&lt;br /&gt;
&lt;br /&gt;
Payload (maximum payload length: 50000 entries):&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| ? || count || [[Protocol_specification#Variable_length_integer|var_int]] || Number of inventory entries&lt;br /&gt;
|-&lt;br /&gt;
| 32x? || inventory || [[Protocol specification#Inventory Vectors|inv_vect]][] || Inventory vectors&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Thomas</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24373</id>
		<title>Protocol specification v3</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24373"/>
		<updated>2014-07-05T06:06:28Z</updated>

		<summary type="html">&lt;p&gt;Thomas: introduction&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Stub}}&lt;br /&gt;
&lt;br /&gt;
{{Template:Proposal}}&lt;br /&gt;
&lt;br /&gt;
=== Introduction ===&lt;br /&gt;
This is a DRAFT for the protocol version 3. It describes the changes in protocol version 3 versus version 2. Things which are unchanged from version 2 are not described in detail. So you should use  [https://bitmessage.org/wiki/Protocol_specification this] as a reference for all formates which are not mentioned in this description.&lt;/div&gt;</summary>
		<author><name>Thomas</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24372</id>
		<title>Protocol specification v3</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitmessage.org/index.php?title=Protocol_specification_v3&amp;diff=24372"/>
		<updated>2014-07-05T06:01:07Z</updated>

		<summary type="html">&lt;p&gt;Thomas: created the page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Stub}}&lt;br /&gt;
&lt;br /&gt;
{{Template:Proposal}}&lt;br /&gt;
&lt;br /&gt;
This is a DRAFT for the protocol version 3. This protocol is not implemented, yet and it is subject of further discussions. It may change in any point!&lt;/div&gt;</summary>
		<author><name>Thomas</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitmessage.org/index.php?title=Mobile_Protocol_specification&amp;diff=23569</id>
		<title>Mobile Protocol specification</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitmessage.org/index.php?title=Mobile_Protocol_specification&amp;diff=23569"/>
		<updated>2014-04-29T09:22:50Z</updated>

		<summary type="html">&lt;p&gt;Thomas: /* setreceivekey */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Stub}}&lt;br /&gt;
&lt;br /&gt;
{{Template:Proposal}}&lt;br /&gt;
&lt;br /&gt;
This is a DRAFT for protocol extensions to enable mobile devices to participate in bitmessage communication.&lt;br /&gt;
&lt;br /&gt;
=== intension ===&lt;br /&gt;
&lt;br /&gt;
if you want to let mobile devices participate in bitmessage communication, you need a gateway device. Theoretically the device could participate like a standard node, but this will cause too much traffic. Even if you have a flat rate, it'll cost to much battery.&lt;br /&gt;
This page describes a way, the standard protocol could be enhanced, to let mobile devices participate, at least through a gateway.&lt;br /&gt;
&lt;br /&gt;
=== the gateway ===&lt;br /&gt;
&lt;br /&gt;
The gateway first of all is a standard bitmessage node. As a bitmessage node it connects to other nodes and collects and exchanges objects. The mobile gateway functionality is an extension, an additional protocol variant.&lt;br /&gt;
&lt;br /&gt;
When a mobile device connects to a gateway it will identify itself in the &amp;quot;services&amp;quot; field of the version message to be a mobile device. The gateway will answer in the same field, that it is a gateway.&lt;br /&gt;
&lt;br /&gt;
Therefore the service table has to be enhanced:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 1 || NODE_NETWORK || This is a normal network node.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || NODE_MOBILE  || This is a mobile device with limited bandwidth.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || NODE_GATEWAY || This node can send reduced traffic and work as a gateway.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== The differences in protocol behavior ===&lt;br /&gt;
&lt;br /&gt;
==== Network address ====&lt;br /&gt;
&lt;br /&gt;
Because we have to share private keys between mobile node and gateway, we do ssh encryption on the connection. For that reason the &amp;quot;Network Address&amp;quot; gets an additional (optional) field for the public ssh key.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 4 (or 8)|| time || uint32 || the Time. Protocol version 1 clients use 4 byte time while protocol version 2 clients use 8 byte time.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || stream|| uint32 || Stream number for this node&lt;br /&gt;
|-&lt;br /&gt;
| 8 || services || uint64_t || same service(s) listed in [[#version|version]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || IPv6/4 || char[16] || IPv6 address. The original client only supports IPv4 and only reads the last 4 bytes to get the IPv4 address. However, the IPv4 address is written into the message as a 16 byte [http://en.wikipedia.org/wiki/IPv6#IPv4-mapped_IPv6_addresses IPv4-mapped IPv6 address]&lt;br /&gt;
(12 bytes ''00 00 00 00  00 00 00 00  00 00 FF FF'', followed by the 4 bytes of the IPv4 address).&lt;br /&gt;
|-&lt;br /&gt;
| 2 || port || uint16_t || port number&lt;br /&gt;
|-&lt;br /&gt;
| 1+ || ssh fingerprint || [[#Variable length string|var_str]] || This field is optional. It contains the ssh fingerprint, for nodes that support ssh&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== sending messages ====&lt;br /&gt;
&lt;br /&gt;
When accessed by a NODE_MOBILE the NODE_GATEWAY will not send any &amp;quot;addr&amp;quot; message, because the NODE_MOBILE will connect to the bitmessage network only through well known gateways. It will neither send a &amp;quot;inv&amp;quot; message, because it wants to reduce the traffic to the NODE_MOBILE.&lt;br /&gt;
&lt;br /&gt;
When accessed to a NODE_GATEWAY the NODE_MOBILE will not send a &amp;quot;addr&amp;quot; message, too. But it might send an &amp;quot;inv&amp;quot; message, when it has objects to share. and it can share already all types of objects with the network.&lt;br /&gt;
&lt;br /&gt;
With this very small protocol changes the NODE_MOBILE is already able to send messages using the bitmessage protocol, but with very reduced traffic load.&lt;br /&gt;
&lt;br /&gt;
==== receiving messages ====&lt;br /&gt;
&lt;br /&gt;
For the receive direction we must bring the NODE_GATEWAY in the position to select the objects the NODE_MOBILE is interested in.&lt;br /&gt;
&lt;br /&gt;
For that we introduce a new Message type:&lt;br /&gt;
&lt;br /&gt;
==== setreceivekey ==== &lt;br /&gt;
&lt;br /&gt;
receiving this message, the NODE_GATEWAY starts to send &amp;quot;inv&amp;quot; messages and offers the NODE_MOBILE objects. In opposite to a standard node connection, it offers only objects, which are alredy found to be for this node.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 64||private encryption key||uchar[]||The ECC private key used for encryption (uncompressed format; normally prepended with \x04 )&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
there might be multiple of this messages.&lt;br /&gt;
&lt;br /&gt;
NODE_GATEWAY stores this information only as long as the connection exists. It can now filter the objects that are intendet for NODE_MOBILE.&lt;br /&gt;
&lt;br /&gt;
Whenever the NODE_GATEWAY notifies, that NODE_MOBILE might be interested in objects, it sends a &amp;quot;inv&amp;quot; message to offer them (must be only the objects, NODE_MOBILE is interested in!).&lt;br /&gt;
&lt;br /&gt;
How does NODE_GATEWAY know, which objects are of interest: It uses the privat key received in &amp;quot;setreceivekey&amp;quot; to filter private messages. Every &amp;quot;getpubkey&amp;quot; object is translated into a request. When the object arrives at NODE_GATEWAY or if its already there, it is offered in an &amp;quot;inv&amp;quot; message.&lt;/div&gt;</summary>
		<author><name>Thomas</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitmessage.org/index.php?title=Mobile_Protocol_specification&amp;diff=23568</id>
		<title>Mobile Protocol specification</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitmessage.org/index.php?title=Mobile_Protocol_specification&amp;diff=23568"/>
		<updated>2014-04-29T09:16:17Z</updated>

		<summary type="html">&lt;p&gt;Thomas: /* receiving messages */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Stub}}&lt;br /&gt;
&lt;br /&gt;
{{Template:Proposal}}&lt;br /&gt;
&lt;br /&gt;
This is a DRAFT for protocol extensions to enable mobile devices to participate in bitmessage communication.&lt;br /&gt;
&lt;br /&gt;
=== intension ===&lt;br /&gt;
&lt;br /&gt;
if you want to let mobile devices participate in bitmessage communication, you need a gateway device. Theoretically the device could participate like a standard node, but this will cause too much traffic. Even if you have a flat rate, it'll cost to much battery.&lt;br /&gt;
This page describes a way, the standard protocol could be enhanced, to let mobile devices participate, at least through a gateway.&lt;br /&gt;
&lt;br /&gt;
=== the gateway ===&lt;br /&gt;
&lt;br /&gt;
The gateway first of all is a standard bitmessage node. As a bitmessage node it connects to other nodes and collects and exchanges objects. The mobile gateway functionality is an extension, an additional protocol variant.&lt;br /&gt;
&lt;br /&gt;
When a mobile device connects to a gateway it will identify itself in the &amp;quot;services&amp;quot; field of the version message to be a mobile device. The gateway will answer in the same field, that it is a gateway.&lt;br /&gt;
&lt;br /&gt;
Therefore the service table has to be enhanced:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 1 || NODE_NETWORK || This is a normal network node.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || NODE_MOBILE  || This is a mobile device with limited bandwidth.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || NODE_GATEWAY || This node can send reduced traffic and work as a gateway.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== The differences in protocol behavior ===&lt;br /&gt;
&lt;br /&gt;
==== Network address ====&lt;br /&gt;
&lt;br /&gt;
Because we have to share private keys between mobile node and gateway, we do ssh encryption on the connection. For that reason the &amp;quot;Network Address&amp;quot; gets an additional (optional) field for the public ssh key.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 4 (or 8)|| time || uint32 || the Time. Protocol version 1 clients use 4 byte time while protocol version 2 clients use 8 byte time.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || stream|| uint32 || Stream number for this node&lt;br /&gt;
|-&lt;br /&gt;
| 8 || services || uint64_t || same service(s) listed in [[#version|version]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || IPv6/4 || char[16] || IPv6 address. The original client only supports IPv4 and only reads the last 4 bytes to get the IPv4 address. However, the IPv4 address is written into the message as a 16 byte [http://en.wikipedia.org/wiki/IPv6#IPv4-mapped_IPv6_addresses IPv4-mapped IPv6 address]&lt;br /&gt;
(12 bytes ''00 00 00 00  00 00 00 00  00 00 FF FF'', followed by the 4 bytes of the IPv4 address).&lt;br /&gt;
|-&lt;br /&gt;
| 2 || port || uint16_t || port number&lt;br /&gt;
|-&lt;br /&gt;
| 1+ || ssh fingerprint || [[#Variable length string|var_str]] || This field is optional. It contains the ssh fingerprint, for nodes that support ssh&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== sending messages ====&lt;br /&gt;
&lt;br /&gt;
When accessed by a NODE_MOBILE the NODE_GATEWAY will not send any &amp;quot;addr&amp;quot; message, because the NODE_MOBILE will connect to the bitmessage network only through well known gateways. It will neither send a &amp;quot;inv&amp;quot; message, because it wants to reduce the traffic to the NODE_MOBILE.&lt;br /&gt;
&lt;br /&gt;
When accessed to a NODE_GATEWAY the NODE_MOBILE will not send a &amp;quot;addr&amp;quot; message, too. But it might send an &amp;quot;inv&amp;quot; message, when it has objects to share. and it can share already all types of objects with the network.&lt;br /&gt;
&lt;br /&gt;
With this very small protocol changes the NODE_MOBILE is already able to send messages using the bitmessage protocol, but with very reduced traffic load.&lt;br /&gt;
&lt;br /&gt;
==== receiving messages ====&lt;br /&gt;
&lt;br /&gt;
For the receive direction we must bring the NODE_GATEWAY in the position to select the objects the NODE_MOBILE is interested in.&lt;br /&gt;
&lt;br /&gt;
For that we introduce a new Message type:&lt;br /&gt;
&lt;br /&gt;
==== setreceivekey ==== &lt;br /&gt;
&lt;br /&gt;
receiving this message, the NODE_GATEWAY starts to send &amp;quot;inv&amp;quot; messages and offers the NODE_MOBILE objects. In opposite to a standard node connection, it offers only objects, which are alredy found to be for this node.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 64||private encryption key||uchar[]||The ECC private key used for encryption (uncompressed format; normally prepended with \x04 )&lt;br /&gt;
&lt;br /&gt;
Whenever the NODE_GATEWAY notifies, that NODE_MOBILE might be interested in objects, it sends a &amp;quot;inv&amp;quot; message to offer them (must only the objects, NODE_MOBILE is interested in!).&lt;br /&gt;
&lt;br /&gt;
How does NODE_GATEWAY know, which objects are of interest. There are different possibilities to notify this. First of all: every &amp;quot;getpubkey&amp;quot; object is translated into a request. When the object arrives at NODE_GATEWAY or if its already there, it is offered in an &amp;quot;inv&amp;quot; message.&lt;br /&gt;
&lt;br /&gt;
For &amp;quot;msg&amp;quot; and &amp;quot;broadcast&amp;quot; objects it's a little more complicate, because the NODE_GATEWAY has to make the decision. We must add an encrypted method, how the NODE_GATEWAY can get the secret keys of NODE_MOBILE.&lt;/div&gt;</summary>
		<author><name>Thomas</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.bitmessage.org/index.php?title=Mobile_Protocol_specification&amp;diff=23567</id>
		<title>Mobile Protocol specification</title>
		<link rel="alternate" type="text/html" href="https://wiki.bitmessage.org/index.php?title=Mobile_Protocol_specification&amp;diff=23567"/>
		<updated>2014-04-29T09:09:21Z</updated>

		<summary type="html">&lt;p&gt;Thomas: /* The differences in protocol behavior */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:Stub}}&lt;br /&gt;
&lt;br /&gt;
{{Template:Proposal}}&lt;br /&gt;
&lt;br /&gt;
This is a DRAFT for protocol extensions to enable mobile devices to participate in bitmessage communication.&lt;br /&gt;
&lt;br /&gt;
=== intension ===&lt;br /&gt;
&lt;br /&gt;
if you want to let mobile devices participate in bitmessage communication, you need a gateway device. Theoretically the device could participate like a standard node, but this will cause too much traffic. Even if you have a flat rate, it'll cost to much battery.&lt;br /&gt;
This page describes a way, the standard protocol could be enhanced, to let mobile devices participate, at least through a gateway.&lt;br /&gt;
&lt;br /&gt;
=== the gateway ===&lt;br /&gt;
&lt;br /&gt;
The gateway first of all is a standard bitmessage node. As a bitmessage node it connects to other nodes and collects and exchanges objects. The mobile gateway functionality is an extension, an additional protocol variant.&lt;br /&gt;
&lt;br /&gt;
When a mobile device connects to a gateway it will identify itself in the &amp;quot;services&amp;quot; field of the version message to be a mobile device. The gateway will answer in the same field, that it is a gateway.&lt;br /&gt;
&lt;br /&gt;
Therefore the service table has to be enhanced:&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Value !! Name !! Description&lt;br /&gt;
|-&lt;br /&gt;
| 1 || NODE_NETWORK || This is a normal network node.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || NODE_MOBILE  || This is a mobile device with limited bandwidth.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || NODE_GATEWAY || This node can send reduced traffic and work as a gateway.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== The differences in protocol behavior ===&lt;br /&gt;
&lt;br /&gt;
==== Network address ====&lt;br /&gt;
&lt;br /&gt;
Because we have to share private keys between mobile node and gateway, we do ssh encryption on the connection. For that reason the &amp;quot;Network Address&amp;quot; gets an additional (optional) field for the public ssh key.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Field Size !! Description !! Data type !! Comments&lt;br /&gt;
|-&lt;br /&gt;
| 4 (or 8)|| time || uint32 || the Time. Protocol version 1 clients use 4 byte time while protocol version 2 clients use 8 byte time.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || stream|| uint32 || Stream number for this node&lt;br /&gt;
|-&lt;br /&gt;
| 8 || services || uint64_t || same service(s) listed in [[#version|version]]&lt;br /&gt;
|-&lt;br /&gt;
| 16 || IPv6/4 || char[16] || IPv6 address. The original client only supports IPv4 and only reads the last 4 bytes to get the IPv4 address. However, the IPv4 address is written into the message as a 16 byte [http://en.wikipedia.org/wiki/IPv6#IPv4-mapped_IPv6_addresses IPv4-mapped IPv6 address]&lt;br /&gt;
(12 bytes ''00 00 00 00  00 00 00 00  00 00 FF FF'', followed by the 4 bytes of the IPv4 address).&lt;br /&gt;
|-&lt;br /&gt;
| 2 || port || uint16_t || port number&lt;br /&gt;
|-&lt;br /&gt;
| 1+ || ssh fingerprint || [[#Variable length string|var_str]] || This field is optional. It contains the ssh fingerprint, for nodes that support ssh&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== sending messages ====&lt;br /&gt;
&lt;br /&gt;
When accessed by a NODE_MOBILE the NODE_GATEWAY will not send any &amp;quot;addr&amp;quot; message, because the NODE_MOBILE will connect to the bitmessage network only through well known gateways. It will neither send a &amp;quot;inv&amp;quot; message, because it wants to reduce the traffic to the NODE_MOBILE.&lt;br /&gt;
&lt;br /&gt;
When accessed to a NODE_GATEWAY the NODE_MOBILE will not send a &amp;quot;addr&amp;quot; message, too. But it might send an &amp;quot;inv&amp;quot; message, when it has objects to share. and it can share already all types of objects with the network.&lt;br /&gt;
&lt;br /&gt;
With this very small protocol changes the NODE_MOBILE is already able to send messages using the bitmessage protocol, but with very reduced traffic load.&lt;br /&gt;
&lt;br /&gt;
==== receiving messages ====&lt;br /&gt;
&lt;br /&gt;
For the receive direction we must bring the NODE_GATEWAY in the position to select the objects the NODE_MOBILE is interested in.&lt;br /&gt;
Whenever the NODE_GATEWAY notifies, that NODE_MOBILE might be interested in objects, it sends a &amp;quot;inv&amp;quot; message to offer them (must only the objects, NODE_MOBILE is interested in!).&lt;br /&gt;
&lt;br /&gt;
How does NODE_GATEWAY know, which objects are of interest. There are different possibilities to notify this. First of all: every &amp;quot;getpubkey&amp;quot; object is translated into a request. When the object arrives at NODE_GATEWAY or if its already there, it is offered in an &amp;quot;inv&amp;quot; message.&lt;br /&gt;
&lt;br /&gt;
For &amp;quot;msg&amp;quot; and &amp;quot;broadcast&amp;quot; objects it's a little more complicate, because the NODE_GATEWAY has to make the decision. We must add an encrypted method, how the NODE_GATEWAY can get the secret keys of NODE_MOBILE.&lt;/div&gt;</summary>
		<author><name>Thomas</name></author>
		
	</entry>
</feed>