@@ -737,26 +737,40 @@ mod tests {
737737 let mut reachability = MemoryReachabilityStore :: new ( ) ;
738738 let mut relations = MemoryRelationsStore :: new ( ) ;
739739 // Global GD store. To be used for global coloring:
740- let ghostdag_store = Arc :: new ( MemoryGhostdagStore :: new ( ) ) ;
741- let headers_store = Arc :: new ( MemoryHeaderStore :: new ( ghostdag_store. clone ( ) ) ) ;
742- let dagknight_store = Arc :: new ( MemoryDagknightStore :: new ( dk_map) ) ;
743-
744- let gd_manager = GhostdagManager :: new (
740+ let coloring_ghostdag_store = Arc :: new ( MemoryGhostdagStore :: new ( ) ) ;
741+ let headers_store = Arc :: new ( MemoryHeaderStore :: new ( coloring_ghostdag_store. clone ( ) ) ) ;
742+ let coloring_gd_manager = GhostdagManager :: new (
745743 genesis_hash,
746744 ForkedParam :: new_const ( k_max) ,
747- ghostdag_store . clone ( ) ,
745+ coloring_ghostdag_store . clone ( ) ,
748746 relations. clone ( ) ,
749747 headers_store. clone ( ) ,
750748 reachability. clone ( ) ,
751749 ) ;
752750
753- ghostdag_store . insert ( genesis_hash, Arc :: new ( gd_manager . genesis_ghostdag_data ( ) ) ) . unwrap ( ) ;
751+ coloring_ghostdag_store . insert ( genesis_hash, Arc :: new ( coloring_gd_manager . genesis_ghostdag_data ( ) ) ) . unwrap ( ) ;
754752
753+ // Global GD store. To be used for topology:
754+ let topology_ghostdag_store = Arc :: new ( MemoryGhostdagStore :: new ( ) ) ;
755+ let topology_headers_store = Arc :: new ( MemoryHeaderStore :: new ( topology_ghostdag_store. clone ( ) ) ) ;
756+
757+ let topology_gd_manager = GhostdagManager :: new (
758+ genesis_hash,
759+ ForkedParam :: new_const ( k_max) ,
760+ topology_ghostdag_store. clone ( ) ,
761+ relations. clone ( ) ,
762+ topology_headers_store. clone ( ) ,
763+ reachability. clone ( ) ,
764+ ) ;
765+
766+ topology_ghostdag_store. insert ( genesis_hash, Arc :: new ( topology_gd_manager. genesis_ghostdag_data ( ) ) ) . unwrap ( ) ;
767+
768+ let dagknight_store = Arc :: new ( MemoryDagknightStore :: new ( dk_map) ) ;
755769 let relations_stores = vec ! [ relations. clone( ) ] ;
756770 let dk_executor = DagknightExecutor {
757771 genesis_hash,
758772 dagknight_store : dagknight_store. clone ( ) ,
759- ghostdag_store : ghostdag_store . clone ( ) ,
773+ ghostdag_store : topology_ghostdag_store . clone ( ) ,
760774 headers_store : headers_store. clone ( ) ,
761775 reachability_service : MTReachabilityService :: new ( Arc :: new ( RwLock :: new ( reachability. clone ( ) ) ) ) ,
762776 relations_stores : Arc :: new ( RwLock :: new ( relations_stores) ) ,
@@ -782,24 +796,28 @@ mod tests {
782796
783797 let new_block = DagBlock :: new ( block_hash, parent_hashes) ;
784798
799+ // Pure GD for blue_work:
800+ let topology_gd_data = topology_gd_manager. ghostdag ( & new_block. parents ) ;
801+ topology_ghostdag_store. insert ( block_hash, Arc :: new ( topology_gd_data) ) . unwrap ( ) ;
802+
785803 let selected_parent = dk_executor. dagknight ( & new_block. parents ) ;
786- // let selected_parent = dk_data.selected_parent;
787- let gd_data = gd_manager. ghostdag_customized ( & new_block. parents , None , Some ( selected_parent) ) ;
804+
805+ // Maintain global coloring based on DK megachain selected parent:
806+ let gd_data = coloring_gd_manager. ghostdag_customized ( & new_block. parents , None , Some ( selected_parent) ) ;
807+ coloring_ghostdag_store. insert ( block_hash, Arc :: new ( gd_data) ) . unwrap ( ) ;
788808
789809 builder. add_block_with_selected_parent ( new_block, selected_parent) ;
790- ghostdag_store. insert ( block_hash, Arc :: new ( gd_data) ) . unwrap ( ) ;
791- // dagknight_store.insert(block_hash, Arc::new(dk_data)).unwrap();
792810 }
793811
794812 let tip_hashes = tips. iter ( ) . copied ( ) . collect_vec ( ) ;
795813 let virtual_hash = Hash :: from_u64_word ( plan. blocks . last ( ) . unwrap ( ) . 0 + 1 ) ;
796814 let virtual_block = DagBlock :: new ( virtual_hash, tip_hashes. clone ( ) ) ;
797815 let selected_parent = dk_executor. dagknight ( & virtual_block. parents . clone ( ) ) ;
798816 // let selected_parent = dk_data.selected_parent;
799- let gd_data = gd_manager . ghostdag_customized ( & tip_hashes, None , Some ( selected_parent) ) ;
817+ let gd_data = coloring_gd_manager . ghostdag_customized ( & tip_hashes, None , Some ( selected_parent) ) ;
800818 println ! ( "virtual_block: {} | sp: {}" , virtual_block. hash, selected_parent) ;
801819 builder. add_block_with_selected_parent ( virtual_block, selected_parent) ;
802- ghostdag_store . insert ( virtual_hash, Arc :: new ( gd_data) ) . unwrap ( ) ;
820+ coloring_ghostdag_store . insert ( virtual_hash, Arc :: new ( gd_data) ) . unwrap ( ) ;
803821
804822 // let blues = BlockHashSet::new();
805823 let mut reds = BlockHashSet :: new ( ) ;
@@ -810,7 +828,7 @@ mod tests {
810828 chain_nodes. insert ( curr) ;
811829
812830 while curr != genesis. hash {
813- let mergeset_reds = ghostdag_store . get_mergeset_reds ( curr) . unwrap ( ) ;
831+ let mergeset_reds = coloring_ghostdag_store . get_mergeset_reds ( curr) . unwrap ( ) ;
814832 mergeset_reds. iter ( ) . for_each ( |mrr| {
815833 reds. insert ( * mrr) ;
816834 } ) ;
0 commit comments