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

Feat: transfering files to pc after resum

parent 8bba9a8e
No related branches found
No related tags found
No related merge requests found
......@@ -39,14 +39,6 @@ func (ledgerState *LedgerState) AddTransferOutput(transferHash TransferHash, add
return ledgerState
}
func (ledgerState *LedgerState) storeTransferOutput(transferOutput *TransferOutput) *objectstorage.CachedObject {
return ledgerState.transferOutputs.Store(transferOutput)
}
func (ledgerState *LedgerState) storeTransferOutputBooking(transferOutputBooking *TransferOutputBooking) *objectstorage.CachedObject {
return ledgerState.transferOutputBookings.Store(transferOutputBooking)
}
func (ledgerState *LedgerState) GetTransferOutput(transferOutputReference *TransferOutputReference) *objectstorage.CachedObject {
if cachedTransferOutput, err := ledgerState.transferOutputs.Load(transferOutputReference.GetStorageKey()); err != nil {
panic(err)
......@@ -107,44 +99,31 @@ func (ledgerState *LedgerState) GetReality(id RealityId) *objectstorage.CachedOb
}
func (ledgerState *LedgerState) BookTransfer(transfer *Transfer) {
transferHash := transfer.GetHash()
inputs := ledgerState.getTransferInputs(transfer)
outputs := transfer.GetOutputs()
targetReality := ledgerState.getTargetReality(inputs)
targetReality.Get().(*Reality).bookTransferOutputs(transferHash, outputs)
fmt.Println("BOOK TO: ", targetReality.Get())
}
func (ledgerState *LedgerState) getTransferInputs(transfer *Transfer) []*objectstorage.CachedObject {
inputs := transfer.GetInputs()
result := make([]*objectstorage.CachedObject, len(inputs))
for i, transferOutputReference := range inputs {
result[i] = ledgerState.GetTransferOutput(transferOutputReference)
}
return result
}
func (ledgerState *LedgerState) getTargetReality(inputs []*objectstorage.CachedObject) *objectstorage.CachedObject {
realityIds := make([]RealityId, len(inputs))
for i, input := range inputs {
realityIds[i] = input.Get().(*TransferOutput).GetRealityId()
}
return ledgerState.MergeRealities(realityIds...)
}
func (ledgerState *LedgerState) MergeRealities(realityIds ...RealityId) *objectstorage.CachedObject {
switch len(realityIds) {
case 0:
if loadedReality, loadedRealityErr := ledgerState.realities.Load(MAIN_REALITY_ID[:]); loadedRealityErr != nil {
panic(loadedRealityErr)
} else {
loadedReality.Get().(*Reality).ledgerState = ledgerState
return loadedReality
}
case 1:
if loadedReality, loadedRealityErr := ledgerState.realities.Load(realityIds[0][:]); loadedRealityErr != nil {
panic(loadedRealityErr)
} else {
loadedReality.Get().(*Reality).ledgerState = ledgerState
return loadedReality
}
default:
......@@ -206,41 +185,6 @@ func (ledgerState *LedgerState) MergeRealities(realityIds ...RealityId) *objects
}
}
func (ledgerState *LedgerState) sortRealityIds(aggregatedRealities map[RealityId]*objectstorage.CachedObject) []RealityId {
counter := 0
sortedRealityIds := make([]RealityId, len(aggregatedRealities))
for realityId, aggregatedReality := range aggregatedRealities {
sortedRealityIds[counter] = realityId
counter++
aggregatedReality.Release()
}
sort.Slice(sortedRealityIds, func(i, j int) bool {
for k := 0; k < len(sortedRealityIds[k]); k++ {
if sortedRealityIds[i][k] < sortedRealityIds[j][k] {
return true
} else if sortedRealityIds[i][k] > sortedRealityIds[j][k] {
return false
}
}
return false
})
return sortedRealityIds
}
func (ledgerState *LedgerState) generateAggregatedRealityId(sortedRealityIds []RealityId) [32]byte {
aggregatedRealityId := make([]byte, 0)
for _, realityId := range sortedRealityIds {
aggregatedRealityId = append(aggregatedRealityId, realityId[:]...)
}
return blake2b.Sum256(aggregatedRealityId)
}
func (ledgerState *LedgerState) Prune() *LedgerState {
if err := ledgerState.transferOutputs.Prune(); err != nil {
panic(err)
......@@ -340,6 +284,69 @@ func (ledgerState *LedgerState) generateFilterPrefixes(filters []interface{}) ([
return prefixes, false
}
func (ledgerState *LedgerState) storeTransferOutput(transferOutput *TransferOutput) *objectstorage.CachedObject {
return ledgerState.transferOutputs.Store(transferOutput)
}
func (ledgerState *LedgerState) storeTransferOutputBooking(transferOutputBooking *TransferOutputBooking) *objectstorage.CachedObject {
return ledgerState.transferOutputBookings.Store(transferOutputBooking)
}
func (ledgerState *LedgerState) sortRealityIds(aggregatedRealities map[RealityId]*objectstorage.CachedObject) []RealityId {
counter := 0
sortedRealityIds := make([]RealityId, len(aggregatedRealities))
for realityId, aggregatedReality := range aggregatedRealities {
sortedRealityIds[counter] = realityId
counter++
aggregatedReality.Release()
}
sort.Slice(sortedRealityIds, func(i, j int) bool {
for k := 0; k < len(sortedRealityIds[k]); k++ {
if sortedRealityIds[i][k] < sortedRealityIds[j][k] {
return true
} else if sortedRealityIds[i][k] > sortedRealityIds[j][k] {
return false
}
}
return false
})
return sortedRealityIds
}
func (ledgerState *LedgerState) generateAggregatedRealityId(sortedRealityIds []RealityId) [32]byte {
aggregatedRealityId := make([]byte, 0)
for _, realityId := range sortedRealityIds {
aggregatedRealityId = append(aggregatedRealityId, realityId[:]...)
}
return blake2b.Sum256(aggregatedRealityId)
}
func (ledgerState *LedgerState) getTargetReality(inputs []*objectstorage.CachedObject) *objectstorage.CachedObject {
realityIds := make([]RealityId, len(inputs))
for i, input := range inputs {
realityIds[i] = input.Get().(*TransferOutput).GetRealityId()
}
return ledgerState.MergeRealities(realityIds...)
}
func (ledgerState *LedgerState) getTransferInputs(transfer *Transfer) []*objectstorage.CachedObject {
inputs := transfer.GetInputs()
result := make([]*objectstorage.CachedObject, len(inputs))
for i, transferOutputReference := range inputs {
result[i] = ledgerState.GetTransferOutput(transferOutputReference)
}
return result
}
func transferOutputFactory(key []byte) objectstorage.StorableObject {
result := &TransferOutput{
storageKey: make([]byte, len(key)),
......
......@@ -40,27 +40,11 @@ func Test(t *testing.T) {
ledgerState.BookTransfer(transfer)
ledgerState.GetReality(pendingReality).Consume(func(object objectstorage.StorableObject) {
reality := object.(*Reality)
if err := reality.BookTransfer(transfer); err != nil {
t.Error(err)
}
ledgerState.ForEachTransferOutput(func(object *objectstorage.CachedObject) bool {
object.Consume(func(object objectstorage.StorableObject) {
fmt.Println(object.(*TransferOutput))
})
return true
}, pendingReality, addressHash3, UNSPENT)
ledgerState.ForEachTransferOutput(func(object *objectstorage.CachedObject) bool {
object.Consume(func(object objectstorage.StorableObject) {
fmt.Println(object.(*TransferOutput))
})
return true
}, transferHash2, addressHash4)
})
}, MAIN_REALITY_ID)
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment