From 6d3943cf6f2eb3fbbb4abe8e66157dbfeda24078 Mon Sep 17 00:00:00 2001 From: Ian Norden Date: Fri, 23 Oct 2020 10:29:39 -0500 Subject: [PATCH] tx sender --- pkg/auto/sender.go | 56 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 pkg/auto/sender.go diff --git a/pkg/auto/sender.go b/pkg/auto/sender.go new file mode 100644 index 0000000..b051f9b --- /dev/null +++ b/pkg/auto/sender.go @@ -0,0 +1,56 @@ +// VulcanizeDB +// Copyright © 2020 Vulcanize + +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU Affero General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. + +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU Affero General Public License for more details. + +// You should have received a copy of the GNU Affero General Public License +// along with this program. If not, see . + +package auto + +import ( + "github.com/ethereum/go-ethereum/rpc" + "github.com/vulcanize/tx_spammer/pkg/shared" +) + +// EthSender sends eth value transfer txs +type EthSender struct { + client *rpc.Client +} + +// NewEthSender returns a new EthSender +func NewEthSender(config *Config) *EthSender { + return &EthSender{ + client: config.Client, + } +} + +// Send awaits txs off the provided work queue and sends them +func (s *EthSender) Send(quitChan <-chan bool, txRlpChan <-chan []byte) (<-chan bool, <-chan error) { + // done channel to signal quit signal has been received (any ongoing jobs were finished) + doneChan := make(chan bool) + // err channel returned to calling context + errChan := make(chan error) + go func() { + for { + select { + case tx := <- txRlpChan: + if err := shared.SendRawTransaction(s.client, tx); err != nil { + errChan <- err + } + case <-quitChan: + close(doneChan) + return + } + } + }() + return doneChan, errChan +}