-
Hans Moog authored
* Feat: initial commit * Feat: added setPreferred to TransactionMetadata * Feat: added a Conflicting() method to the transactionMetadata * Fix: fixed logic bug * Feat: refactored fcob * Refactor: refactored additional code * Fix: fixed a bug in ForeachConsumers * Refactor: cleaned up code * Feat: implemented FCOB consensus into the valuetransfer dapp * Refactor: refactored FCOB * Docs: added some additional comments * Docs: fixed comments * Refactor: commit before branch change * Feat: added PayloadLiked Event * Refactor: fixed some missing comments + added liked to marshal * Feat: reworked the preferred and liked propagation * Refactor: cleaned up some logic * Refactor: simplified code * Refactor: cleaned up more stuff :P * Refactor: refactor * Feat: moved test + refactored fcob * Fix: fixed a few bugs in liked propagation * adapt to new hive.go version * upgrade hive.go * Feat: started implementing a wallet * Feat: extended wallet files * use store backed sequence * add option to use in-memory database * address review comments * Fix: fixed missing events in branchmanaer * Feat: propagate changes from branch to transaction * Feat: started implementing confirmed propagation * Fix: fixed unreachable code * Refactor: refactored some code according to wolfgangs review * Refactor: cleaned up the code according to DRY * Refactor: refactored according to wollac * Refactor: refactored according to wollac * Refactor: refactored according to wollac * Refactor: refactored the code to make it more readable * Refactor: added some doc comments + cleaned up some more code Co-authored-by:
Wolfgang Welz <welzwo@gmail.com>
Hans Moog authored* Feat: initial commit * Feat: added setPreferred to TransactionMetadata * Feat: added a Conflicting() method to the transactionMetadata * Fix: fixed logic bug * Feat: refactored fcob * Refactor: refactored additional code * Fix: fixed a bug in ForeachConsumers * Refactor: cleaned up code * Feat: implemented FCOB consensus into the valuetransfer dapp * Refactor: refactored FCOB * Docs: added some additional comments * Docs: fixed comments * Refactor: commit before branch change * Feat: added PayloadLiked Event * Refactor: fixed some missing comments + added liked to marshal * Feat: reworked the preferred and liked propagation * Refactor: cleaned up some logic * Refactor: simplified code * Refactor: cleaned up more stuff :P * Refactor: refactor * Feat: moved test + refactored fcob * Fix: fixed a few bugs in liked propagation * adapt to new hive.go version * upgrade hive.go * Feat: started implementing a wallet * Feat: extended wallet files * use store backed sequence * add option to use in-memory database * address review comments * Fix: fixed missing events in branchmanaer * Feat: propagate changes from branch to transaction * Feat: started implementing confirmed propagation * Fix: fixed unreachable code * Refactor: refactored some code according to wolfgangs review * Refactor: cleaned up the code according to DRY * Refactor: refactored according to wollac * Refactor: refactored according to wollac * Refactor: refactored according to wollac * Refactor: refactored the code to make it more readable * Refactor: added some doc comments + cleaned up some more code Co-authored-by:
Wolfgang Welz <welzwo@gmail.com>
events.go 3.21 KiB
package tangle
import (
"github.com/iotaledger/hive.go/events"
"github.com/iotaledger/goshimmer/dapps/valuetransfers/packages/branchmanager"
"github.com/iotaledger/goshimmer/dapps/valuetransfers/packages/payload"
"github.com/iotaledger/goshimmer/dapps/valuetransfers/packages/transaction"
)
// Events is a container for the different kind of events of the Tangle.
type Events struct {
// Get's called whenever a transaction
PayloadAttached *events.Event
PayloadSolid *events.Event
PayloadLiked *events.Event
PayloadDisliked *events.Event
MissingPayloadReceived *events.Event
PayloadMissing *events.Event
PayloadUnsolidifiable *events.Event
// TransactionReceived gets triggered whenever a transaction was received for the first time (not solid yet).
TransactionReceived *events.Event
// TransactionBooked gets triggered whenever a transactions becomes solid and gets booked into a particular branch.
TransactionBooked *events.Event
// Fork gets triggered when a previously un-conflicting transaction get's some of its inputs double spend, so that a
// new Branch is created.
Fork *events.Event
Error *events.Event
}
func newEvents() *Events {
return &Events{
PayloadAttached: events.NewEvent(cachedPayloadEvent),
PayloadSolid: events.NewEvent(cachedPayloadEvent),
PayloadLiked: events.NewEvent(cachedPayloadEvent),
PayloadDisliked: events.NewEvent(cachedPayloadEvent),
MissingPayloadReceived: events.NewEvent(cachedPayloadEvent),
PayloadMissing: events.NewEvent(payloadIDEvent),
PayloadUnsolidifiable: events.NewEvent(payloadIDEvent),
TransactionReceived: events.NewEvent(cachedTransactionEvent),
TransactionBooked: events.NewEvent(transactionBookedEvent),
Fork: events.NewEvent(forkEvent),
Error: events.NewEvent(events.ErrorCaller),
}
}
func payloadIDEvent(handler interface{}, params ...interface{}) {
handler.(func(payload.ID))(params[0].(payload.ID))
}
func cachedPayloadEvent(handler interface{}, params ...interface{}) {
handler.(func(*payload.CachedPayload, *CachedPayloadMetadata))(
params[0].(*payload.CachedPayload).Retain(),
params[1].(*CachedPayloadMetadata).Retain(),
)
}
func transactionBookedEvent(handler interface{}, params ...interface{}) {
handler.(func(*transaction.CachedTransaction, *CachedTransactionMetadata, bool))(
params[0].(*transaction.CachedTransaction).Retain(),
params[1].(*CachedTransactionMetadata).Retain(),
params[2].(bool),
)
}
func forkEvent(handler interface{}, params ...interface{}) {
handler.(func(*transaction.CachedTransaction, *CachedTransactionMetadata, *branchmanager.CachedBranch, []transaction.OutputID))(
params[0].(*transaction.CachedTransaction).Retain(),
params[1].(*CachedTransactionMetadata).Retain(),
params[2].(*branchmanager.CachedBranch).Retain(),
params[3].([]transaction.OutputID),
)
}
func cachedTransactionEvent(handler interface{}, params ...interface{}) {
handler.(func(*transaction.CachedTransaction, *CachedTransactionMetadata, *CachedAttachment))(
params[0].(*transaction.CachedTransaction).Retain(),
params[1].(*CachedTransactionMetadata).Retain(),
params[2].(*CachedAttachment).Retain(),
)
}