Overview¶
+Data model¶
+Description¶
This article covers the data model: how states, transactions and code contracts interact with each other and how they are represented in the code. It doesn’t attempt to give detailed design rationales or information on future design elements: please refer to the R3 wiki for background information.
-Data model¶
We begin with the idea of a global ledger. In our model, although the ledger is shared, it is not always the case that transactions and ledger entries are globally visible. In cases where a set of transactions stays within a small subgroup of users it should be possible to keep the relevant data purely within that group.
@@ -158,32 +161,26 @@ heavily on secure hashes like SHA-256 to identify things. The ledger is defined are created and destroyed by digitally signed transactions. Each transaction points to a set of states that it will consume/destroy, these are called inputs, and contains a set of new states that it will create, these are called outputs. -States contain arbitrary data, but they always contain at minimum a pointer to the bytecode of a +
States contain arbitrary data, but they always contain at minimum a hash of the bytecode of a code contract, which is a program expressed in some byte code that runs sandboxed inside a virtual machine. Code contracts (or just “contracts” in the rest of this document) are globally shared pieces of business logic. Contracts define a verify function, which is a pure function given the entire transaction as input.
To be considered valid, the transaction must be accepted by the verify function of every contract pointed to by the input and output states. Beyond inputs and outputs, transactions may also contain commands, small data packets that the platform does not interpret itself, but which can parameterise execution of the contracts. They can be thought of as -arguments to the verify function.
+arguments to the verify function. Each command has a list of public keys associated with it. The platform ensures +that the transaction is signed by every key listed in the commands before the contracts start to execute. Public keys +may be random/identityless for privacy, or linked to a well known legal identity via a public key infrastructure (PKI).Note that there is nothing that explicitly binds together specific inputs, outputs or commands. Instead it’s up to the contract code to interpret the pieces inside the transaction and ensure they fit together correctly. This is done to maximise flexibility for the contract developer.
-A transaction has one or more signatures attached to it. The signatures do not mean anything by themselves, rather, -their existence is given as input to the contract which can then decide which set of signatures it demands (if any). -Signatures may be from an arbitrary, random public key that has no identity attached. A public key may be -well known, that is, appears in some sort of public identity registry. In this case we say the key is owned by a -party, which is defined (for now) as being merely a (public key, name) pair.
-A transaction may also be timestamped. A timestamp is a (hash, datetime, signature) triple from a -timestamping authority (TSA). The notion of a TSA is not ledger specific and is defined by -IETF RFC 3161 which defines the internet standard Timestamping Protocol (TSP). -The purpose of the TSA is to attach a single, globally agreed upon time which a contract may use to enforce certain -types of time-based logic. The TSA’s do not need to know about the contents of the transaction in order to provide a -timestamp, and they are therefore never exposed to private data.
-Note
-In the current code, use of TSAs is not implemented.
-Transactions may sometimes need to provide a contract with data from the outside world. Examples may include stock +prices, facts about events or the statuses of legal entities (e.g. bankruptcy), and so on. The providers of such +facts are called oracles and they provide facts to the ledger by signing transactions that contain commands they +recognise. The commands contain the fact and the signature shows agreement to that fact. Time is also modelled as +a fact, with the signature of a special kind of oracle called a timestamping authority (TSA). A TSA signs +a transaction if a pre-defined timestamping command in it defines a after/before time window that includes “true +time” (i.e. GPS time as calibrated to the US Naval Observatory).
As the same terminology often crops up in different distributed ledger designs, let’s compare this to other distributed ledger systems you may be familiar with. You can find more detailed design rationales for why the platform differs from existing systems in the R3 wiki, but to summarise, the driving @@ -196,8 +193,9 @@ factors are:
Comparison with Bitcoin¶
+Comparison with Bitcoin¶
Similarities:
- The basic notion of immutable states that are consumed and created by transactions is the same. @@ -230,7 +228,7 @@ transaction verification. For instance, currently our contracts also include cod
Comparison with Ethereum¶
+Comparison with Ethereum¶
Similarities:
- Like Ethereum, code runs inside a relatively powerful virtual machine and can contain complex logic. Non-assembly @@ -250,45 +248,6 @@ stateless i.e. it may not interact with any other part of the system whilst exec platform considers non-financial applications to be out of scope.
Contracts¶
-The primary goal of this prototype is to implement various kinds of contracts and verify that useful business logic -can be expressed with the data model, developing and refining an API along the way. To that end there are currently -two contracts in the repository:
--
-
- Cash -
- Commercial paper -
Cash
implements the idea of a claim on some quantity of deposits at some institutional party, denominated in some currency,
-identified by some deposit reference. A deposit reference is an opaque byte array which is usable by
-the issuing party for internal bookkeeping purposes.
Cash states are fungible with each other (can be merged and split arbitrarily) if they use the same currency, -party and deposit reference.
-CommercialPaper
implements an asset with a face value denominated in a certain currency, which may be redeemed at
-the issuing party after a certain time. Commercial paper states define the face value (e.g. $1000) and the time
-at which they may be redeemed. The contract allows the paper to be issued, traded and redeemed. The commercial paper
-contract is implemented twice, once in Java and once in a language called Kotlin.
Each contract comes with unit tests.
-Kotlin¶
-The prototype is written in a language called Kotlin. Kotlin is a language that targets the JVM -and can be thought of as a simpler Scala, with much better Java interop. It is developed by and has commercial support -from JetBrains, the makers of the IntelliJ IDE and other popular developer tools.
-As Kotlin is very new, without a doubt you have not encountered it before. Don’t worry: it is designed as a better -Java for industrial use and as such, the syntax was carefully designed to be readable even to people who don’t know -the language, after only a few minutes of introduction.
-Due to the seamless Java interop the use of Kotlin to extend the platform is not required and the tutorial shows how -to write contracts in both Kotlin and Java. You can read more about why Kotlin is a potentially strong successor to Java here.
-Kotlin programs use the regular Java standard library and ordinary Java frameworks. Frameworks used at this time are:
--
-
- JUnit for unit testing -
- Kryo for serialisation (this is not intended to be permanent) -
- Gradle for the build -
- Guava for a few utility functions -
-
+
+
+
+
+
diff --git a/docs/build/html/getting-set-up.html b/docs/build/html/getting-set-up.html
index 1401fa0cd4..2bb6671816 100644
--- a/docs/build/html/getting-set-up.html
+++ b/docs/build/html/getting-set-up.html
@@ -31,8 +31,8 @@
-
-
+
+
@@ -81,17 +81,24 @@
-
- What’s included? -
- Overview
-
-
- Data model -
- Contracts -
- Kotlin +
- What’s included?
- Getting set up
-
@@ -162,7 +168,24 @@ prove or disprove the following hypothesis:
- Doing it without IntelliJ
- - Tutorial +
- Writing a contract
- Starting the commercial paper class
- States
- Commands @@ -174,12 +197,6 @@ prove or disprove the following hypothesis:
- Non-asset-oriented based smart contracts
- - Networking and messaging -
- Protocol state machines
- Introduction
- Theory @@ -189,6 +206,11 @@ prove or disprove the following hypothesis:
- Implementing the buyer
+ - What’s included? -
- Overview + + + + + + @@ -161,6 +172,44 @@ would not in order to boost productivity:
- It uses a serialization framework instead of a well specified, vendor neutral protocol.
- It uses secp256r1, an obsolete elliptic curve.
- Cash +
- Commercial paper +
- JUnit for unit testing +
- Kryo for serialisation (this is not intended to be permanent) +
- Gradle for the build +
- Guava for a few utility functions +
- What’s included? -
- Overview
- Getting set up -
- Tutorial + + + + @@ -131,7 +138,7 @@
-
+
+
+
+
+
@@ -144,11 +151,11 @@
Then install IntelliJ version 15 community edition:
-
Upgrade the Kotlin plugin to the latest version (1.0-beta-2423) by clicking “Configure > Plugins” in the opening screen, +
Upgrade the Kotlin plugin to the latest version (1.0-beta-3595) by clicking “Configure > Plugins” in the opening screen, then clicking “Install JetBrains plugin”, then searching for Kotlin, then hitting “Upgrade” and then “Restart”.
Choose “Check out from version control” and use this git URL
-+
Agree to the defaults for importing a Gradle project. Wait for it to think and download the dependencies.
Right click on the tests directory, click “Run -> All Tests” (note: NOT the first item in the submenu that has the gradle logo next to it).
@@ -185,10 +192,10 @@ found at something like diff --git a/docs/build/html/index.html b/docs/build/html/index.html index ea5e28b180..2cfb719f5a 100644 --- a/docs/build/html/index.html +++ b/docs/build/html/index.html @@ -80,13 +80,20 @@ --
+
+
+
+
+
@@ -148,13 +155,12 @@ prove or disprove the following hypothesis:
is sufficiently powerful to justify the creation of a new platform implementation.
Read on to learn:
--
-
-
+
-
-
Contracts¶
+The primary goal of this prototype is to implement various kinds of contracts and verify that useful business logic +can be expressed with the data model, developing and refining an API along the way. To that end there are currently +two contracts in the repository:
+-
+
Cash
implements the idea of a claim on some quantity of deposits at some institutional party, denominated in some currency,
+identified by some deposit reference. A deposit reference is an opaque byte array which is usable by
+the issuing party for internal bookkeeping purposes.
Cash states are fungible with each other (can be merged and split arbitrarily) if they use the same currency, +party and deposit reference.
+CommercialPaper
implements an asset with a face value denominated in a certain currency, which may be redeemed at
+the issuing party after a certain time. Commercial paper states define the face value (e.g. $1000) and the time
+at which they may be redeemed. The contract allows the paper to be issued, traded and redeemed. The commercial paper
+contract is implemented twice, once in Java and once in a language called Kotlin.
Each contract comes with unit tests.
+Kotlin¶
+The prototype is written in a language called Kotlin. Kotlin is a language that targets the JVM +and can be thought of as a simpler Scala, with much better Java interop. It is developed by and has commercial support +from JetBrains, the makers of the IntelliJ IDE and other popular developer tools.
+As Kotlin is very new, without a doubt you have not encountered it before. Don’t worry: it is designed as a better +Java for industrial use and as such, the syntax was carefully designed to be readable even to people who don’t know +the language, after only a few minutes of introduction.
+Due to the seamless Java interop the use of Kotlin to extend the platform is not required and the tutorial shows how +to write contracts in both Kotlin and Java. You can read more about why Kotlin is a potentially strong successor to Java here.
+Kotlin programs use the regular Java standard library and ordinary Java frameworks. Frameworks used at this time are:
+-
+
-
+
+
+
+
+
diff --git a/docs/build/html/search.html b/docs/build/html/search.html
index b229ac4cce..bc1174da46 100644
--- a/docs/build/html/search.html
+++ b/docs/build/html/search.html
@@ -79,13 +79,20 @@
-
-
+
+
+
+
+
diff --git a/docs/build/html/searchindex.js b/docs/build/html/searchindex.js
index 39a15e9c7e..7f6007c84a 100644
--- a/docs/build/html/searchindex.js
+++ b/docs/build/html/searchindex.js
@@ -1 +1 @@
-Search.setIndex({envversion:46,filenames:["getting-set-up","index","inthebox","messaging","overview","protocol-state-machines","roadmap","tutorial","visualiser"],objects:{},objnames:{},objtypes:{},terms:{"0_xx":0,"1mb":5,"8u45":0,"abstract":5,"boolean":7,"break":7,"byte":[4,5],"case":[3,4,5,7],"catch":[0,5],"class":3,"default":[0,7],"final":[3,5,6,7],"function":[3,4],"import":[0,3,4,7],"instanceof":7,"int":7,"long":[3,5,7],"new":[0,1,4,5,7],"null":7,"public":[2,3,4,5,6,7],"return":[3,5,7],"short":[3,7],"static":[5,7],"super":5,"switch":[5,7],"throw":[5,7],"transient":5,"true":[3,7,8],"try":[4,5,7,8],"var":7,"void":7,abil:[3,4,7],abl:3,abov:[3,5,7],accept:[3,4,5,7],acceptablepric:5,access:[3,5],accident:7,accord:5,account:4,achiev:3,across:5,act:3,action:7,actor:[5,7],actual:[3,5,7],adapt:6,add:[3,5,7],addarg:[5,7],addinputst:[5,7],addit:7,addition:5,addmessagehandl:3,addoutputst:[5,7],address:[3,4,7],administr:2,affection:7,after:[4,5,7,8],again:[3,7],against:[5,7],agre:[0,4,5],algorithm:[2,4,7,8],alic:[7,8],aliceaddr:3,alicegetsback:[7,8],alicenod:3,aliv:5,all:[0,3,4,5,6,7],allow:[4,5,6,7],allpossiblerecipi:3,almost:7,along:[3,4,5,7],alreadi:7,alright:5,also:[0,3,4,5,7],alt:7,alter:[5,7],although:[3,4,7],alwai:[4,7],amount:[2,5,6,7],ani:[3,4,5,7],annot:7,anoth:[5,7],anyon:7,anyth:[3,4,5,7],anywher:[3,7],apach:[3,6],api:[2,4,6],appear:[4,7],applic:4,approach:[4,5,6,7],arbitrari:[4,7],arbitrarili:4,area:3,aren:[5,7],arg:[5,7,8],argument:[3,4,5,7],around:[3,4,5,7,8],arrai:4,arrang:5,arriv:5,articl:[3,4,5],artifact:7,ask:7,assembl:4,assert:[5,7],asset:4,assetforsal:5,assetmismatchexcept:5,assettosel:5,assettypenam:5,assist:[5,7,8],associ:[4,7],assum:[5,6,7],atom:[5,7],attach:[4,7],attempt:[0,1,3,4,5],attent:5,audit:[4,5,6],authenticatedobject:7,author:[3,4],authoris:5,auto:7,autom:7,automat:[3,5,7],avail:[3,7],avoid:5,awkward:5,back:[5,6,7],backend:[3,6],background:[3,4],backtick:7,bad:[5,7],balanc:7,bankrupt:7,base:[3,4,6],basic:[2,3,4,6,7],bear:[5,7],beauti:8,becaus:[0,3,5,7],becom:7,been:[4,7],befor:[4,5,7],begin:[4,5,7],behav:7,behaviour:2,behind:[5,7],below:5,benefit:[5,7],best:6,beta:0,better:[1,4,7,8],between:[5,7],beyond:[4,7],big:[5,7],bill:7,bind:4,bit:[5,7,8],bitbucket:0,bitcoinj:5,blank:7,block:[1,3,4,5,6,7],blockchain:5,blue:8,bob:7,bobaddr:3,bobnod:3,bond:7,bookkeep:[4,7],boost:2,borrow:8,both:[3,4,5,7],bound:5,briefli:8,bring:6,broadcast:3,brows:2,bug:2,build:[0,4,5,6,7],builder:7,built:[5,7],bunch:7,bundl:4,busi:[3,4,5,7],buyer:[],buyerimpl:5,buyerinitialarg:5,buyersessionid:5,bytearrai:3,bytecod:[4,5,7],calcul:[5,7],call:[3,4,5,7],callback:[3,5],caller:7,can:[0,2,3,4,5,6,7,8],cannot:[4,7],canon:6,capabl:[6,7],care:[3,5],carefulli:4,cash:[2,4,5,7,8],cashkt:7,cashsigningpubkei:5,cashstat:5,caus:7,center:7,certain:[4,7],cev:0,chain:[4,5,7],chanc:5,chang:[3,5,6,7,8],channel:5,chat:5,check:[0,2],checksufficientsignatur:5,choos:[0,7],circl:8,claim:[2,4,7],classload:5,clean:5,clear:5,clearer:[3,5],click:[0,8],cluster:6,cmd:7,code:[0,2,3,4,5,6,7],codebas:7,collect:7,collector:5,com:[0,5],combin:[1,7],come:[4,5],command:[0,4],commerci:[2,4],commercial_pap:7,commercialpap:[4,7,8],commercialpapertest:[7,8],common:[5,7],commonli:7,commun:0,companion:[5,7],compar:[3,4],compil:7,complet:[3,4,5,7],complex:[4,5,7],complic:5,compos:[6,7],comput:5,concept:[4,7],conceptu:5,concern:[5,7],condit:5,confid:6,configur:0,conflict:[1,4,6],confus:5,connect:7,consensu:6,consid:[4,7],consist:[2,4,5],constant:7,construct:[3,5,7],constructor:7,consum:4,contact:5,contain:[4,5,6,7],content:[0,3,4,7],continu:5,contract:2,contractst:[7,8],contractstateref:7,contrast:[4,5],contribut:7,control:[0,4,7],conveni:7,convert:7,convinc:5,copi:[5,7],core:[3,6,7],correct:7,correctli:[4,5,7],correspond:7,cost:7,could:[5,7],counter:5,coupl:5,cours:7,cover:[4,5,7],cp_program_id:7,craft:[],craftissu:7,craftmov:7,craftredeem:7,craftspend:[5,7],creat:[3,4,5,7],createmessag:3,creation:[1,7],crisp:7,crop:4,crowdfund:2,currenc:[4,7],current:[2,3,4,5,7,8],currentwallet:5,curv:2,dai:[7,8],dashboard:6,data:[2,3],databas:2,date:7,datetim:4,debug:5,decid:[4,7],declar:[3,5,7],defin:[2,3,4,5,7,8],definit:7,delet:7,deliv:3,deliveri:[3,5,7],demand:4,demonstr:6,denomin:4,depend:[0,5,7],deploy:6,deposit:4,depth:7,deriv:7,describ:[1,5,7],deseri:5,design:[1,4,7],desir:[5,7],despit:[5,7],destin:3,destroi:[4,7],destroypaperatredempt:[7,8],detail:[3,4,5,7],develop:[3,4,5],diagram:8,diamond:8,didn:7,differ:[4,5,7],difficult:[3,5],digit:[4,5,7],direct:7,directori:[0,7],dirti:7,disallow:7,discuss:3,disk:5,disprov:[1,6],disput:7,distinguish:7,distribut:[2,4,5,6],distrust:5,doc:7,document:[1,2,4,7],doe:[2,3,4,5,7],doesn:[3,4,5,7],dollar:[7,8],domain:[7,8],don:[0,3,4,5,7],done:[4,5,7],doubl:[5,6,7],doubt:4,down:7,download:[0,6],drag:8,drive:4,dsl:[6,7,8],due:[4,5,7],dummi:7,dummy_pubkey_1:7,duplic:7,durat:7,dynam:7,each:[3,4,5,7],earli:[7,8],eas:3,easi:7,easier:[5,7],easili:5,edit:0,editor:0,effect:7,either:[5,7],element:4,ellipt:2,els:7,emb:7,embed:4,emit:7,empti:[5,7],enabl:7,encapsul:5,encount:4,end:[4,5,7],enforc:[4,6,7],engin:7,english:7,enorm:5,enough:[3,5,6,7],ensur:[3,4,5,7],enter:7,entir:[3,4,7],entiti:[5,7],entri:[4,7],envisag:7,equal:7,equival:7,error:5,especi:8,essenti:7,etc:7,even:[3,4,5,6,7],event:6,everi:[4,5,7],everyth:[3,7],evolv:7,exact:7,exactli:[3,4,7],examin:[4,7],exampl:[3,5,6,7,8],except:7,exchang:[5,7],execut:[4,7],executor:3,exercis:7,exist:[1,4,7],expect:[2,3,5,7],expectfailureoftx:7,experi:6,experiment:[5,6],explain:[3,5,7],explicit:5,explicitli:[4,7],explor:[0,1,2,6,7],exploratori:3,expos:[3,4,5],express:[4,5,6,7],extend:[4,7],extens:7,extern:2,extract:[4,7],extrem:7,face:[4,7,8],facevalu:7,fact:[5,7],factor:4,fail:[3,7],failur:[5,7],fairli:5,fake:7,fals:[3,5,7],familiar:[4,7],far:[5,7],fast:3,favour:7,featur:[7,8],feel:7,few:[3,4,5,7],field:[5,7,8],file:[3,5,7],fill:[5,7],filterisinst:7,finalis:5,financ:5,financi:[1,4,5],find:[4,5],finish:[3,5],firm:7,first:[0,1,5,6,7],firstli:[5,7],fit:4,fix:[3,4,5,6],flesh:6,flexibl:4,flow:7,follow:[0,1,3,5,7,8],foo:3,fooutil:7,forget:7,form:[5,7],formal:7,format:4,forth:5,forward:[],found:[0,5],four:7,frame:5,framework:[2,4,5,8],free:[4,5,6],freeform:7,frequent:5,fresh:7,freshkei:5,freshli:7,from:[0,3,4,5,7,8],front:7,full:[5,7],fulli:[3,5,7],fullysign:5,fun:[5,7],fundament:[1,7],fungibl:4,funni:5,futur:[1,4,5,6,7,8],gain:2,game:5,garbag:5,gather:7,gcd:4,gener:[5,7],getclass:7,getcommand:7,getfacevalu:7,getinput:7,getissu:7,getlegalcontractrefer:7,getmaturityd:7,getoutput:7,getown:7,getprogramref:7,getsign:7,getter:7,gettim:7,getvalu:7,git:0,give:[4,6,7],given:[3,4,7],global:[4,7],glue:5,goal:[1,2,4,5],gone:7,good:[5,6,7,8],got:5,gradl:[0,4],gradlew:0,graph:[4,7,8],green:0,group:[3,4,7,8],groupstat:7,guava:4,hack:4,had:7,hand:[5,7],handl:[3,4,5,6,7],handler:[3,5],happen:[5,7],happi:5,hard:5,hash:[2,4,7],hashcod:7,hassl:5,have:[3,4,5,6,7],haven:7,heap:5,heart:7,heavili:4,held:7,hell:5,hello:5,help:3,helper:[3,7],her:[7,8],here:[3,4,5,7,8],high:5,higher:[0,7],highlight:7,hit:0,hold:[3,4],holder:7,home:0,hotspot:6,how:[3,4,6],howev:[5,7],http:[0,7],hub:5,hundr:5,hypothesi:1,idea:[0,2,4,5,7],ideal:[5,7],ident:[4,5,7],identifi:[3,4,5],identityservic:5,ietf:4,ignor:7,illegalargumentexcept:7,illegalstateexcept:7,imagin:[5,7],immedi:7,immut:[4,7],impl:5,implement:2,impli:5,implicitli:7,impos:[5,7],improv:[4,6,7,8],inbackground:3,includ:[],incorrect:5,increas:3,independ:7,index:[4,7],indic:[5,7],individu:[3,7],industri:[1,4],infer:7,infix:7,info:5,inform:[4,7],inherit:[3,5,7],initi:[3,5,7],inmemorymessagingtest:3,inoutgroup:7,input:[4,5,7,8],insert:3,insid:[3,4,5,7],instal:0,instanc:[4,5,7],instant:7,instanti:[4,5],instead:[2,4,7],institut:4,institutionrefer:7,instruct:7,insufficientbalanceexcept:7,integ:7,integr:[2,8],intend:[4,5],intent:[7,8],interact:[4,5],interest:[5,7,8],interfac:2,interfer:5,intern:[4,6,7],internet:4,interop:[4,7],interpret:[4,7],intersect:7,introduc:[6,7],introduct:4,invalid:[5,7],invari:7,invoc:3,invok:[3,4,5,7],involv:[3,5,7],isaft:7,isempti:7,isinst:5,isn:[5,7],issu:[4,6,7,8],issuanc:[7,8],issuer:7,item:[0,7],iter:[5,7],itself:[3,4,7],java:[3,4,5,7],javaclass:5,javacommercialpap:7,javaflow:5,jdk1:0,jdk:[0,7],jetbrain:[0,4],jira:[2,6],jmx:6,join:7,joint:7,junit:[4,7],just:[0,3,4,5,7],justifi:1,jvm:[4,5,6],jvmstatic:5,kafka:[3,6],keep:[4,5,7,8],kei:[2,3,4,5,6,7],kept:5,key_mismatch_at_issu:7,keymanagementservic:5,keypair:[5,7],keyword:7,kick:5,kill:6,kind:[3,4,7],know:[4,5],known:4,kotin:7,kotlin:[0,3],kryo:[3,4,5],label:[7,8],labori:7,languag:[0,1,4,7,8],larg:5,later:[2,3,5,6,7],latest:0,latter:7,layer:[5,6],layout:8,lazi:6,lazili:7,lead:7,learn:[1,6],least:7,leav:5,ledger:[1,4,5,7,8],ledgertransact:5,left:[3,5],legal:7,legalcontractrefer:7,less:[5,7,8],let:[4,5,7],level:[0,3,7],librari:[4,5,7],lifecycl:[5,7,8],like:[0,3,4,5,6,7],likewis:7,limit:[1,4,6,7],line:[0,5,7],link:7,list:[3,7],listen:[],liter:4,littl:7,load:7,local:[0,4,5],locat:7,lock:7,log:[5,6],logger:5,logic:[3,4,5,6,7],logo:0,look:[5,7],loop:7,lose:6,low:5,ltx:5,lurch:5,machin:[3,4],made:1,mai:[3,4,5,6,7],main:[5,7,8],maintain:4,make:[3,5,6,7],makenod:3,maker:4,malici:5,manag:[],mani:[2,3,4,5,7],manual:3,map:7,mappabl:7,mark:[5,7],marker:7,market:1,match:[3,4,7],matur:7,maturityd:7,maximis:4,mean:[3,4],measur:[6,7],mechan:7,meet:7,mega_corp:7,mega_corp_kei:7,mega_corp_pubkei:8,megacorp:[7,8],member:5,memori:[],menu:0,mere:[4,7],merg:[4,7],mess:5,messag:[],messagehandlerregistr:3,messagerecipi:3,messagerecipientgroup:3,messagingservic:[3,5],method:[3,5,7,8],middl:[3,5],might:[5,7],mileston:6,mind:[5,7],mine:4,minim:5,minimum:[4,6],minu:7,minut:4,misc:3,miss:[5,7],mix:[5,6,7],mock:[3,6],mode:3,model:[],modif:[6,7],modifi:[0,7],modul:[3,7],moment:3,monei:7,monetari:7,monitor:6,month:5,more:[3,4,7],most:[3,5,7],mostli:7,move:[5,7,8],movement:[5,7],much:[4,5,7],multi:[5,6,7],multipl:[3,4,7],must:[4,5,7],mutabl:[4,7],mutual:5,mykeypair:5,name:[3,4,5,7],nativ:5,natur:7,necessari:6,necessarili:[6,7],need:[1,3,4,5,7],neither:[5,7],nest:5,net:[7,8],network:2,neutral:2,never:[4,7],newown:7,next:[0,5,6,7],node:[3,4,5,6,8],non:4,normal:[5,7],not_matured_at_redempt:7,note:[0,4,5,7],noth:[4,7],notic:7,notion:[2,4,7],notnul:7,now:[0,3,4,5,7,8],nugget:7,nullpublickei:7,number:7,obj:7,object:[3,4,5,7,8],observ:6,obsolet:2,obtain:8,obvious:7,occur:[5,7],odd:[5,7],off:[3,5,7,8],offer:5,often:[4,5,7],onc:[3,4,5,7],onli:[3,4,5,7,8],onto:[7,8],opaqu:[3,4],opaquebyt:7,open:[0,5,8],openjdk:0,oper:[3,7],opposit:7,option:[3,7],oracl:0,order:[2,4,7,8],ordinari:[4,5,7],org:[0,7],orient:[],origin:7,other:[2,3,4,5,6,7],othersid:5,otherwis:7,our:[4,5,6,7],ourselv:[5,7],oursignatur:5,out:[0,4,5,6,7],outcom:5,outlin:5,outpoint:4,output:[4,5,7,8],outputst:5,outsid:[3,5,7],outstat:7,over:[3,5,7],overrid:[5,7],overview:[],own:[3,4,5,7,8],ownablest:5,owned_bi:7,owner:[5,6,7],ownership:[5,7],owningkei:7,p2p:6,packag:6,packet:4,page:[6,7],pai:[5,7,8],pair:[4,5],paper:[2,4],paper_1:[7,8],parallel:[3,7],paramet:[5,7],parameteris:4,part:[4,5,6,7],parti:4,partial:[5,7],partialtransact:[5,7],partialtx:5,particip:[4,7],particular:5,partner:5,pass:[3,5,7,8],past:7,path:7,pattern:[4,7],payment:[5,7,8],peer:[2,3],pend:6,penni:7,peopl:[4,7],perform:[5,7],perhap:7,perman:[4,7],persist:[2,3,5],perspect:[5,7],pick:5,piec:[3,4,5,7],ping:3,place:[2,4,6,7],plai:5,platform:[1,3,4,5,7],playground:0,pleas:[4,7],pluggabl:6,plugin:0,point:[4,5,7],pointer:[4,5],pong:3,pool:[5,6],poor:4,pop:[0,3],popular:4,posess:5,possibl:[1,3,4,5,7],potenti:[4,7],pound:7,power:[1,4],practic:[4,7],pre:[5,7],preced:7,preliminari:3,prepar:7,presenc:6,present:[1,6,7],press:7,pretti:[5,7],prevent:7,price:5,primari:4,primit:7,priv:5,privaci:7,privat:[4,5,7],probabl:[0,7],problem:[5,7],proce:5,process:[3,7],produc:[5,7,8],product:[1,2,7],profit:[7,8],program:[3,4,7],programref:7,progress:5,project:0,proof:[1,4],propag:[1,7],properti:7,protect:5,protocol:[2,3,4],protocolstatemachin:5,prove:[1,4,6,7],provid:[3,4,5,7],ptx:5,publickei:[5,7],pull:0,pump:3,purchas:5,pure:4,purpos:[4,7],put:[5,7],qualiti:1,quantiti:[4,7],queue:3,quickli:[3,7],quit:[5,7],r3cev:5,random63bitvalu:5,random:[4,5],rapid:2,rather:[4,5,7],rational:4,reachabl:5,read:[1,2,4,5,7],readabl:4,reader:7,readi:7,real:[2,3,7],realism:3,realiti:7,realli:[5,7],reason:[5,7],reassign:7,receiv:[3,4,5,7,8],recipi:[3,7],recognis:7,record:[6,7],recreat:5,red:0,redeem:[4,7,8],redempt:[7,8],redemptiontim:[7,8],ref:[5,7],refer:[4,5,7],refin:4,reflect:7,refus:0,regist:[3,5],registr:3,registri:4,regular:[4,5,7],reissuanc:7,reject:7,rel:4,relat:[5,7],relationship:7,releas:8,relev:4,reli:4,reliabl:3,relianc:4,remain:[7,8],rememb:[5,7],remov:[3,7],render:8,repeat:3,replac:7,replic:4,report:[3,6],repres:[3,4,5,7],request:5,requir:[3,4,6],requiresinglecommand:7,requirethat:[5,7],resolut:[1,4,6],resolv:[5,6],resourc:5,respect:7,respons:5,rest:[3,4],restart:[0,5],restor:5,result:[4,5,7],resultfutur:5,resum:5,resurrect:5,retri:3,reus:5,reveal:7,rewrit:5,rfc:4,right:[0,3,5],rigid:4,risk:5,roadmap:[],roll:6,rollov:7,room:5,root:[7,8],rout:[5,6],router:3,rule:[5,7],run:[0,3,4,5,7],runawai:6,runbuy:5,runnetwork:3,runsel:5,runtim:6,safe:[4,5,6,7],sai:[4,7],sale:7,same:[3,4,5,7,8],sandbox:[2,4,6,7],saniti:5,satisfi:[5,7],save:7,scala:[4,7],scalabl:[4,7],scene:[5,7],scope:[4,7],screen:0,script:[4,7],seamless:4,search:[0,7],second:[5,7],secondari:5,secp256r1:2,section:7,secur:[3,4,5],securehash:7,see:[3,5,6,7],seen:[6,7,8],select:[0,7],sell:[5,7],seller:[],sellerimpl:5,sellerinitialarg:5,sellerownerkei:5,sellertradeinfo:5,semi:4,send:[3,4,5,7],sendandrec:5,sens:[5,7],sent:[3,5,7],separ:[5,6,7],sequenc:3,sequenti:5,serial:[2,7],serialis:[2,3,4,5,7],serializablewithkryo:7,serializeablewithkryo:7,server:6,servic:[3,5],servicehub:5,session:[3,5],sessionid:5,setter:7,settl:3,settlement:5,sever:[4,5,7],sha256:7,sha:4,share:[1,4,5,7],she:7,shortcut:2,shorthand:7,shot:3,should:[0,2,3,4,5,6,7],shouldn:5,show:[0,4,7,8],shown:7,shutdown:5,side:5,sig:[5,7],sign:[2,4,5,7],signatur:[2,4,5,6,7],signedwiretransact:[5,7],signer:7,signwith:[5,7],signwithecdsa:5,similar:[4,7],similarli:7,simpl:[3,5,7,8],simpler:4,simplest:5,simpli:[3,5,7],simplifi:[2,3,4,7],simultan:[3,5,7],singl:[4,5,7,8],singlemessagerecipi:[3,5],singleton:7,sit:3,site:6,size:[5,7],skeleton:5,slight:7,slightli:7,small:[2,4,5,7,8],smart:2,smm:5,smooth:7,snippet:7,softwar:2,sold:[5,7,8],solv:[5,7],some:[2,3,4,5,6,7,8],somed:7,someon:[3,7],someprofit:[7,8],someth:[0,5,7],sometim:[3,4,7],somewhat:4,somewher:[7,8],sort:[4,5],sound:[5,7,8],sourc:5,space:7,special:[],specif:[3,4,5,7,8],specifi:[2,3,7],speed:5,spend:[4,5,6,7],split:[4,7],spread:[3,5],squar:8,src:[7,8],stack:5,stage:[5,6,7],stai:4,standard:[1,4,7],standardis:[4,7],start:[],state:[3,4],stateandref:[5,7],stateless:4,statemachinemanag:5,statement:[5,7],stateref:[4,5],statesoftyp:5,step:[5,6,7],still:[4,7],stop:[3,5,6],storag:[4,6],store:[5,7],straight:[],straightforward:[5,7],stream:5,string:[3,5,7],strong:4,structur:[0,2,4,5,7],studi:7,stuff:5,stx:5,style:3,subgraph:6,subgroup:4,submenu:0,successor:4,suffici:[1,3],suffix:7,suggest:7,suitabl:6,sum:7,sumcashbi:[5,7],sumcashornul:7,summaris:4,superclass:5,supertyp:7,support:[4,5,6,7],suppos:[5,7],sure:[5,7],surround:7,surviv:5,suspend:5,swap:5,symbol:0,synchronis:4,syntax:[4,7],system:[2,4,5,6,7],tab:0,tailor:1,take:[2,5,7,8],target:4,targetrecipi:3,task:[4,5,6],techniqu:7,tell:3,tempor:6,temporarili:5,tempt:7,temptat:5,ten:7,term:[4,7],termin:5,terminolog:4,test:[0,2,3,4,6],test_tx_tim:7,testutil:7,testwithinmemorynetwork:3,text:0,than:[1,4,5,7,8],thei:[3,4,5,6,7],them:[2,3,5,7],themselv:[3,4,7],theori:[],therefor:[2,4,7],thesi:6,thi:[0,1,3,4,5,6,7,8],thing:[2,4,5,6,7],think:[0,5,7],third:[5,7],those:[3,7],though:[3,5,7],thought:4,thread:[3,5,6],three:[2,7],threshold:7,through:[4,5,6,7],thrown:7,thu:7,tighten:7,tightli:5,time:[4,5,6,7,8],timelin:7,timestamp:[4,5,7],timestampedwiretransact:5,timestampingservic:5,todo:[5,7],togeth:[4,7],too:[5,7,8],took:5,tool:4,top:[5,7],topic:[3,5],topriv:5,tosignedtransact:[5,7],tostr:7,total:7,totimestampedtransact:5,trace:5,track:5,tracker:2,trade:4,trade_top:5,traderequest:5,tradit:7,traffic:5,transact:[1,4,5,6,7,8],transactionforverif:7,transactiongroup:[5,7],transactiongroupdsl:8,transactiongroupfor:8,transactiongroupfortest:7,transfer:7,transit:[1,7],treat:7,tri:7,trick:5,tricki:5,tripl:4,truth:5,tsa:4,tsp:4,ture:4,turn:[5,7],tutori:[2,4],twice:4,two:[3,4],twopartytradeprotocol:5,twopartytradeprotocolimpl:5,txbit:5,txhash:[4,7],type:[4,5,7],typetobui:5,typic:[3,5,7],unacceptablepriceexcept:5,under:7,underscor:7,understand:3,unexecut:7,unfinsish:5,unfortun:[5,7],unguess:5,uniqu:4,unit:[0,2,3,4,5,7,8],unless:[5,7],unlik:7,unnecessari:7,unpack:5,unread:5,unrecognis:7,unsaf:6,unserialis:5,unspent:4,unsupportedoperationexcept:7,until:[3,5],unus:3,unusu:7,unwieldi:7,updat:[0,4,5,7],upgrad:[0,1,6],upload:6,upon:[4,7],url:0,usabl:4,usag:7,user:[2,3,4,5],util:[3,4,7],utxo:4,val:[3,5,7,8],valid:[4,5,6,7],valu:[4,7,8],vari:7,variabl:[5,7],variant:7,variou:[4,5,7],vendor:2,verbos:7,veri:[4,8],verif:[2,4],verifi:[2,4,6],verifysignatur:5,verifytoledgertransact:5,versa:5,version:[0,2,5,7],versu:5,via:5,vice:5,virtual:[1,4],visibl:4,visualis:[],vote:6,wai:[4,5,6,7],wait:[0,3,5],wallet:[4,5,7],walletservic:5,wan:6,want:[0,3,5,7],websit:7,well:[2,4,5,7],were:[5,7],what:[],whatev:5,when:[3,5,6,7],where:[3,4,5],wherea:7,whether:3,which:[2,3,4,5,7],whilst:[4,5,7],who:[3,4,5,7],whole:7,why:[4,5,7],wide:[3,7],wiki:[4,7],wikipedia:7,window:8,wire:5,wirecommand:[5,7],wiretransact:5,wish:[3,5,6,7],within:4,withnewown:5,withoutown:7,won:[3,7],work:[0,1,2,3,4,5,7],world:[5,7],worn:7,worri:[4,5],worth:7,would:[2,3,5,7],wouldn:7,wrap:7,wrapper:5,write:[4,5,7],written:[4,7],wtx:5,www:0,yet:[4,7],yield:4,you:[0,2,3,4,5,7,8],your:3,your_usernam:0,zero:7},titles:["Getting set up","Welcome to the R3 prototyping repository!","What’s included?","Networking and messaging","Overview","Protocol state machines","Roadmap","Tutorial","Using the visualiser"],titleterms:{"class":7,"function":7,about:0,api:7,asset:7,base:7,bitcoin:4,buyer:5,check:7,command:7,commerci:7,comparison:4,complain:0,contract:[4,7],craft:7,data:4,ethereum:4,fungibl:7,get:0,how:7,implement:[3,5],includ:2,intellij:0,interfac:3,introduct:5,kotlin:4,lack:0,machin:5,manag:5,memori:3,messag:3,model:4,network:3,non:7,orient:7,overview:4,paper:7,parti:5,protocol:5,prototyp:1,repositori:1,requir:7,roadmap:6,sdk:0,seller:5,set:0,smart:7,start:7,state:[5,7],test:7,theori:5,trade:5,tutori:7,two:5,understand:7,verifi:7,visualis:8,welcom:1,what:2,without:0,your:7}})
\ No newline at end of file
+Search.setIndex({envversion:46,filenames:["data-model","getting-set-up","index","inthebox","messaging","protocol-state-machines","roadmap","tutorial","visualiser"],objects:{},objnames:{},objtypes:{},terms:{"0_xx":1,"1mb":5,"8u45":1,"abstract":5,"boolean":7,"break":7,"byte":[0,3,5],"case":[0,4,5,7],"catch":[1,5],"class":[2,4,5],"default":[1,7],"final":[4,5,6,7],"function":[0,2,3,4,5],"import":[0,1,4,7],"instanceof":7,"int":7,"long":[4,5,7],"new":[0,1,2,3,5,7],"null":7,"public":[0,3,4,5,6,7],"return":[4,5,7],"short":[4,7],"static":[5,7],"super":5,"switch":[5,7],"throw":[5,7],"transient":5,"true":[0,4,7,8],"try":[0,5,7,8],"var":7,"void":7,abil:[0,4,7],abl:4,about:0,abov:[4,5,7],accept:[0,4,5,7],acceptablepric:5,access:[4,5],accident:7,accord:5,account:0,achiev:4,across:5,act:4,action:7,actor:[5,7],actual:[4,5,7],adapt:6,add:[4,5,7],addarg:[5,7],addinputst:[5,7],addit:7,addition:5,addmessagehandl:4,addoutputst:[5,7],address:[0,4,7],administr:3,affection:7,after:[0,3,5,7,8],again:[4,7],against:[5,7],agre:[1,5],agreement:0,algorithm:[0,3,7,8],alic:[7,8],aliceaddr:4,alicegetsback:[7,8],alicenod:4,aliv:5,all:[0,1,4,5,6,7],allow:[3,5,6,7],allpossiblerecipi:4,almost:7,along:[3,4,5,7],alreadi:7,alright:5,also:[0,1,4,5,7],alt:7,alter:[5,7],although:[0,4,7],alwai:[0,7],amount:[3,5,6,7],ani:[0,4,5,7],annot:7,anoth:[5,7],anyon:7,anyth:[0,4,5,7],anywher:[4,7],apach:[4,6],api:[2,3,6],appear:7,appendix:2,applic:0,approach:[0,5,6,7],arbitrari:[0,7],arbitrarili:3,area:4,aren:[5,7],arg:[5,7,8],argument:[0,4,5,7],around:[0,4,5,7,8],arrai:[0,3],arrang:5,arriv:5,articl:[0,4,5],artifact:7,ask:7,assembl:0,assert:[5,7],asset:[2,3,5],assetforsal:5,assetmismatchexcept:5,assettosel:5,assettypenam:5,assist:[5,7,8],associ:[0,7],assum:[5,6,7],atom:[5,7],attach:[0,7],attempt:[0,1,2,4,5],attent:5,audit:[0,5,6],authenticatedobject:7,author:[0,4],authoris:5,auto:7,autom:7,automat:[4,5,7],avail:[4,7],avoid:5,awkward:5,back:[5,6,7],backend:[4,6],background:[0,4],backtick:7,bad:[5,7],balanc:7,bankrupt:7,bankruptci:0,base:[0,2,4,5,6],basic:[0,3,4,6,7],bear:[5,7],beauti:8,becaus:[1,4,5,7],becom:7,been:[0,7],befor:[0,3,5,7],begin:[0,5,7],behav:7,behaviour:3,behind:[5,7],below:5,benefit:[5,7],best:6,beta:1,better:[2,3,7,8],between:[5,7],beyond:[0,7],big:[5,7],bill:7,bind:0,bit:[5,7,8],bitbucket:1,bitcoinj:5,blank:7,block:[0,2,4,5,6,7],blockchain:5,blue:8,bob:7,bobaddr:4,bobnod:4,bond:7,bookkeep:[3,7],boost:3,borrow:8,both:[0,3,4,5,7],bound:5,briefli:8,bring:6,broadcast:4,brows:3,bug:3,build:[1,3,5,6,7],builder:7,built:[5,7],bunch:7,bundl:0,busi:[0,3,4,5,7],buyer:2,buyerimpl:5,buyerinitialarg:5,buyersessionid:5,bytearrai:4,bytecod:[0,5,7],calcul:[5,7],calibr:0,call:[0,3,4,5,7],callback:[4,5],caller:7,can:[0,1,3,4,5,6,7,8],cannot:[0,7],canon:6,capabl:[6,7],care:[4,5],carefulli:3,cash:[3,5,7,8],cashkt:7,cashsigningpubkei:5,cashstat:5,caus:7,center:7,certain:[3,7],cev:1,chain:[0,5,7],chanc:5,chang:[4,5,6,7,8],channel:5,chat:5,check:[1,2,3,5],checksufficientsignatur:5,choos:[1,7],circl:8,claim:[0,3,7],classload:5,clean:5,clear:5,clearer:[4,5],click:[1,8],cluster:6,cmd:7,code:[0,1,3,4,5,6,7],codebas:7,collect:7,collector:5,com:[1,5],combin:[2,7],come:[3,5],command:[0,1,2,5],commerci:[2,3,5],commercial_pap:7,commercialpap:[3,7,8],commercialpapertest:[7,8],common:[5,7],commonli:7,commun:1,companion:[5,7],compar:[0,4],compil:7,complet:[0,4,5,7],complex:[0,5,7],complic:5,compos:[6,7],comput:5,concept:[0,7],conceptu:5,concern:[5,7],condit:5,confid:6,configur:1,conflict:[0,2,6],confus:5,connect:7,consensu:6,consid:[0,7],consist:[0,3,5],constant:7,construct:[4,5,7],constructor:7,consum:0,contact:5,contain:[0,5,6,7],content:[1,4,7],continu:5,contract:[0,2],contractst:[7,8],contractstateref:7,contrast:[0,5],contribut:7,control:[0,1,7],conveni:7,convert:7,convinc:5,copi:[5,7],core:[4,6,7],correct:7,correctli:[0,5,7],correspond:7,cost:7,could:[5,7],counter:5,coupl:5,cours:7,cover:[0,5,7],cp_program_id:7,craft:2,craftissu:7,craftmov:7,craftredeem:7,craftspend:[5,7],creat:[0,4,5,7],createmessag:4,creation:[2,7],crisp:7,crop:0,crowdfund:3,currenc:[3,7],current:[0,3,4,5,7,8],currentwallet:5,curv:3,dai:[7,8],dashboard:6,databas:3,date:7,debug:5,decid:7,declar:[4,5,7],defin:[0,3,4,5,7,8],definit:7,delet:7,deliv:4,deliveri:[4,5,7],demonstr:6,denomin:3,depend:[1,5,7],deploy:6,deposit:3,depth:7,deriv:7,describ:[2,5,7],deseri:5,design:[0,2,3,7],desir:[5,7],despit:[5,7],destin:4,destroi:[0,7],destroypaperatredempt:[7,8],detail:[0,4,5,7],develop:[0,3,4,5],diagram:8,diamond:8,didn:7,differ:[0,5,7],difficult:[4,5],digit:[0,5,7],direct:7,directori:[1,7],dirti:7,disallow:7,discuss:4,disk:5,disprov:[2,6],disput:7,distinguish:7,distribut:[0,3,5,6],distrust:5,doc:7,document:[0,2,3,7],doe:[0,3,4,5,7],doesn:[0,4,5,7],dollar:[7,8],domain:[7,8],don:[0,1,3,4,5,7],done:[0,5,7],doubl:[5,6,7],doubt:3,down:7,download:[1,6],drag:8,drive:0,dsl:[6,7,8],due:[3,5,7],dummi:7,dummy_pubkey_1:7,duplic:7,durat:7,dynam:7,each:[0,3,4,5,7],earli:[7,8],eas:4,easi:7,easier:[5,7],easili:5,edit:1,editor:1,effect:7,either:[5,7],element:0,ellipt:3,els:7,emb:7,embed:0,emit:7,empti:[5,7],enabl:7,encapsul:5,encount:3,end:[3,5,7],enforc:[6,7],engin:7,english:7,enorm:5,enough:[4,5,6,7],ensur:[0,4,5,7],enter:7,entir:[0,4,7],entiti:[0,5,7],entri:[0,7],envisag:7,equal:7,equival:7,error:5,especi:8,essenti:7,etc:7,even:[3,4,5,6,7],event:[0,6],everi:[0,5,7],everyth:[4,7],evolv:7,exact:7,exactli:[0,4,7],examin:[0,7],exampl:[0,4,5,6,7,8],except:7,exchang:[5,7],execut:[0,7],executor:4,exercis:7,exist:[0,2,7],expect:[3,4,5,7],expectfailureoftx:7,experi:6,experiment:[5,6],explain:[4,5,7],explicit:5,explicitli:[0,7],explor:[1,2,3,6,7],exploratori:4,expos:[4,5],express:[0,3,5,6,7],extend:[3,7],extens:7,extern:3,extract:[0,7],extrem:7,face:[3,7,8],facevalu:7,fact:[0,5,7],factor:0,fail:[4,7],failur:[5,7],fairli:5,fake:7,fals:[4,5,7],familiar:[0,7],far:[5,7],fast:4,favour:7,featur:[7,8],feel:7,few:[3,4,5,7],field:[5,7,8],file:[4,5,7],fill:[5,7],filterisinst:7,finalis:5,financ:5,financi:[0,2,5],find:[0,5],finish:[4,5],firm:7,first:[1,2,5,6,7],firstli:[5,7],fit:0,fix:[0,4,5,6],flesh:6,flexibl:0,flow:7,follow:[1,2,4,5,7,8],foo:4,fooutil:7,forget:7,form:[5,7],formal:7,format:0,forth:5,found:[1,5],four:7,frame:5,framework:[3,5,8],free:[0,5,6],freeform:7,frequent:5,fresh:7,freshkei:5,freshli:7,from:[0,1,3,4,5,7,8],front:7,full:[5,7],fulli:[4,5,7],fullysign:5,fun:[5,7],fundament:[2,7],fungibl:[2,3],funni:5,futur:[0,2,5,6,7,8],gain:3,game:5,garbag:5,gather:7,gcd:0,gener:[5,7],get:0,getclass:7,getcommand:7,getfacevalu:7,getinput:7,getissu:7,getlegalcontractrefer:7,getmaturityd:7,getoutput:7,getown:7,getprogramref:7,getsign:7,getter:7,gettim:7,getvalu:7,git:1,give:[0,6,7],given:[0,4,7],global:[0,7],glue:5,goal:[2,3,5],gone:7,good:[5,6,7,8],got:5,gradl:[1,3],gradlew:1,graph:[0,7,8],green:1,group:[0,4,7,8],groupstat:7,guava:3,hack:0,had:7,hand:[5,7],handl:[0,4,5,6,7],handler:[4,5],happen:[5,7],happi:5,hard:5,hash:[0,3,7],hashcod:7,hassl:5,have:[0,3,4,5,6,7],haven:7,heap:5,heart:7,heavili:0,held:7,hell:5,hello:5,help:4,helper:[4,7],her:[7,8],here:[3,4,5,7,8],high:5,higher:[1,7],highlight:7,hit:1,hold:[0,4],holder:7,home:1,hotspot:6,how:[0,2,3,4,5,6],howev:[5,7],http:[1,7],hub:5,hundr:5,hypothesi:2,idea:[0,1,3,5,7],ideal:[5,7],ident:[0,5,7],identifi:[0,3,4,5],identityless:0,identityservic:5,ignor:7,illegalargumentexcept:7,illegalstateexcept:7,imagin:[5,7],immedi:7,immut:[0,7],impl:5,implement:[0,2,3],impli:5,implicitli:7,impos:[5,7],improv:[0,6,7,8],inbackground:4,includ:[0,2],incorrect:5,increas:4,independ:7,index:[0,7],indic:[5,7],individu:[4,7],industri:[2,3],infer:7,infix:7,info:5,inform:[0,7],infrastructur:0,inherit:[4,5,7],initi:[4,5,7],inmemorymessagingtest:4,inoutgroup:7,input:[0,5,7,8],insert:4,insid:[0,4,5,7],instal:1,instanc:[0,5,7],instant:7,instanti:[0,5],instead:[0,3,7],institut:3,institutionrefer:7,instruct:7,insufficientbalanceexcept:7,integ:7,integr:[3,8],intend:[0,3,5],intent:[7,8],interact:[0,5],interest:[5,7,8],interfac:[2,3],interfer:5,intern:[3,6,7],interop:[3,7],interpret:[0,7],intersect:7,introduc:[6,7],introduct:[2,3],invalid:[5,7],invari:7,invoc:4,invok:[0,4,5,7],involv:[4,5,7],isaft:7,isempti:7,isinst:5,isn:[5,7],issu:[3,6,7,8],issuanc:[7,8],issuer:7,item:[1,7],iter:[5,7],itself:[0,4,7],java:[3,4,5,7],javaclass:5,javacommercialpap:7,javaflow:5,jdk1:1,jdk:[1,7],jetbrain:[1,3],jira:[3,6],jmx:6,join:7,joint:7,junit:[3,7],just:[0,1,4,5,7],justifi:2,jvm:[0,3,5,6],jvmstatic:5,kafka:[4,6],keep:[0,5,7,8],kei:[0,3,4,5,6,7],kept:5,key_mismatch_at_issu:7,keymanagementservic:5,keypair:[5,7],keyword:7,kick:5,kill:6,kind:[0,3,4,7],know:[3,5],known:0,kotin:7,kotlin:[1,2],kryo:[3,4,5],label:[7,8],labori:7,languag:[0,1,2,3,7,8],larg:5,later:[3,4,5,6,7],latest:1,latter:7,layer:[5,6],layout:8,lazi:6,lazili:7,lead:7,learn:[2,6],least:7,leav:5,ledger:[0,2,5,7,8],ledgertransact:5,left:[4,5],legal:[0,7],legalcontractrefer:7,less:[5,7,8],let:[0,5,7],level:[1,4,7],librari:[3,5,7],lifecycl:[5,7,8],like:[0,1,4,5,6,7],likewis:7,limit:[0,2,6,7],line:[1,5,7],link:[0,7],list:[0,4,7],liter:0,littl:7,load:7,local:[0,1,5],locat:7,lock:7,log:[5,6],logger:5,logic:[0,3,4,5,6,7],logo:1,look:[5,7],loop:7,lose:6,low:5,ltx:5,lurch:5,machin:[0,2,4],made:2,mai:[0,3,4,5,6,7],main:[5,7,8],maintain:0,make:[4,5,6,7],makenod:4,maker:3,malici:5,manag:2,mani:[0,3,4,5,7],manual:4,map:7,mappabl:7,mark:[5,7],marker:7,market:2,match:[0,4,7],matur:7,maturityd:7,maximis:0,mean:[0,4],measur:[6,7],mechan:7,meet:7,mega_corp:7,mega_corp_kei:7,mega_corp_pubkei:8,megacorp:[7,8],member:5,memori:2,menu:1,mere:7,merg:[3,7],mess:5,messag:[0,2],messagehandlerregistr:4,messagerecipi:4,messagerecipientgroup:4,messagingservic:[4,5],method:[4,5,7,8],middl:[4,5],might:[5,7],mileston:6,mind:[5,7],mine:0,minim:5,minimum:[0,6],minu:7,minut:3,misc:4,miss:[5,7],mix:[5,6,7],mock:[4,6],mode:4,modif:[6,7],modifi:[1,7],modul:[4,7],moment:4,monei:7,monetari:7,monitor:6,month:5,more:[0,3,4,7],most:[4,5,7],mostli:7,move:[5,7,8],movement:[5,7],much:[0,3,5,7],multi:[5,6,7],multipl:[0,4,7],must:[0,5,7],mutabl:[0,7],mutual:5,mykeypair:5,name:[4,5,7],nativ:5,natur:7,naval:0,necessari:6,necessarili:[6,7],need:[0,2,4,5,7],neither:[5,7],nest:5,net:[7,8],network:[2,3],neutral:3,never:7,newown:7,next:[1,5,6,7],node:[0,4,5,6,8],non:[0,2],normal:[5,7],not_matured_at_redempt:7,note:[0,1,5,7],noth:[0,7],notic:7,notion:[0,3,7],notnul:7,now:[1,4,5,7,8],nugget:7,nullpublickei:7,number:7,obj:7,object:[0,4,5,7,8],observ:6,observatori:0,obsolet:3,obtain:8,obvious:7,occur:[5,7],odd:[5,7],off:[4,5,7,8],offer:5,often:[0,5,7],onc:[3,4,5,7],onli:[0,3,4,5,7,8],onto:[7,8],opaqu:[3,4],opaquebyt:7,open:[1,5,8],openjdk:1,oper:[4,7],opposit:7,option:[4,7],oracl:[0,1],order:[3,7,8],ordinari:[0,3,5,7],org:[1,7],orient:2,origin:7,other:[0,3,4,5,6,7],othersid:5,otherwis:7,our:[0,5,6,7],ourselv:[5,7],oursignatur:5,out:[0,1,5,6,7],outcom:5,outlin:5,outpoint:0,output:[0,5,7,8],outputst:5,outsid:[0,4,5,7],outstat:7,over:[4,5,7],overrid:[5,7],overview:2,own:[4,5,7,8],ownablest:5,owned_bi:7,owner:[5,6,7],ownership:[5,7],owningkei:7,p2p:6,packag:6,packet:0,page:[6,7],pai:[5,7,8],pair:[0,5],paper:[2,3,5],paper_1:[7,8],parallel:[4,7],paramet:[5,7],parameteris:0,part:[0,5,6,7],parti:[2,3],partial:[5,7],partialtransact:[5,7],partialtx:5,particip:[0,7],particular:5,partner:5,pass:[4,5,7,8],past:7,path:7,pattern:[0,7],payment:[5,7,8],peer:[3,4],pend:6,penni:7,peopl:[0,3,7],perform:[5,7],perhap:7,perman:[3,7],persist:[3,4,5],perspect:[5,7],pick:5,piec:[0,4,5,7],ping:4,pki:0,place:[0,3,6,7],plai:5,platform:[0,2,3,4,5,7],pleas:[0,7],pluggabl:6,plugin:1,point:[0,5,7],pointer:5,pong:4,pool:[5,6],poor:0,pop:[1,4],popular:3,posess:5,possibl:[0,2,4,5,7],potenti:[3,7],pound:7,power:[0,2],practic:[0,7],pre:[0,5,7],preced:7,preliminari:4,prepar:7,presenc:6,present:[2,6,7],press:7,pretti:[5,7],prevent:7,price:[0,5],primari:3,primit:7,priv:5,privaci:[0,7],privat:[0,5,7],probabl:[1,7],problem:[5,7],proce:5,process:[4,7],produc:[5,7,8],product:[2,3,7],profit:[7,8],program:[0,3,4,7],programref:7,progress:5,project:1,proof:[0,2],propag:[2,7],properti:7,protect:5,protocol:[0,2,3,4],protocolstatemachin:5,prototyp:0,prove:[0,2,6,7],provid:[0,4,5,7],ptx:5,publickei:[5,7],pull:1,pump:4,purchas:5,pure:0,purpos:[3,7],put:[5,7],qualiti:2,quantiti:[0,3,7],queue:4,quickli:[4,7],quit:[5,7],r3cev:5,r3repositori:1,random63bitvalu:5,random:[0,5],rapid:3,rather:[0,5,7],rational:0,reachabl:5,read:[2,3,5,7],readabl:3,reader:7,readi:7,real:[3,4,7],realism:4,realiti:7,realli:[5,7],reason:[5,7],reassign:7,receiv:[0,4,5,7,8],recipi:[4,7],recognis:[0,7],record:[6,7],recreat:5,red:1,redeem:[3,7,8],redempt:[7,8],redemptiontim:[7,8],ref:[5,7],refer:[0,3,5,7],refin:3,reflect:7,refus:1,regist:[4,5],registr:4,regular:[3,5,7],reissuanc:7,reject:7,rel:0,relat:[5,7],relationship:7,releas:8,relev:0,reli:0,reliabl:4,relianc:0,remain:[7,8],rememb:[5,7],remov:[4,7],render:8,repeat:4,replac:7,replic:0,report:[4,6],repres:[0,4,5,7],request:5,requir:[2,3,4,5,6],requiresinglecommand:7,requirethat:[5,7],resolut:[0,2,6],resolv:[5,6],resourc:5,respect:7,respons:5,rest:[0,4],restart:[1,5],restor:5,result:[0,5,7],resultfutur:5,resum:5,resurrect:5,retri:4,reus:5,reveal:7,rewrit:5,right:[1,4,5],rigid:0,risk:5,roadmap:2,roll:6,rollov:7,room:5,root:[7,8],rout:[5,6],router:4,rule:[5,7],run:[0,1,4,5,7],runawai:6,runbuy:5,runnetwork:4,runsel:5,runtim:6,safe:[0,5,6,7],sai:7,sale:7,same:[0,3,4,5,7,8],sandbox:[0,3,6,7],saniti:5,satisfi:[5,7],save:7,scala:[3,7],scalabl:[0,7],scene:[5,7],scope:[0,7],screen:1,script:[0,7],seamless:3,search:[1,7],second:[5,7],secondari:5,secp256r1:3,section:7,secur:[0,4,5],securehash:7,see:[4,5,6,7],seen:[6,7,8],select:[1,7],sell:[5,7],seller:2,sellerimpl:5,sellerinitialarg:5,sellerownerkei:5,sellertradeinfo:5,semi:0,send:[0,4,5,7],sendandrec:5,sens:[5,7],sent:[4,5,7],separ:[5,6,7],sequenc:4,sequenti:5,serial:[3,7],serialis:[3,4,5,7],serializablewithkryo:7,serializeablewithkryo:7,server:6,servic:[4,5],servicehub:5,session:[4,5],sessionid:5,set:0,setter:7,settl:4,settlement:5,sever:[0,5,7],sha256:7,sha:0,share:[0,2,5,7],she:7,shortcut:3,shorthand:7,shot:4,should:[0,1,3,4,5,6,7],shouldn:5,show:[0,1,3,7,8],shown:7,shutdown:5,side:5,sig:[5,7],sign:[0,3,5,7],signatur:[0,3,5,6,7],signedwiretransact:[5,7],signer:7,signwith:[5,7],signwithecdsa:5,similar:[0,7],similarli:7,simpl:[4,5,7,8],simpler:3,simplest:5,simpli:[4,5,7],simplifi:[0,3,4,7],simultan:[4,5,7],singl:[0,5,7,8],singlemessagerecipi:[4,5],singleton:7,sit:4,site:6,size:[5,7],skeleton:5,slight:7,slightli:7,small:[0,3,5,7,8],smart:[2,3],smm:5,smooth:7,snippet:7,softwar:3,sold:[5,7,8],solv:[5,7],some:[0,3,4,5,6,7,8],somed:7,someon:[4,7],someprofit:[7,8],someth:[1,5,7],sometim:[0,4,7],somewhat:0,somewher:[7,8],sort:5,sound:[5,7,8],sourc:5,space:7,special:0,specif:[0,4,5,7,8],specifi:[3,4,7],speed:5,spend:[0,5,6,7],split:[3,7],spread:[4,5],squar:8,src:[7,8],stack:5,stage:[5,6,7],stai:0,standard:[2,3,7],standardis:[0,7],start:[0,2,5],state:[0,2,3,4],stateandref:[5,7],stateless:0,statemachinemanag:5,statement:[5,7],stateref:[0,5],statesoftyp:5,status:0,step:[5,6,7],still:[0,7],stock:0,stop:[4,5,6],storag:[0,6],store:[5,7],straightforward:[5,7],stream:5,string:[4,5,7],strong:3,structur:[0,1,3,5,7],studi:7,stuff:5,stx:5,style:4,subgraph:6,subgroup:0,submenu:1,successor:3,suffici:[2,4],suffix:7,suggest:7,suitabl:6,sum:7,sumcashbi:[5,7],sumcashornul:7,summaris:0,superclass:5,supertyp:7,support:[3,5,6,7],suppos:[5,7],sure:[5,7],surround:7,surviv:5,suspend:5,swap:5,symbol:1,synchronis:0,syntax:[3,7],system:[0,3,5,6,7],tab:1,tailor:2,take:[3,5,7,8],target:[0,3],targetrecipi:4,task:[0,5,6],techniqu:7,tell:4,tempor:6,temporarili:5,tempt:7,temptat:5,ten:7,term:[0,7],termin:5,terminolog:0,test:[1,2,3,4,5,6],test_tx_tim:7,testutil:7,testwithinmemorynetwork:4,text:1,than:[0,2,5,7,8],thei:[0,3,4,5,6,7],them:[3,4,5,7],themselv:[4,7],theori:2,therefor:[3,7],thesi:6,thi:[0,1,2,3,4,5,6,7,8],thing:[0,3,5,6,7],think:[1,5,7],third:[5,7],those:[4,7],though:[4,5,7],thought:[0,3],thread:[4,5,6],three:[3,7],threshold:7,through:[0,5,6,7],thrown:7,thu:7,tighten:7,tightli:5,time:[0,3,5,6,7,8],timelin:7,timestamp:[0,5,7],timestampedwiretransact:5,timestampingservic:5,todo:[5,7],togeth:[0,7],too:[5,7,8],took:5,tool:3,top:[5,7],topic:[4,5],topriv:5,tosignedtransact:[5,7],tostr:7,total:7,totimestampedtransact:5,trace:5,track:5,tracker:3,trade:[2,3],trade_top:5,traderequest:5,tradit:7,traffic:5,transact:[0,2,5,6,7,8],transactionforverif:7,transactiongroup:[5,7],transactiongroupdsl:8,transactiongroupfor:8,transactiongroupfortest:7,transfer:7,transit:[2,7],treat:7,tri:7,trick:5,tricki:5,truth:5,tsa:0,ture:0,turn:[5,7],tutori:[2,3,5,7],twice:3,two:[2,3,4],twopartytradeprotocol:5,twopartytradeprotocolimpl:5,txbit:5,txhash:[0,7],type:[0,5,7],typetobui:5,typic:[4,5,7],unacceptablepriceexcept:5,under:7,underscor:7,understand:[2,4],unexecut:7,unfinsish:5,unfortun:[5,7],unguess:5,uniqu:0,unit:[1,3,4,5,7,8],unless:[5,7],unlik:7,unnecessari:7,unpack:5,unread:5,unrecognis:7,unsaf:6,unserialis:5,unspent:0,unsupportedoperationexcept:7,until:[4,5],unus:4,unusu:7,unwieldi:7,updat:[0,1,5,7],upgrad:[1,2,6],upload:6,upon:7,url:1,usabl:3,usag:7,user:[0,3,4,5],util:[3,4,7],utxo:0,val:[4,5,7,8],valid:[0,5,6,7],valu:[3,7,8],vari:7,variabl:[5,7],variant:7,variou:[0,3,5,7],vendor:3,verbos:7,veri:[0,3,8],verif:[0,3],verifi:[0,2,3,5,6],verifysignatur:5,verifytoledgertransact:5,versa:5,version:[1,3,5,7],versu:5,via:[0,5],vice:5,virtual:[0,2],visibl:0,visualis:2,vote:6,wai:[0,3,5,6,7],wait:[1,4,5],wallet:[0,5,7],walletservic:5,wan:6,want:[1,4,5,7],websit:7,well:[0,3,5,7],were:[5,7],what:[0,2],whatev:5,when:[4,5,6,7],where:[0,4,5],wherea:7,whether:4,which:[0,3,4,5,7],whilst:[0,5,7],who:[3,4,5,7],whole:7,why:[0,3,5,7],wide:[4,7],wiki:[0,7],wikipedia:7,window:[0,8],wire:5,wirecommand:[5,7],wiretransact:5,wish:[4,5,6,7],within:0,withnewown:5,withoutown:7,won:[4,7],work:[0,1,2,3,4,5,7],world:[0,5,7],worn:7,worri:[3,5],worth:7,would:[3,4,5,7],wouldn:7,wrap:7,wrapper:5,write:[2,3,5],written:[0,3,7],wtx:5,www:1,yet:[0,7],yield:0,you:[0,1,3,4,5,7,8],your:[2,4,5],your_usernam:1,zero:7},titles:["Data model","Getting set up","Welcome to the R3 prototyping repository!","What’s included?","Networking and messaging","Protocol state machines","Roadmap","Writing a contract","Using the visualiser"],titleterms:{"class":7,"function":7,about:1,api:7,asset:7,base:7,bitcoin:0,buyer:5,check:7,command:7,commerci:7,comparison:0,complain:1,contract:[3,7],craft:7,data:0,descript:0,ethereum:0,fungibl:7,get:1,how:7,implement:[4,5],includ:3,intellij:1,interfac:4,introduct:5,kotlin:3,lack:1,machin:5,manag:5,memori:4,messag:4,model:0,network:4,non:7,orient:7,paper:7,parti:5,protocol:5,prototyp:2,repositori:2,requir:7,roadmap:6,sdk:1,seller:5,set:1,smart:7,start:7,state:[5,7],test:7,theori:5,trade:5,two:5,understand:7,verifi:7,visualis:8,welcom:2,what:3,without:1,write:7,your:7}})
\ No newline at end of file
diff --git a/docs/build/html/tutorial.html b/docs/build/html/tutorial.html
index 829a057d63..5216b2ce61 100644
--- a/docs/build/html/tutorial.html
+++ b/docs/build/html/tutorial.html
@@ -8,7 +8,7 @@
-
-
+