Skip to content
Snippets Groups Projects
Commit 35bffcda authored by Hans Moog's avatar Hans Moog
Browse files

Feat: aggregatin aggregated realities is shown correctly

parent 6c0a0f02
No related branches found
No related tags found
No related merge requests found
...@@ -152,32 +152,23 @@ func spend(ledgerState *LedgerState, transferOutputReferences ...*TransferOutput ...@@ -152,32 +152,23 @@ func spend(ledgerState *LedgerState, transferOutputReferences ...*TransferOutput
transferHash := generateRandomTransferHash() transferHash := generateRandomTransferHash()
addressHash := generateRandomAddressHash() addressHash := generateRandomAddressHash()
transfer := NewTransfer(transferHash).AddOutput( totalInputBalance := uint64(0)
addressHash, NewColoredBalance(iota_, uint64(len(transferOutputReferences))*1337),
)
for _, transferOutputReference := range transferOutputReferences {
transfer.AddInput(transferOutputReference)
}
if err := ledgerState.BookTransfer(transfer); err != nil {
panic(err)
}
result = NewTransferOutputReference(transferHash, addressHash)
return transfer := NewTransfer(transferHash)
} for _, transferOutputReference := range transferOutputReferences {
ledgerState.GetTransferOutput(transferOutputReference).Consume(func(object objectstorage.StorableObject) {
transferOutput := object.(*TransferOutput)
func spend2(ledgerState *LedgerState, transferOutputReferences ...*TransferOutputReference) (result *TransferOutputReference) { for _, coloredBalance := range transferOutput.GetBalances() {
transferHash := generateRandomTransferHash() totalInputBalance += coloredBalance.GetValue()
addressHash := generateRandomAddressHash() }
})
transfer := NewTransfer(transferHash).AddOutput(
addressHash, NewColoredBalance(iota_, uint64(len(transferOutputReferences))*2*1337),
)
for _, transferOutputReference := range transferOutputReferences {
transfer.AddInput(transferOutputReference) transfer.AddInput(transferOutputReference)
} }
transfer.AddOutput(
addressHash, NewColoredBalance(iota_, totalInputBalance),
)
if err := ledgerState.BookTransfer(transfer); err != nil { if err := ledgerState.BookTransfer(transfer); err != nil {
panic(err) panic(err)
...@@ -195,7 +186,7 @@ func TestElevateAggregatedReality(t *testing.T) { ...@@ -195,7 +186,7 @@ func TestElevateAggregatedReality(t *testing.T) {
doubleSpentOutputs1 := doubleSpend(ledgerState, transferOutputs[0]) doubleSpentOutputs1 := doubleSpend(ledgerState, transferOutputs[0])
doubleSpentOutputs2 := doubleSpend(ledgerState, transferOutputs[1]) doubleSpentOutputs2 := doubleSpend(ledgerState, transferOutputs[1])
normalSpend := spend(ledgerState, transferOutputs[2]) normalSpend := spend(ledgerState, transferOutputs[2])
_ = doubleSpend(ledgerState, normalSpend) doubleSpentOutputs3 := doubleSpend(ledgerState, normalSpend)
// send funds from one of the double spends further // send funds from one of the double spends further
spentInput := spend(ledgerState, doubleSpentOutputs1[1]) spentInput := spend(ledgerState, doubleSpentOutputs1[1])
...@@ -207,10 +198,13 @@ func TestElevateAggregatedReality(t *testing.T) { ...@@ -207,10 +198,13 @@ func TestElevateAggregatedReality(t *testing.T) {
spend(ledgerState, doubleSpentOutputs1[1]) spend(ledgerState, doubleSpentOutputs1[1])
// double spend funds of aggregated reality // double spend funds of aggregated reality
spend(ledgerState, spentInput, doubleSpentOutputs2[0]) //spend(ledgerState, spentInput, doubleSpentOutputs2[0])
// spend funds of conflict in aggregated reality further // spend funds of conflict in aggregated reality further
spend2(ledgerState, outputOfAggregatedReality) //lastOutputOfAggregatedReality := spend(ledgerState, outputOfAggregatedReality)
//spend(ledgerState, lastOutputOfAggregatedReality, doubleSpentOutputs3[1])
spend(ledgerState, spend(ledgerState, spend(ledgerState, outputOfAggregatedReality, spend(ledgerState, doubleSpentOutputs3[1]))))
time.Sleep(1000 * time.Millisecond) time.Sleep(1000 * time.Millisecond)
......
packages/ledgerstate/outputs.png

49.4 KiB | W: | H:

packages/ledgerstate/outputs.png

54 KiB | W: | H:

packages/ledgerstate/outputs.png
packages/ledgerstate/outputs.png
packages/ledgerstate/outputs.png
packages/ledgerstate/outputs.png
  • 2-up
  • Swipe
  • Onion skin
packages/ledgerstate/realities.png

78.4 KiB | W: | H:

packages/ledgerstate/realities.png

78.1 KiB | W: | H:

packages/ledgerstate/realities.png
packages/ledgerstate/realities.png
packages/ledgerstate/realities.png
packages/ledgerstate/realities.png
  • 2-up
  • Swipe
  • Onion skin
...@@ -127,6 +127,33 @@ func (reality *Reality) GetParentRealities() map[RealityId]*objectstorage.Cached ...@@ -127,6 +127,33 @@ func (reality *Reality) GetParentRealities() map[RealityId]*objectstorage.Cached
return parentRealities return parentRealities
} }
// Returns
func (reality *Reality) GetParentConflictRealities() map[RealityId]*objectstorage.CachedObject {
if !reality.IsAggregated() {
return reality.GetParentRealities()
} else {
parentConflictRealities := make(map[RealityId]*objectstorage.CachedObject)
reality.collectParentConflictRealities(parentConflictRealities)
return parentConflictRealities
}
}
func (reality *Reality) collectParentConflictRealities(parentConflictRealities map[RealityId]*objectstorage.CachedObject) {
for realityId, cachedParentReality := range reality.GetParentRealities() {
parentReality := cachedParentReality.Get().(*Reality)
if !parentReality.IsAggregated() {
parentConflictRealities[realityId] = cachedParentReality
} else {
parentReality.collectParentConflictRealities(parentConflictRealities)
cachedParentReality.Release()
}
}
}
// [DONE] Returns a map of all ancestor realities (up till the MAIN_REALITY). They have to manually be "released" when // [DONE] Returns a map of all ancestor realities (up till the MAIN_REALITY). They have to manually be "released" when
// they are not needed anymore. // they are not needed anymore.
func (reality *Reality) GetAncestorRealities() (result map[RealityId]*objectstorage.CachedObject) { func (reality *Reality) GetAncestorRealities() (result map[RealityId]*objectstorage.CachedObject) {
......
...@@ -100,7 +100,7 @@ func (visualizer *Visualizer) getRealitySubGraph(realityId RealityId) *dot.Graph ...@@ -100,7 +100,7 @@ func (visualizer *Visualizer) getRealitySubGraph(realityId RealityId) *dot.Graph
parentRealities := reality.GetParentRealityIds() parentRealities := reality.GetParentRealityIds()
switch true { switch true {
case len(parentRealities) > 1: case len(parentRealities) > 1:
realityGraph = visualizer.getRealitySubGraph(MAIN_REALITY_ID).Subgraph(visualizer.generateRealityName(parentRealities.ToList()...), dot.ClusterOption{}) realityGraph = visualizer.getRealitySubGraph(MAIN_REALITY_ID).Subgraph("AGGREGATED REALITY [ "+visualizer.generateRealityName(realityId)+" ]", dot.ClusterOption{})
visualizer.styleRealitySubGraph(realityGraph, realityTypeAggregated) visualizer.styleRealitySubGraph(realityGraph, realityTypeAggregated)
...@@ -112,7 +112,7 @@ func (visualizer *Visualizer) getRealitySubGraph(realityId RealityId) *dot.Graph ...@@ -112,7 +112,7 @@ func (visualizer *Visualizer) getRealitySubGraph(realityId RealityId) *dot.Graph
//dummyNode.Attr("width", "0") //dummyNode.Attr("width", "0")
case len(parentRealities) == 1: case len(parentRealities) == 1:
for parentRealityId := range parentRealities { for parentRealityId := range parentRealities {
realityGraph = visualizer.getRealitySubGraph(parentRealityId).Subgraph(visualizer.generateRealityName(realityId), dot.ClusterOption{}) realityGraph = visualizer.getRealitySubGraph(parentRealityId).Subgraph("REALITY [ "+visualizer.generateRealityName(realityId)+" ]", dot.ClusterOption{})
visualizer.styleRealitySubGraph(realityGraph, realityTypeDefault) visualizer.styleRealitySubGraph(realityGraph, realityTypeDefault)
} }
...@@ -148,29 +148,31 @@ func (visualizer *Visualizer) styleRealitySubGraph(realitySubGraph *dot.Graph, r ...@@ -148,29 +148,31 @@ func (visualizer *Visualizer) styleRealitySubGraph(realitySubGraph *dot.Graph, r
} }
} }
func (visualizer *Visualizer) generateRealityName(realityIds ...RealityId) string { func (visualizer *Visualizer) generateRealityName(realityId RealityId) (result string) {
if len(realityIds) > 1 { visualizer.ledgerState.GetReality(realityId).Consume(func(object objectstorage.StorableObject) {
result := "AGGREGATED REALITY [ " reality := object.(*Reality)
realityIdCount := len(realityIds) if reality.IsAggregated() {
for id, realityId := range realityIds { parentConflictRealities := reality.GetParentConflictRealities()
if id == realityIdCount-1 { realityIdCount := len(parentConflictRealities)
result += strings.Trim(realityId.String(), "\x00") counter := 1
} else { for realityId, parentConflictReality := range parentConflictRealities {
result += strings.Trim(realityId.String(), "\x00") + " + " result += visualizer.generateRealityName(realityId)
}
} if counter != realityIdCount {
result += " + "
}
result += " ]" counter++
return result parentConflictReality.Release()
} else { }
if realityIds[0] == MAIN_REALITY_ID { } else {
return strings.Trim(realityIds[0].String(), "\x00") result = strings.Trim(realityId.String(), "\x00")
} }
})
return "REALITY [ " + strings.Trim(realityIds[0].String(), "\x00") + " ]" return
}
} }
type realityType int type realityType int
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment