diff --git a/dapps/faucet/dapp.go b/dapps/faucet/dapp.go index a4f736552d70bdd39b5429d0b9e6ddca0d2904be..fff78faa8d426dd150777ced9f246bc736df744a 100644 --- a/dapps/faucet/dapp.go +++ b/dapps/faucet/dapp.go @@ -91,12 +91,12 @@ func configure(*node.Plugin) { fundingWorkerPool = workerpool.New(func(task workerpool.Task) { msg := task.Param(0).(*message.Message) addr := msg.Payload().(*faucetpayload.Payload).Address() - _, txID, err := Faucet().SendFunds(msg) + msg, txID, err := Faucet().SendFunds(msg) if err != nil { log.Errorf("couldn't fulfill funding request to %s: %s", addr, err) return } - log.Infof("sent funds to address %s via tx %s", addr, txID) + log.Infof("sent funds to address %s via tx %s and msg %s", addr, txID, msg.Id().String()) }, workerpool.WorkerCount(fundingWorkerCount), workerpool.QueueSize(fundingWorkerQueueSize)) configureEvents() diff --git a/dapps/faucet/packages/faucet.go b/dapps/faucet/packages/faucet.go index 88df115a6c6c74f4575be8ebd5f81b86efea4cf7..dd40e51fffa73802939bc5881ffed6fd8089dc6b 100644 --- a/dapps/faucet/packages/faucet.go +++ b/dapps/faucet/packages/faucet.go @@ -7,16 +7,16 @@ import ( "time" faucetpayload "github.com/iotaledger/goshimmer/dapps/faucet/packages/payload" - "github.com/iotaledger/goshimmer/packages/binary/messagelayer/message" - "github.com/iotaledger/hive.go/events" - "github.com/iotaledger/goshimmer/dapps/valuetransfers" "github.com/iotaledger/goshimmer/dapps/valuetransfers/packages/address" + "github.com/iotaledger/goshimmer/dapps/valuetransfers/packages/address/signaturescheme" "github.com/iotaledger/goshimmer/dapps/valuetransfers/packages/balance" "github.com/iotaledger/goshimmer/dapps/valuetransfers/packages/tangle" "github.com/iotaledger/goshimmer/dapps/valuetransfers/packages/transaction" "github.com/iotaledger/goshimmer/dapps/valuetransfers/packages/wallet" + "github.com/iotaledger/goshimmer/packages/binary/messagelayer/message" "github.com/iotaledger/goshimmer/plugins/issuer" + "github.com/iotaledger/hive.go/events" ) var ( @@ -55,7 +55,7 @@ func (f *Faucet) SendFunds(msg *message.Message) (m *message.Message, txID strin addr := msg.Payload().(*faucetpayload.Payload).Address() // get the output ids for the inputs and remainder balance - outputIds, remainder := f.collectUTXOsForFunding() + outputIds, addrsIndices, remainder := f.collectUTXOsForFunding() tx := transaction.New( // inputs @@ -75,6 +75,10 @@ func (f *Faucet) SendFunds(msg *message.Message) (m *message.Message, txID strin tx.Outputs().Add(remainAddr, []*balance.Balance{balance.New(balance.ColorIOTA, remainder)}) } + for index := range addrsIndices { + tx.Sign(signaturescheme.ED25519(*f.wallet.Seed().KeyPair(index))) + } + // prepare value payload with value factory payload := valuetransfers.ValueObjectFactory().IssueTransaction(tx) @@ -125,9 +129,10 @@ func (f *Faucet) awaitTransactionBooked(txID transaction.ID, maxAwait time.Durat // collectUTXOsForFunding iterates over the faucet's UTXOs until the token threshold is reached. // this function also returns the remainder balance for the given outputs. -func (f *Faucet) collectUTXOsForFunding() (outputIds []transaction.OutputID, remainder int64) { +func (f *Faucet) collectUTXOsForFunding() (outputIds []transaction.OutputID, addrsIndices map[uint64]struct{}, remainder int64) { var total = f.tokensPerRequest var i uint64 + addrsIndices = map[uint64]struct{}{} // get a list of address for inputs for i = 0; total > 0; i++ { @@ -141,6 +146,7 @@ func (f *Faucet) collectUTXOsForFunding() (outputIds []transaction.OutputID, rem for _, coloredBalance := range output.Balances() { val += coloredBalance.Value } + addrsIndices[i] = struct{}{} // get unspent output ids and check if it's conflict if val <= total {