From 58c526c68bbc8e036eb98bc52f2e4f17385233d9 Mon Sep 17 00:00:00 2001
From: Mike Hearn
Date: Thu, 3 Dec 2015 11:54:17 +0000
Subject: [PATCH] Visualiser: reorganise, make it easier to invoke, document
it.
---
docs/build/html/_sources/index.txt | 1 +
docs/build/html/_sources/tutorial.txt | 9 +-
docs/build/html/genindex.html | 1 +
docs/build/html/index.html | 2 +
docs/build/html/search.html | 1 +
docs/build/html/searchindex.js | 2 +-
docs/build/html/tutorial.html | 17 +++-
docs/source/index.rst | 1 +
docs/source/tutorial.rst | 9 +-
docs/source/visualiser.png | Bin 0 -> 86049 bytes
docs/source/visualiser.rst | 78 ++++++++++++++
.../kotlin/contracts/CommercialPaperTests.kt | 96 +++++++++---------
src/test/kotlin/core/testutils/TestUtils.kt | 8 +-
.../core/visualiser/GraphStreamVisualiser.kt | 86 ----------------
.../core/visualiser/GroupToGraphConversion.kt | 15 ++-
src/test/resources/core/visualiser/graph.css | 8 --
16 files changed, 181 insertions(+), 153 deletions(-)
create mode 100644 docs/source/visualiser.png
create mode 100644 docs/source/visualiser.rst
delete mode 100644 src/test/kotlin/core/visualiser/GraphStreamVisualiser.kt
diff --git a/docs/build/html/_sources/index.txt b/docs/build/html/_sources/index.txt
index dd0530246b..fcdddd55ea 100644
--- a/docs/build/html/_sources/index.txt
+++ b/docs/build/html/_sources/index.txt
@@ -26,5 +26,6 @@ Read on to learn:
overview
getting-set-up
tutorial
+ visualiser
roadmap
diff --git a/docs/build/html/_sources/tutorial.txt b/docs/build/html/_sources/tutorial.txt
index 34811d1f5b..0bf75423fc 100644
--- a/docs/build/html/_sources/tutorial.txt
+++ b/docs/build/html/_sources/tutorial.txt
@@ -524,8 +524,13 @@ As this is JUnit, we must remember to annotate each test method with @Test. Let'
We are trying to check that it's not possible for just anyone to issue commercial paper in MegaCorp's name. That would
be bad!
-The ``transactionGroup`` function works the same way as the ``requireThat`` construct above. It is an example of what
-Kotlin calls a type safe builder, which you can read about in `the documentation for builders `_.
+The ``transactionGroup`` function works the same way as the ``requireThat`` construct above.
+
+.. note:: This DSL is an example of what Kotlin calls a type safe builder, which you can read about in `the
+ documentation for builders `_. You can mix and match
+ ordinary code inside such DSLs so please read the linked page to make sure you fully understand what they are capable
+ of.
+
The code block that follows it is run in the scope of a freshly created ``TransactionGroupForTest`` object, which assists
you with building little transaction graphs and verifying them as a whole. Here, our "group" only actually has a
single transaction in it, with a single output, no inputs, and an Issue command signed by ``DUMMY_PUBKEY_1`` which is just
diff --git a/docs/build/html/genindex.html b/docs/build/html/genindex.html
index 478322bcdf..b975d37e2d 100644
--- a/docs/build/html/genindex.html
+++ b/docs/build/html/genindex.html
@@ -85,6 +85,7 @@
diff --git a/docs/build/html/searchindex.js b/docs/build/html/searchindex.js
index 0555e88b50..a8cfb2aa2c 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","overview","roadmap","tutorial"],objects:{},objnames:{},objtypes:{},terms:{"8u45":0,"boolean":5,"break":5,"byte":3,"case":[3,5],"catch":0,"class":[],"default":[0,5],"final":[4,5],"function":[],"import":[0,3,5],"instanceof":5,"int":5,"long":5,"new":[1,3,5],"null":5,"public":[2,3,4,5],"return":5,"short":5,"static":5,"switch":5,"throw":5,"true":5,"try":[3,5],"var":5,"void":5,abil:[3,5],about:[3,4,5],abov:5,accept:[3,5],accident:5,account:3,action:5,actor:5,actual:5,adapt:4,add:5,addarg:5,addinputst:5,addit:5,addoutputst:5,address:[3,5],admin:[],administr:2,advanc:[],affection:5,after:[3,5],again:5,against:5,agre:[0,3],algorithm:[2,3,5],alic:5,alicegetsback:5,all:[0,3,4,5],allow:[3,4,5],almost:5,along:[3,5],alreadi:5,also:[0,3,5],alt:5,alter:5,although:[3,5],alwai:[3,5],amount:[2,4,5],ani:[3,5],annot:5,anoth:5,anyon:5,anyth:[3,5],anywher:5,apach:4,api:[],appear:[3,5],applic:3,approach:[3,4,5],arbitrari:[3,5],arbitrarili:3,aren:5,arg:5,argument:[3,5],around:[3,5],arrai:3,articl:3,artifact:5,ask:5,assembl:3,assert:5,asset:[],assist:5,associ:[3,5],assum:[4,5],atom:5,attach:[3,5],attempt:[1,3],audit:[3,4],authenticatedobject:5,author:3,auto:5,autom:5,automat:5,avail:5,await:[],back:[4,5],backend:4,background:3,backtick:5,bad:5,balanc:5,bankrupt:5,base:[],basic:[3,4,5],bear:5,becaus:5,becom:5,been:[3,5],befor:[3,5],begin:[3,5],behav:5,behaviour:2,behind:5,benefit:5,best:4,beta:0,better:[1,3,5],between:5,beyond:[3,5],big:5,bill:5,bind:3,bit:5,bitbucket:0,blah:[],blank:5,block:[1,3,4,5],bob:5,bond:5,bookkeep:[3,5],boost:2,both:[3,5],bring:4,brows:2,bug:2,build:[0,3,4,5],builder:5,built:5,bunch:5,bundl:3,busi:[3,5],bytecod:[3,5],c25c001e26e3:[],calcul:5,call:[3,5],caller:5,can:[0,2,3,4,5],cannot:[3,5],canon:4,capabl:4,carefulli:3,cash:[],cashkt:5,caus:5,center:5,certain:[3,5],cev:0,chain:[3,5],chang:[4,5],check:[],choos:[0,5],claim:[2,3,5],click:0,cluster:4,cmd:5,code:[0,2,3,4,5],codebas:5,collect:5,com:0,combin:[1,5],come:3,command:[],commerci:[],commercial_pap:5,commercialpap:[3,5],commercialpapertest:5,common:5,commonli:5,commun:0,companion:5,compar:3,compil:5,complet:[3,5],complex:[3,5],compos:[4,5],concept:[3,5],concern:5,confid:4,configur:0,conflict:[1,3,4],connect:5,consensu:4,consid:[3,5],consist:[2,3],constant:5,construct:5,constructor:5,consum:3,contain:[3,4,5],content:[3,5],contract:[],contractst:5,contractstateref:5,contrast:3,contribut:5,control:[0,3,5],conveni:5,convert:5,copi:5,core:[4,5],correct:5,correctli:[3,5],correspond:5,cost:5,could:5,coupl:[],cours:5,cover:[3,5],cp_program_id:5,craft:[],craftissu:5,craftmov:5,craftredeem:5,craftspend:5,creat:[3,5],creation:[1,5],crisp:5,crop:3,currenc:[3,5],current:[2,3,5],curv:2,dai:5,dashboard:4,data:[],databas:2,date:5,datetim:3,decid:[3,5],declar:5,defin:[],definit:5,delet:5,deliveri:5,demand:3,demonstr:4,denomin:3,depend:[0,5],deploy:4,deposit:3,depth:5,deriv:5,describ:[1,5],design:[1,3,5],desir:5,despit:5,destroi:[3,5],destroypaperatredempt:5,detail:[3,5],develop:3,didn:5,differ:[3,5],digit:[3,5],direct:5,directori:[0,5],dirti:5,disallow:5,disk:[],disprov:[1,4],disput:5,distinguish:5,distribut:[2,3,4],doc:5,doe:[2,3,5],doesn:[3,5],dollar:5,domain:5,don:[0,3,5],done:[3,5],doubl:[4,5],doubt:3,down:5,download:[0,4],drive:3,dsl:[4,5],due:[3,5],dummi:5,dummy_pubkey_1:5,duplic:5,durat:5,dynam:5,each:[3,5],earli:5,easi:5,easier:5,edit:0,editor:0,effect:5,either:5,element:3,ellipt:2,els:5,emb:5,embed:3,emit:5,empti:5,enabl:5,encount:3,end:[3,5],enforc:[3,4,5],engin:5,english:5,enough:[4,5],ensur:[3,5],enter:5,entir:[3,5],entiti:5,entri:[3,5],envisag:5,equal:5,equival:5,essenti:5,etc:5,even:[3,4,5],event:4,everi:[3,5],everyon:[],everyth:5,evolv:5,exact:5,exactli:[3,5],examin:[3,5],exampl:[4,5],excel:[],except:5,exchang:5,execut:[3,5],exercis:5,exist:[1,3,5],expect:[2,5],expectfailureoftx:5,experi:4,experiment:4,explain:5,explicitli:[3,5],explor:[0,1,2,4,5],expos:3,express:[3,4,5],extend:[3,5],extens:5,extern:2,extract:[3,5],extrem:5,face:[3,5],facevalu:5,fact:5,factor:3,fail:5,failur:5,fake:5,fals:5,familiar:[3,5],far:5,favour:5,featur:5,feel:5,few:[3,5],field:5,file:5,fill:5,filterisinst:5,financi:[1,3],find:3,firm:5,first:[0,1,4,5],firstli:5,fit:3,fix:[3,4],flesh:4,flexibl:3,flow:5,follow:[1,5],foo:[],fooutil:5,forget:5,form:5,formal:5,format:3,four:5,framework:[2,3],free:[3,4],freeform:5,fresh:5,freshli:5,from:[0,3,5],front:5,full:5,fulli:5,fun:5,fundament:[1,5],fungibl:[],futur:[1,3,4,5],gain:2,gather:5,gcd:3,gener:5,get:[],getclass:5,getcommand:5,getfacevalu:5,getinput:5,getissu:5,getlegalcontractrefer:5,getmaturityd:5,getoutput:5,getown:5,getprogramref:5,getsign:5,getter:5,gettim:5,getvalu:5,git:0,give:[3,4,5],given:[3,5],global:[3,5],goal:[1,2,3],gone:5,good:[4,5],gradl:[0,3],gradlew:0,graph:[3,5],green:0,group:[3,5],groupstat:5,guava:3,hack:3,had:5,hand:5,handl:[3,4,5],happen:5,hash:[2,3,5],hashcod:5,have:[3,4,5],haven:5,heart:5,heavili:3,held:5,hello:[],help:[],helper:5,her:5,here:[3,5],higher:[0,5],highlight:5,hit:0,hold:3,holder:5,hotspot:4,how:[],howev:5,html:[],http:[0,5],hypothesi:1,idea:[0,2,3,5],ideal:5,ident:[3,5],identifi:3,ietf:3,ignor:5,illegalargumentexcept:5,illegalstateexcept:5,imagin:5,immedi:5,immut:[3,5],implement:[1,2,3,4,5],implicitli:5,impos:5,improv:[3,4,5],includ:[],independ:5,index:[3,5],individu:5,industri:[1,3],infer:5,infix:5,inform:[3,5],inherit:5,initi:5,inoutgroup:5,input:[3,5],insid:[3,5],instal:0,instanc:[3,5],instant:5,instanti:3,instead:[2,3,5],institut:3,institutionrefer:5,instruct:5,insufficientbalanceexcept:5,integ:5,integr:2,intellij:[],intend:3,intent:5,interact:3,interest:5,interfac:[2,5],intern:[3,4,5],internet:3,interop:[3,5],interpret:[3,5],intersect:5,introduc:[4,5],introduct:3,invalid:5,invari:5,invok:[3,5],involv:5,ipsum:[],isaft:5,isempti:5,isn:5,issu:[3,4,5],issuanc:5,issuer:5,item:[0,5],iter:5,itself:[3,5],java:[3,5],javacommercialpap:5,javas:[],jdk:[0,5],jetbrain:[0,3],jira:[2,4],jmx:4,join:5,joint:5,junit:[3,5],just:[0,3,5],justifi:1,jvm:[3,4],kafka:4,keep:[3,5],kei:[2,3,4,5],key_mismatch_at_issu:5,keypair:5,keyword:5,kill:4,kind:[3,5],know:3,known:3,kotin:5,kotlin:[],kotlinlang:[],kryo:3,label:5,labori:5,languag:[1,3,5],later:[2,4,5],latest:0,latter:5,layer:4,lazi:4,lazili:5,lead:5,learn:[1,4],least:5,ledger:[1,3,5],legal:5,legalcontractrefer:5,less:5,let:[3,5],level:5,librari:[3,5],lifecycl:5,lift:[],like:[3,4,5],likewis:5,limit:[1,3,4,5],line:[0,5],list:5,liter:3,littl:5,load:5,local:[0,3],locat:5,lock:5,log:4,logic:[3,4,5],logo:0,look:5,loop:5,lorem:[],lose:4,machin:[1,3],made:1,mai:[3,4,5],main:5,maintain:3,make:[4,5],maker:3,manag:[4,5],mani:[2,3,5],map:5,mappabl:5,mark:5,marker:5,market:1,match:[3,5],matur:5,maturityd:5,maximis:3,mean:3,measur:[4,5],mechan:5,medium:[],meet:5,mega_corp:5,mega_corp_kei:5,megacorp:5,menu:0,mere:[3,5],merg:[3,5],messag:[3,4,5],method:5,might:5,mileston:[],mind:5,mine:3,minimum:[3,4],minu:5,minut:3,mismatch:[],miss:5,mix:4,mock:4,model:[],modif:[4,5],modifi:[0,5],modul:5,monei:5,monetari:5,monitor:4,more:[3,5],most:5,mostli:5,move:5,movement:5,much:[3,5],multi:[4,5],multipl:[3,5],must:[3,5],mutabl:[3,5],name:[3,5],natur:5,necessari:4,necessarili:[4,5],need:[1,3,5],neither:5,net:5,network:[2,4,5],neutral:2,never:[3,5],newown:5,next:[0,4,5],nicer:[],node:[3,4],non:[],normal:5,not_matured_at_redempt:5,note:[0,3,5],noth:[3,5],notic:5,notion:[2,3,5],notnul:5,now:[3,5],nugget:5,nullpublickei:5,number:5,obj:5,object:[3,5],observ:4,obsolet:2,obvious:5,occur:5,octskyward:[],odd:5,off:5,offic:[],often:[3,5],onc:[3,5],onli:[3,5],onto:5,opaqu:3,opaquebyt:5,open:0,openjdk:0,oper:5,opposit:5,option:5,oracl:0,order:[2,3,5],ordinari:[3,5],org:[0,5],orient:[],origin:5,other:[2,3,4,5],otherwis:5,our:[3,4,5],ourselv:5,out:[0,3,4,5],outpoint:3,output:[3,5],outsid:5,outstat:5,over:5,overrid:5,overview:[],own:[3,5],owned_bi:5,owner:[4,5],ownership:5,owningkei:5,p2p:4,packag:4,packet:3,page:4,pai:5,pair:3,paper:[],paper_1:5,parallel:5,paramet:5,parameteris:3,part:[3,4,5],parti:[3,5],partial:5,partialtransact:5,particip:[3,5],pass:5,past:5,path:5,pattern:[3,5],payment:5,peer:2,pend:4,penni:5,peopl:[3,5],perform:5,perhap:5,perman:[3,5],persist:2,perspect:5,piec:[3,5],place:[2,3,4,5],platform:[1,3,5],pleas:3,pluggabl:4,plugin:0,point:[3,5],pointer:3,pool:4,poor:3,popular:3,possibl:[1,3,5],potenti:[3,5],pound:5,power:[1,3],practic:[3,5],pre:5,preced:5,prepar:5,presenc:4,present:[1,4,5],press:5,pretti:5,prevent:5,primari:3,primit:5,privaci:5,privat:[3,5],probabl:[0,5],problem:5,process:5,produc:5,product:[1,2,5],profit:5,program:[3,5],programref:5,progress:[],project:0,proof:[1,3],propag:[1,5],properti:5,protocol:[2,3,5],prototyp:[],prove:[1,3,4,5],provid:[3,5],publickei:5,pull:0,pure:3,purpos:[3,5],put:5,qualiti:1,quantiti:[3,5],quickli:5,quit:5,random:3,rapid:2,rate:[],rather:[3,5],rational:3,read:[1,2,3,5],readabl:3,reader:5,readi:5,real:[2,5],realiti:5,realli:5,reason:5,reassign:5,receiv:[3,5],recipi:5,recognis:5,record:[4,5],redeem:[3,5],redempt:5,redemptiontim:5,ref:5,refer:[3,5],refin:3,reflect:5,registri:3,regular:[3,5],reissuanc:5,reject:5,rel:3,relat:5,relationship:5,releas:[],relev:3,reli:3,relianc:3,remain:5,rememb:5,remov:5,replac:5,replic:3,report:4,repositori:[],repres:[3,5],requir:[],requiresinglecommand:5,requirethat:5,resolut:[1,3,4],resolv:4,respect:5,rest:3,restart:0,result:[3,5],reveal:5,rfc:3,right:0,rigid:3,roadmap:[],roll:4,rollov:5,root:5,rout:4,rule:5,run:[0,3,5],runawai:4,runtim:4,safe:[3,4,5],sai:[3,5],sale:5,same:[3,5],sandbox:[2,3,4,5],satisfi:5,save:5,scala:[3,5],scalabl:[3,5],scene:5,scope:[3,5],screen:0,script:[3,5],seal:[],seamless:3,search:[0,5],second:5,secp256r1:2,section:5,secur:3,securehash:5,see:[4,5],seen:[4,5],select:[0,5],sell:5,semi:3,send:[3,5],sens:5,sent:5,separ:[4,5],serial:[2,5],serialis:[2,3,5],serializablewithkryo:5,serializeablewithkryo:5,server:4,set:[],setter:5,sever:[3,5],sha256:5,sha:3,share:[1,3,5],she:5,shortcut:2,shorthand:5,should:[0,2,3,4,5],show:[0,3,5],shown:5,sig:5,sign:[2,3,5],signatur:[2,3,4,5],signedwiretransact:5,signer:5,signwith:5,similar:[3,5],similarli:5,simpl:5,simpler:3,simpli:5,simplifi:[2,3,5],simultan:5,singl:[3,5],singleornul:[],singleton:5,site:4,size:5,slight:5,slightli:5,small:[2,3,5],smart:[],smooth:5,snippet:5,softwar:2,sold:5,solv:5,some:[2,3,4,5],somed:5,someon:5,someprofit:5,someth:5,sometim:[3,5],somewhat:3,somewher:5,sort:3,sound:5,space:5,specif:[3,5],specifi:[2,5],spend:[3,4,5],split:[3,5],src:5,stage:[4,5],stai:3,standard:[1,3,5],standardis:[3,5],start:[],state:[],stateandref:5,stateless:3,statement:5,stateref:3,step:[4,5],still:[3,5],stop:4,storag:[3,4],store:5,straightforward:5,string:5,strong:3,structur:[2,3,5],studi:5,sub:[],subgraph:4,subgroup:3,submenu:0,subsect:[],successor:3,suffici:1,suffix:5,suggest:5,suitabl:4,sum:5,sumcashbi:5,sumcashornul:5,summaris:3,supertyp:5,support:[3,4,5],suppos:5,sure:5,surround:5,swap:[],synchronis:3,syntax:[3,5],system:[2,3,4,5],tailor:1,take:[2,5],target:3,task:[3,4],teach:[],techniqu:5,tempor:4,tempt:5,ten:5,term:[3,5],terminolog:3,test:[],test_tx_tim:5,testutil:5,text:0,than:[1,3,5],thei:[3,4,5],them:[2,5],themselv:[3,5],therefor:[2,3,5],thesi:4,thi:[0,1,3,4,5],thing:[2,3,4,5],think:[0,5],third:5,those:5,though:5,thought:3,thread:4,three:5,threshold:5,through:[3,4,5],thrown:5,thu:5,tighten:5,time:[3,4,5],timelin:5,timestamp:[3,5],todo:5,togeth:[3,5],too:5,tool:3,top:5,tosignedtransact:5,tostr:5,total:5,tracker:2,trade:[3,5],tradit:5,transact:[1,3,4,5],transactionforverif:5,transactiongroup:5,transactiongroupfortest:5,transfer:5,transit:[1,5],treat:5,tri:5,tripl:3,tsa:3,tsp:3,ture:3,turn:5,twice:3,two:[2,3,4,5],txhash:[3,5],type:[3,5],typic:5,under:5,underscor:5,understand:[],unexecut:5,unfortun:5,uniqu:3,unit:[0,2,3,5],unless:5,unlik:5,unnecessari:5,unrecognis:5,unsaf:4,unspent:3,unsupportedoperationexcept:5,unusu:5,unwieldi:5,updat:[0,3,5],upgrad:[0,1,4],upload:4,upon:[3,5],url:0,usabl:3,usag:5,user:[2,3],util:[3,5],utxo:3,val:5,valid:[3,4,5],valu:[3,5],vari:5,variabl:5,variant:5,variou:[3,5],vendor:2,verbos:5,veri:3,verif:[2,3],verifi:[],version:[0,2,5],virtual:[1,3],visibl:3,vote:4,wai:[3,4,5],wait:0,wallet:[3,5],wan:4,want:[0,5],websit:5,well:[2,3,5],were:5,what:[],when:[4,5],where:3,wherea:5,which:[2,3,5],whilst:[3,5],who:[3,5],whole:5,why:[3,5],wide:5,wiki:[3,5],wikipedia:5,wirecommand:5,wish:[4,5],within:3,without:[],withoutown:5,won:5,work:[0,1,2,3,5],world:5,worn:5,worri:3,worth:5,would:[2,5],wouldn:5,wrap:5,write:[3,5],written:[3,5],www:0,xxxx:[],yeah:[],yet:[3,5],yield:3,you:[0,2,3,5],your:[],your_usernam:0,zero:5},titles:["Getting set up","Welcome to the R3 prototyping repository!","What’s included?","Overview","Roadmap","Tutorial"],titleterms:{"class":5,"function":5,api:5,asset:5,base:5,bitcoin:3,cash:[],check:5,command:5,commerci:5,comparison:3,contract:[3,5],craft:5,data:3,defin:[],document:[],ethereum:3,fungibl:5,get:0,how:5,includ:2,indic:[],intellij:0,kotlin:3,mileston:[],model:3,non:5,orient:5,overview:3,paper:5,playground:[],prototyp:1,repositori:1,requir:5,roadmap:4,set:0,smart:5,start:5,state:5,subsect:[],tabl:[],test:5,tutori:5,understand:5,verifi:5,welcom:1,what:2,without:0,your:5}})
\ No newline at end of file
+Search.setIndex({envversion:46,filenames:["getting-set-up","index","inthebox","overview","roadmap","tutorial","visualiser"],objects:{},objnames:{},objtypes:{},terms:{"8u45":0,"boolean":5,"break":5,"byte":3,"case":[3,5],"catch":0,"class":[],"default":[0,5],"final":[4,5],"function":[],"import":[0,3,5],"instanceof":5,"int":5,"long":5,"new":[1,3,5],"null":5,"public":[2,3,4,5],"return":5,"short":5,"static":5,"switch":5,"throw":5,"true":[5,6],"try":[3,5,6],"var":5,"void":5,abil:[3,5],about:[3,4,5],abov:5,accept:[3,5],accident:5,account:3,action:5,actor:5,actual:5,adapt:4,add:5,addarg:5,addinputst:5,addit:5,addoutputst:5,address:[3,5],admin:[],administr:2,advanc:[],affection:5,after:[3,5,6],again:5,against:5,agre:[0,3],algorithm:[2,3,5,6],alic:[5,6],alicegetsback:[5,6],all:[0,3,4,5],allow:[3,4,5],almost:5,along:[3,5],alreadi:5,also:[0,3,5],alt:5,alter:5,although:[3,5],alwai:[3,5],amount:[2,4,5],ani:[3,5],annot:5,anoth:5,anyon:5,anyth:[3,5],anywher:5,apach:4,api:[],appear:[3,5],applic:3,approach:[3,4,5],arbitrari:[3,5],arbitrarili:3,aren:5,arg:[5,6],argument:[3,5],around:[3,5,6],arrai:3,articl:3,artifact:5,ask:5,assembl:3,assert:5,asset:[],assist:[5,6],associ:[3,5],assum:[4,5],atom:5,attach:[3,5],attempt:[1,3],audit:[3,4],authenticatedobject:5,author:3,auto:5,autom:5,automat:5,avail:5,await:[],back:[4,5],backend:4,background:3,backtick:5,bad:5,balanc:5,bankrupt:5,base:[],basic:[3,4,5],bear:5,beauti:6,becaus:5,becom:5,been:[3,5],befor:[3,5],begin:[3,5],behav:5,behaviour:2,behind:5,benefit:5,best:4,beta:0,better:[1,3,5,6],between:5,beyond:[3,5],big:5,bill:5,bind:3,bit:[5,6],bitbucket:0,blah:[],blank:5,block:[1,3,4,5],blue:6,bob:5,bond:5,bookkeep:[3,5],boost:2,borrow:6,both:[3,5],briefli:6,bring:4,brows:2,bug:2,build:[0,3,4,5],builder:5,built:5,bunch:5,bundl:3,busi:[3,5],bytecod:[3,5],c25c001e26e3:[],calcul:5,call:[3,5],caller:5,can:[0,2,3,4,5,6],cannot:[3,5],canon:4,capabl:[4,5],carefulli:3,cash:[],cashkt:5,caus:5,center:5,certain:[3,5],cev:0,chain:[3,5],chang:[4,5,6],check:[],choos:[0,5],circl:6,claim:[2,3,5],click:[0,6],cluster:4,cmd:5,code:[0,2,3,4,5],codebas:5,collect:5,com:0,combin:[1,5],come:3,command:[],commerci:[],commercial_pap:5,commercialpap:[3,5,6],commercialpapertest:[5,6],common:5,commonli:5,commun:0,companion:5,compar:3,compil:5,complet:[3,5],complex:[3,5],compos:[4,5],concept:[3,5],concern:5,confid:4,configur:0,conflict:[1,3,4],connect:5,consensu:4,consid:[3,5],consist:[2,3],constant:5,construct:5,constructor:5,consum:3,contain:[3,4,5],content:[3,5],contract:[],contractst:[5,6],contractstateref:5,contrast:3,contribut:5,control:[0,3,5],conveni:5,convert:5,copi:5,core:[4,5],correct:5,correctli:[3,5],correspond:5,cost:5,could:5,coupl:[],cours:5,cover:[3,5],cp_program_id:5,craft:[],craftissu:5,craftmov:5,craftredeem:5,craftspend:5,creat:[3,5],creation:[1,5],crisp:5,crop:3,currenc:[3,5],current:[2,3,5,6],curv:2,dai:[5,6],dashboard:4,data:[],databas:2,date:5,datetim:3,decid:[3,5],declar:5,defin:[],definit:5,delet:5,deliveri:5,demand:3,demonstr:4,denomin:3,depend:[0,5],deploy:4,deposit:3,depth:5,deriv:5,describ:[1,5],design:[1,3,5],desir:5,despit:5,destroi:[3,5],destroypaperatredempt:[5,6],detail:[3,5],develop:3,diagram:6,diamond:6,didn:5,differ:[3,5],digit:[3,5],direct:5,directori:[0,5],dirti:5,disallow:5,disk:[],disprov:[1,4],disput:5,distinguish:5,distribut:[2,3,4],doc:5,doe:[2,3,5],doesn:[3,5],dollar:[5,6],domain:[5,6],don:[0,3,5],done:[3,5],doubl:[4,5],doubt:3,down:5,download:[0,4],drag:6,drive:3,dsl:[4,5,6],due:[3,5],dummi:5,dummy_pubkey_1:5,duplic:5,durat:5,dynam:5,each:[3,5],earli:[5,6],easi:5,easier:5,edit:0,editor:0,effect:5,either:5,element:3,ellipt:2,els:5,emb:5,embed:3,emit:5,empti:5,enabl:5,encount:3,end:[3,5],enforc:[3,4,5],engin:5,english:5,enough:[4,5],ensur:[3,5],enter:5,entir:[3,5],entiti:5,entri:[3,5],envisag:5,equal:5,equival:5,especi:6,essenti:5,etc:5,even:[3,4,5],event:4,everi:[3,5],everyon:[],everyth:5,evolv:5,exact:5,exactli:[3,5],examin:[3,5],exampl:[4,5,6],excel:[],except:5,exchang:5,execut:[3,5],exercis:5,exist:[1,3,5],expect:[2,5],expectfailureoftx:5,experi:4,experiment:4,explain:5,explicitli:[3,5],explor:[0,1,2,4,5],expos:3,express:[3,4,5],extend:[3,5],extens:5,extern:2,extract:[3,5],extrem:5,face:[3,5,6],facevalu:5,fact:5,factor:3,fail:5,failur:5,fake:5,fals:5,familiar:[3,5],far:5,favour:5,featur:[5,6],feel:5,few:[3,5],field:[5,6],file:5,fill:5,filterisinst:5,financi:[1,3],find:3,firm:5,first:[0,1,4,5],firstli:5,fit:3,fix:[3,4],flesh:4,flexibl:3,flow:5,follow:[1,5,6],foo:[],fooutil:5,forget:5,form:5,formal:5,format:3,four:5,framework:[2,3,6],free:[3,4],freeform:5,fresh:5,freshli:5,from:[0,3,5,6],front:5,full:5,fulli:5,fun:5,fundament:[1,5],fungibl:[],futur:[1,3,4,5,6],gain:2,gather:5,gcd:3,gener:5,get:[],getclass:5,getcommand:5,getfacevalu:5,getinput:5,getissu:5,getlegalcontractrefer:5,getmaturityd:5,getoutput:5,getown:5,getprogramref:5,getsign:5,getter:5,gettim:5,getvalu:5,git:0,give:[3,4,5],given:[3,5],global:[3,5],goal:[1,2,3],gone:5,good:[4,5,6],gradl:[0,3],gradlew:0,graph:[3,5,6],green:0,group:[3,5,6],groupstat:5,guava:3,hack:3,had:5,hand:5,handl:[3,4,5],happen:5,hash:[2,3,5],hashcod:5,have:[3,4,5],haven:5,heart:5,heavili:3,held:5,hello:[],help:[],helper:5,her:[5,6],here:[3,5,6],higher:[0,5],highlight:5,hit:0,hold:3,holder:5,hotspot:4,how:[],howev:5,html:[],http:[0,5],hypothesi:1,idea:[0,2,3,5],ideal:5,ident:[3,5],identifi:3,ietf:3,ignor:5,illegalargumentexcept:5,illegalstateexcept:5,imag:[],imagin:5,immedi:5,immut:[3,5],implement:[1,2,3,4,5],implicitli:5,impos:5,improv:[3,4,5,6],includ:[],independ:5,index:[3,5],individu:5,industri:[1,3],infer:5,infix:5,inform:[3,5],inherit:5,initi:5,inoutgroup:5,input:[3,5,6],insid:[3,5],instal:0,instanc:[3,5],instant:5,instanti:3,instead:[2,3,5],institut:3,institutionrefer:5,instruct:5,insufficientbalanceexcept:5,integ:5,integr:[2,6],intellij:[],intend:3,intent:[5,6],interact:3,interest:[5,6],interfac:[2,5],intern:[3,4,5],internet:3,interop:[3,5],interpret:[3,5],intersect:5,introduc:[4,5],introduct:3,invalid:5,invari:5,invok:[3,5],involv:5,ipsum:[],isaft:5,isempti:5,isn:5,issu:[3,4,5,6],issuanc:[5,6],issuer:5,item:[0,5],iter:5,itself:[3,5],java:[3,5],javacommercialpap:5,javas:[],jdk:[0,5],jetbrain:[0,3],jira:[2,4],jmx:4,join:5,joint:5,junit:[3,5],just:[0,3,5],justifi:1,jvm:[3,4],kafka:4,keep:[3,5,6],kei:[2,3,4,5],key_mismatch_at_issu:5,keypair:5,keyword:5,kill:4,kind:[3,5],know:3,known:3,kotin:5,kotlin:[],kotlinlang:[],kryo:3,label:[5,6],labori:5,languag:[1,3,5,6],later:[2,4,5],latest:0,latter:5,layer:4,layout:6,lazi:4,lazili:5,lead:5,learn:[1,4],least:5,ledger:[1,3,5,6],legal:5,legalcontractrefer:5,less:[5,6],let:[3,5],level:5,librari:[3,5],lifecycl:[5,6],lift:[],like:[3,4,5],likewis:5,limit:[1,3,4,5],line:[0,5],link:5,list:5,liter:3,littl:5,load:5,local:[0,3],locat:5,lock:5,log:4,logic:[3,4,5],logo:0,look:5,loop:5,lorem:[],lose:4,machin:[1,3],made:1,mai:[3,4,5],main:[5,6],maintain:3,make:[4,5],maker:3,manag:[4,5],mani:[2,3,5],map:5,mappabl:5,mark:5,marker:5,market:1,match:[3,5],matur:5,maturityd:5,maximis:3,mean:3,measur:[4,5],mechan:5,medium:[],meet:5,mega_corp:5,mega_corp_kei:5,mega_corp_pubkei:6,megacorp:[5,6],menu:0,mere:[3,5],merg:[3,5],messag:[3,4,5],method:[5,6],might:5,mileston:[],mind:5,mine:3,minimum:[3,4],minu:5,minut:3,mismatch:[],miss:5,mix:[4,5],mock:4,model:[],modif:[4,5],modifi:[0,5],modul:5,monei:5,monetari:5,monitor:4,more:[3,5],most:5,mostli:5,move:[5,6],movement:5,much:[3,5],multi:[4,5],multipl:[3,5],must:[3,5],mutabl:[3,5],name:[3,5],natur:5,necessari:4,necessarili:[4,5],need:[1,3,5],neither:5,net:[5,6],network:[2,4,5],neutral:2,never:[3,5],newown:5,next:[0,4,5],nicer:[],node:[3,4,6],non:[],normal:5,not_matured_at_redempt:5,note:[0,3,5],noth:[3,5],notic:5,notion:[2,3,5],notnul:5,now:[3,5,6],nugget:5,nullpublickei:5,number:5,obj:5,object:[3,5,6],observ:4,obsolet:2,obtain:6,obvious:5,occur:5,octskyward:[],odd:5,off:[5,6],offic:[],often:[3,5],onc:[3,5],onli:[3,5,6],onto:[5,6],opaqu:3,opaquebyt:5,open:[0,6],openjdk:0,oper:5,opposit:5,option:5,oracl:0,order:[2,3,5,6],ordinari:[3,5],org:[0,5],orient:[],origin:5,other:[2,3,4,5],otherwis:5,our:[3,4,5],ourselv:5,out:[0,3,4,5],outpoint:3,output:[3,5,6],outsid:5,outstat:5,over:5,overrid:5,overview:[],own:[3,5,6],owned_bi:5,owner:[4,5],ownership:5,owningkei:5,p2p:4,packag:4,packet:3,page:[4,5],pai:[5,6],pair:3,paper:[],paper_1:[5,6],parallel:5,paramet:5,parameteris:3,part:[3,4,5],parti:[3,5],partial:5,partialtransact:5,particip:[3,5],pass:[5,6],past:5,path:5,pattern:[3,5],payment:[5,6],peer:2,pend:4,penni:5,peopl:[3,5],perform:5,perhap:5,perman:[3,5],persist:2,perspect:5,piec:[3,5],place:[2,3,4,5],platform:[1,3,5],pleas:[3,5],pluggabl:4,plugin:0,png:[],point:[3,5],pointer:3,pool:4,poor:3,popular:3,possibl:[1,3,5],potenti:[3,5],pound:5,power:[1,3],practic:[3,5],pre:5,preced:5,prepar:5,presenc:4,present:[1,4,5],press:5,pretti:5,prevent:5,primari:3,primit:5,privaci:5,privat:[3,5],probabl:[0,5],problem:5,process:5,produc:[5,6],product:[1,2,5],profit:[5,6],program:[3,5],programref:5,progress:[],project:0,proof:[1,3],propag:[1,5],properti:5,protocol:[2,3,5],prototyp:[],prove:[1,3,4,5],provid:[3,5],publickei:5,pull:0,pure:3,purpos:[3,5],put:5,qualiti:1,quantiti:[3,5],quickli:5,quit:5,random:3,rapid:2,rate:[],rather:[3,5],rational:3,read:[1,2,3,5],readabl:3,reader:5,readi:5,real:[2,5],realiti:5,realli:5,reason:5,reassign:5,receiv:[3,5,6],recipi:5,recognis:5,record:[4,5],redeem:[3,5,6],redempt:[5,6],redemptiontim:[5,6],ref:5,refer:[3,5],refin:3,reflect:5,registri:3,regular:[3,5],reissuanc:5,reject:5,rel:3,relat:5,relationship:5,releas:6,relev:3,reli:3,relianc:3,remain:[5,6],rememb:5,remov:5,render:6,replac:5,replic:3,report:4,repositori:[],repres:[3,5],requir:[],requiresinglecommand:5,requirethat:5,resolut:[1,3,4],resolv:4,respect:5,rest:3,restart:0,result:[3,5],reveal:5,rfc:3,right:0,rigid:3,roadmap:[],roll:4,rollov:5,root:[5,6],rout:4,rule:5,run:[0,3,5],runawai:4,runtim:4,safe:[3,4,5],sai:[3,5],sale:5,same:[3,5,6],sandbox:[2,3,4,5],satisfi:5,save:5,scala:[3,5],scalabl:[3,5],scene:5,scope:[3,5],screen:0,script:[3,5],seal:[],seamless:3,search:[0,5],second:5,secp256r1:2,section:5,secur:3,securehash:5,see:[4,5],seen:[4,5,6],select:[0,5],sell:5,semi:3,send:[3,5],sens:5,sent:5,separ:[4,5],serial:[2,5],serialis:[2,3,5],serializablewithkryo:5,serializeablewithkryo:5,server:4,set:[],setter:5,sever:[3,5],sha256:5,sha:3,share:[1,3,5],she:5,shortcut:2,shorthand:5,should:[0,2,3,4,5],show:[0,3,5,6],shown:5,sig:5,sign:[2,3,5],signatur:[2,3,4,5],signedwiretransact:5,signer:5,signwith:5,similar:[3,5],similarli:5,simpl:[5,6],simpler:3,simpli:5,simplifi:[2,3,5],simultan:5,singl:[3,5,6],singleornul:[],singleton:5,site:4,size:5,slight:5,slightli:5,small:[2,3,5,6],smart:[],smooth:5,snippet:5,softwar:2,sold:[5,6],solv:5,some:[2,3,4,5,6],somed:5,someon:5,someprofit:[5,6],someth:5,sometim:[3,5],somewhat:3,somewher:[5,6],sort:3,sound:[5,6],space:5,specif:[3,5,6],specifi:[2,5],spend:[3,4,5],split:[3,5],squar:6,src:[5,6],stage:[4,5],stai:3,standard:[1,3,5],standardis:[3,5],start:[],state:[],stateandref:5,stateless:3,statement:5,stateref:3,step:[4,5],still:[3,5],stop:4,storag:[3,4],store:5,straightforward:5,string:5,strong:3,structur:[2,3,5],studi:5,sub:[],subgraph:4,subgroup:3,submenu:0,subsect:[],successor:3,suffici:1,suffix:5,suggest:5,suitabl:4,sum:5,sumcashbi:5,sumcashornul:5,summaris:3,supertyp:5,support:[3,4,5],suppos:5,sure:5,surround:5,swap:[],synchronis:3,syntax:[3,5],system:[2,3,4,5],tailor:1,take:[2,5,6],target:3,task:[3,4],teach:[],techniqu:5,tempor:4,tempt:5,ten:5,term:[3,5],terminolog:3,test:[],test_tx_tim:5,testutil:5,text:0,than:[1,3,5,6],thei:[3,4,5],them:[2,5],themselv:[3,5],therefor:[2,3,5],thesi:4,thi:[0,1,3,4,5,6],thing:[2,3,4,5],think:[0,5],third:5,those:5,though:5,thought:3,thread:4,three:5,threshold:5,through:[3,4,5],thrown:5,thu:5,tighten:5,time:[3,4,5,6],timelin:5,timestamp:[3,5],todo:5,togeth:[3,5],too:[5,6],tool:3,top:5,tosignedtransact:5,tostr:5,total:5,tracker:2,trade:[3,5,6],tradit:5,transact:[1,3,4,5,6],transactionforverif:5,transactiongroup:5,transactiongroupdsl:6,transactiongroupfor:6,transactiongroupfortest:5,transfer:5,transit:[1,5],treat:5,tri:5,tripl:3,tsa:3,tsp:3,ture:3,turn:5,twice:3,two:[2,3,4,5],txhash:[3,5],type:[3,5],typic:5,under:5,underscor:5,understand:[],unexecut:5,unfortun:5,uniqu:3,unit:[0,2,3,5,6],unless:5,unlik:5,unnecessari:5,unrecognis:5,unsaf:4,unspent:3,unsupportedoperationexcept:5,unusu:5,unwieldi:5,updat:[0,3,5],upgrad:[0,1,4],upload:4,upon:[3,5],url:0,usabl:3,usag:5,user:[2,3],util:[3,5],utxo:3,val:[5,6],valid:[3,4,5],valu:[3,5,6],vari:5,variabl:5,variant:5,variou:[3,5],vendor:2,verbos:5,veri:[3,6],verif:[2,3],verifi:[],version:[0,2,5],virtual:[1,3],visibl:3,visualis:[],vote:4,wai:[3,4,5],wait:0,wallet:[3,5],wan:4,want:[0,5],websit:5,well:[2,3,5],were:5,what:[],when:[4,5],where:3,wherea:5,which:[2,3,5],whilst:[3,5],who:[3,5],whole:5,why:[3,5],wide:5,wiki:[3,5],wikipedia:5,window:6,wirecommand:5,wish:[4,5],within:3,without:[],withoutown:5,won:5,work:[0,1,2,3,5],world:5,worn:5,worri:3,worth:5,would:[2,5],wouldn:5,wrap:5,write:[3,5],written:[3,5],www:0,xxxx:[],yeah:[],yet:[3,5],yield:3,you:[0,2,3,5,6],your:[],your_usernam:0,zero:5},titles:["Getting set up","Welcome to the R3 prototyping repository!","What’s included?","Overview","Roadmap","Tutorial","Using the visualiser"],titleterms:{"class":5,"function":5,api:5,asset:5,base:5,bitcoin:3,cash:[],check:5,command:5,commerci:5,comparison:3,contract:[3,5],craft:5,data:3,defin:[],document:[],ethereum:3,fungibl:5,get:0,how:5,includ:2,indic:[],intellij:0,kotlin:3,mileston:[],model:3,non:5,orient:5,overview:3,paper:5,playground:[],prototyp:1,repositori:1,requir:5,roadmap:4,set:0,smart:5,start:5,state:5,subsect:[],tabl:[],test:5,tutori:5,understand:5,verifi:5,visualis:6,welcom:1,what:2,without:0,your:5}})
\ No newline at end of file
diff --git a/docs/build/html/tutorial.html b/docs/build/html/tutorial.html
index 19ab3cc588..1170cb245d 100644
--- a/docs/build/html/tutorial.html
+++ b/docs/build/html/tutorial.html
@@ -31,7 +31,7 @@
-
+
@@ -97,6 +97,7 @@
@@ -608,9 +609,15 @@ and returns a java.time.Duratio
As this is JUnit, we must remember to annotate each test method with @Test. Let’s examine the contents of the first test.
We are trying to check that it’s not possible for just anyone to issue commercial paper in MegaCorp’s name. That would
be bad!
-
The transactionGroup function works the same way as the requireThat construct above. It is an example of what
-Kotlin calls a type safe builder, which you can read about in the documentation for builders.
-The code block that follows it is run in the scope of a freshly created TransactionGroupForTest object, which assists
+
The transactionGroup function works the same way as the requireThat construct above.
+
+
Note
+
This DSL is an example of what Kotlin calls a type safe builder, which you can read about in the
+documentation for builders. You can mix and match
+ordinary code inside such DSLs so please read the linked page to make sure you fully understand what they are capable
+of.
+
+
The code block that follows it is run in the scope of a freshly created TransactionGroupForTest object, which assists
you with building little transaction graphs and verifying them as a whole. Here, our “group” only actually has a
single transaction in it, with a single output, no inputs, and an Issue command signed by DUMMY_PUBKEY_1 which is just
an arbitrary public key. As the paper claims to be issued by MEGA_CORP, this doesn’t match and should cause a
@@ -850,7 +857,7 @@ be implemented once in a separate contract, with the controlling data being held