From 6ac6d194301a39d7abc2be2593633ab061654678 Mon Sep 17 00:00:00 2001 From: Harry Kalodner Date: Tue, 1 Sep 2020 13:20:16 -0400 Subject: [PATCH 01/29] Turn on archive mode --- packages/arb-bridge-eth/scripts/launch-geth | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/arb-bridge-eth/scripts/launch-geth b/packages/arb-bridge-eth/scripts/launch-geth index 5443f0eda8..c6046bc112 100755 --- a/packages/arb-bridge-eth/scripts/launch-geth +++ b/packages/arb-bridge-eth/scripts/launch-geth @@ -11,7 +11,8 @@ docker run -d -it --rm -p 7545:7545 -p 7546:7546 \ --rpc --rpcaddr 0.0.0.0 --rpcport 7545 --rpccorsdomain="*" --rpcvhosts=* \ --rpcapi 'personal,db,eth,net,web3,txpool,miner' \ --ws --wsaddr 0.0.0.0 --wsport 7546 --wsorigins '*' \ - --wsapi personal,admin,db,eth,net,web3,miner,shh,txpool,debug + --wsapi personal,admin,db,eth,net,web3,miner,shh,txpool,debug \ + --gcmode=archive while ! nc -z localhost 7545; do sleep 2; done; echo "Finished waiting for geth on localhost:7545..." yarn buidler deploy --network parity --export bridge_eth_addresses.json && [ -f bridge_eth_addresses.json ] From 7f6fcbaf3f7717b89cf55eb3385b663af07e3a3e Mon Sep 17 00:00:00 2001 From: Harry Kalodner Date: Tue, 1 Sep 2020 13:20:45 -0400 Subject: [PATCH 02/29] Speed up processing --- packages/arb-tx-aggregator/batcher/batcher.go | 77 ++++++++++--------- packages/arb-tx-aggregator/batcher/queue.go | 46 +++++------ .../arb-tx-aggregator/arb-tx-aggregator.go | 3 + packages/arb-validator/go.mod | 1 + packages/arb-validator/go.sum | 15 ++++ 5 files changed, 82 insertions(+), 60 deletions(-) diff --git a/packages/arb-tx-aggregator/batcher/batcher.go b/packages/arb-tx-aggregator/batcher/batcher.go index 302a3487e7..3474b6e245 100644 --- a/packages/arb-tx-aggregator/batcher/batcher.go +++ b/packages/arb-tx-aggregator/batcher/batcher.go @@ -98,15 +98,15 @@ func NewBatcher( for { tx, accountIndex, cont := server.pendingBatch.popRandomTx(server.queuedTxes, signer) if tx != nil { - newSnap := server.pendingBatch.snap.Clone() - server.Unlock() - newSnap, err := snapWithTx(newSnap, tx, signer) - server.Lock() - if err != nil { - log.Println("Aggregator ignored invalid tx", err) - continue - } - server.pendingBatch.addUpdatedSnap(tx, newSnap) + //newSnap := server.pendingBatch.snap.Clone() + //server.Unlock() + //newSnap, err := snapWithTx(newSnap, tx, signer) + //server.Lock() + //if err != nil { + // log.Println("Aggregator ignored invalid tx", err) + // continue + //} + server.pendingBatch.addIncludedTx(tx) server.queuedTxes.maybeRemoveAccountAtIndex(accountIndex) } if server.pendingBatch.full || (!cont && time.Since(lastBatch) > maxBatchTime) { @@ -194,10 +194,11 @@ func (m *Batcher) sendBatch(ctx context.Context) { } func (m *Batcher) PendingSnapshot() *snapshot.Snapshot { - m.Lock() - defer m.Unlock() - m.setupPending() - return m.pendingBatch.snap.Clone() + //m.Lock() + //defer m.Unlock() + return m.db.LatestSnapshot() + //m.setupPending() + //return m.pendingBatch.snap.Clone() } func (m *Batcher) PendingTransactionCount(account common.Address) *uint64 { @@ -245,29 +246,29 @@ func (m *Batcher) SendTransaction(tx *types.Transaction) (common.Hash, error) { } func (m *Batcher) setupPending() { - snap := m.db.LatestSnapshot() - if m.pendingBatch.snap.Height().Cmp(snap.Height()) < 0 { - // Add all of the already broadcast transactions to the snapshot - // If they were already included, they'll be ignored because they will - // have invalid sequence numbers - n := m.pendingSentBatches.Front() - for n != nil { - item := n.Value.(*pendingSentBatch) - for _, tx := range item.txes { - var err error - newSnap, err := snapWithTx(snap, tx, m.signer) - if err != nil { - continue - } - snap = newSnap - } - n = n.Next() - } - for _, tx := range m.pendingBatch.appliedTxes { - // Add the pending, but not broadcast txes back into the queue - // If there's an error here, just throw out the tx - _ = m.queuedTxes.addTransaction(tx, m.signer) - } - m.pendingBatch = newPendingBatch(snap, maxBatchSize, m.signer) - } + //snap := m.db.LatestSnapshot() + //if m.pendingBatch.snap.Height().Cmp(snap.Height()) < 0 { + // // Add all of the already broadcast transactions to the snapshot + // // If they were already included, they'll be ignored because they will + // // have invalid sequence numbers + // n := m.pendingSentBatches.Front() + // for n != nil { + // item := n.Value.(*pendingSentBatch) + // for _, tx := range item.txes { + // var err error + // newSnap, err := snapWithTx(snap, tx, m.signer) + // if err != nil { + // continue + // } + // snap = newSnap + // } + // n = n.Next() + // } + // for _, tx := range m.pendingBatch.appliedTxes { + // // Add the pending, but not broadcast txes back into the queue + // // If there's an error here, just throw out the tx + // _ = m.queuedTxes.addTransaction(tx, m.signer) + // } + // m.pendingBatch = newPendingBatch(snap, maxBatchSize, m.signer) + //} } diff --git a/packages/arb-tx-aggregator/batcher/queue.go b/packages/arb-tx-aggregator/batcher/queue.go index a1fd71735c..64423c3082 100644 --- a/packages/arb-tx-aggregator/batcher/queue.go +++ b/packages/arb-tx-aggregator/batcher/queue.go @@ -4,12 +4,10 @@ import ( "container/heap" "errors" "github.com/ethereum/go-ethereum/common" - "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/types" "github.com/offchainlabs/arbitrum/packages/arb-evm/message" "github.com/offchainlabs/arbitrum/packages/arb-tx-aggregator/snapshot" arbcommon "github.com/offchainlabs/arbitrum/packages/arb-util/common" - "log" "math/rand" ) @@ -221,6 +219,10 @@ func snapWithTx(snap *snapshot.Snapshot, tx *types.Transaction, signer types.Sig func (p *pendingBatch) addUpdatedSnap(tx *types.Transaction, newSnap *snapshot.Snapshot) { p.snap = newSnap + p.addIncludedTx(tx) +} + +func (p *pendingBatch) addIncludedTx(tx *types.Transaction) { p.appliedTxes = append(p.appliedTxes, tx) p.sizeBytes += tx.Size() sender, _ := types.Sender(p.signer, tx) @@ -228,25 +230,25 @@ func (p *pendingBatch) addUpdatedSnap(tx *types.Transaction, newSnap *snapshot.S } func (p *pendingBatch) checkValidForQueue(tx *types.Transaction) error { - ethSender, _ := types.Sender(p.signer, tx) - sender := arbcommon.NewAddressFromEth(ethSender) - txCount, err := p.snap.GetTransactionCount(sender) - if err != nil { - return err - } - - if tx.Nonce() < txCount.Uint64() { - return core.ErrNonceTooLow - } - - amount, err := p.snap.GetBalance(sender) - if err != nil { - return err - } - - if tx.Cost().Cmp(amount) > 0 { - log.Println("tx rejected for insufficient funds:", tx.Value(), tx.GasPrice(), tx.Gas(), amount) - return core.ErrInsufficientFunds - } + //ethSender, _ := types.Sender(p.signer, tx) + //sender := arbcommon.NewAddressFromEth(ethSender) + //txCount, err := p.snap.GetTransactionCount(sender) + //if err != nil { + // return err + //} + // + //if tx.Nonce() < txCount.Uint64() { + // return core.ErrNonceTooLow + //} + // + //amount, err := p.snap.GetBalance(sender) + //if err != nil { + // return err + //} + // + //if tx.Cost().Cmp(amount) > 0 { + // log.Println("tx rejected for insufficient funds:", tx.Value(), tx.GasPrice(), tx.Gas(), amount) + // return core.ErrInsufficientFunds + //} return nil } diff --git a/packages/arb-tx-aggregator/cmd/arb-tx-aggregator/arb-tx-aggregator.go b/packages/arb-tx-aggregator/cmd/arb-tx-aggregator/arb-tx-aggregator.go index 30614502b9..b579055f86 100644 --- a/packages/arb-tx-aggregator/cmd/arb-tx-aggregator/arb-tx-aggregator.go +++ b/packages/arb-tx-aggregator/cmd/arb-tx-aggregator/arb-tx-aggregator.go @@ -32,6 +32,7 @@ import ( "github.com/offchainlabs/arbitrum/packages/arb-validator-core/arbbridge" "github.com/offchainlabs/arbitrum/packages/arb-validator-core/ethbridge" "github.com/offchainlabs/arbitrum/packages/arb-validator-core/utils" + //_ "net/http/pprof" ) func main() { @@ -39,6 +40,8 @@ func main() { walletArgs := utils.AddWalletFlags(fs) rpcVars := utils2.AddRPCFlags(fs) + //go http.ListenAndServe("localhost:6060", nil) + err := fs.Parse(os.Args[1:]) if err != nil { log.Fatal(err) diff --git a/packages/arb-validator/go.mod b/packages/arb-validator/go.mod index 2785594d0f..4cfc8f2f05 100644 --- a/packages/arb-validator/go.mod +++ b/packages/arb-validator/go.mod @@ -7,6 +7,7 @@ require ( github.com/golang/protobuf v1.4.2 github.com/offchainlabs/arbitrum/packages/arb-avm-cpp v0.7.0 github.com/offchainlabs/arbitrum/packages/arb-checkpointer v0.7.0 + github.com/offchainlabs/arbitrum/packages/arb-tx-aggregator v0.7.0 // indirect github.com/offchainlabs/arbitrum/packages/arb-util v0.7.0 github.com/offchainlabs/arbitrum/packages/arb-validator-core v0.7.0 github.com/pkg/errors v0.9.1 diff --git a/packages/arb-validator/go.sum b/packages/arb-validator/go.sum index 08dbd5c1fc..1d69c73ba7 100644 --- a/packages/arb-validator/go.sum +++ b/packages/arb-validator/go.sum @@ -64,6 +64,8 @@ github.com/edsrzf/mmap-go v0.0.0-20160512033002-935e0e8a636c h1:JHHhtb9XWJrGNMcr github.com/edsrzf/mmap-go v0.0.0-20160512033002-935e0e8a636c/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= github.com/elastic/gosigar v0.8.1-0.20180330100440-37f05ff46ffa h1:XKAhUk/dtp+CV0VO6mhG2V7jA9vbcGcnYF/Ay9NjZrY= github.com/elastic/gosigar v0.8.1-0.20180330100440-37f05ff46ffa/go.mod h1:cdorVVzy1fhmEqmtgqkoE3bYtCfSCkVyjTyCIo22xvs= +github.com/emirpasic/gods v1.12.0 h1:QAUIPSaCu4G+POclxeqb3F+WPpdKqFGlw36+yOzGlrg= +github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/ethereum/go-ethereum v1.9.14/go.mod h1:oP8FC5+TbICUyftkTWs+8JryntjIJLJvWvApK3z2AYw= @@ -115,6 +117,12 @@ github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/gorilla/handlers v1.4.2 h1:0QniY0USkHQ1RGCLfKxeNHK9bkDHGRYGNDFBCS+YARg= +github.com/gorilla/handlers v1.4.2/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ= +github.com/gorilla/mux v1.7.4 h1:VuZ8uybHlWmqV03+zRzdwKL4tUnIp1MAQtp1mIFE1bc= +github.com/gorilla/mux v1.7.4/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= +github.com/gorilla/rpc v1.2.0 h1:WvvdC2lNeT1SP32zrIce5l0ECBfbAlmrmSBsuc57wfk= +github.com/gorilla/rpc v1.2.0/go.mod h1:V4h9r+4sF5HnzqbwIez0fKSpANP0zlYd3qR7p36jkTQ= github.com/gorilla/websocket v1.4.1-0.20190629185528-ae1634f6a989 h1:giknQ4mEuDFmmHSrGcbargOuLHQGtywqo4mheITex54= github.com/gorilla/websocket v1.4.1-0.20190629185528-ae1634f6a989/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/graph-gophers/graphql-go v0.0.0-20191115155744-f33e81362277/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= @@ -142,6 +150,7 @@ github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515 h1:T+h1c/A9Gawja4Y9mFVWj github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= @@ -158,6 +167,11 @@ github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzp github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0= github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E= +github.com/offchainlabs/arbitrum v0.7.0 h1:DvY9R4WP6b76VRQiv2bMonrPFwAWPnSqH1XKy8f+Jtk= +github.com/offchainlabs/arbitrum/packages/arb-evm v0.7.0 h1:rBrJRc1Z2HYjV2H2KA9bLuxQ8uNiRvu32NRXqfht3rs= +github.com/offchainlabs/arbitrum/packages/arb-evm v0.7.0/go.mod h1:BWuhq8K4pyt9v9y1sFpsPJsxuFbY0kN2oa9iOcS+V1M= +github.com/offchainlabs/arbitrum/packages/arb-tx-aggregator v0.7.0 h1:qqWOyi6R5tJ+wouzKt3FIT271IGUmLxhx+mqceGe608= +github.com/offchainlabs/arbitrum/packages/arb-tx-aggregator v0.7.0/go.mod h1:ZpKvnMvsNqp3qi9XzJJWQNzr8YcF4C4v6g6VzFQ35EQ= github.com/offchainlabs/go-solidity-sha3 v0.1.2 h1:IJ/KUv8zW5+Rtq/VvhNjq/Q7MDXjDx1ArAvkJhBRQAs= github.com/offchainlabs/go-solidity-sha3 v0.1.2/go.mod h1:WYAU7UTm1wXzEhnsTt843T77fKfR9x/rqqzjm8NJ3Mc= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= @@ -291,6 +305,7 @@ gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLks gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce h1:+JknDZhAj8YMt7GC73Ei8pv4MzjDUNPHgQWJdtMAaDU= From a18311d2ec2e928f604143edbf108aba21dda0d6 Mon Sep 17 00:00:00 2001 From: Harry Kalodner Date: Tue, 1 Sep 2020 13:39:42 -0400 Subject: [PATCH 03/29] Print batch info --- packages/arb-tx-aggregator/batcher/batcher.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/arb-tx-aggregator/batcher/batcher.go b/packages/arb-tx-aggregator/batcher/batcher.go index 3474b6e245..65ad2d1328 100644 --- a/packages/arb-tx-aggregator/batcher/batcher.go +++ b/packages/arb-tx-aggregator/batcher/batcher.go @@ -148,6 +148,8 @@ func NewBatcher( log.Fatal("Error submitted batch", err) } + log.Println("Batch", receipt.TxHash, "completed at block", receipt.BlockNumber, "using", receipt.GasUsed, "gas") + // batch succeeded server.Lock() server.pendingSentBatches.Remove(server.pendingSentBatches.Front()) From 4b465d7e6e763ea855cddd09471726cba8d626f4 Mon Sep 17 00:00:00 2001 From: Harry Kalodner Date: Tue, 1 Sep 2020 13:46:35 -0400 Subject: [PATCH 04/29] Fix print --- packages/arb-tx-aggregator/batcher/batcher.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/arb-tx-aggregator/batcher/batcher.go b/packages/arb-tx-aggregator/batcher/batcher.go index 65ad2d1328..c1d380ad2f 100644 --- a/packages/arb-tx-aggregator/batcher/batcher.go +++ b/packages/arb-tx-aggregator/batcher/batcher.go @@ -148,7 +148,7 @@ func NewBatcher( log.Fatal("Error submitted batch", err) } - log.Println("Batch", receipt.TxHash, "completed at block", receipt.BlockNumber, "using", receipt.GasUsed, "gas") + log.Println("Batch with tx", receipt.TxHash.Hex(), "completed at block", receipt.BlockNumber, "using", receipt.GasUsed, "gas") // batch succeeded server.Lock() From 9ad3e4748f56ee473ae24bed4f9c29c584b8ff94 Mon Sep 17 00:00:00 2001 From: Harry Kalodner Date: Tue, 1 Sep 2020 13:54:13 -0400 Subject: [PATCH 05/29] Increase batch time --- packages/arb-tx-aggregator/batcher/batcher.go | 2 +- .../cmd/arb-tx-aggregator/arb-tx-aggregator.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/arb-tx-aggregator/batcher/batcher.go b/packages/arb-tx-aggregator/batcher/batcher.go index c1d380ad2f..e458895333 100644 --- a/packages/arb-tx-aggregator/batcher/batcher.go +++ b/packages/arb-tx-aggregator/batcher/batcher.go @@ -86,7 +86,7 @@ func NewBatcher( go func() { lastBatch := time.Now() - ticker := time.NewTicker(time.Millisecond * 10) + ticker := time.NewTicker(time.Millisecond * 1000) defer ticker.Stop() for { select { diff --git a/packages/arb-tx-aggregator/cmd/arb-tx-aggregator/arb-tx-aggregator.go b/packages/arb-tx-aggregator/cmd/arb-tx-aggregator/arb-tx-aggregator.go index b579055f86..eda8de6cb3 100644 --- a/packages/arb-tx-aggregator/cmd/arb-tx-aggregator/arb-tx-aggregator.go +++ b/packages/arb-tx-aggregator/cmd/arb-tx-aggregator/arb-tx-aggregator.go @@ -89,7 +89,7 @@ func main() { "1235", "8547", rpcVars, - time.Second*5, + time.Second*15, ); err != nil { log.Fatal(err) } From 6d9cd64fed3d9a99973408583a93ab7e6376ca79 Mon Sep 17 00:00:00 2001 From: Harry Kalodner Date: Tue, 1 Sep 2020 15:22:24 -0400 Subject: [PATCH 06/29] Add chainid support --- packages/arb-tx-aggregator/web3/eth.go | 5 +++++ packages/arb-validator/go.mod | 1 + packages/arb-validator/go.sum | 13 +++++++++++++ 3 files changed, 19 insertions(+) diff --git a/packages/arb-tx-aggregator/web3/eth.go b/packages/arb-tx-aggregator/web3/eth.go index 4edf06eccf..3c2b9a9ef7 100644 --- a/packages/arb-tx-aggregator/web3/eth.go +++ b/packages/arb-tx-aggregator/web3/eth.go @@ -31,6 +31,11 @@ func NewServer( return &Server{srv: srv} } +func (s *Server) ChainId(_ *http.Request, _ *EmptyArgs, reply *string) error { + *reply = hexutil.EncodeBig(message.ChainAddressToID(arbcommon.NewAddressFromEth(s.srv.GetChainAddress()))) + return nil +} + func (s *Server) BlockNumber(_ *http.Request, _ *BlockNumberArgs, reply *string) error { block := s.srv.GetBlockCount() *reply = "0x" + new(big.Int).SetUint64(block).Text(16) diff --git a/packages/arb-validator/go.mod b/packages/arb-validator/go.mod index 2785594d0f..4cfc8f2f05 100644 --- a/packages/arb-validator/go.mod +++ b/packages/arb-validator/go.mod @@ -7,6 +7,7 @@ require ( github.com/golang/protobuf v1.4.2 github.com/offchainlabs/arbitrum/packages/arb-avm-cpp v0.7.0 github.com/offchainlabs/arbitrum/packages/arb-checkpointer v0.7.0 + github.com/offchainlabs/arbitrum/packages/arb-tx-aggregator v0.7.0 // indirect github.com/offchainlabs/arbitrum/packages/arb-util v0.7.0 github.com/offchainlabs/arbitrum/packages/arb-validator-core v0.7.0 github.com/pkg/errors v0.9.1 diff --git a/packages/arb-validator/go.sum b/packages/arb-validator/go.sum index 08dbd5c1fc..ceadc5899e 100644 --- a/packages/arb-validator/go.sum +++ b/packages/arb-validator/go.sum @@ -64,6 +64,8 @@ github.com/edsrzf/mmap-go v0.0.0-20160512033002-935e0e8a636c h1:JHHhtb9XWJrGNMcr github.com/edsrzf/mmap-go v0.0.0-20160512033002-935e0e8a636c/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= github.com/elastic/gosigar v0.8.1-0.20180330100440-37f05ff46ffa h1:XKAhUk/dtp+CV0VO6mhG2V7jA9vbcGcnYF/Ay9NjZrY= github.com/elastic/gosigar v0.8.1-0.20180330100440-37f05ff46ffa/go.mod h1:cdorVVzy1fhmEqmtgqkoE3bYtCfSCkVyjTyCIo22xvs= +github.com/emirpasic/gods v1.12.0 h1:QAUIPSaCu4G+POclxeqb3F+WPpdKqFGlw36+yOzGlrg= +github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/ethereum/go-ethereum v1.9.14/go.mod h1:oP8FC5+TbICUyftkTWs+8JryntjIJLJvWvApK3z2AYw= @@ -115,6 +117,10 @@ github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/gorilla/handlers v1.4.2/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ= +github.com/gorilla/mux v1.7.4/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= +github.com/gorilla/rpc v1.2.0 h1:WvvdC2lNeT1SP32zrIce5l0ECBfbAlmrmSBsuc57wfk= +github.com/gorilla/rpc v1.2.0/go.mod h1:V4h9r+4sF5HnzqbwIez0fKSpANP0zlYd3qR7p36jkTQ= github.com/gorilla/websocket v1.4.1-0.20190629185528-ae1634f6a989 h1:giknQ4mEuDFmmHSrGcbargOuLHQGtywqo4mheITex54= github.com/gorilla/websocket v1.4.1-0.20190629185528-ae1634f6a989/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/graph-gophers/graphql-go v0.0.0-20191115155744-f33e81362277/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= @@ -142,6 +148,7 @@ github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515 h1:T+h1c/A9Gawja4Y9mFVWj github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= @@ -158,6 +165,11 @@ github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzp github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0= github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E= +github.com/offchainlabs/arbitrum v0.7.0 h1:DvY9R4WP6b76VRQiv2bMonrPFwAWPnSqH1XKy8f+Jtk= +github.com/offchainlabs/arbitrum/packages/arb-evm v0.7.0 h1:rBrJRc1Z2HYjV2H2KA9bLuxQ8uNiRvu32NRXqfht3rs= +github.com/offchainlabs/arbitrum/packages/arb-evm v0.7.0/go.mod h1:BWuhq8K4pyt9v9y1sFpsPJsxuFbY0kN2oa9iOcS+V1M= +github.com/offchainlabs/arbitrum/packages/arb-tx-aggregator v0.7.0 h1:qqWOyi6R5tJ+wouzKt3FIT271IGUmLxhx+mqceGe608= +github.com/offchainlabs/arbitrum/packages/arb-tx-aggregator v0.7.0/go.mod h1:ZpKvnMvsNqp3qi9XzJJWQNzr8YcF4C4v6g6VzFQ35EQ= github.com/offchainlabs/go-solidity-sha3 v0.1.2 h1:IJ/KUv8zW5+Rtq/VvhNjq/Q7MDXjDx1ArAvkJhBRQAs= github.com/offchainlabs/go-solidity-sha3 v0.1.2/go.mod h1:WYAU7UTm1wXzEhnsTt843T77fKfR9x/rqqzjm8NJ3Mc= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= @@ -291,6 +303,7 @@ gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLks gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce h1:+JknDZhAj8YMt7GC73Ei8pv4MzjDUNPHgQWJdtMAaDU= From 5db10ab242fb7d4a9c444e4388e11a95343cee0a Mon Sep 17 00:00:00 2001 From: Harry Kalodner Date: Tue, 1 Sep 2020 16:57:07 -0400 Subject: [PATCH 07/29] Don't print per tx info --- packages/arb-tx-aggregator/batcher/batcher.go | 6 +++--- packages/arb-tx-aggregator/txdb/txdb.go | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/arb-tx-aggregator/batcher/batcher.go b/packages/arb-tx-aggregator/batcher/batcher.go index e458895333..c32d229ddb 100644 --- a/packages/arb-tx-aggregator/batcher/batcher.go +++ b/packages/arb-tx-aggregator/batcher/batcher.go @@ -36,7 +36,7 @@ import ( "github.com/offchainlabs/arbitrum/packages/arb-validator-core/ethutils" ) -const maxBatchSize ethcommon.StorageSize = 500000 +const maxBatchSize ethcommon.StorageSize = 120000 type TransactionBatcher interface { PendingTransactionCount(account common.Address) *uint64 @@ -217,14 +217,14 @@ func (m *Batcher) PendingTransactionCount(account common.Address) *uint64 { // SendTransaction takes a request signed transaction l2message from a client // and puts it in a queue to be included in the next transaction batch func (m *Batcher) SendTransaction(tx *types.Transaction) (common.Hash, error) { - ethSender, err := types.Sender(m.signer, tx) + _, err := types.Sender(m.signer, tx) if err != nil { log.Println("Error processing transaction", err) return common.Hash{}, err } txHash := common.NewHashFromEth(tx.Hash()) - log.Println("Got tx: with hash", txHash, "from", ethSender.Hex()) + //log.Println("Got tx: with hash", txHash, "from", ethSender.Hex()) m.Lock() defer m.Unlock() diff --git a/packages/arb-tx-aggregator/txdb/txdb.go b/packages/arb-tx-aggregator/txdb/txdb.go index 8837ac4d04..0b3336a69f 100644 --- a/packages/arb-tx-aggregator/txdb/txdb.go +++ b/packages/arb-tx-aggregator/txdb/txdb.go @@ -224,10 +224,10 @@ func (txdb *TxDB) processAssertion(ctx context.Context, assertion *protocol.Exec switch res := res.(type) { case *evm.TxResult: - log.Println("Got result for", res.IncomingRequest.MessageID, res.ResultCode) if err := txdb.as.SaveRequest(res.IncomingRequest.MessageID, logIndex); err != nil { return nil, err } + //log.Println("Got result for", res.IncomingRequest.MessageID, res.ResultCode) case *evm.BlockInfo: if i != len(avmLogs)-1 { return nil, errors.New("block info should only come at end of assertion") From 377bba8c0529e37f0f963105e70bf6c611cbaea9 Mon Sep 17 00:00:00 2001 From: Harry Kalodner Date: Wed, 2 Sep 2020 17:39:25 -0400 Subject: [PATCH 08/29] Increase avm runner steps --- packages/arb-avm-cpp/app/main.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/arb-avm-cpp/app/main.cpp b/packages/arb-avm-cpp/app/main.cpp index 7bc028273f..943cd8e988 100644 --- a/packages/arb-avm-cpp/app/main.cpp +++ b/packages/arb-avm-cpp/app/main.cpp @@ -102,8 +102,8 @@ int main(int argc, char* argv[]) { } } - auto assertion = - mach.run(100000000, std::move(inbox_messages), std::chrono::seconds(0)); + auto assertion = mach.run(10000000000000, std::move(inbox_messages), + std::chrono::seconds(0)); std::cout << "Produced " << assertion.logs.size() << " logs\n"; From c9c17aaeb3600bfa287fd818bfa0dce026aff813 Mon Sep 17 00:00:00 2001 From: Harry Kalodner Date: Wed, 2 Sep 2020 17:43:34 -0400 Subject: [PATCH 09/29] Return null from json rpc is block is not found --- packages/arb-tx-aggregator/web3/eth.go | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/arb-tx-aggregator/web3/eth.go b/packages/arb-tx-aggregator/web3/eth.go index 3c2b9a9ef7..c8c16663e5 100644 --- a/packages/arb-tx-aggregator/web3/eth.go +++ b/packages/arb-tx-aggregator/web3/eth.go @@ -119,7 +119,9 @@ func (s *Server) GetBlockByHash(r *http.Request, args *GetBlockByHashArgs, reply header, err := s.srv.GetBlockHeaderByHash(r.Context(), blockHash) if err != nil { - return err + // If we can't get the header, return nil + *reply = nil + return nil } return s.getBlock(header, args.IncludeTxData, reply) } @@ -131,7 +133,9 @@ func (s *Server) GetBlockByNumber(r *http.Request, args *GetBlockByNumberArgs, r } header, err := s.srv.GetBlockHeaderByNumber(r.Context(), height) if err != nil { - return err + // If we can't get the header, return nil + *reply = nil + return nil } return s.getBlock(header, args.IncludeTxData, reply) } From 5ef0e99d814bf25da4d2d1d922311885409846d1 Mon Sep 17 00:00:00 2001 From: Harry Kalodner Date: Wed, 2 Sep 2020 17:43:51 -0400 Subject: [PATCH 10/29] Fix valid node hash --- packages/arb-validator/structures/node.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/arb-validator/structures/node.go b/packages/arb-validator/structures/node.go index f7af3a6685..6498636959 100644 --- a/packages/arb-validator/structures/node.go +++ b/packages/arb-validator/structures/node.go @@ -296,7 +296,7 @@ func (node *Node) calculateNodeDataHash(params valprotocol.ChainParams) common.H } if node.linkType == valprotocol.ValidChildType { return hashing.SoliditySHA3( - hashing.Uint256(big.NewInt(0)), + hashing.Uint256(node.prev.VMProtoData().MessageCount), hashing.Bytes32(node.disputable.Assertion.LastMessageHash), hashing.Bytes32(node.disputable.Assertion.LastLogHash), ) From 3ae9f8f6d03415d80a2f3ae410fed4db9851e43c Mon Sep 17 00:00:00 2001 From: Harry Kalodner Date: Wed, 2 Sep 2020 17:45:11 -0400 Subject: [PATCH 11/29] Save requests after block --- packages/arb-tx-aggregator/txdb/txdb.go | 90 ++++++++++++------------- packages/arb-tx-aggregator/web3/eth.go | 9 ++- 2 files changed, 49 insertions(+), 50 deletions(-) diff --git a/packages/arb-tx-aggregator/txdb/txdb.go b/packages/arb-tx-aggregator/txdb/txdb.go index 8837ac4d04..a46c852cac 100644 --- a/packages/arb-tx-aggregator/txdb/txdb.go +++ b/packages/arb-tx-aggregator/txdb/txdb.go @@ -204,7 +204,6 @@ func (txdb *TxDB) processAssertion(ctx context.Context, assertion *protocol.Exec } } - var lastBlock *common.BlockId avmLogs := assertion.ParseLogs() for i, avmLog := range avmLogs { logIndex, err := txdb.as.LogCount() @@ -222,64 +221,61 @@ func (txdb *TxDB) processAssertion(ctx context.Context, assertion *protocol.Exec continue } - switch res := res.(type) { - case *evm.TxResult: - log.Println("Got result for", res.IncomingRequest.MessageID, res.ResultCode) - if err := txdb.as.SaveRequest(res.IncomingRequest.MessageID, logIndex); err != nil { - return nil, err - } - case *evm.BlockInfo: - if i != len(avmLogs)-1 { - return nil, errors.New("block info should only come at end of assertion") - } - - txCount := res.BlockStats.TxCount.Uint64() - startLog := res.FirstAVMLog().Uint64() - ethLogs := make([]*types.Log, 0) - txResults := make([]*evm.TxResult, 0, txCount) - for i := uint64(0); i < txCount; i++ { - avmLog, err := txdb.GetLog(startLog + i) - if err != nil { - return nil, err - } - txRes, err := evm.NewTxResultFromValue(avmLog) - if err != nil { - return nil, err - } - txResults = append(txResults, txRes) - } + blockInfo, ok := res.(*evm.BlockInfo) + if !ok { + continue + } - for _, txRes := range txResults { - for _, evmLog := range txRes.EVMLogs { - ethLogs = append(ethLogs, &types.Log{ - Address: evmLog.Address.ToEthAddress(), - Topics: common.NewEthHashesFromHashes(evmLog.Topics), - }) - } - } + if i != len(avmLogs)-1 { + return nil, errors.New("block info should only come at end of assertion") + } - block, err := txdb.timeGetter.BlockIdForHeight(ctx, common.NewTimeBlocks(res.BlockNum)) + txCount := blockInfo.BlockStats.TxCount.Uint64() + startLog := blockInfo.FirstAVMLog().Uint64() + ethLogs := make([]*types.Log, 0) + txResults := make([]*evm.TxResult, 0, txCount) + for i := uint64(0); i < txCount; i++ { + avmLog, err := txdb.GetLog(startLog + i) if err != nil { return nil, err } - logBloom := types.BytesToBloom(types.LogsBloom(ethLogs).Bytes()) - if err := txdb.as.SaveBlock(block, logIndex, logBloom); err != nil { + txRes, err := evm.NewTxResultFromValue(avmLog) + if err != nil { return nil, err } + txResults = append(txResults, txRes) + } - for i, txRes := range txResults { - if err := txdb.as.SaveRequest(txRes.IncomingRequest.MessageID, startLog+uint64(i)); err != nil { - return nil, err - } + for _, txRes := range txResults { + for _, evmLog := range txRes.EVMLogs { + ethLogs = append(ethLogs, &types.Log{ + Address: evmLog.Address.ToEthAddress(), + Topics: common.NewEthHashesFromHashes(evmLog.Topics), + }) } + } - lastBlock = block - txdb.callMut.Lock() - txdb.addSnap(res.BlockNum, res.Timestamp) - txdb.callMut.Unlock() + block, err := txdb.timeGetter.BlockIdForHeight(ctx, common.NewTimeBlocks(blockInfo.BlockNum)) + if err != nil { + return nil, err + } + logBloom := types.BytesToBloom(types.LogsBloom(ethLogs).Bytes()) + if err := txdb.as.SaveBlock(block, logIndex, logBloom); err != nil { + return nil, err } + + for i, txRes := range txResults { + if err := txdb.as.SaveRequest(txRes.IncomingRequest.MessageID, startLog+uint64(i)); err != nil { + return nil, err + } + } + + txdb.callMut.Lock() + txdb.addSnap(blockInfo.BlockNum, blockInfo.Timestamp) + txdb.callMut.Unlock() + return block, nil } - return lastBlock, nil + return nil, nil } func (txdb *TxDB) GetMessage(index uint64) (value.Value, error) { diff --git a/packages/arb-tx-aggregator/web3/eth.go b/packages/arb-tx-aggregator/web3/eth.go index c8c16663e5..81cf8c8986 100644 --- a/packages/arb-tx-aggregator/web3/eth.go +++ b/packages/arb-tx-aggregator/web3/eth.go @@ -286,13 +286,16 @@ func (s *Server) GetTransactionReceipt(r *http.Request, args *GetTransactionRece return err } - header, err := s.srv.GetBlockHeaderByNumber(r.Context(), result.IncomingRequest.ChainTime.BlockNum.AsInt().Uint64()) + blockInfo, err := s.srv.BlockInfo(result.IncomingRequest.ChainTime.BlockNum.AsInt().Uint64()) if err != nil { - // If header has been reorged, don't return a receipt + return err + } + if blockInfo == nil { + log.Println("failed to get block info for block with tx") return nil } - receipt := result.ToEthReceipt(arbcommon.NewHashFromEth(header.Hash())) + receipt := result.ToEthReceipt(blockInfo.Hash) *reply = &GetTransactionReceiptResult{ Status: receipt.Status, CumulativeGasUsed: receipt.CumulativeGasUsed, From 7abc96197e147584e4fb5a8332993fc231a543fb Mon Sep 17 00:00:00 2001 From: Harry Kalodner Date: Wed, 2 Sep 2020 18:18:25 -0400 Subject: [PATCH 12/29] Reduce assumptions about block log output order --- packages/arb-tx-aggregator/txdb/txdb.go | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/packages/arb-tx-aggregator/txdb/txdb.go b/packages/arb-tx-aggregator/txdb/txdb.go index a46c852cac..617607a6d2 100644 --- a/packages/arb-tx-aggregator/txdb/txdb.go +++ b/packages/arb-tx-aggregator/txdb/txdb.go @@ -204,8 +204,9 @@ func (txdb *TxDB) processAssertion(ctx context.Context, assertion *protocol.Exec } } - avmLogs := assertion.ParseLogs() - for i, avmLog := range avmLogs { + var lastBlock *common.BlockId + var lastBlockInfo *evm.BlockInfo + for _, avmLog := range assertion.ParseLogs() { logIndex, err := txdb.as.LogCount() if err != nil { return nil, err @@ -226,10 +227,6 @@ func (txdb *TxDB) processAssertion(ctx context.Context, assertion *protocol.Exec continue } - if i != len(avmLogs)-1 { - return nil, errors.New("block info should only come at end of assertion") - } - txCount := blockInfo.BlockStats.TxCount.Uint64() startLog := blockInfo.FirstAVMLog().Uint64() ethLogs := make([]*types.Log, 0) @@ -270,12 +267,16 @@ func (txdb *TxDB) processAssertion(ctx context.Context, assertion *protocol.Exec } } + lastBlock = block + lastBlockInfo = blockInfo + } + + if lastBlockInfo != nil { txdb.callMut.Lock() - txdb.addSnap(blockInfo.BlockNum, blockInfo.Timestamp) + txdb.addSnap(lastBlockInfo.BlockNum, lastBlockInfo.Timestamp) txdb.callMut.Unlock() - return block, nil } - return nil, nil + return lastBlock, nil } func (txdb *TxDB) GetMessage(index uint64) (value.Value, error) { From 544e23ca5232b92688eb6595ddf7be5bca8fe6fa Mon Sep 17 00:00:00 2001 From: Harry Kalodner Date: Wed, 2 Sep 2020 22:59:51 -0400 Subject: [PATCH 13/29] Fix race conditions --- packages/arb-evm/message/l2Message.go | 6 +++--- packages/arb-tx-aggregator/batcher/batcher.go | 3 +-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/packages/arb-evm/message/l2Message.go b/packages/arb-evm/message/l2Message.go index cf28c49563..3552c24d12 100644 --- a/packages/arb-evm/message/l2Message.go +++ b/packages/arb-evm/message/l2Message.go @@ -278,10 +278,10 @@ func (t ContractTransaction) AsData() ([]byte, error) { func (t ContractTransaction) AsDataSafe() []byte { ret := make([]byte, 0) - ret = append(ret, math.U256Bytes(t.MaxGas)...) - ret = append(ret, math.U256Bytes(t.GasPriceBid)...) + ret = append(ret, math.U256Bytes(new(big.Int).Set(t.MaxGas))...) + ret = append(ret, math.U256Bytes(new(big.Int).Set(t.GasPriceBid))...) ret = append(ret, addressData(t.DestAddress)...) - ret = append(ret, math.U256Bytes(t.Payment)...) + ret = append(ret, math.U256Bytes(new(big.Int).Set(t.Payment))...) ret = append(ret, t.Data...) return ret } diff --git a/packages/arb-tx-aggregator/batcher/batcher.go b/packages/arb-tx-aggregator/batcher/batcher.go index c32d229ddb..1d81bc47c2 100644 --- a/packages/arb-tx-aggregator/batcher/batcher.go +++ b/packages/arb-tx-aggregator/batcher/batcher.go @@ -224,7 +224,6 @@ func (m *Batcher) SendTransaction(tx *types.Transaction) (common.Hash, error) { } txHash := common.NewHashFromEth(tx.Hash()) - //log.Println("Got tx: with hash", txHash, "from", ethSender.Hex()) m.Lock() defer m.Unlock() @@ -248,7 +247,7 @@ func (m *Batcher) SendTransaction(tx *types.Transaction) (common.Hash, error) { } func (m *Batcher) setupPending() { - //snap := m.db.LatestSnapshot() + //snap := m.db.LatestSnapshot().Clone() //if m.pendingBatch.snap.Height().Cmp(snap.Height()) < 0 { // // Add all of the already broadcast transactions to the snapshot // // If they were already included, they'll be ignored because they will From 600564fc19a9042884604576d8ecc8261f4e6932 Mon Sep 17 00:00:00 2001 From: Harry Kalodner Date: Wed, 2 Sep 2020 23:00:53 -0400 Subject: [PATCH 14/29] Remove unneeded debug output --- packages/arb-tx-aggregator/web3/codec.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/arb-tx-aggregator/web3/codec.go b/packages/arb-tx-aggregator/web3/codec.go index cf49675c7b..f745578f92 100644 --- a/packages/arb-tx-aggregator/web3/codec.go +++ b/packages/arb-tx-aggregator/web3/codec.go @@ -168,6 +168,9 @@ func init() { ignoredMethods["eth_getBlockByNumber"] = true ignoredMethods["eth_getTransactionReceipt"] = true ignoredMethods["net_version"] = true + ignoredMethods["eth_getCode"] = true + ignoredMethods["eth_getTransactionCount"] = true + ignoredMethods["eth_gasPrice"] = true } func (c *CodecRequest) ReadRequest(args interface{}) error { From 4606b1fba8b515b20e78fb106bea36a66944ceb4 Mon Sep 17 00:00:00 2001 From: Harry Kalodner Date: Wed, 2 Sep 2020 23:27:44 -0400 Subject: [PATCH 15/29] Get block log index from block --- packages/arb-tx-aggregator/txdb/txdb.go | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/packages/arb-tx-aggregator/txdb/txdb.go b/packages/arb-tx-aggregator/txdb/txdb.go index 617607a6d2..80d84a03af 100644 --- a/packages/arb-tx-aggregator/txdb/txdb.go +++ b/packages/arb-tx-aggregator/txdb/txdb.go @@ -207,11 +207,6 @@ func (txdb *TxDB) processAssertion(ctx context.Context, assertion *protocol.Exec var lastBlock *common.BlockId var lastBlockInfo *evm.BlockInfo for _, avmLog := range assertion.ParseLogs() { - logIndex, err := txdb.as.LogCount() - if err != nil { - return nil, err - } - if err := txdb.as.SaveLog(avmLog); err != nil { return nil, err } @@ -257,7 +252,9 @@ func (txdb *TxDB) processAssertion(ctx context.Context, assertion *protocol.Exec return nil, err } logBloom := types.BytesToBloom(types.LogsBloom(ethLogs).Bytes()) - if err := txdb.as.SaveBlock(block, logIndex, logBloom); err != nil { + + avmLogIndex := blockInfo.ChainStats.AVMLogCount.Uint64() - 1 + if err := txdb.as.SaveBlock(block, avmLogIndex, logBloom); err != nil { return nil, err } From 7f7c9876ec6569940eaf6c7905782450a80beda9 Mon Sep 17 00:00:00 2001 From: Harry Kalodner Date: Thu, 3 Sep 2020 00:20:32 -0400 Subject: [PATCH 16/29] Refactor for easier future multithreading --- packages/arb-tx-aggregator/txdb/txdb.go | 60 +++++++++++++------------ 1 file changed, 31 insertions(+), 29 deletions(-) diff --git a/packages/arb-tx-aggregator/txdb/txdb.go b/packages/arb-tx-aggregator/txdb/txdb.go index 80d84a03af..4bcd9b43a4 100644 --- a/packages/arb-tx-aggregator/txdb/txdb.go +++ b/packages/arb-tx-aggregator/txdb/txdb.go @@ -85,12 +85,12 @@ func New( } // addSnap must be called with callMut locked or during construction -func (txdb *TxDB) addSnap(blockNum *big.Int, timestamp *big.Int) { +func (txdb *TxDB) addSnap(mach machine.Machine, blockNum *big.Int, timestamp *big.Int) { currentTime := inbox.ChainTime{ BlockNum: common.NewTimeBlocks(new(big.Int).Set(blockNum)), Timestamp: new(big.Int).Set(timestamp), } - snap := snapshot.NewSnapshot(txdb.mach.Clone(), currentTime, message.ChainAddressToID(txdb.chain), new(big.Int).Set(txdb.lastInboxSeq)) + snap := snapshot.NewSnapshot(mach, currentTime, message.ChainAddressToID(txdb.chain), new(big.Int).Set(txdb.lastInboxSeq)) txdb.snapCache.addSnapshot(snap) } @@ -132,23 +132,37 @@ func (txdb *TxDB) RestoreFromCheckpoint(ctx context.Context) error { defer txdb.callMut.Unlock() txdb.lastBlockProcessed = blockId txdb.lastInboxSeq = lastInboxSeq - txdb.addSnap(block.BlockNum, block.Timestamp) + txdb.addSnap(mach.Clone(), block.BlockNum, block.Timestamp) return nil } +type blockData struct { + block *common.BlockId + blockInfo *evm.BlockInfo +} + func (txdb *TxDB) AddMessages(ctx context.Context, msgs []arbbridge.MessageDeliveredEvent, finishedBlock *common.BlockId) error { timestamp, err := txdb.timeGetter.TimestampForBlockHash(ctx, finishedBlock.HeaderHash) if err != nil { return err } - var lastBlock *common.BlockId + var lastBlock *blockData for _, msg := range msgs { - block, err := txdb.processMessage(ctx, msg.Message) + // TODO: Give ExecuteAssertion the ability to run unbounded until it blocks + // The max steps here is a hack since it should just run until it blocks + assertion, _ := txdb.mach.ExecuteAssertion(1000000000000, []inbox.InboxMessage{msg.Message}, 0) + txdb.callMut.Lock() + txdb.lastInboxSeq = msg.Message.InboxSeqNum + txdb.callMut.Unlock() + block, err := txdb.processAssertion(ctx, assertion) if err != nil { return err } if block != nil { + txdb.callMut.Lock() + txdb.addSnap(txdb.mach.Clone(), block.blockInfo.BlockNum, block.blockInfo.Timestamp) + txdb.callMut.Unlock() lastBlock = block } } @@ -162,6 +176,9 @@ func (txdb *TxDB) AddMessages(ctx context.Context, msgs []arbbridge.MessageDeliv return err } if block != nil { + txdb.callMut.Lock() + txdb.addSnap(txdb.mach.Clone(), block.blockInfo.BlockNum, block.blockInfo.Timestamp) + txdb.callMut.Unlock() lastBlock = block } @@ -171,7 +188,7 @@ func (txdb *TxDB) AddMessages(ctx context.Context, msgs []arbbridge.MessageDeliv latestSnap := txdb.snapCache.latest() if latestSnap == nil || latestSnap.Height().Cmp(finishedBlock.Height) < 0 { - txdb.addSnap(finishedBlock.Height.AsInt(), timestamp) + txdb.addSnap(txdb.mach.Clone(), finishedBlock.Height.AsInt(), timestamp) } txdb.callMut.Unlock() @@ -182,30 +199,19 @@ func (txdb *TxDB) AddMessages(ctx context.Context, msgs []arbbridge.MessageDeliv cpData := make([]byte, 64) copy(cpData[:], machHash[:]) copy(cpData[32:], math.U256Bytes(lastInboxSeq)) - txdb.checkpointer.AsyncSaveCheckpoint(lastBlock, cpData, ctx) + txdb.checkpointer.AsyncSaveCheckpoint(lastBlock.block, cpData, ctx) } return nil } -func (txdb *TxDB) processMessage(ctx context.Context, msg inbox.InboxMessage) (*common.BlockId, error) { - // TODO: Give ExecuteAssertion the ability to run unbounded until it blocks - // The max steps here is a hack since it should just run until it blocks - assertion, _ := txdb.mach.ExecuteAssertion(1000000000000, []inbox.InboxMessage{msg}, 0) - txdb.callMut.Lock() - txdb.lastInboxSeq = msg.InboxSeqNum - txdb.callMut.Unlock() - return txdb.processAssertion(ctx, assertion) -} - -func (txdb *TxDB) processAssertion(ctx context.Context, assertion *protocol.ExecutionAssertion) (*common.BlockId, error) { +func (txdb *TxDB) processAssertion(ctx context.Context, assertion *protocol.ExecutionAssertion) (*blockData, error) { for _, avmMessage := range assertion.ParseOutMessages() { if err := txdb.as.SaveMessage(avmMessage); err != nil { return nil, err } } - var lastBlock *common.BlockId - var lastBlockInfo *evm.BlockInfo + var lastBlock *blockData for _, avmLog := range assertion.ParseLogs() { if err := txdb.as.SaveLog(avmLog); err != nil { return nil, err @@ -227,7 +233,7 @@ func (txdb *TxDB) processAssertion(ctx context.Context, assertion *protocol.Exec ethLogs := make([]*types.Log, 0) txResults := make([]*evm.TxResult, 0, txCount) for i := uint64(0); i < txCount; i++ { - avmLog, err := txdb.GetLog(startLog + i) + avmLog, err := txdb.as.GetLog(startLog + i) if err != nil { return nil, err } @@ -264,14 +270,10 @@ func (txdb *TxDB) processAssertion(ctx context.Context, assertion *protocol.Exec } } - lastBlock = block - lastBlockInfo = blockInfo - } - - if lastBlockInfo != nil { - txdb.callMut.Lock() - txdb.addSnap(lastBlockInfo.BlockNum, lastBlockInfo.Timestamp) - txdb.callMut.Unlock() + lastBlock = &blockData{ + block: block, + blockInfo: blockInfo, + } } return lastBlock, nil } From c0430ad7800b6150699eaaf92e08733c8c70973b Mon Sep 17 00:00:00 2001 From: Harry Kalodner Date: Thu, 3 Sep 2020 00:36:11 -0400 Subject: [PATCH 17/29] More refactoring --- packages/arb-tx-aggregator/txdb/txdb.go | 107 +++++++++++++++--------- 1 file changed, 69 insertions(+), 38 deletions(-) diff --git a/packages/arb-tx-aggregator/txdb/txdb.go b/packages/arb-tx-aggregator/txdb/txdb.go index 4bcd9b43a4..173b7308dc 100644 --- a/packages/arb-tx-aggregator/txdb/txdb.go +++ b/packages/arb-tx-aggregator/txdb/txdb.go @@ -155,15 +155,19 @@ func (txdb *TxDB) AddMessages(ctx context.Context, msgs []arbbridge.MessageDeliv txdb.callMut.Lock() txdb.lastInboxSeq = msg.Message.InboxSeqNum txdb.callMut.Unlock() - block, err := txdb.processAssertion(ctx, assertion) + processedAssertion, err := txdb.processAssertion(ctx, assertion) if err != nil { return err } - if block != nil { + if err := saveAssertion(txdb.as, processedAssertion); err != nil { + return err + } + if len(processedAssertion.blocks) > 0 { + block := processedAssertion.blocks[len(processedAssertion.blocks)-1] txdb.callMut.Lock() txdb.addSnap(txdb.mach.Clone(), block.blockInfo.BlockNum, block.blockInfo.Timestamp) txdb.callMut.Unlock() - lastBlock = block + lastBlock = &block } } @@ -171,15 +175,19 @@ func (txdb *TxDB) AddMessages(ctx context.Context, msgs []arbbridge.MessageDeliv // TODO: Give ExecuteCallServerAssertion the ability to run unbounded until it blocks // The max steps here is a hack since it should just run until it blocks assertion, _ := txdb.mach.ExecuteCallServerAssertion(1000000000000, nil, value.NewIntValue(nextBlockHeight), 0) - block, err := txdb.processAssertion(ctx, assertion) + processedAssertion, err := txdb.processAssertion(ctx, assertion) if err != nil { return err } - if block != nil { + if err := saveAssertion(txdb.as, processedAssertion); err != nil { + return err + } + if len(processedAssertion.blocks) > 0 { + block := processedAssertion.blocks[len(processedAssertion.blocks)-1] txdb.callMut.Lock() txdb.addSnap(txdb.mach.Clone(), block.blockInfo.BlockNum, block.blockInfo.Timestamp) txdb.callMut.Unlock() - lastBlock = block + lastBlock = &block } txdb.callMut.Lock() @@ -204,19 +212,16 @@ func (txdb *TxDB) AddMessages(ctx context.Context, msgs []arbbridge.MessageDeliv return nil } -func (txdb *TxDB) processAssertion(ctx context.Context, assertion *protocol.ExecutionAssertion) (*blockData, error) { - for _, avmMessage := range assertion.ParseOutMessages() { - if err := txdb.as.SaveMessage(avmMessage); err != nil { - return nil, err - } - } - - var lastBlock *blockData - for _, avmLog := range assertion.ParseLogs() { - if err := txdb.as.SaveLog(avmLog); err != nil { - return nil, err - } +type processedAssertion struct { + avmLogs []value.Value + blocks []blockData + assertion *protocol.ExecutionAssertion +} +func (txdb *TxDB) processAssertion(ctx context.Context, assertion *protocol.ExecutionAssertion) (processedAssertion, error) { + blocks := make([]blockData, 0) + avmLogs := assertion.ParseLogs() + for _, avmLog := range avmLogs { res, err := evm.NewResultFromValue(avmLog) if err != nil { log.Println("Error parsing log result", err) @@ -228,18 +233,53 @@ func (txdb *TxDB) processAssertion(ctx context.Context, assertion *protocol.Exec continue } - txCount := blockInfo.BlockStats.TxCount.Uint64() - startLog := blockInfo.FirstAVMLog().Uint64() + block, err := txdb.timeGetter.BlockIdForHeight(ctx, common.NewTimeBlocks(blockInfo.BlockNum)) + if err != nil { + return processedAssertion{}, err + } + + blocks = append(blocks, blockData{ + block: block, + blockInfo: blockInfo, + }) + } + + return processedAssertion{ + avmLogs: avmLogs, + blocks: blocks, + assertion: assertion, + }, nil +} + +func saveAssertion( + as *cmachine.AggregatorStore, + processed processedAssertion, +) error { + for _, avmLog := range processed.avmLogs { + if err := as.SaveLog(avmLog); err != nil { + return err + } + } + + for _, avmMessage := range processed.assertion.ParseOutMessages() { + if err := as.SaveMessage(avmMessage); err != nil { + return err + } + } + + for _, info := range processed.blocks { + txCount := info.blockInfo.BlockStats.TxCount.Uint64() + startLog := info.blockInfo.FirstAVMLog().Uint64() ethLogs := make([]*types.Log, 0) txResults := make([]*evm.TxResult, 0, txCount) for i := uint64(0); i < txCount; i++ { - avmLog, err := txdb.as.GetLog(startLog + i) + avmLog, err := as.GetLog(startLog + i) if err != nil { - return nil, err + return err } txRes, err := evm.NewTxResultFromValue(avmLog) if err != nil { - return nil, err + return err } txResults = append(txResults, txRes) } @@ -253,29 +293,20 @@ func (txdb *TxDB) processAssertion(ctx context.Context, assertion *protocol.Exec } } - block, err := txdb.timeGetter.BlockIdForHeight(ctx, common.NewTimeBlocks(blockInfo.BlockNum)) - if err != nil { - return nil, err - } logBloom := types.BytesToBloom(types.LogsBloom(ethLogs).Bytes()) - avmLogIndex := blockInfo.ChainStats.AVMLogCount.Uint64() - 1 - if err := txdb.as.SaveBlock(block, avmLogIndex, logBloom); err != nil { - return nil, err + avmLogIndex := info.blockInfo.ChainStats.AVMLogCount.Uint64() - 1 + if err := as.SaveBlock(info.block, avmLogIndex, logBloom); err != nil { + return err } for i, txRes := range txResults { - if err := txdb.as.SaveRequest(txRes.IncomingRequest.MessageID, startLog+uint64(i)); err != nil { - return nil, err + if err := as.SaveRequest(txRes.IncomingRequest.MessageID, startLog+uint64(i)); err != nil { + return err } } - - lastBlock = &blockData{ - block: block, - blockInfo: blockInfo, - } } - return lastBlock, nil + return nil } func (txdb *TxDB) GetMessage(index uint64) (value.Value, error) { From 169ce746561f1ba5d75585d38486468e4e382acf Mon Sep 17 00:00:00 2001 From: Harry Kalodner Date: Thu, 3 Sep 2020 01:18:46 -0400 Subject: [PATCH 18/29] Improve error message --- .../data_storage/src/value/machine.cpp | 25 ++++++++++++++----- 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/packages/arb-avm-cpp/data_storage/src/value/machine.cpp b/packages/arb-avm-cpp/data_storage/src/value/machine.cpp index 9bca6c3951..612a0ed05c 100644 --- a/packages/arb-avm-cpp/data_storage/src/value/machine.cpp +++ b/packages/arb-avm-cpp/data_storage/src/value/machine.cpp @@ -119,12 +119,25 @@ DeleteResults deleteMachine(Transaction& transaction, uint256_t machine_hash) { deleteCode(transaction, segment_counts); - if (!(delete_static_res.status.ok() && - delete_register_res.status.ok() && - delete_datastack_res.status.ok() && - delete_auxstack_res.status.ok() && - delete_staged_message_res.status.ok())) { - std::cout << "error deleting checkpoint" << std::endl; + if (!delete_static_res.status.ok()) { + std::cout << "error deleting static in checkpoint" << std::endl; + } + + if (!delete_register_res.status.ok()) { + std::cout << "error deleting register in checkpoint" << std::endl; + } + + if (!delete_datastack_res.status.ok()) { + std::cout << "error deleting datastack in checkpoint" << std::endl; + } + + if (!delete_auxstack_res.status.ok()) { + std::cout << "error deleting auxstack in checkpoint" << std::endl; + } + + if (!delete_staged_message_res.status.ok()) { + std::cout << "error deleting staged message in checkpoint" + << std::endl; } } return delete_results; From c96d39181859fef872d87b2e070d6410955bb757 Mon Sep 17 00:00:00 2001 From: Harry Kalodner Date: Thu, 3 Sep 2020 01:34:53 -0400 Subject: [PATCH 19/29] Make pending state optional --- packages/arb-tx-aggregator/batcher/batcher.go | 100 ++++++++++-------- packages/arb-tx-aggregator/batcher/queue.go | 49 +++++---- .../arb-tx-aggregator/arb-tx-aggregator.go | 2 + packages/arb-tx-aggregator/rpc/launch.go | 3 +- packages/arb-validator/go.mod | 1 + packages/arb-validator/go.sum | 11 ++ tests/fibgo/connection_test.go | 1 + 7 files changed, 98 insertions(+), 69 deletions(-) diff --git a/packages/arb-tx-aggregator/batcher/batcher.go b/packages/arb-tx-aggregator/batcher/batcher.go index 1d81bc47c2..8f5442746e 100644 --- a/packages/arb-tx-aggregator/batcher/batcher.go +++ b/packages/arb-tx-aggregator/batcher/batcher.go @@ -50,9 +50,10 @@ type pendingSentBatch struct { } type Batcher struct { - signer types.Signer - client ethutils.EthClient - globalInbox arbbridge.GlobalInbox + signer types.Signer + client ethutils.EthClient + globalInbox arbbridge.GlobalInbox + keepPendingState bool db *txdb.TxDB @@ -71,12 +72,14 @@ func NewBatcher( client ethutils.EthClient, globalInbox arbbridge.GlobalInbox, maxBatchTime time.Duration, + keepPendingState bool, ) *Batcher { signer := types.NewEIP155Signer(message.ChainAddressToID(rollupAddress)) server := &Batcher{ signer: signer, client: client, globalInbox: globalInbox, + keepPendingState: keepPendingState, db: db, valid: true, queuedTxes: newTxQueues(), @@ -98,14 +101,17 @@ func NewBatcher( for { tx, accountIndex, cont := server.pendingBatch.popRandomTx(server.queuedTxes, signer) if tx != nil { - //newSnap := server.pendingBatch.snap.Clone() - //server.Unlock() - //newSnap, err := snapWithTx(newSnap, tx, signer) - //server.Lock() - //if err != nil { - // log.Println("Aggregator ignored invalid tx", err) - // continue - //} + if keepPendingState { + newSnap := server.pendingBatch.snap.Clone() + server.Unlock() + newSnap, err := snapWithTx(newSnap, tx, signer) + server.Lock() + if err != nil { + log.Println("Aggregator ignored invalid tx", err) + continue + } + server.pendingBatch.updateSnap(newSnap) + } server.pendingBatch.addIncludedTx(tx) server.queuedTxes.maybeRemoveAccountAtIndex(accountIndex) } @@ -196,11 +202,13 @@ func (m *Batcher) sendBatch(ctx context.Context) { } func (m *Batcher) PendingSnapshot() *snapshot.Snapshot { - //m.Lock() - //defer m.Unlock() - return m.db.LatestSnapshot() - //m.setupPending() - //return m.pendingBatch.snap.Clone() + if !m.keepPendingState { + return m.db.LatestSnapshot() + } + m.Lock() + defer m.Unlock() + m.setupPending() + return m.pendingBatch.snap.Clone() } func (m *Batcher) PendingTransactionCount(account common.Address) *uint64 { @@ -232,11 +240,13 @@ func (m *Batcher) SendTransaction(tx *types.Transaction) (common.Hash, error) { return common.Hash{}, errors.New("tx aggregator is not running") } - // Make sure we have an up to date batch to check against - m.setupPending() + if m.keepPendingState { + // Make sure we have an up to date batch to check against + m.setupPending() - if err := m.pendingBatch.checkValidForQueue(tx); err != nil { - return common.Hash{}, err + if err := m.pendingBatch.checkValidForQueue(tx); err != nil { + return common.Hash{}, err + } } if err := m.queuedTxes.addTransaction(tx, m.signer); err != nil { @@ -247,29 +257,29 @@ func (m *Batcher) SendTransaction(tx *types.Transaction) (common.Hash, error) { } func (m *Batcher) setupPending() { - //snap := m.db.LatestSnapshot().Clone() - //if m.pendingBatch.snap.Height().Cmp(snap.Height()) < 0 { - // // Add all of the already broadcast transactions to the snapshot - // // If they were already included, they'll be ignored because they will - // // have invalid sequence numbers - // n := m.pendingSentBatches.Front() - // for n != nil { - // item := n.Value.(*pendingSentBatch) - // for _, tx := range item.txes { - // var err error - // newSnap, err := snapWithTx(snap, tx, m.signer) - // if err != nil { - // continue - // } - // snap = newSnap - // } - // n = n.Next() - // } - // for _, tx := range m.pendingBatch.appliedTxes { - // // Add the pending, but not broadcast txes back into the queue - // // If there's an error here, just throw out the tx - // _ = m.queuedTxes.addTransaction(tx, m.signer) - // } - // m.pendingBatch = newPendingBatch(snap, maxBatchSize, m.signer) - //} + snap := m.db.LatestSnapshot().Clone() + if m.pendingBatch.snap.Height().Cmp(snap.Height()) < 0 { + // Add all of the already broadcast transactions to the snapshot + // If they were already included, they'll be ignored because they will + // have invalid sequence numbers + n := m.pendingSentBatches.Front() + for n != nil { + item := n.Value.(*pendingSentBatch) + for _, tx := range item.txes { + var err error + newSnap, err := snapWithTx(snap, tx, m.signer) + if err != nil { + continue + } + snap = newSnap + } + n = n.Next() + } + for _, tx := range m.pendingBatch.appliedTxes { + // Add the pending, but not broadcast txes back into the queue + // If there's an error here, just throw out the tx + _ = m.queuedTxes.addTransaction(tx, m.signer) + } + m.pendingBatch = newPendingBatch(snap, maxBatchSize, m.signer) + } } diff --git a/packages/arb-tx-aggregator/batcher/queue.go b/packages/arb-tx-aggregator/batcher/queue.go index 64423c3082..5b24980a3a 100644 --- a/packages/arb-tx-aggregator/batcher/queue.go +++ b/packages/arb-tx-aggregator/batcher/queue.go @@ -3,12 +3,16 @@ package batcher import ( "container/heap" "errors" + "log" + "math/rand" + "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/core" "github.com/ethereum/go-ethereum/core/types" + "github.com/offchainlabs/arbitrum/packages/arb-evm/message" "github.com/offchainlabs/arbitrum/packages/arb-tx-aggregator/snapshot" arbcommon "github.com/offchainlabs/arbitrum/packages/arb-util/common" - "math/rand" ) // An TxHeap is a min-heap of transactions sorted by nonce. @@ -217,9 +221,8 @@ func snapWithTx(snap *snapshot.Snapshot, tx *types.Transaction, signer types.Sig return snap, err } -func (p *pendingBatch) addUpdatedSnap(tx *types.Transaction, newSnap *snapshot.Snapshot) { +func (p *pendingBatch) updateSnap(newSnap *snapshot.Snapshot) { p.snap = newSnap - p.addIncludedTx(tx) } func (p *pendingBatch) addIncludedTx(tx *types.Transaction) { @@ -230,25 +233,25 @@ func (p *pendingBatch) addIncludedTx(tx *types.Transaction) { } func (p *pendingBatch) checkValidForQueue(tx *types.Transaction) error { - //ethSender, _ := types.Sender(p.signer, tx) - //sender := arbcommon.NewAddressFromEth(ethSender) - //txCount, err := p.snap.GetTransactionCount(sender) - //if err != nil { - // return err - //} - // - //if tx.Nonce() < txCount.Uint64() { - // return core.ErrNonceTooLow - //} - // - //amount, err := p.snap.GetBalance(sender) - //if err != nil { - // return err - //} - // - //if tx.Cost().Cmp(amount) > 0 { - // log.Println("tx rejected for insufficient funds:", tx.Value(), tx.GasPrice(), tx.Gas(), amount) - // return core.ErrInsufficientFunds - //} + ethSender, _ := types.Sender(p.signer, tx) + sender := arbcommon.NewAddressFromEth(ethSender) + txCount, err := p.snap.GetTransactionCount(sender) + if err != nil { + return err + } + + if tx.Nonce() < txCount.Uint64() { + return core.ErrNonceTooLow + } + + amount, err := p.snap.GetBalance(sender) + if err != nil { + return err + } + + if tx.Cost().Cmp(amount) > 0 { + log.Println("tx rejected for insufficient funds:", tx.Value(), tx.GasPrice(), tx.Gas(), amount) + return core.ErrInsufficientFunds + } return nil } diff --git a/packages/arb-tx-aggregator/cmd/arb-tx-aggregator/arb-tx-aggregator.go b/packages/arb-tx-aggregator/cmd/arb-tx-aggregator/arb-tx-aggregator.go index eda8de6cb3..a00799382d 100644 --- a/packages/arb-tx-aggregator/cmd/arb-tx-aggregator/arb-tx-aggregator.go +++ b/packages/arb-tx-aggregator/cmd/arb-tx-aggregator/arb-tx-aggregator.go @@ -39,6 +39,7 @@ func main() { fs := flag.NewFlagSet("", flag.ContinueOnError) walletArgs := utils.AddWalletFlags(fs) rpcVars := utils2.AddRPCFlags(fs) + keepPendingState := fs.Bool("pending", false, "enable pending state tracking") //go http.ListenAndServe("localhost:6060", nil) @@ -90,6 +91,7 @@ func main() { "8547", rpcVars, time.Second*15, + *keepPendingState, ); err != nil { log.Fatal(err) } diff --git a/packages/arb-tx-aggregator/rpc/launch.go b/packages/arb-tx-aggregator/rpc/launch.go index 944c86d8bb..c8c3be3ae8 100644 --- a/packages/arb-tx-aggregator/rpc/launch.go +++ b/packages/arb-tx-aggregator/rpc/launch.go @@ -43,6 +43,7 @@ func LaunchAggregator( web3Port string, flags utils2.RPCFlags, maxBatchTime time.Duration, + keepPendingState bool, ) error { arbClient := ethbridge.NewEthClient(client) db, err := machineobserver.RunObserver(ctx, rollupAddress, arbClient, executable, dbPath) @@ -64,7 +65,7 @@ func LaunchAggregator( return err } - batch := batcher.NewBatcher(ctx, db, rollupAddress, client, globalInbox, maxBatchTime) + batch := batcher.NewBatcher(ctx, db, rollupAddress, client, globalInbox, maxBatchTime, keepPendingState) srv := aggregator.NewServer(client, batch, rollupAddress, db) errChan := make(chan error, 1) diff --git a/packages/arb-validator/go.mod b/packages/arb-validator/go.mod index 4cfc8f2f05..1a44abdaa8 100644 --- a/packages/arb-validator/go.mod +++ b/packages/arb-validator/go.mod @@ -7,6 +7,7 @@ require ( github.com/golang/protobuf v1.4.2 github.com/offchainlabs/arbitrum/packages/arb-avm-cpp v0.7.0 github.com/offchainlabs/arbitrum/packages/arb-checkpointer v0.7.0 + github.com/offchainlabs/arbitrum/packages/arb-provider-go v0.6.5 // indirect github.com/offchainlabs/arbitrum/packages/arb-tx-aggregator v0.7.0 // indirect github.com/offchainlabs/arbitrum/packages/arb-util v0.7.0 github.com/offchainlabs/arbitrum/packages/arb-validator-core v0.7.0 diff --git a/packages/arb-validator/go.sum b/packages/arb-validator/go.sum index 1d69c73ba7..d70b92f49b 100644 --- a/packages/arb-validator/go.sum +++ b/packages/arb-validator/go.sum @@ -14,8 +14,10 @@ github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6L github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/OneOfOne/xxhash v1.2.5/go.mod h1:eZbhyaAYD41SGSSsnmcpxVoRiQ/MPUTjUdIIOT9Um7Q= github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6 h1:fLjPD/aNc3UIOA6tDi6QXUemppXK3P9BI7mr2hd6gx8= github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= +github.com/VictoriaMetrics/fastcache v1.5.3/go.mod h1:+jv9Ckb+za/P1ZRg/sulP5Ni1v49daAVERr0H3CuscE= github.com/VictoriaMetrics/fastcache v1.5.7 h1:4y6y0G8PRzszQUYIQHHssv/jgPHAb5qQuuDNdCbyAgw= github.com/VictoriaMetrics/fastcache v1.5.7/go.mod h1:ptDBkNMQI4RtmVo8VS/XwRY6RoTu1dAWCbrk+6WsEM8= github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= @@ -44,6 +46,7 @@ github.com/cespare/cp v0.1.0 h1:SE+dxFebS7Iik5LK0tsi1k9ZCxEaFX4AjQmoyA+1dJk= github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= +github.com/cespare/xxhash/v2 v2.0.1-0.20190104013014-3767db7a7e18/go.mod h1:HD5P3vAIAh+Y2GAxg0PrPN1P8WkepXGpjbUPDHJqqKM= github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= @@ -68,6 +71,7 @@ github.com/emirpasic/gods v1.12.0 h1:QAUIPSaCu4G+POclxeqb3F+WPpdKqFGlw36+yOzGlrg github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/ethereum/go-ethereum v1.9.13/go.mod h1:qwN9d1GLyDh0N7Ab8bMGd0H9knaji2jOBm2RrMGjXls= github.com/ethereum/go-ethereum v1.9.14/go.mod h1:oP8FC5+TbICUyftkTWs+8JryntjIJLJvWvApK3z2AYw= github.com/ethereum/go-ethereum v1.9.20 h1:kk/J5OIoaoz3DRrCXznz3RGi212mHHXwzXlY/ZQxcj0= github.com/ethereum/go-ethereum v1.9.20/go.mod h1:JSSTypSMTkGZtAdAChH2wP5dZEvPGh3nUTuDpH+hNrg= @@ -126,12 +130,14 @@ github.com/gorilla/rpc v1.2.0/go.mod h1:V4h9r+4sF5HnzqbwIez0fKSpANP0zlYd3qR7p36j github.com/gorilla/websocket v1.4.1-0.20190629185528-ae1634f6a989 h1:giknQ4mEuDFmmHSrGcbargOuLHQGtywqo4mheITex54= github.com/gorilla/websocket v1.4.1-0.20190629185528-ae1634f6a989/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/graph-gophers/graphql-go v0.0.0-20191115155744-f33e81362277/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= +github.com/hashicorp/golang-lru v0.0.0-20160813221303-0a025b7e63ad/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/holiman/uint256 v1.1.1 h1:4JywC80b+/hSfljFlEBLHrrh+CIONLDz9NuFl0af4Mw= github.com/holiman/uint256 v1.1.1/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25ApIH5Jw= github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/huin/goupnp v0.0.0-20161224104101-679507af18f3/go.mod h1:MZ2ZmwcBpvOoJ22IJsc7va19ZwoheaBk43rKg12SKag= github.com/huin/goupnp v1.0.0 h1:wg75sLpL6DZqwHQN6E1Cfk6mtfzS45z8OV+ic+DtHRo= github.com/huin/goupnp v1.0.0/go.mod h1:n9v9KO1tAxYH82qOn+UTIFQDmx5n1Zxd/ClZDMX7Bnc= github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o= @@ -170,6 +176,8 @@ github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416/go.mod h1:NBIhNtsFMo github.com/offchainlabs/arbitrum v0.7.0 h1:DvY9R4WP6b76VRQiv2bMonrPFwAWPnSqH1XKy8f+Jtk= github.com/offchainlabs/arbitrum/packages/arb-evm v0.7.0 h1:rBrJRc1Z2HYjV2H2KA9bLuxQ8uNiRvu32NRXqfht3rs= github.com/offchainlabs/arbitrum/packages/arb-evm v0.7.0/go.mod h1:BWuhq8K4pyt9v9y1sFpsPJsxuFbY0kN2oa9iOcS+V1M= +github.com/offchainlabs/arbitrum/packages/arb-provider-go v0.6.5 h1:cu60WW6WbhdO99qSVKKxcUGyIXTBTDFVigxMnxoeyHs= +github.com/offchainlabs/arbitrum/packages/arb-provider-go v0.6.5/go.mod h1:+V7YsM+1UfuTrQ++zvrlLPxrET27JlbFwyexxYil0I8= github.com/offchainlabs/arbitrum/packages/arb-tx-aggregator v0.7.0 h1:qqWOyi6R5tJ+wouzKt3FIT271IGUmLxhx+mqceGe608= github.com/offchainlabs/arbitrum/packages/arb-tx-aggregator v0.7.0/go.mod h1:ZpKvnMvsNqp3qi9XzJJWQNzr8YcF4C4v6g6VzFQ35EQ= github.com/offchainlabs/go-solidity-sha3 v0.1.2 h1:IJ/KUv8zW5+Rtq/VvhNjq/Q7MDXjDx1ArAvkJhBRQAs= @@ -215,6 +223,7 @@ github.com/shirou/gopsutil v2.20.5+incompatible h1:tYH07UPoQt0OCQdgWWMgYHy3/a9bc github.com/shirou/gopsutil v2.20.5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= +github.com/spaolacci/murmur3 v1.0.1-0.20190317074736-539464a789e9/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4 h1:Gb2Tyox57NRNuZ2d3rmvB3pcmbu7O1RS3m8WRx7ilrg= github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4/go.mod h1:RZLeN1LMWmRsyYjvAu+I6Dm9QmlDaIIt+Y+4Kd7Tp+Q= github.com/steakknife/bloomfilter v0.0.0-20180922174646-6819c0d2a570 h1:gIlAHnH1vJb5vwEjIp5kBj/eu99p/bl0Ay2goiPe5xE= @@ -251,6 +260,7 @@ golang.org/x/net v0.0.0-20181011144130-49bb7cea24b1/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200425230154-ff2c4b7c35a0 h1:Jcxah/M+oLZ/R4/z5RzfPzGbPXnVDPkEDtf2JnuxN+U= golang.org/x/net v0.0.0-20200425230154-ff2c4b7c35a0/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200625001655-4c5254603344 h1:vGXIOMxbNfDTk/aXCmfdLgkrSV+Z2tcbze+pEc3v5W4= @@ -265,6 +275,7 @@ golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd h1:xhmwyvizuTgC2qz7ZlMluP20uW+C3Rm0FD/WLDX8884= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= diff --git a/tests/fibgo/connection_test.go b/tests/fibgo/connection_test.go index add87772a2..a430ea275a 100644 --- a/tests/fibgo/connection_test.go +++ b/tests/fibgo/connection_test.go @@ -141,6 +141,7 @@ func launchAggregator(client ethutils.EthClient, auth *bind.TransactOpts, rollup "9546", utils2.RPCFlags{}, time.Second, + true, ); err != nil { log.Fatal(err) } From 3f69f83dd3246abca87fdc57bd649d4507cf21ba Mon Sep 17 00:00:00 2001 From: Harry Kalodner Date: Thu, 3 Sep 2020 01:53:06 -0400 Subject: [PATCH 20/29] Cleanups --- packages/arb-tx-aggregator/batcher/batcher.go | 11 ++++++----- .../cmd/arb-tx-aggregator/arb-tx-aggregator.go | 12 ++++++++++-- packages/arb-util/common/timeblocks.go | 4 ++++ packages/arb-validator/cmdhelper/cmdhelper.go | 2 +- 4 files changed, 21 insertions(+), 8 deletions(-) diff --git a/packages/arb-tx-aggregator/batcher/batcher.go b/packages/arb-tx-aggregator/batcher/batcher.go index 8f5442746e..5435e36c46 100644 --- a/packages/arb-tx-aggregator/batcher/batcher.go +++ b/packages/arb-tx-aggregator/batcher/batcher.go @@ -50,9 +50,10 @@ type pendingSentBatch struct { } type Batcher struct { - signer types.Signer - client ethutils.EthClient - globalInbox arbbridge.GlobalInbox + signer types.Signer + client ethutils.EthClient + globalInbox arbbridge.GlobalInbox + keepPendingState bool db *txdb.TxDB @@ -89,7 +90,7 @@ func NewBatcher( go func() { lastBatch := time.Now() - ticker := time.NewTicker(time.Millisecond * 1000) + ticker := time.NewTicker(time.Millisecond * 100) defer ticker.Stop() for { select { @@ -154,7 +155,7 @@ func NewBatcher( log.Fatal("Error submitted batch", err) } - log.Println("Batch with tx", receipt.TxHash.Hex(), "completed at block", receipt.BlockNumber, "using", receipt.GasUsed, "gas") + log.Println("Got receipt for batch in tx", receipt.TxHash.Hex(), "completed at block", receipt.BlockNumber, "using", receipt.GasUsed, "gas") // batch succeeded server.Lock() diff --git a/packages/arb-tx-aggregator/cmd/arb-tx-aggregator/arb-tx-aggregator.go b/packages/arb-tx-aggregator/cmd/arb-tx-aggregator/arb-tx-aggregator.go index a00799382d..8b576d75e2 100644 --- a/packages/arb-tx-aggregator/cmd/arb-tx-aggregator/arb-tx-aggregator.go +++ b/packages/arb-tx-aggregator/cmd/arb-tx-aggregator/arb-tx-aggregator.go @@ -41,6 +41,12 @@ func main() { rpcVars := utils2.AddRPCFlags(fs) keepPendingState := fs.Bool("pending", false, "enable pending state tracking") + blocktime := fs.Int64( + "blocktime", + 2, + "blocktime=NumSeconds", + ) + //go http.ListenAndServe("localhost:6060", nil) err := fs.Parse(os.Args[1:]) @@ -50,12 +56,14 @@ func main() { if fs.NArg() != 3 { log.Fatalf( - "usage: arb-tx-aggregator %v %v", + "usage: arb-tx-aggregator [--blocktime=NumSeconds] %v %v", utils.WalletArgsString, utils.RollupArgsString, ) } + common.SetDurationPerBlock(time.Duration(*blocktime) * time.Second) + rollupArgs := utils.ParseRollupCommand(fs, 0) auth, err := utils.GetKeystore(rollupArgs.ValidatorFolder, walletArgs, fs) @@ -90,7 +98,7 @@ func main() { "1235", "8547", rpcVars, - time.Second*15, + common.GetDurationPerBlock(), // Submit at least 1 batch per block if there are pending txes *keepPendingState, ); err != nil { log.Fatal(err) diff --git a/packages/arb-util/common/timeblocks.go b/packages/arb-util/common/timeblocks.go index 65030fd60c..00387392cf 100644 --- a/packages/arb-util/common/timeblocks.go +++ b/packages/arb-util/common/timeblocks.go @@ -33,6 +33,10 @@ func SetDurationPerBlock(d time.Duration) { _durationPerBlock = d } +func GetDurationPerBlock() time.Duration { + return _durationPerBlock +} + func NewTimeBlocks(val *big.Int) *TimeBlocks { return (*TimeBlocks)(val) } diff --git a/packages/arb-validator/cmdhelper/cmdhelper.go b/packages/arb-validator/cmdhelper/cmdhelper.go index 143ceb1ad7..060e945d88 100644 --- a/packages/arb-validator/cmdhelper/cmdhelper.go +++ b/packages/arb-validator/cmdhelper/cmdhelper.go @@ -63,7 +63,7 @@ func ValidateRollupChain( if validateCmd.NArg() != 3 { return fmt.Errorf( - "usage: %v validate %v [--rpc] [--blocktime=NumSeconds] %v", + "usage: %v validate %v [--blocktime=NumSeconds] %v", execName, utils.WalletArgsString, utils.RollupArgsString, From f32be784959e291f2b5df0db00e3b545212ef220 Mon Sep 17 00:00:00 2001 From: Harry Kalodner Date: Thu, 3 Sep 2020 12:55:32 -0400 Subject: [PATCH 21/29] Fix eth_getLogs argument parsing and correctness --- packages/arb-tx-aggregator/txdb/view.go | 4 +- packages/arb-tx-aggregator/web3/codec.go | 1 + packages/arb-tx-aggregator/web3/eth.go | 4 +- packages/arb-tx-aggregator/web3/interface.go | 40 +++++++++++++++++++- packages/arb-util/common/address.go | 4 ++ 5 files changed, 47 insertions(+), 6 deletions(-) diff --git a/packages/arb-tx-aggregator/txdb/view.go b/packages/arb-tx-aggregator/txdb/view.go index 2bf5183420..b49411d5be 100644 --- a/packages/arb-tx-aggregator/txdb/view.go +++ b/packages/arb-tx-aggregator/txdb/view.go @@ -156,7 +156,7 @@ func maybeMatchesLogQuery(logFilter types.Bloom, addresses []common.Address, top if len(addresses) > 0 { match := false for _, addr := range addresses { - if logFilter.TestBytes(addr[:]) { + if types.BloomLookup(logFilter, addr) { match = true break } @@ -172,7 +172,7 @@ func maybeMatchesLogQuery(logFilter types.Bloom, addresses []common.Address, top } match := false for _, topic := range topicGroup { - if logFilter.TestBytes(topic[:]) { + if types.BloomLookup(logFilter, topic) { match = true break } diff --git a/packages/arb-tx-aggregator/web3/codec.go b/packages/arb-tx-aggregator/web3/codec.go index f745578f92..022c7937a5 100644 --- a/packages/arb-tx-aggregator/web3/codec.go +++ b/packages/arb-tx-aggregator/web3/codec.go @@ -171,6 +171,7 @@ func init() { ignoredMethods["eth_getCode"] = true ignoredMethods["eth_getTransactionCount"] = true ignoredMethods["eth_gasPrice"] = true + ignoredMethods["eth_getLogs"] = true } func (c *CodecRequest) ReadRequest(args interface{}) error { diff --git a/packages/arb-tx-aggregator/web3/eth.go b/packages/arb-tx-aggregator/web3/eth.go index 81cf8c8986..1610dd13dc 100644 --- a/packages/arb-tx-aggregator/web3/eth.go +++ b/packages/arb-tx-aggregator/web3/eth.go @@ -387,12 +387,12 @@ func (s *Server) GetLogs(r *http.Request, args *GetLogsArgs, reply *[]LogResult) addresses := make([]common.Address, 0, 1) if args.Address != nil { - addresses = append(addresses, *args.Address) + addresses = args.Address.addresses } topicGroups := make([][]common.Hash, 0, len(args.Topics)) for _, topic := range args.Topics { - topicGroups = append(topicGroups, []common.Hash{topic}) + topicGroups = append(topicGroups, topic.topics) } logs, err := s.srv.FindLogs(r.Context(), fromHeight, toHeight, addresses, topicGroups) diff --git a/packages/arb-tx-aggregator/web3/interface.go b/packages/arb-tx-aggregator/web3/interface.go index 44ca26ed96..260e89ecc6 100644 --- a/packages/arb-tx-aggregator/web3/interface.go +++ b/packages/arb-tx-aggregator/web3/interface.go @@ -172,11 +172,47 @@ type TransactionResult struct { S string `json:"s"` } +type AddressGroup struct { + addresses []common.Address +} + +func (n *AddressGroup) UnmarshalJSON(buf []byte) error { + // Try unmarshalling array + err := json.Unmarshal(buf, &n.addresses) + if err != nil { + var topic common.Address + err = json.Unmarshal(buf, &topic) + n.addresses = []common.Address{topic} + } + if err != nil { + return errors2.Wrap(err, "erroring parsing address group") + } + return nil +} + +type TopicGroup struct { + topics []common.Hash +} + +func (n *TopicGroup) UnmarshalJSON(buf []byte) error { + // Try unmarshalling array + err := json.Unmarshal(buf, &n.topics) + if err != nil { + var topic common.Hash + err = json.Unmarshal(buf, &topic) + n.topics = []common.Hash{topic} + } + if err != nil { + return errors2.Wrap(err, "erroring parsing topic group") + } + return nil +} + type GetLogsArgs struct { FromBlock *ethrpc.BlockNumber `json:"fromBlock"` ToBlock *ethrpc.BlockNumber `json:"toBlock"` - Address *common.Address `json:"address"` - Topics []common.Hash `json:"topics"` + Address *AddressGroup `json:"address"` + Topics []TopicGroup `json:"topics"` BlockHash *common.Hash `json:"blockHash"` } diff --git a/packages/arb-util/common/address.go b/packages/arb-util/common/address.go index a4c96068a6..2ab937172a 100644 --- a/packages/arb-util/common/address.go +++ b/packages/arb-util/common/address.go @@ -49,6 +49,10 @@ func AddressArrayToEth(addresses []Address) []ethcommon.Address { return ret } +func (a Address) Bytes() []byte { + return a[:] +} + func (a Address) String() string { return a.Hex() } From 4ab85f1c8ecacd8efc6c1809d064e3463e429cb1 Mon Sep 17 00:00:00 2001 From: Harry Kalodner Date: Thu, 3 Sep 2020 14:04:24 -0400 Subject: [PATCH 22/29] Set batch time specifically --- .../cmd/arb-tx-aggregator/arb-tx-aggregator.go | 14 ++++++-------- packages/arb-tx-aggregator/web3/codec.go | 1 + 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/packages/arb-tx-aggregator/cmd/arb-tx-aggregator/arb-tx-aggregator.go b/packages/arb-tx-aggregator/cmd/arb-tx-aggregator/arb-tx-aggregator.go index 8b576d75e2..d27c10bd29 100644 --- a/packages/arb-tx-aggregator/cmd/arb-tx-aggregator/arb-tx-aggregator.go +++ b/packages/arb-tx-aggregator/cmd/arb-tx-aggregator/arb-tx-aggregator.go @@ -41,10 +41,10 @@ func main() { rpcVars := utils2.AddRPCFlags(fs) keepPendingState := fs.Bool("pending", false, "enable pending state tracking") - blocktime := fs.Int64( - "blocktime", - 2, - "blocktime=NumSeconds", + maxBatchTime := fs.Int64( + "maxBatchTime", + 10, + "maxBatchTime=NumSeconds", ) //go http.ListenAndServe("localhost:6060", nil) @@ -56,14 +56,12 @@ func main() { if fs.NArg() != 3 { log.Fatalf( - "usage: arb-tx-aggregator [--blocktime=NumSeconds] %v %v", + "usage: arb-tx-aggregator [--maxBatchTime=NumSeconds] %v %v", utils.WalletArgsString, utils.RollupArgsString, ) } - common.SetDurationPerBlock(time.Duration(*blocktime) * time.Second) - rollupArgs := utils.ParseRollupCommand(fs, 0) auth, err := utils.GetKeystore(rollupArgs.ValidatorFolder, walletArgs, fs) @@ -98,7 +96,7 @@ func main() { "1235", "8547", rpcVars, - common.GetDurationPerBlock(), // Submit at least 1 batch per block if there are pending txes + time.Duration(*maxBatchTime)*time.Second, *keepPendingState, ); err != nil { log.Fatal(err) diff --git a/packages/arb-tx-aggregator/web3/codec.go b/packages/arb-tx-aggregator/web3/codec.go index 022c7937a5..2ee9d787b8 100644 --- a/packages/arb-tx-aggregator/web3/codec.go +++ b/packages/arb-tx-aggregator/web3/codec.go @@ -172,6 +172,7 @@ func init() { ignoredMethods["eth_getTransactionCount"] = true ignoredMethods["eth_gasPrice"] = true ignoredMethods["eth_getLogs"] = true + ignoredMethods["eth_chainId"] = true } func (c *CodecRequest) ReadRequest(args interface{}) error { From b87a769c42ee644262aef03943f235c9210212e3 Mon Sep 17 00:00:00 2001 From: Harry Kalodner Date: Thu, 3 Sep 2020 16:47:37 -0400 Subject: [PATCH 23/29] Make tuple value a pointer --- packages/arb-avm-cpp/cmachine/machine.go | 2 +- packages/arb-evm/evm/log.go | 6 +-- packages/arb-evm/evm/result.go | 10 ++-- packages/arb-evm/message/outMessage.go | 2 +- .../machineobserver/observermanager.go | 28 +--------- packages/arb-util/inbox/data.go | 10 ++-- packages/arb-util/inbox/inboxMessage.go | 2 +- packages/arb-util/inbox/testVector.go | 2 +- packages/arb-util/machine/machine.go | 2 +- packages/arb-util/value/tuple.go | 54 +++++++++---------- .../arb-validator-core/observer/observer.go | 53 ++++++++++++++++++ .../arb-validator/rollupmanager/manager.go | 20 ++----- .../arb-validator/rolluptest/evilMachine.go | 2 +- 13 files changed, 105 insertions(+), 88 deletions(-) create mode 100644 packages/arb-validator-core/observer/observer.go diff --git a/packages/arb-avm-cpp/cmachine/machine.go b/packages/arb-avm-cpp/cmachine/machine.go index 24e9e77945..0a3e9192fd 100644 --- a/packages/arb-avm-cpp/cmachine/machine.go +++ b/packages/arb-avm-cpp/cmachine/machine.go @@ -193,7 +193,7 @@ func (m *Machine) ExecuteCallServerAssertion( func (m *Machine) ExecuteSideloadedAssertion( maxSteps uint64, inboxMessages []inbox.InboxMessage, - sideloadValue value.TupleValue, + sideloadValue *value.TupleValue, maxWallTime time.Duration, ) (*protocol.ExecutionAssertion, uint64) { msgDataC := C.CBytes(encodeInboxMessages(inboxMessages)) diff --git a/packages/arb-evm/evm/log.go b/packages/arb-evm/evm/log.go index 232b58b427..5a73568746 100644 --- a/packages/arb-evm/evm/log.go +++ b/packages/arb-evm/evm/log.go @@ -116,7 +116,7 @@ func (l Log) String() string { } func NewLogFromValue(val value.Value) (Log, error) { - tupVal, ok := val.(value.TupleValue) + tupVal, ok := val.(*value.TupleValue) if !ok { return Log{}, errors.New("log must be a tuple") } @@ -148,7 +148,7 @@ func NewLogFromValue(val value.Value) (Log, error) { return Log{address, topics, logData}, nil } -func (l Log) AsValue() value.TupleValue { +func (l Log) AsValue() *value.TupleValue { data := []value.Value{ value.NewValueFromAddress(l.Address), inbox.BytesToByteStack(l.Data), @@ -177,7 +177,7 @@ func LogStackToLogs(val value.Value) ([]Log, error) { return logs, nil } -func LogsToLogStack(logs []Log) value.TupleValue { +func LogsToLogStack(logs []Log) *value.TupleValue { logValues := make([]value.Value, 0, len(logs)) for i := range logs { logValues = append(logValues, logs[len(logs)-1-i].AsValue()) diff --git a/packages/arb-evm/evm/result.go b/packages/arb-evm/evm/result.go index 5f64fba012..09d5281dc3 100644 --- a/packages/arb-evm/evm/result.go +++ b/packages/arb-evm/evm/result.go @@ -196,7 +196,7 @@ func (r *TxResult) ToEthReceipt(blockHash common.Hash) *types.Receipt { } func parseTxResult(l1MsgVal value.Value, resultInfo value.Value, gasInfo value.Value, chainInfo value.Value) (*TxResult, error) { - resultTup, ok := resultInfo.(value.TupleValue) + resultTup, ok := resultInfo.(*value.TupleValue) if !ok || resultTup.Len() != 3 { return nil, fmt.Errorf("advise expected result info tuple of length 3, but recieved %v", resultTup) } @@ -204,14 +204,14 @@ func parseTxResult(l1MsgVal value.Value, resultInfo value.Value, gasInfo value.V returnData, _ := resultTup.GetByInt64(1) evmLogs, _ := resultTup.GetByInt64(2) - gasInfoTup, ok := gasInfo.(value.TupleValue) + gasInfoTup, ok := gasInfo.(*value.TupleValue) if !ok || gasInfoTup.Len() != 2 { return nil, fmt.Errorf("advise expected gas info tuple of length 2, but recieved %v", gasInfoTup) } gasUsed, _ := gasInfoTup.GetByInt64(0) gasPrice, _ := gasInfoTup.GetByInt64(1) - chainInfoTup, ok := chainInfo.(value.TupleValue) + chainInfoTup, ok := chainInfo.(*value.TupleValue) if !ok || chainInfoTup.Len() != 3 { return nil, fmt.Errorf("advise expected tx block data tuple of length 3, but recieved %v", resultTup) } @@ -357,7 +357,7 @@ func parseBlockResult(blockNum value.Value, timestamp value.Value, gasLimit valu } func parseOutputStatistics(val value.Value) (*OutputStatistics, error) { - tup, ok := val.(value.TupleValue) + tup, ok := val.(*value.TupleValue) if !ok || tup.Len() != 5 { return nil, errors.New("expected result to be nonempty tuple") } @@ -397,7 +397,7 @@ func parseOutputStatistics(val value.Value) (*OutputStatistics, error) { } func NewResultFromValue(val value.Value) (Result, error) { - tup, ok := val.(value.TupleValue) + tup, ok := val.(*value.TupleValue) if !ok || tup.Len() == 0 { return nil, errors.New("expected result to be nonempty tuple") } diff --git a/packages/arb-evm/message/outMessage.go b/packages/arb-evm/message/outMessage.go index 34bc36716c..def541236c 100644 --- a/packages/arb-evm/message/outMessage.go +++ b/packages/arb-evm/message/outMessage.go @@ -41,7 +41,7 @@ func NewOutMessage(msg Message, sender common.Address) OutMessage { func NewOutMessageFromValue(val value.Value) (OutMessage, error) { failRet := OutMessage{} - tup, ok := val.(value.TupleValue) + tup, ok := val.(*value.TupleValue) if !ok { return failRet, errors.New("val must be a tuple") } diff --git a/packages/arb-tx-aggregator/machineobserver/observermanager.go b/packages/arb-tx-aggregator/machineobserver/observermanager.go index 36dad9a91c..98e1728c9b 100644 --- a/packages/arb-tx-aggregator/machineobserver/observermanager.go +++ b/packages/arb-tx-aggregator/machineobserver/observermanager.go @@ -18,6 +18,7 @@ package machineobserver import ( "context" + "github.com/offchainlabs/arbitrum/packages/arb-validator-core/observer" errors2 "github.com/pkg/errors" "log" "math/big" @@ -31,31 +32,6 @@ import ( const defaultMaxReorgDepth = 100 -func calculateCatchupFetch(ctx context.Context, start *big.Int, clnt arbbridge.ChainTimeGetter, maxReorg *big.Int) (*big.Int, error) { - currentLocalHeight := start - currentOnChain, err := clnt.CurrentBlockId(ctx) - if err != nil { - return nil, err - } - currentL1Height := currentOnChain.Height.AsInt() - - fastCatchupEndHeight := new(big.Int).Sub(currentL1Height, maxReorg) - if currentLocalHeight.Cmp(fastCatchupEndHeight) >= 0 { - return nil, nil - } - - fetchSize := new(big.Int).Sub(fastCatchupEndHeight, currentLocalHeight) - if fetchSize.Cmp(big.NewInt(1)) <= 0 { - return nil, nil - } - if fetchSize.Cmp(maxReorg) >= 0 { - fetchSize = maxReorg - } - fetchEnd := new(big.Int).Add(currentLocalHeight, fetchSize) - fetchEnd = fetchEnd.Sub(fetchEnd, big.NewInt(1)) - return fetchEnd, nil -} - func RunObserver( ctx context.Context, rollupAddr common.Address, @@ -169,7 +145,7 @@ func RunObserver( maxReorg := cp.MaxReorgHeight() for { start := new(big.Int).Add(db.LatestBlockId().Height.AsInt(), big.NewInt(1)) - fetchEnd, err := calculateCatchupFetch(runCtx, start, clnt, maxReorg) + fetchEnd, err := observer.CalculateCatchupFetch(runCtx, start, clnt, maxReorg) if err != nil { return errors2.Wrap(err, "error calculating fast catchup") } diff --git a/packages/arb-util/inbox/data.go b/packages/arb-util/inbox/data.go index 4312f60e18..36909d2e4d 100644 --- a/packages/arb-util/inbox/data.go +++ b/packages/arb-util/inbox/data.go @@ -50,7 +50,7 @@ var errInt = errors.New("expected int value") var errTupleSize2 = errors.New("expected 2-tuple value") func StackValueToList(val value.Value) ([]value.Value, error) { - tupVal, ok := val.(value.TupleValue) + tupVal, ok := val.(*value.TupleValue) if !ok { return nil, errors2.Wrap(errTupleSize2, val.String()) } @@ -63,7 +63,7 @@ func StackValueToList(val value.Value) ([]value.Value, error) { member, _ := tupVal.GetByInt64(0) val, _ := tupVal.GetByInt64(1) - tupVal, ok = val.(value.TupleValue) + tupVal, ok = val.(*value.TupleValue) if !ok { return nil, errors2.Wrap(errTupleSize2, val.String()) } @@ -78,7 +78,7 @@ func StackValueToList(val value.Value) ([]value.Value, error) { return values, nil } -func ListToStackValue(vals []value.Value) value.TupleValue { +func ListToStackValue(vals []value.Value) *value.TupleValue { ret := value.NewEmptyTuple() for _, val := range vals { ret = value.NewTuple2(val, ret) @@ -87,7 +87,7 @@ func ListToStackValue(vals []value.Value) value.TupleValue { } func ByteStackToHex(val value.Value) ([]byte, error) { - tup, ok := val.(value.TupleValue) + tup, ok := val.(*value.TupleValue) if !ok { return nil, errors2.Wrap(errTupleSize2, val.String()) } @@ -124,7 +124,7 @@ func ByteStackToHex(val value.Value) ([]byte, error) { return buf.Bytes()[:intLength], nil } -func BytesToByteStack(val []byte) value.TupleValue { +func BytesToByteStack(val []byte) *value.TupleValue { chunks := bytesToValues(val) ret := ListToStackValue(chunks) return value.NewTuple2(value.NewInt64Value(int64(len(val))), ret) diff --git a/packages/arb-util/inbox/inboxMessage.go b/packages/arb-util/inbox/inboxMessage.go index 86850724aa..69feff966f 100644 --- a/packages/arb-util/inbox/inboxMessage.go +++ b/packages/arb-util/inbox/inboxMessage.go @@ -54,7 +54,7 @@ type InboxMessage struct { func NewInboxMessageFromValue(val value.Value) (InboxMessage, error) { failRet := InboxMessage{} - tup, ok := val.(value.TupleValue) + tup, ok := val.(*value.TupleValue) if !ok { return failRet, errors.New("val must be a tuple") } diff --git a/packages/arb-util/inbox/testVector.go b/packages/arb-util/inbox/testVector.go index 365cc5a1c5..5cdb3c6f8a 100644 --- a/packages/arb-util/inbox/testVector.go +++ b/packages/arb-util/inbox/testVector.go @@ -94,7 +94,7 @@ func valueToJSON(val value.Value) (JSONValue, error) { case value.IntValue: intString := val.BigInt().Text(16) return JSONValue{Int: &intString}, nil - case value.TupleValue: + case *value.TupleValue: vals := make([]JSONValue, 0) for _, subVal := range val.Contents() { jsonSubVal, err := valueToJSON(subVal) diff --git a/packages/arb-util/machine/machine.go b/packages/arb-util/machine/machine.go index d0d78ab0a9..586c751ad7 100644 --- a/packages/arb-util/machine/machine.go +++ b/packages/arb-util/machine/machine.go @@ -61,7 +61,7 @@ type Machine interface { ExecuteSideloadedAssertion( maxSteps uint64, messages []inbox.InboxMessage, - sideloadValue value.TupleValue, + sideloadValue *value.TupleValue, maxWallTime time.Duration, ) (*protocol.ExecutionAssertion, uint64) diff --git a/packages/arb-util/value/tuple.go b/packages/arb-util/value/tuple.go index 2225c6821c..2b9fb97b76 100644 --- a/packages/arb-util/value/tuple.go +++ b/packages/arb-util/value/tuple.go @@ -49,22 +49,22 @@ type TupleValue struct { deferredHashing bool } -func NewEmptyTuple() TupleValue { - return TupleValue{[MaxTupleSize]Value{}, 0, zeroHash.Hash(), zeroHash, 1, false} +func NewEmptyTuple() *TupleValue { + return &TupleValue{[MaxTupleSize]Value{}, 0, zeroHash.Hash(), zeroHash, 1, false} } -func NewTupleOfSizeWithContents(contents [MaxTupleSize]Value, size int8) (TupleValue, error) { +func NewTupleOfSizeWithContents(contents [MaxTupleSize]Value, size int8) (*TupleValue, error) { if !IsValidTupleSizeI64(int64(size)) { - return TupleValue{}, errors.New("requested empty tuple size is too big") + return nil, errors.New("requested empty tuple size is too big") } - ret := TupleValue{contents, size, common.Hash{}, HashPreImage{}, 0, true} + ret := &TupleValue{contents, size, common.Hash{}, HashPreImage{}, 0, true} ret.size = ret.internalSize() return ret, nil } -func NewTupleFromSlice(slice []Value) (TupleValue, error) { +func NewTupleFromSlice(slice []Value) (*TupleValue, error) { if !IsValidTupleSizeI64(int64(len(slice))) { - return TupleValue{}, errors.New("requested tuple size is too big") + return nil, errors.New("requested tuple size is too big") } var contents [MaxTupleSize]Value for i, v := range slice { @@ -73,26 +73,26 @@ func NewTupleFromSlice(slice []Value) (TupleValue, error) { return NewTupleOfSizeWithContents(contents, int8(len(slice))) } -func NewTuple2(value1 Value, value2 Value) TupleValue { - ret := TupleValue{[MaxTupleSize]Value{value1, value2}, 2, common.Hash{}, HashPreImage{}, 0, true} +func NewTuple2(value1 Value, value2 Value) *TupleValue { + ret := &TupleValue{[MaxTupleSize]Value{value1, value2}, 2, common.Hash{}, HashPreImage{}, 0, true} ret.size = ret.internalSize() return ret } -func NewSizedTupleFromReader(rd io.Reader, size byte) (TupleValue, error) { +func NewSizedTupleFromReader(rd io.Reader, size byte) (*TupleValue, error) { var contentsArr [MaxTupleSize]Value sz := int8(size) for i := 0; i < int(sz); i++ { boxedVal, err := UnmarshalValue(rd) if err != nil { - return TupleValue{}, err + return nil, err } contentsArr[i] = boxedVal } return NewTupleOfSizeWithContents(contentsArr, sz) } -func (tv TupleValue) Marshal(wr io.Writer) error { +func (tv *TupleValue) Marshal(wr io.Writer) error { for _, v := range tv.Contents() { if err := MarshalValue(v, wr); err != nil { return err @@ -105,38 +105,38 @@ func IsValidTupleSizeI64(size int64) bool { return size >= 0 && size <= MaxTupleSize } -func (tv TupleValue) Contents() []Value { +func (tv *TupleValue) Contents() []Value { return tv.contentsArr[:tv.itemCount] } -func (tv TupleValue) Len() int64 { +func (tv *TupleValue) Len() int64 { return int64(tv.itemCount) } -func (tv TupleValue) GetByInt64(idx int64) (Value, error) { +func (tv *TupleValue) GetByInt64(idx int64) (Value, error) { if idx < 0 || idx >= tv.Len() { return nil, errors.New("tuple index out of bounds") } return tv.contentsArr[idx], nil } -func (tv TupleValue) TypeCode() uint8 { +func (tv *TupleValue) TypeCode() uint8 { return TypeCodeTuple + byte(tv.itemCount) } -func (tv TupleValue) Clone() Value { +func (tv *TupleValue) Clone() Value { var newContents [MaxTupleSize]Value for i, b := range tv.Contents() { newContents[i] = b.Clone() } - return TupleValue{newContents, tv.itemCount, tv.cachedHash, tv.cachedPreImage, tv.size, tv.deferredHashing} + return &TupleValue{newContents, tv.itemCount, tv.cachedHash, tv.cachedPreImage, tv.size, tv.deferredHashing} } -func (tv TupleValue) Equal(val Value) bool { +func (tv *TupleValue) Equal(val Value) bool { if preImage, ok := val.(HashPreImage); ok { return tv.Hash() == preImage.Hash() } - tup, ok := val.(TupleValue) + tup, ok := val.(*TupleValue) if !ok { return false } @@ -146,7 +146,7 @@ func (tv TupleValue) Equal(val Value) bool { return tv.Hash() == tup.Hash() } -func (tv TupleValue) internalSize() int64 { +func (tv *TupleValue) internalSize() int64 { ret := int64(1) for _, bv := range tv.Contents() { ret = ret + bv.Size() @@ -154,11 +154,11 @@ func (tv TupleValue) internalSize() int64 { return ret } -func (tv TupleValue) Size() int64 { +func (tv *TupleValue) Size() int64 { return tv.size } -func (tv TupleValue) String() string { +func (tv *TupleValue) String() string { var buf bytes.Buffer buf.WriteString("Tuple(") for i, v := range tv.Contents() { @@ -171,7 +171,7 @@ func (tv TupleValue) String() string { return buf.String() } -func (tv TupleValue) getPreImage() common.Hash { +func (tv *TupleValue) getPreImage() common.Hash { hashes := make([]common.Hash, 0, tv.itemCount) for _, v := range tv.Contents() { hashes = append(hashes, v.Hash()) @@ -184,13 +184,13 @@ func (tv TupleValue) getPreImage() common.Hash { return firstHash } -func (tv TupleValue) hash() (HashPreImage, common.Hash) { +func (tv *TupleValue) hash() (HashPreImage, common.Hash) { preImageHash := tv.getPreImage() preImage := HashPreImage{preImageHash, tv.Size()} return preImage, preImage.Hash() } -func (tv TupleValue) GetPreImage() HashPreImage { +func (tv *TupleValue) GetPreImage() HashPreImage { if tv.deferredHashing { tv.cachedPreImage, tv.cachedHash = tv.hash() tv.deferredHashing = false @@ -198,7 +198,7 @@ func (tv TupleValue) GetPreImage() HashPreImage { return tv.cachedPreImage } -func (tv TupleValue) Hash() common.Hash { +func (tv *TupleValue) Hash() common.Hash { if tv.deferredHashing { tv.cachedPreImage, tv.cachedHash = tv.hash() tv.deferredHashing = false diff --git a/packages/arb-validator-core/observer/observer.go b/packages/arb-validator-core/observer/observer.go new file mode 100644 index 0000000000..551248d164 --- /dev/null +++ b/packages/arb-validator-core/observer/observer.go @@ -0,0 +1,53 @@ +/* +* Copyright 2020, Offchain Labs, Inc. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. + */ + +package observer + +import ( + "context" + "github.com/offchainlabs/arbitrum/packages/arb-validator-core/arbbridge" + "math/big" +) + +func CalculateCatchupFetch(ctx context.Context, start *big.Int, clnt arbbridge.ChainTimeGetter, maxReorg *big.Int) (*big.Int, error) { + currentLocalHeight := start + currentOnChain, err := clnt.CurrentBlockId(ctx) + if err != nil { + return nil, err + } + currentL1Height := currentOnChain.Height.AsInt() + + fastCatchupEndHeight := new(big.Int).Sub(currentL1Height, maxReorg) + if currentLocalHeight.Cmp(fastCatchupEndHeight) >= 0 { + return nil, nil + } + + fetchSize := new(big.Int).Sub(fastCatchupEndHeight, currentLocalHeight) + if fetchSize.Cmp(big.NewInt(1)) <= 0 { + return nil, nil + } + if fetchSize.Cmp(maxReorg) >= 0 { + fetchSize = maxReorg + } + fetchEnd := new(big.Int).Add(currentLocalHeight, fetchSize) + fetchEnd = fetchEnd.Sub(fetchEnd, big.NewInt(1)) + + if new(big.Int).Sub(fetchEnd, start).Cmp(big.NewInt(10)) < 0 { + // If the remaining safe fetch amount is too small, exit fast catchup mode + return nil, nil + } + return fetchEnd, nil +} diff --git a/packages/arb-validator/rollupmanager/manager.go b/packages/arb-validator/rollupmanager/manager.go index 13bec99336..d348abac9c 100644 --- a/packages/arb-validator/rollupmanager/manager.go +++ b/packages/arb-validator/rollupmanager/manager.go @@ -18,6 +18,7 @@ package rollupmanager import ( "context" + "github.com/offchainlabs/arbitrum/packages/arb-validator-core/observer" "github.com/offchainlabs/arbitrum/packages/arb-validator/chainlistener" "github.com/offchainlabs/arbitrum/packages/arb-validator/chainobserver" errors2 "github.com/pkg/errors" @@ -169,27 +170,14 @@ func CreateManagerAdvanced( nextEventId := man.activeChain.CurrentEventId() startHeight := nextEventId.BlockId.Height.AsInt() - currentOnChain, err := clnt.CurrentBlockId(runCtx) + fetchEnd, err := observer.CalculateCatchupFetch(runCtx, startHeight, clnt, maxReorg) if err != nil { - return err + return errors2.Wrap(err, "error calculating fast catchup") } - currentL1Height := currentOnChain.Height.AsInt() - - fastCatchupEndHeight := new(big.Int).Sub(currentL1Height, maxReorg) - if startHeight.Cmp(fastCatchupEndHeight) >= 0 { + if fetchEnd == nil { break } - fetchSize := new(big.Int).Sub(fastCatchupEndHeight, startHeight) - if fetchSize.Cmp(big.NewInt(1)) <= 0 { - break - } - if fetchSize.Cmp(maxReorg) >= 0 { - fetchSize = maxReorg - } - fetchEnd := new(big.Int).Add(startHeight, fetchSize) - fetchEnd = fetchEnd.Sub(fetchEnd, big.NewInt(1)) - log.Println("Getting events between", startHeight, "and", fetchEnd) inboxDeliveredEvents, err := inboxWatcher.GetDeliveredEvents(runCtx, startHeight, fetchEnd) if err != nil { diff --git a/packages/arb-validator/rolluptest/evilMachine.go b/packages/arb-validator/rolluptest/evilMachine.go index e2dc61b7aa..9f94a04e5b 100644 --- a/packages/arb-validator/rolluptest/evilMachine.go +++ b/packages/arb-validator/rolluptest/evilMachine.go @@ -75,7 +75,7 @@ func (e EvilMachine) ExecuteAssertion( func (e EvilMachine) ExecuteSideloadedAssertion( maxSteps uint64, inboxMessages []inbox.InboxMessage, - sideloadValue value.TupleValue, + sideloadValue *value.TupleValue, maxWallTime time.Duration, ) (*protocol.ExecutionAssertion, uint64) { assn, numSteps := e.Machine.ExecuteSideloadedAssertion(maxSteps, inboxMessages, sideloadValue, maxWallTime) From c1744c09bc1333b79dcb8d646dd0209c19a81792 Mon Sep 17 00:00:00 2001 From: Harry Kalodner Date: Thu, 3 Sep 2020 21:28:45 -0400 Subject: [PATCH 24/29] Fix tuple hashing recursion in go --- packages/arb-util/value/tuple.go | 50 +++++++++++++++++++-------- packages/arb-util/value/tuple_test.go | 27 +++++++++++++++ 2 files changed, 63 insertions(+), 14 deletions(-) create mode 100644 packages/arb-util/value/tuple_test.go diff --git a/packages/arb-util/value/tuple.go b/packages/arb-util/value/tuple.go index 2b9fb97b76..af94373778 100644 --- a/packages/arb-util/value/tuple.go +++ b/packages/arb-util/value/tuple.go @@ -171,7 +171,10 @@ func (tv *TupleValue) String() string { return buf.String() } -func (tv *TupleValue) getPreImage() common.Hash { +func (tv *TupleValue) cacheHashImpl() { + if !tv.deferredHashing { + return + } hashes := make([]common.Hash, 0, tv.itemCount) for _, v := range tv.Contents() { hashes = append(hashes, v.Hash()) @@ -181,27 +184,46 @@ func (tv *TupleValue) getPreImage() common.Hash { hashing.Uint8(byte(tv.itemCount)), hashing.Bytes32ArrayEncoded(hashes), ) - return firstHash + + tv.cachedPreImage = HashPreImage{firstHash, tv.Size()} + tv.cachedHash = tv.cachedPreImage.Hash() + tv.deferredHashing = false } -func (tv *TupleValue) hash() (HashPreImage, common.Hash) { - preImageHash := tv.getPreImage() - preImage := HashPreImage{preImageHash, tv.Size()} - return preImage, preImage.Hash() +func (tv *TupleValue) cacheHash() { + unhashed := []*TupleValue{tv} + for len(unhashed) > 0 { + tup := unhashed[len(unhashed)-1] + if !tup.deferredHashing { + // Remove from the list if the tup is hashed + unhashed = unhashed[:len(unhashed)-1] + continue + } + unhashedMember := false + for _, v := range tup.Contents() { + nestedTup, ok := v.(*TupleValue) + if !ok { + continue + } + if nestedTup.deferredHashing { + unhashedMember = true + unhashed = append(unhashed, nestedTup) + } + } + if !unhashedMember { + tup.cacheHashImpl() + // Remove from the list if the tup is hashed + unhashed = unhashed[:len(unhashed)-1] + } + } } func (tv *TupleValue) GetPreImage() HashPreImage { - if tv.deferredHashing { - tv.cachedPreImage, tv.cachedHash = tv.hash() - tv.deferredHashing = false - } + tv.cacheHash() return tv.cachedPreImage } func (tv *TupleValue) Hash() common.Hash { - if tv.deferredHashing { - tv.cachedPreImage, tv.cachedHash = tv.hash() - tv.deferredHashing = false - } + tv.cacheHash() return tv.cachedHash } diff --git a/packages/arb-util/value/tuple_test.go b/packages/arb-util/value/tuple_test.go new file mode 100644 index 0000000000..7ad3a7a155 --- /dev/null +++ b/packages/arb-util/value/tuple_test.go @@ -0,0 +1,27 @@ +/* + * Copyright 2020, Offchain Labs, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package value + +import "testing" + +func TestTupHash(t *testing.T) { + tup := NewEmptyTuple() + for i := 0; i < 10; i++ { + tup = NewTuple2(tup, tup) + } + tup.Hash() +} From 532422c7cbe232b982076e7979652f4e0deb842b Mon Sep 17 00:00:00 2001 From: Harry Kalodner Date: Thu, 3 Sep 2020 22:31:24 -0400 Subject: [PATCH 25/29] Clean up mutex usage --- packages/arb-validator/chainobserver/chainObserver.go | 10 +++------- packages/arb-validator/chainobserver/opinionThread.go | 2 +- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/packages/arb-validator/chainobserver/chainObserver.go b/packages/arb-validator/chainobserver/chainObserver.go index 8d3f87bcbd..b04a9a3d7e 100644 --- a/packages/arb-validator/chainobserver/chainObserver.go +++ b/packages/arb-validator/chainobserver/chainObserver.go @@ -41,7 +41,7 @@ import ( //go:generate protoc -I. -I ../.. --go_out=paths=source_relative:. chainobserver.proto type ChainObserver struct { - *sync.RWMutex + sync.RWMutex NodeGraph *nodegraph.StakedNodeGraph rollupAddr common.Address Inbox *structures.Inbox @@ -227,7 +227,7 @@ func (chain *ChainObserver) AddListener( chain.listeners = append(chain.listeners, listener) chain.Unlock() chain.RLock() - listener.AddedToChain(ctx, chain.PendingCorrectNodes()) + listener.AddedToChain(ctx, chain.pendingCorrectNodes()) chain.RUnlock() } @@ -282,7 +282,6 @@ func (x *ChainObserverBuf) unmarshalFromCheckpoint( } return &ChainObserver{ - RWMutex: &sync.RWMutex{}, NodeGraph: nodeGraph, rollupAddr: x.ContractAddress.Unmarshal(), Inbox: &structures.Inbox{MessageStack: inbox}, @@ -305,7 +304,6 @@ func newChain( } nodeGraph := nodegraph.NewStakedNodeGraph(mach, vmParams) return &ChainObserver{ - RWMutex: &sync.RWMutex{}, NodeGraph: nodeGraph, rollupAddr: rollupAddr, Inbox: structures.NewInbox(), @@ -417,9 +415,7 @@ func (chain *ChainObserver) RestartFromLatestValid(ctx context.Context) { } } -func (chain *ChainObserver) PendingCorrectNodes() []*structures.Node { - chain.RLock() - defer chain.RUnlock() +func (chain *ChainObserver) pendingCorrectNodes() []*structures.Node { var nodes []*structures.Node for node := chain.calculatedValidNode; node != chain.NodeGraph.LatestConfirmed(); node = node.Prev() { nodes = append(nodes, node) diff --git a/packages/arb-validator/chainobserver/opinionThread.go b/packages/arb-validator/chainobserver/opinionThread.go index 6d2829611f..f86120d8f4 100644 --- a/packages/arb-validator/chainobserver/opinionThread.go +++ b/packages/arb-validator/chainobserver/opinionThread.go @@ -174,7 +174,7 @@ func (chain *ChainObserver) startOpinionUpdateThread(ctx context.Context) { for _, lis := range chain.listeners { lis.AssertionPrepared( ctx, - chain.GetChainParams(), + chain.NodeGraph.Params(), chain.NodeGraph, chain.KnownValidNode, prepared.Clone(), From 13afae1ade9dea5ab76ffa798027ec5cf480a017 Mon Sep 17 00:00:00 2001 From: Harry Kalodner Date: Thu, 3 Sep 2020 22:31:46 -0400 Subject: [PATCH 26/29] Reduce noisy output --- packages/arb-validator/chainlistener/announcerListener.go | 2 +- packages/arb-validator/chainlistener/validatorChainListener.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/arb-validator/chainlistener/announcerListener.go b/packages/arb-validator/chainlistener/announcerListener.go index 955fb10b86..818d3e8160 100644 --- a/packages/arb-validator/chainlistener/announcerListener.go +++ b/packages/arb-validator/chainlistener/announcerListener.go @@ -86,7 +86,7 @@ func (al *AnnouncerListener) PrunedLeaf(ctx context.Context, ev arbbridge.Pruned } func (al *AnnouncerListener) MessageDelivered(_ context.Context, ev arbbridge.MessageDeliveredEvent) { - log.Println(al.Prefix, "MessageDelivered", ev.Message) + //log.Println(al.Prefix, "MessageDelivered", ev.Message) } func (al *AnnouncerListener) AssertionPrepared( diff --git a/packages/arb-validator/chainlistener/validatorChainListener.go b/packages/arb-validator/chainlistener/validatorChainListener.go index 4f7fdf7c48..fa05efb650 100644 --- a/packages/arb-validator/chainlistener/validatorChainListener.go +++ b/packages/arb-validator/chainlistener/validatorChainListener.go @@ -177,7 +177,7 @@ func (lis *ValidatorChainListener) AssertionPrepared( go func() { _, err := MakeAssertion(ctx, stakingKey.contract, prepared.Clone(), proof) if err != nil { - log.Println("Error making assertion", prepared, err) + log.Println("Error making assertion", err) lis.Lock() delete(lis.broadcastAssertions, prepared.Prev.Hash()) lis.Unlock() From 5531fe1942b36ab229195bb555b1a91b57950ad1 Mon Sep 17 00:00:00 2001 From: Harry Kalodner Date: Fri, 4 Sep 2020 09:04:46 -0400 Subject: [PATCH 27/29] Update Installation.md --- docs/Installation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Installation.md b/docs/Installation.md index b805cc0be8..cb84a6756c 100644 --- a/docs/Installation.md +++ b/docs/Installation.md @@ -67,7 +67,7 @@ Here are the important dependencies in case you are not running on a supported O Download the Arbitrum Monorepo from source: ```bash -git clone -b v0.7.0 https://github.com/offchainlabs/arbitrum.git +git clone -b v0.7.1 https://github.com/offchainlabs/arbitrum.git cd arbitrum yarn yarn build From 8182fdad9d4d79724ee810eb1541fc4d71befe07 Mon Sep 17 00:00:00 2001 From: Harry Kalodner Date: Fri, 4 Sep 2020 09:15:45 -0400 Subject: [PATCH 28/29] Version bump --- packages/arb-avm-cpp/go.mod | 2 +- packages/arb-checkpointer/go.mod | 6 +++--- packages/arb-evm/go.mod | 4 ++-- packages/arb-provider-go/go.mod | 4 ++-- packages/arb-tx-aggregator/go.mod | 10 +++++----- packages/arb-tx-aggregator/web3/web3.go | 2 +- packages/arb-validator-core/go.mod | 2 +- packages/arb-validator/go.mod | 10 ++++------ packages/arb-validator/go.sum | 26 ------------------------- tests/fibgo/go.mod | 10 +++++----- 10 files changed, 24 insertions(+), 52 deletions(-) diff --git a/packages/arb-avm-cpp/go.mod b/packages/arb-avm-cpp/go.mod index 89df13a0d2..368d1e8bcf 100644 --- a/packages/arb-avm-cpp/go.mod +++ b/packages/arb-avm-cpp/go.mod @@ -4,7 +4,7 @@ go 1.13 require ( github.com/ethereum/go-ethereum v1.9.20 - github.com/offchainlabs/arbitrum/packages/arb-util v0.7.0 + github.com/offchainlabs/arbitrum/packages/arb-util v0.7.1 ) replace github.com/offchainlabs/arbitrum/packages/arb-util => ../arb-util diff --git a/packages/arb-checkpointer/go.mod b/packages/arb-checkpointer/go.mod index f61e0c90bb..568ae1f99f 100644 --- a/packages/arb-checkpointer/go.mod +++ b/packages/arb-checkpointer/go.mod @@ -4,9 +4,9 @@ go 1.13 require ( github.com/golang/protobuf v1.4.2 - github.com/offchainlabs/arbitrum/packages/arb-avm-cpp v0.7.0 - github.com/offchainlabs/arbitrum/packages/arb-util v0.7.0 - github.com/offchainlabs/arbitrum/packages/arb-validator-core v0.7.0 + github.com/offchainlabs/arbitrum/packages/arb-avm-cpp v0.7.1 + github.com/offchainlabs/arbitrum/packages/arb-util v0.7.1 + github.com/offchainlabs/arbitrum/packages/arb-validator-core v0.7.1 google.golang.org/protobuf v1.25.0 ) diff --git a/packages/arb-evm/go.mod b/packages/arb-evm/go.mod index b0c898a82f..9e97b3c2ea 100644 --- a/packages/arb-evm/go.mod +++ b/packages/arb-evm/go.mod @@ -5,8 +5,8 @@ go 1.13 require ( github.com/ethereum/go-ethereum v1.9.20 github.com/golang/protobuf v1.4.2 - github.com/offchainlabs/arbitrum/packages/arb-util v0.7.0 - github.com/offchainlabs/arbitrum/packages/arb-validator-core v0.7.0 + github.com/offchainlabs/arbitrum/packages/arb-util v0.7.1 + github.com/offchainlabs/arbitrum/packages/arb-validator-core v0.7.1 github.com/pkg/errors v0.9.1 google.golang.org/protobuf v1.25.0 ) diff --git a/packages/arb-provider-go/go.mod b/packages/arb-provider-go/go.mod index a8670a7cbb..eaf524d50a 100644 --- a/packages/arb-provider-go/go.mod +++ b/packages/arb-provider-go/go.mod @@ -5,8 +5,8 @@ go 1.13 require ( github.com/ethereum/go-ethereum v1.9.20 github.com/gorilla/rpc v1.2.0 - github.com/offchainlabs/arbitrum/packages/arb-evm v0.7.0 - github.com/offchainlabs/arbitrum/packages/arb-util v0.7.0 + github.com/offchainlabs/arbitrum/packages/arb-evm v0.7.1 + github.com/offchainlabs/arbitrum/packages/arb-util v0.7.1 github.com/pkg/errors v0.9.1 ) diff --git a/packages/arb-tx-aggregator/go.mod b/packages/arb-tx-aggregator/go.mod index 26b57f51f6..7146d6e321 100644 --- a/packages/arb-tx-aggregator/go.mod +++ b/packages/arb-tx-aggregator/go.mod @@ -9,11 +9,11 @@ require ( github.com/gorilla/mux v1.7.4 github.com/gorilla/rpc v1.2.0 github.com/kr/pretty v0.2.0 // indirect - github.com/offchainlabs/arbitrum/packages/arb-avm-cpp v0.7.0 - github.com/offchainlabs/arbitrum/packages/arb-checkpointer v0.7.0 - github.com/offchainlabs/arbitrum/packages/arb-evm v0.7.0 - github.com/offchainlabs/arbitrum/packages/arb-util v0.7.0 - github.com/offchainlabs/arbitrum/packages/arb-validator-core v0.7.0 + github.com/offchainlabs/arbitrum/packages/arb-avm-cpp v0.7.1 + github.com/offchainlabs/arbitrum/packages/arb-checkpointer v0.7.1 + github.com/offchainlabs/arbitrum/packages/arb-evm v0.7.1 + github.com/offchainlabs/arbitrum/packages/arb-util v0.7.1 + github.com/offchainlabs/arbitrum/packages/arb-validator-core v0.7.1 github.com/pkg/errors v0.9.1 gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 // indirect ) diff --git a/packages/arb-tx-aggregator/web3/web3.go b/packages/arb-tx-aggregator/web3/web3.go index f7dd770ef0..70a529b222 100644 --- a/packages/arb-tx-aggregator/web3/web3.go +++ b/packages/arb-tx-aggregator/web3/web3.go @@ -24,6 +24,6 @@ type Web3 struct { } func (web3 *Web3) ClientVersion(r *http.Request, _ *EmptyArgs, reply *string) error { - *reply = "arb-tx-aggregator/v0.7.0" + *reply = "arb-tx-aggregator/v0.7.1" return nil } diff --git a/packages/arb-validator-core/go.mod b/packages/arb-validator-core/go.mod index 14e67a20b2..9fe260fa94 100644 --- a/packages/arb-validator-core/go.mod +++ b/packages/arb-validator-core/go.mod @@ -5,7 +5,7 @@ go 1.13 require ( github.com/ethereum/go-ethereum v1.9.20 github.com/golang/protobuf v1.4.2 - github.com/offchainlabs/arbitrum/packages/arb-util v0.7.0 + github.com/offchainlabs/arbitrum/packages/arb-util v0.7.1 github.com/pkg/errors v0.9.1 golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 google.golang.org/protobuf v1.25.0 diff --git a/packages/arb-validator/go.mod b/packages/arb-validator/go.mod index 1a44abdaa8..981d8afb29 100644 --- a/packages/arb-validator/go.mod +++ b/packages/arb-validator/go.mod @@ -5,12 +5,10 @@ go 1.13 require ( github.com/ethereum/go-ethereum v1.9.20 github.com/golang/protobuf v1.4.2 - github.com/offchainlabs/arbitrum/packages/arb-avm-cpp v0.7.0 - github.com/offchainlabs/arbitrum/packages/arb-checkpointer v0.7.0 - github.com/offchainlabs/arbitrum/packages/arb-provider-go v0.6.5 // indirect - github.com/offchainlabs/arbitrum/packages/arb-tx-aggregator v0.7.0 // indirect - github.com/offchainlabs/arbitrum/packages/arb-util v0.7.0 - github.com/offchainlabs/arbitrum/packages/arb-validator-core v0.7.0 + github.com/offchainlabs/arbitrum/packages/arb-avm-cpp v0.7.1 + github.com/offchainlabs/arbitrum/packages/arb-checkpointer v0.7.1 + github.com/offchainlabs/arbitrum/packages/arb-util v0.7.1 + github.com/offchainlabs/arbitrum/packages/arb-validator-core v0.7.1 github.com/pkg/errors v0.9.1 google.golang.org/protobuf v1.25.0 ) diff --git a/packages/arb-validator/go.sum b/packages/arb-validator/go.sum index d70b92f49b..08dbd5c1fc 100644 --- a/packages/arb-validator/go.sum +++ b/packages/arb-validator/go.sum @@ -14,10 +14,8 @@ github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6L github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/OneOfOne/xxhash v1.2.5/go.mod h1:eZbhyaAYD41SGSSsnmcpxVoRiQ/MPUTjUdIIOT9Um7Q= github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6 h1:fLjPD/aNc3UIOA6tDi6QXUemppXK3P9BI7mr2hd6gx8= github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= -github.com/VictoriaMetrics/fastcache v1.5.3/go.mod h1:+jv9Ckb+za/P1ZRg/sulP5Ni1v49daAVERr0H3CuscE= github.com/VictoriaMetrics/fastcache v1.5.7 h1:4y6y0G8PRzszQUYIQHHssv/jgPHAb5qQuuDNdCbyAgw= github.com/VictoriaMetrics/fastcache v1.5.7/go.mod h1:ptDBkNMQI4RtmVo8VS/XwRY6RoTu1dAWCbrk+6WsEM8= github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= @@ -46,7 +44,6 @@ github.com/cespare/cp v0.1.0 h1:SE+dxFebS7Iik5LK0tsi1k9ZCxEaFX4AjQmoyA+1dJk= github.com/cespare/cp v0.1.0/go.mod h1:SOGHArjBr4JWaSDEVpWpo/hNg6RoKrls6Oh40hiwW+s= github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= -github.com/cespare/xxhash/v2 v2.0.1-0.20190104013014-3767db7a7e18/go.mod h1:HD5P3vAIAh+Y2GAxg0PrPN1P8WkepXGpjbUPDHJqqKM= github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= @@ -67,11 +64,8 @@ github.com/edsrzf/mmap-go v0.0.0-20160512033002-935e0e8a636c h1:JHHhtb9XWJrGNMcr github.com/edsrzf/mmap-go v0.0.0-20160512033002-935e0e8a636c/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= github.com/elastic/gosigar v0.8.1-0.20180330100440-37f05ff46ffa h1:XKAhUk/dtp+CV0VO6mhG2V7jA9vbcGcnYF/Ay9NjZrY= github.com/elastic/gosigar v0.8.1-0.20180330100440-37f05ff46ffa/go.mod h1:cdorVVzy1fhmEqmtgqkoE3bYtCfSCkVyjTyCIo22xvs= -github.com/emirpasic/gods v1.12.0 h1:QAUIPSaCu4G+POclxeqb3F+WPpdKqFGlw36+yOzGlrg= -github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/ethereum/go-ethereum v1.9.13/go.mod h1:qwN9d1GLyDh0N7Ab8bMGd0H9knaji2jOBm2RrMGjXls= github.com/ethereum/go-ethereum v1.9.14/go.mod h1:oP8FC5+TbICUyftkTWs+8JryntjIJLJvWvApK3z2AYw= github.com/ethereum/go-ethereum v1.9.20 h1:kk/J5OIoaoz3DRrCXznz3RGi212mHHXwzXlY/ZQxcj0= github.com/ethereum/go-ethereum v1.9.20/go.mod h1:JSSTypSMTkGZtAdAChH2wP5dZEvPGh3nUTuDpH+hNrg= @@ -121,23 +115,15 @@ github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/gorilla/handlers v1.4.2 h1:0QniY0USkHQ1RGCLfKxeNHK9bkDHGRYGNDFBCS+YARg= -github.com/gorilla/handlers v1.4.2/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ= -github.com/gorilla/mux v1.7.4 h1:VuZ8uybHlWmqV03+zRzdwKL4tUnIp1MAQtp1mIFE1bc= -github.com/gorilla/mux v1.7.4/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= -github.com/gorilla/rpc v1.2.0 h1:WvvdC2lNeT1SP32zrIce5l0ECBfbAlmrmSBsuc57wfk= -github.com/gorilla/rpc v1.2.0/go.mod h1:V4h9r+4sF5HnzqbwIez0fKSpANP0zlYd3qR7p36jkTQ= github.com/gorilla/websocket v1.4.1-0.20190629185528-ae1634f6a989 h1:giknQ4mEuDFmmHSrGcbargOuLHQGtywqo4mheITex54= github.com/gorilla/websocket v1.4.1-0.20190629185528-ae1634f6a989/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/graph-gophers/graphql-go v0.0.0-20191115155744-f33e81362277/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= -github.com/hashicorp/golang-lru v0.0.0-20160813221303-0a025b7e63ad/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= github.com/holiman/uint256 v1.1.1 h1:4JywC80b+/hSfljFlEBLHrrh+CIONLDz9NuFl0af4Mw= github.com/holiman/uint256 v1.1.1/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25ApIH5Jw= github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/huin/goupnp v0.0.0-20161224104101-679507af18f3/go.mod h1:MZ2ZmwcBpvOoJ22IJsc7va19ZwoheaBk43rKg12SKag= github.com/huin/goupnp v1.0.0 h1:wg75sLpL6DZqwHQN6E1Cfk6mtfzS45z8OV+ic+DtHRo= github.com/huin/goupnp v1.0.0/go.mod h1:n9v9KO1tAxYH82qOn+UTIFQDmx5n1Zxd/ClZDMX7Bnc= github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o= @@ -156,7 +142,6 @@ github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515 h1:T+h1c/A9Gawja4Y9mFVWj github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= @@ -173,13 +158,6 @@ github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzp github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0= github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E= -github.com/offchainlabs/arbitrum v0.7.0 h1:DvY9R4WP6b76VRQiv2bMonrPFwAWPnSqH1XKy8f+Jtk= -github.com/offchainlabs/arbitrum/packages/arb-evm v0.7.0 h1:rBrJRc1Z2HYjV2H2KA9bLuxQ8uNiRvu32NRXqfht3rs= -github.com/offchainlabs/arbitrum/packages/arb-evm v0.7.0/go.mod h1:BWuhq8K4pyt9v9y1sFpsPJsxuFbY0kN2oa9iOcS+V1M= -github.com/offchainlabs/arbitrum/packages/arb-provider-go v0.6.5 h1:cu60WW6WbhdO99qSVKKxcUGyIXTBTDFVigxMnxoeyHs= -github.com/offchainlabs/arbitrum/packages/arb-provider-go v0.6.5/go.mod h1:+V7YsM+1UfuTrQ++zvrlLPxrET27JlbFwyexxYil0I8= -github.com/offchainlabs/arbitrum/packages/arb-tx-aggregator v0.7.0 h1:qqWOyi6R5tJ+wouzKt3FIT271IGUmLxhx+mqceGe608= -github.com/offchainlabs/arbitrum/packages/arb-tx-aggregator v0.7.0/go.mod h1:ZpKvnMvsNqp3qi9XzJJWQNzr8YcF4C4v6g6VzFQ35EQ= github.com/offchainlabs/go-solidity-sha3 v0.1.2 h1:IJ/KUv8zW5+Rtq/VvhNjq/Q7MDXjDx1ArAvkJhBRQAs= github.com/offchainlabs/go-solidity-sha3 v0.1.2/go.mod h1:WYAU7UTm1wXzEhnsTt843T77fKfR9x/rqqzjm8NJ3Mc= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= @@ -223,7 +201,6 @@ github.com/shirou/gopsutil v2.20.5+incompatible h1:tYH07UPoQt0OCQdgWWMgYHy3/a9bc github.com/shirou/gopsutil v2.20.5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spaolacci/murmur3 v1.0.1-0.20190317074736-539464a789e9/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4 h1:Gb2Tyox57NRNuZ2d3rmvB3pcmbu7O1RS3m8WRx7ilrg= github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4/go.mod h1:RZLeN1LMWmRsyYjvAu+I6Dm9QmlDaIIt+Y+4Kd7Tp+Q= github.com/steakknife/bloomfilter v0.0.0-20180922174646-6819c0d2a570 h1:gIlAHnH1vJb5vwEjIp5kBj/eu99p/bl0Ay2goiPe5xE= @@ -260,7 +237,6 @@ golang.org/x/net v0.0.0-20181011144130-49bb7cea24b1/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200425230154-ff2c4b7c35a0 h1:Jcxah/M+oLZ/R4/z5RzfPzGbPXnVDPkEDtf2JnuxN+U= golang.org/x/net v0.0.0-20200425230154-ff2c4b7c35a0/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200625001655-4c5254603344 h1:vGXIOMxbNfDTk/aXCmfdLgkrSV+Z2tcbze+pEc3v5W4= @@ -275,7 +251,6 @@ golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd h1:xhmwyvizuTgC2qz7ZlMluP20uW+C3Rm0FD/WLDX8884= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -316,7 +291,6 @@ gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLks gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce h1:+JknDZhAj8YMt7GC73Ei8pv4MzjDUNPHgQWJdtMAaDU= diff --git a/tests/fibgo/go.mod b/tests/fibgo/go.mod index 6d381dc64d..e1c6c3c5b8 100644 --- a/tests/fibgo/go.mod +++ b/tests/fibgo/go.mod @@ -4,11 +4,11 @@ go 1.13 require ( github.com/ethereum/go-ethereum v1.9.20 - github.com/offchainlabs/arbitrum/packages/arb-provider-go v0.7.0 - github.com/offchainlabs/arbitrum/packages/arb-tx-aggregator v0.7.0 - github.com/offchainlabs/arbitrum/packages/arb-util v0.7.0 - github.com/offchainlabs/arbitrum/packages/arb-validator v0.7.0 - github.com/offchainlabs/arbitrum/packages/arb-validator-core v0.7.0 + github.com/offchainlabs/arbitrum/packages/arb-provider-go v0.7.1 + github.com/offchainlabs/arbitrum/packages/arb-tx-aggregator v0.7.1 + github.com/offchainlabs/arbitrum/packages/arb-util v0.7.1 + github.com/offchainlabs/arbitrum/packages/arb-validator v0.7.1 + github.com/offchainlabs/arbitrum/packages/arb-validator-core v0.7.1 ) replace github.com/offchainlabs/arbitrum/packages/arb-provider-go => ../../packages/arb-provider-go From a5c402492349e7a75f114696a06a8dfb8bd44bab Mon Sep 17 00:00:00 2001 From: Harry Kalodner Date: Fri, 4 Sep 2020 09:20:29 -0400 Subject: [PATCH 29/29] Packages bump --- yarn.lock | 192 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 99 insertions(+), 93 deletions(-) diff --git a/yarn.lock b/yarn.lock index cdbaa85973..99c683b3e1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -157,6 +157,22 @@ ts-node "^8.0.2" url-join "^4.0.0" +"@eslint/eslintrc@^0.1.3": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.1.3.tgz#7d1a2b2358552cc04834c0979bd4275362e37085" + integrity sha512-4YVwPkANLeNtRjMekzux1ci8hIaH5eGKktGqR0d3LWsKNn5B2X/1Z6Trxy7jQXl9EBGE6Yj02O+t09FMeRllaA== + dependencies: + ajv "^6.12.4" + debug "^4.1.1" + espree "^7.3.0" + globals "^12.1.0" + ignore "^4.0.6" + import-fresh "^3.2.1" + js-yaml "^3.13.1" + lodash "^4.17.19" + minimatch "^3.0.4" + strip-json-comments "^3.1.1" + "@ethereum-waffle/chai@^2.5.1": version "2.5.1" resolved "https://registry.yarnpkg.com/@ethereum-waffle/chai/-/chai-2.5.1.tgz#8bdc055952fc80ff78132571396a2771a36d97ae" @@ -671,9 +687,9 @@ "@types/web3" "1.0.19" "@nomiclabs/buidler@^1.3.7", "@nomiclabs/buidler@^1.4.4": - version "1.4.4" - resolved "https://registry.yarnpkg.com/@nomiclabs/buidler/-/buidler-1.4.4.tgz#a46ff9383111330c10d9fe96ccc626d742093022" - integrity sha512-XciYZnaVOwXupwqTS5AqR/G0pWG2BBw61Na8m8Dm63n2KH0A+077n7xUw3PHpmMP32vw1Ua/U29o2phHNXrIAQ== + version "1.4.5" + resolved "https://registry.yarnpkg.com/@nomiclabs/buidler/-/buidler-1.4.5.tgz#9e332918bf0c19416494e3c4580fd3ca350ed70b" + integrity sha512-jaaVvG7OsrObhEBnLtQ/8L3J92+Jgioaw2+296dDO4Uc+MO/kprORbnpbE/WKvPL1geKQ4uj6VdCpM7qNCwL3g== dependencies: "@nomiclabs/ethereumjs-vm" "^4.1.1" "@sentry/node" "^5.18.1" @@ -781,83 +797,72 @@ path-browserify "^1.0.0" url "^0.11.0" -"@sentry/apm@5.21.4": - version "5.21.4" - resolved "https://registry.yarnpkg.com/@sentry/apm/-/apm-5.21.4.tgz#bc1e026e36edced3f79fc86869b4b65749e20a2f" - integrity sha512-JkBfBKBXZifDI9CsKU+XHzNWkubM7U9dXDW4c6/kU3lURYGXpiR/WI+f3IQG5Vbd2t+cukYhG7BeMkhG8Tj+cA== - dependencies: - "@sentry/browser" "5.21.4" - "@sentry/hub" "5.21.4" - "@sentry/minimal" "5.21.4" - "@sentry/types" "5.21.4" - "@sentry/utils" "5.21.4" - tslib "^1.9.3" - -"@sentry/browser@5.21.4": - version "5.21.4" - resolved "https://registry.yarnpkg.com/@sentry/browser/-/browser-5.21.4.tgz#50cb1f815f5468bb7c891fee329b8298f2aa5d9a" - integrity sha512-/bRGMNjJc4Qt9Me9qLobZe0pREUAMFQAR7GOF9HbgzxUc49qVvmPRglvwzwhPJ6XKPg0NH/C6MOn+yuIRjfMag== - dependencies: - "@sentry/core" "5.21.4" - "@sentry/types" "5.21.4" - "@sentry/utils" "5.21.4" - tslib "^1.9.3" - -"@sentry/core@5.21.4": - version "5.21.4" - resolved "https://registry.yarnpkg.com/@sentry/core/-/core-5.21.4.tgz#e2557344e106ad3af0dbe7a81fc00909c768470c" - integrity sha512-2hB0shKL6RUuLqqmnDUPvwiV25OSnchxkJ6NbLqnn2DYLqLARfZuVcw2II4wb/Jlw7SDnbkQIPs0/ax7GPe1Nw== +"@sentry/core@5.22.3": + version "5.22.3" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-5.22.3.tgz#030f435f2b518f282ba8bd954dac90cd70888bd7" + integrity sha512-eGL5uUarw3o4i9QUb9JoFHnhriPpWCaqeaIBB06HUpdcvhrjoowcKZj1+WPec5lFg5XusE35vez7z/FPzmJUDw== dependencies: - "@sentry/hub" "5.21.4" - "@sentry/minimal" "5.21.4" - "@sentry/types" "5.21.4" - "@sentry/utils" "5.21.4" + "@sentry/hub" "5.22.3" + "@sentry/minimal" "5.22.3" + "@sentry/types" "5.22.3" + "@sentry/utils" "5.22.3" tslib "^1.9.3" -"@sentry/hub@5.21.4": - version "5.21.4" - resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-5.21.4.tgz#5cfc400f48796286f1a24cb013fdbd40958841b3" - integrity sha512-bgEgBHK6OWoAkrnYwVsIOw+sR4MWpe5/CB7H7r+GBJsSnBysncbSaBgndKmtb1GTWdzMxMlvXU16zC6TR5JX5Q== +"@sentry/hub@5.22.3": + version "5.22.3" + resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-5.22.3.tgz#08309a70d2ea8d5e313d05840c1711f34f2fffe5" + integrity sha512-INo47m6N5HFEs/7GMP9cqxOIt7rmRxdERunA3H2L37owjcr77MwHVeeJ9yawRS6FMtbWXplgWTyTIWIYOuqVbw== dependencies: - "@sentry/types" "5.21.4" - "@sentry/utils" "5.21.4" + "@sentry/types" "5.22.3" + "@sentry/utils" "5.22.3" tslib "^1.9.3" -"@sentry/minimal@5.21.4": - version "5.21.4" - resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-5.21.4.tgz#7a6872e98fe21cb4addd36b3a0b9906c13076047" - integrity sha512-pIpIH2ZTwdijGTw6VwfkTETAEoc9k/Aejz6mAjFDMzlOPb3bCx+W8EbGzFOxuwOsiE84bysd2UPVgFY4YSLV/g== +"@sentry/minimal@5.22.3": + version "5.22.3" + resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-5.22.3.tgz#706e4029ae5494123d3875c658ba8911aa5cc440" + integrity sha512-HoINpYnVYCpNjn2XIPIlqH5o4BAITpTljXjtAftOx6Hzj+Opjg8tR8PWliyKDvkXPpc4kXK9D6TpEDw8MO0wZA== dependencies: - "@sentry/hub" "5.21.4" - "@sentry/types" "5.21.4" + "@sentry/hub" "5.22.3" + "@sentry/types" "5.22.3" tslib "^1.9.3" "@sentry/node@^5.18.1": - version "5.21.4" - resolved "https://registry.yarnpkg.com/@sentry/node/-/node-5.21.4.tgz#bab63b099c2a44714c7fc2d3c6b1ba5d634e8952" - integrity sha512-8XnEIwWZyvCSawjMyf6d7bm4lat3bv54SwWrxWqNr6akxbfVI/cV8DsWC045g2Gx799mbXBo4hMaTGJYW6CrWg== - dependencies: - "@sentry/apm" "5.21.4" - "@sentry/core" "5.21.4" - "@sentry/hub" "5.21.4" - "@sentry/types" "5.21.4" - "@sentry/utils" "5.21.4" + version "5.22.3" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-5.22.3.tgz#adea622eae6811e11edc8f34209c912caed91336" + integrity sha512-TCCKO7hJKiQi1nGmJcQfvbbqv98P08LULh7pb/NaO5pV20t1FtICfGx8UMpORRDehbcAiYq/f7rPOF6X/Xl5iw== + dependencies: + "@sentry/core" "5.22.3" + "@sentry/hub" "5.22.3" + "@sentry/tracing" "5.22.3" + "@sentry/types" "5.22.3" + "@sentry/utils" "5.22.3" cookie "^0.4.1" https-proxy-agent "^5.0.0" lru_map "^0.3.3" tslib "^1.9.3" -"@sentry/types@5.21.4": - version "5.21.4" - resolved "https://registry.yarnpkg.com/@sentry/types/-/types-5.21.4.tgz#f088a36ca765657b74b869f8739056961383c159" - integrity sha512-uJTRxW//NPO0UJJzRQOtYHg5tiSBvn1dRk5FvURXmeXt9d9XtwmRhHWDwI51uAkyv+51tun3v+0OZQfLvAI+gQ== +"@sentry/tracing@5.22.3": + version "5.22.3" + resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-5.22.3.tgz#9b5a376e3164c007a22e8642ec094104468cac0c" + integrity sha512-Zp59kMCk5v56ZAyErqjv/QvGOWOQ5fRltzeVQVp8unIDTk6gEFXfhwPsYHOokJe1mfkmrgPDV6xAkYgtL3KCDQ== + dependencies: + "@sentry/hub" "5.22.3" + "@sentry/minimal" "5.22.3" + "@sentry/types" "5.22.3" + "@sentry/utils" "5.22.3" + tslib "^1.9.3" -"@sentry/utils@5.21.4": - version "5.21.4" - resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-5.21.4.tgz#353264fdd5743edf140daf4c37209d350c9d8258" - integrity sha512-zY8OvaE/lU+DCzTSFrDZNXZmBLM/0URUlyYD4RubqzrgKY/eP1pSbEsDzYYhc+OrBr8TjG66N+5T3gMZX0BfNg== +"@sentry/types@5.22.3": + version "5.22.3" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-5.22.3.tgz#d1d547b30ee8bd7771fa893af74c4f3d71f0fd18" + integrity sha512-cv+VWK0YFgCVDvD1/HrrBWOWYG3MLuCUJRBTkV/Opdy7nkdNjhCAJQrEyMM9zX0sac8FKWKOHT0sykNh8KgmYw== + +"@sentry/utils@5.22.3": + version "5.22.3" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-5.22.3.tgz#e3bda3e789239eb16d436f768daa12829f33d18f" + integrity sha512-AHNryXMBvIkIE+GQxTlmhBXD0Ksh+5w1SwM5qi6AttH+1qjWLvV6WB4+4pvVvEoS8t5F+WaVUZPQLmCCWp6zKw== dependencies: - "@sentry/types" "5.21.4" + "@sentry/types" "5.22.3" tslib "^1.9.3" "@sindresorhus/is@^0.14.0": @@ -1053,9 +1058,9 @@ form-data "^3.0.0" "@types/node@*", "@types/node@^14.0.13": - version "14.6.2" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.6.2.tgz#264b44c5a28dfa80198fc2f7b6d3c8a054b9491f" - integrity sha512-onlIwbaeqvZyniGPfdw/TEhKIh79pz66L1q06WUQqJLnAb6wbjvOtepLYTGHTqzdXgBYIE3ZdmqHDGsRsbBz7A== + version "14.6.4" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.6.4.tgz#a145cc0bb14ef9c4777361b7bbafa5cf8e3acb5a" + integrity sha512-Wk7nG1JSaMfMpoMJDKUsWYugliB2Vy55pdjLpmLixeyMi7HizW2I/9QoxsPCkXl3dO+ZOVqPumKaDUv5zJu2uQ== "@types/node@^10.0.3": version "10.17.14" @@ -1350,7 +1355,7 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" -ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.5.5: +ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.5.5: version "6.12.4" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.4.tgz#0614facc4522127fa713445c6bfd3ebd376e2234" integrity sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ== @@ -2381,9 +2386,9 @@ bip66@^1.1.5: safe-buffer "^5.0.1" bl@^1.0.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.2.tgz#a160911717103c07410cef63ef51b397c025af9c" - integrity sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA== + version "1.2.3" + resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.3.tgz#1e8dd80142eac80d7158c9dccc047fb620e035e7" + integrity sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww== dependencies: readable-stream "^2.3.5" safe-buffer "^5.1.1" @@ -4102,11 +4107,12 @@ eslint@^5.6.0: text-table "^0.2.0" eslint@^7.3.1: - version "7.7.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.7.0.tgz#18beba51411927c4b64da0a8ceadefe4030d6073" - integrity sha512-1KUxLzos0ZVsyL81PnRN335nDtQ8/vZUD6uMtWbF+5zDtjKcsklIi78XoE0MVL93QvWTu+E5y44VyyCsOMBrIg== + version "7.8.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.8.1.tgz#e59de3573fb6a5be8ff526c791571646d124a8fa" + integrity sha512-/2rX2pfhyUG0y+A123d0ccXtMm7DV7sH1m3lk9nk2DZ2LReq39FXHueR9xZwshE5MdfSf0xunSaMWRqyIA6M1w== dependencies: "@babel/code-frame" "^7.0.0" + "@eslint/eslintrc" "^0.1.3" ajv "^6.10.0" chalk "^4.0.0" cross-spawn "^7.0.2" @@ -4116,7 +4122,7 @@ eslint@^7.3.1: eslint-scope "^5.1.0" eslint-utils "^2.1.0" eslint-visitor-keys "^1.3.0" - espree "^7.2.0" + espree "^7.3.0" esquery "^1.2.0" esutils "^2.0.2" file-entry-cache "^5.0.1" @@ -4152,7 +4158,7 @@ espree@^5.0.1: acorn-jsx "^5.0.0" eslint-visitor-keys "^1.0.0" -espree@^7.2.0: +espree@^7.3.0: version "7.3.0" resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.0.tgz#dc30437cf67947cf576121ebd780f15eeac72348" integrity sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw== @@ -4186,23 +4192,23 @@ esquery@^1.0.1, esquery@^1.2.0: estraverse "^5.1.0" esrecurse@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" - integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== dependencies: - estraverse "^4.1.0" + estraverse "^5.2.0" estraverse@^1.9.1: version "1.9.3" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" integrity sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q= -estraverse@^4.1.0, estraverse@^4.1.1: +estraverse@^4.1.1: version "4.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== -estraverse@^5.1.0: +estraverse@^5.1.0, estraverse@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== @@ -4509,15 +4515,15 @@ ethereumjs-block@~2.2.0: merkle-patricia-tree "^2.1.2" ethereumjs-blockchain@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/ethereumjs-blockchain/-/ethereumjs-blockchain-4.0.3.tgz#e013034633a30ad2006728e8e2b21956b267b773" - integrity sha512-0nJWbyA+Gu0ZKZr/cywMtB/77aS/4lOVsIKbgUN2sFQYscXO5rPbUfrEe7G2Zhjp86/a0VqLllemDSTHvx3vZA== + version "4.0.4" + resolved "https://registry.yarnpkg.com/ethereumjs-blockchain/-/ethereumjs-blockchain-4.0.4.tgz#30f2228dc35f6dcf94423692a6902604ae34960f" + integrity sha512-zCxaRMUOzzjvX78DTGiKjA+4h2/sF0OYL1QuPux0DHpyq8XiNoF5GYHtb++GUxVlMsMfZV7AVyzbtgcRdIcEPQ== dependencies: async "^2.6.1" ethashjs "~0.0.7" ethereumjs-block "~2.2.2" ethereumjs-common "^1.5.0" - ethereumjs-util "~6.1.0" + ethereumjs-util "^6.1.0" flow-stoplight "^1.0.0" level-mem "^3.0.1" lru-cache "^5.1.1" @@ -4555,7 +4561,7 @@ ethereumjs-tx@^1.1.1, ethereumjs-tx@^1.2.0, ethereumjs-tx@^1.2.2, ethereumjs-tx@ ethereum-common "^0.0.18" ethereumjs-util "^5.0.0" -ethereumjs-util@6.1.0, ethereumjs-util@~6.1.0: +ethereumjs-util@6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.1.0.tgz#e9c51e5549e8ebd757a339cc00f5380507e799c8" integrity sha512-URESKMFbDeJxnAxPppnk2fN6Y3BIatn9fwn76Lm8bQlt+s52TpG8dN9M66MLPuRAiAOIqL3dfwqWJf0sd0fL0Q== @@ -4568,7 +4574,7 @@ ethereumjs-util@6.1.0, ethereumjs-util@~6.1.0: safe-buffer "^5.1.1" secp256k1 "^3.0.1" -ethereumjs-util@6.2.0, ethereumjs-util@^6.2.0: +ethereumjs-util@6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.2.0.tgz#23ec79b2488a7d041242f01e25f24e5ad0357960" integrity sha512-vb0XN9J2QGdZGIEKG2vXM+kUdEivUfU6Wmi5y0cg+LRhDYKnXIZ/Lz7XjFbHRR9VIKq2lVGLzGBkA++y2nOdOQ== @@ -4618,7 +4624,7 @@ ethereumjs-util@^5.0.1, ethereumjs-util@^5.1.2, ethereumjs-util@^5.1.3, ethereum safe-buffer "^5.1.1" secp256k1 "^3.0.1" -ethereumjs-util@^6.0.0, ethereumjs-util@^6.1.0: +ethereumjs-util@^6.0.0, ethereumjs-util@^6.1.0, ethereumjs-util@^6.2.0: version "6.2.1" resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz#fcb4e4dd5ceacb9d2305426ab1a5cd93e3163b69" integrity sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw== @@ -6219,7 +6225,7 @@ import-fresh@^2.0.0: caller-path "^2.0.0" resolve-from "^3.0.0" -import-fresh@^3.0.0: +import-fresh@^3.0.0, import-fresh@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ== @@ -10254,7 +10260,7 @@ strip-json-comments@2.0.1, strip-json-comments@^2.0.1, strip-json-comments@~2.0. resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= -strip-json-comments@^3.1.0: +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== @@ -10896,9 +10902,9 @@ upath@^1.1.1: integrity sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q== uri-js@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" - integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== + version "4.4.0" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.0.tgz#aa714261de793e8a82347a7bcc9ce74e86f28602" + integrity sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g== dependencies: punycode "^2.1.0"