From aa50883217a25c14e4666c0a81672eea703a1138 Mon Sep 17 00:00:00 2001 From: Hans Moog <3293976+hmoog@users.noreply.github.com> Date: Thu, 11 Jun 2020 20:57:47 +0200 Subject: [PATCH] Feat: added support for colored coins (#466) Co-authored-by: Hans Moog <hm@mkjc.net> --- .../valuetransfers/packages/tangle/tangle.go | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/dapps/valuetransfers/packages/tangle/tangle.go b/dapps/valuetransfers/packages/tangle/tangle.go index f584138a..aed986e4 100644 --- a/dapps/valuetransfers/packages/tangle/tangle.go +++ b/dapps/valuetransfers/packages/tangle/tangle.go @@ -1134,9 +1134,26 @@ func (tangle *Tangle) bookTransaction(cachedTransaction *transaction.CachedTrans // book transaction into target branch transactionMetadata.SetBranchID(targetBranch.ID()) + // create color for newly minted coins + mintedColor, _, err := balance.ColorFromBytes(transactionToBook.ID().Bytes()) + if err != nil { + panic(err) // this should never happen (a transaction id is always a valid color) + } + // book outputs into the target branch transactionToBook.Outputs().ForEach(func(address address.Address, balances []*balance.Balance) bool { - newOutput := NewOutput(address, transactionToBook.ID(), targetBranch.ID(), balances) + // create correctly colored balances (replacing color of newly minted coins with color of transaction id) + coloredBalances := make([]*balance.Balance, len(balances)) + for i, currentBalance := range balances { + if currentBalance.Color() == balance.ColorNew { + coloredBalances[i] = balance.New(mintedColor, currentBalance.Value()) + } else { + coloredBalances[i] = currentBalance + } + } + + // store output + newOutput := NewOutput(address, transactionToBook.ID(), targetBranch.ID(), coloredBalances) newOutput.setSolid(true) tangle.outputStorage.Store(newOutput).Release() -- GitLab