Giter Club home page Giter Club logo

vega's People

Contributors

anexsomnis avatar anniran avatar ashleyvega avatar barnabee avatar candida-d avatar cdm avatar cdummett avatar cpuja84 avatar daniel1302 avatar davidsiska-vega avatar edd avatar ettec avatar evodelavega avatar fkondej avatar futurechimp avatar gordsport avatar guoguojin avatar jeremyletang avatar jiajia-cui avatar karlem avatar mkjmdski avatar peterbarrow avatar pscott31 avatar tguinot avatar tommcl avatar valentintrinque avatar witgaw avatar wwestgarth avatar zale144 avatar ze97286 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

vega's Issues

Blockchain: Ability to save/restore engine states

In GitLab by @cdm on Jul 3, 2018, 18:47

At the moment we’re doing this by having tendermint replay the entire blockchain on startup. Hopefully the app could one day start up without having to process every transaction ever — e.g. should to be able to restore known internal state and read store states from a given block height / hash then only play in transactions since then

  • Order Book(s) including Orders
  • Trades (Risk Book)

Test-net: Fix Tendermint dying when one node goes down

In GitLab by @edd on Jun 5, 2018, 13:29

On our current constructiveproof testnet (until product#11), if one of the three nodes goes down, no more blocks are made. There are a few theories as to why, but we should have a better understanding of exactly why it is, and address it. If we need four nodes to allow one node to go down, let's add another node. If it's a configuration fix, let's do that.

Notes

  • It could be the persistent peers in the Tendermint configuration file
  • It could be the seed in the Tendermint configuration
  • Do we just need another node?
  • Why are nodes dying at all?

Tasks

  • Work out why no blocks are made when one node goes down

Test-net: Update capistrano to use new test-net

In GitLab by @edd on Jun 5, 2018, 16:13

As part of product#11, we're moving off constructiveproof and on to some Digital Ocean nodes that @barnabee set up for us. This should give us all the ability to restart servers when they're down and deploy new versions

Tasks

  • Update existing capistrano config to deploy to Digital Ocean nodes instead of constructiveproof

Common: Set up web app to handle custom Go import path resolution

In GitLab by @asktav on May 31, 2018, 16:45

A small web app needs to be created that serves the custom import path lookup for tools such as go get.

So, if the import path was something like:

import "code.vegaprotocol.io/core/blockchain"

Where code.vegaprotocol.io/core mapped to our trading-core repo.

Then the go tool will make an HTTP request to this corresponding URL:

And expect that to return an HTML page with the following <meta> tag inside the <head>:

<meta name="go-import" content="code.vegaprotocol.io/core git https://gitlab.com/vega-protocol/trading-core.git">
  • Set up DNS for the custom domain
  • Decide on a host for the app
  • Code minimal app that spits out the matching HTML
  • Configure mapping of top-level paths -> repos
  • Perhaps add a plain redirect to the repo/subpath if the query parameter is not present?

Common: Restructure VEGA core package to co-ordinate engines

In GitLab by @cdm on Jul 5, 2018, 16:41

The VEGA core package will now take on a role of setting up and coordinating the internal engines.

  • Move creation and initialisation of stores etc from main.go and add to core package
  • Add initialisation of matching engine, markets, stores, etc
  • Add pipeline for SubmitOrder etc

API: Stats endpoint

In GitLab by @cdm on May 31, 2018, 15:53

Update stats.vegaprotocol.io to use the following info:

gRPC/REST only, GQL to follow in subsequent ticket(?) -- /statistics

  • Block height
  • TX Backlog length
  • Number of peers
  • Genesis time (on node)
  • Current time (on node)
  • Status
    1. Chain_Not_Found
    2. Replaying
    3. Connected
    4. Disconnected
    5. Critical_Error
  • TX avg size (bytes)
  • Orders avg per block
  • Trades per second
  • Orders per second
  • Last trade (on any market, for now)
  • Last order (on any market, for now)
  • Last candle (on any market, for now) Defer until later, not too easy here
  • markets

  • parties

  • App version hash e.g. ca82a6dff817ec66f44342007202690a93763949
  • App version number e.g. 0.1.0.532 (?)

Tendermint: Upgrade tendermint to latest version

In GitLab by @cdm on Jul 11, 2018, 11:09

Motivation:

  • The current tendermint version does not support a later version of protobuf that we need to autogenerate GRPC services.
  • The tendermint team have refactored their abci package and brought it into the main repo.
  • Tendermint now runs on a different port range(!)

Task:

Upgrade to latest tendermint version to resolve the above issues

Experiment: Switch from protobuffs to capnproto/flatbuffs

In GitLab by @edd on Jul 6, 2018, 11:34

Tav guarantees that the serialisation and deserialisation inherent in protobuffs will eventually become a bottleneck and suggests trying some alternatives, both of which can still be generated from the same canonical protobuff definition.

Test-net: Remove docker container build process

In GitLab by @edd on Jun 21, 2018, 19:02

Our current docker build process for testnet is way more complex than it needs to be. We've got a Vega dockerfile and another separate file, both of which need to be run and then manually deployed to the testnet.

Tasks

  • Remove vega-container repo
  • Remove Dockerfile from trading-core
  • Install tendermint on each of the nodes
  • scp current vega binary up
  • Ensure current capfile works

Blockchain: Additional RPC endpoint calls to trading-core/tendermint/client

In GitLab by @cdm on May 31, 2018, 15:37

Following a discussion with @eddhannay over basic requirements for the stats dashboard, we need to expose several additional queries via the trading-core service layer / API endpoints (rest to start with). Therefore the new custom WS RPC client needs to support the following calls to endpoints:

  • /unconfirmed_txs
  • /block?height=
  • /genesis
  • /status

Attached is the reference from the stats dashboard that shows loosely how that code converts the raw tendermint rpc response data into 'dashboard stats' that are interesting, we can provide this via our service layer using rest

Reference for each rpc method (https://tendermint.github.io/slate/)

More info on ABCI functions (http://tendermint.readthedocs.io/en/master/abci-spec.html)

API: Positions API

In GitLab by @edd on Jul 10, 2018, 17:48

We need an API that can provide a vega client with an overview of their current positions, i.e. details of all their open orders across all markets. Using this we can shows a trader's current positions and their trading history.

Matching-engine: Ensure Trade and Order IDs when generated are deterministic

In GitLab by @cdm on Jun 11, 2018, 11:48

Problem:

When the chain is re-played we need to build all orders and trades back from the start including unique deterministic IDs.

Proposed Solution:

All types have an ID field whose value is of the format:

<ID_HASH_VERSION_BYTE> <HASH_BYTES>
  • Id of anything is always a hash of something
  • versioning byte to first byte for evolving
  • 1 version byte + 32 byte SHA256
  • null byte for now (version 0)

For Order

Hash(NodeID, “/“, OrderSequenceID)

— NodeID/OrderSequenceID (hashed as above)

NodeID = Generated on VEGA app start up for the particular node

OrderSequenceID = UUID

For Trade

— Order Id triggered trade, block height, Trade sequence Id for block

Hash(BlockHeight, “/“, OrderID (which triggered the trade), TradeSequenceIDForBlock)

On StartBlock, reset TradeSequenceiDForBlock to 0

Tasks

  • Add latestTradeID uint64 field to OrderBook struct, with a mutex locked incrementer method (NextTradeID). Note: there is currently one instance of OrderBook per market, multiple markets will be available
  • Replace current Trade.id = Digest() with a call to NextTradeID()

API: Order Cancellation

In GitLab by @cdm on Jul 21, 2018, 18:07

As a trader
I can cancel my open orders
So that I can respond to changes in the market

Common: Fix/correct the import paths for trading-core repo

In GitLab by @cdm on May 31, 2018, 11:09

IIRC it currently forces the user to set their checkout path / gopath to ~/src/vega/*
This should be flexible to meet developer path requirements.

  • Propose and resolve the correct path e.g. gitlab.com/vega-protocol/trading-core/ or vegaprotocol.io/...

rename trading-core to vega or vice versa

In GitLab by @dmgarland on Jul 3, 2018, 16:51

AFAIK with default paths, go expects this repo to be checked out under $GOPATH/src/vega, whereas the clone command would put it under a folder called trading-core. Anyone object to having this repo renamed?

Tendermint WebSocket RPC client with BroadcastTxCommit method

In GitLab by @asktav on May 30, 2018, 18:36

There are two options for the RPC client, using JSON-RPC or WebSockets. We're using WebSockets as it gives us access to the subscribe functionality.

For now, only implement the BroadcastTxCommit method.

Candles: Historic price = 0 bug

In GitLab by @cdm on Aug 10, 2018, 16:01

Historic candles dont appear to be keeping close/open prices correctly, see below for last 50 candles at 3600 seconds (1 hour) size:

"vega": {
      "markets": [
        {
          "candles": [
            {
              "open": "1",
              "close": "1",
              "low": "1",
              "high": "1",
              "date": "2018-07-13T10:32:21Z"
            },
            {
              "open": "1",
              "close": "1",
              "low": "1",
              "high": "1",
              "date": "2018-07-13T11:32:21Z"
            },
            {
              "open": "1",
              "close": "1",
              "low": "1",
              "high": "1",
              "date": "2018-07-13T12:32:21Z"
            },
            {
              "open": "1",
              "close": "1",
              "low": "1",
              "high": "1",
              "date": "2018-07-13T13:32:21Z"
            },
            {
              "open": "1",
              "close": "1",
              "low": "1",
              "high": "1",
              "date": "2018-07-13T14:32:21Z"
            },
            {
              "open": "1",
              "close": "1",
              "low": "1",
              "high": "1",
              "date": "2018-07-13T15:32:21Z"
            },
            {
              "open": "1",
              "close": "1",
              "low": "1",
              "high": "1",
              "date": "2018-07-13T16:32:21Z"
            },
            {
              "open": "1",
              "close": "1",
              "low": "1",
              "high": "1",
              "date": "2018-07-13T17:32:21Z"
            },
            {
              "open": "1",
              "close": "1",
              "low": "1",
              "high": "1",
              "date": "2018-07-13T18:32:21Z"
            },
            {
              "open": "1",
              "close": "1",
              "low": "1",
              "high": "1",
              "date": "2018-07-13T19:32:21Z"
            },
            {
              "open": "1",
              "close": "1",
              "low": "1",
              "high": "1",
              "date": "2018-07-13T20:32:21Z"
            },
            {
              "open": "1",
              "close": "1",
              "low": "1",
              "high": "1",
              "date": "2018-07-13T21:32:21Z"
            },
            {
              "open": "42",
              "close": "42",
              "low": "42",
              "high": "42",
              "date": "2018-07-13T22:32:21Z"
            },
            {
              "open": "42",
              "close": "1000",
              "low": "42",
              "high": "1000",
              "date": "2018-07-13T23:32:21Z"
            },
            {
              "open": "1000",
              "close": "1000",
              "low": "1000",
              "high": "1000",
              "date": "2018-07-14T00:32:21Z"
            },
            {
              "open": "1000",
              "close": "1000",
              "low": "1000",
              "high": "1000",
              "date": "2018-07-14T01:32:21Z"
            },
            {
              "open": "1000",
              "close": "1000",
              "low": "1000",
              "high": "1000",
              "date": "2018-07-14T02:32:21Z"
            },
            {
              "open": "1000",
              "close": "1000",
              "low": "1000",
              "high": "1000",
              "date": "2018-07-14T03:32:21Z"
            },
            {
              "open": "100",
              "close": "100",
              "low": "100",
              "high": "1000",
              "date": "2018-07-14T04:32:21Z"
            },
            {
              "open": "100",
              "close": "121",
              "low": "100",
              "high": "121",
              "date": "2018-07-14T05:32:21Z"
            },
            {
              "open": "121",
              "close": "121",
              "low": "121",
              "high": "121",
              "date": "2018-07-14T06:32:21Z"
            },
            {
              "open": "121",
              "close": "121",
              "low": "121",
              "high": "121",
              "date": "2018-07-14T07:32:21Z"
            },
            {
              "open": "121",
              "close": "121",
              "low": "121",
              "high": "121",
              "date": "2018-07-14T08:32:21Z"
            },
            {
              "open": "121",
              "close": "121",
              "low": "121",
              "high": "121",
              "date": "2018-07-14T09:32:21Z"
            },
            {
              "open": "121",
              "close": "121",
              "low": "121",
              "high": "121",
              "date": "2018-07-14T10:32:21Z"
            },
            {
              "open": "121",
              "close": "121",
              "low": "121",
              "high": "121",
              "date": "2018-07-14T11:32:21Z"
            },
            {
              "open": "121",
              "close": "120",
              "low": "120",
              "high": "121",
              "date": "2018-07-14T12:32:21Z"
            },
            {
              "open": "0",
              "close": "0",
              "low": "0",
              "high": "0",
              "date": "2018-07-14T13:32:21Z"
            },
            {
              "open": "0",
              "close": "0",
              "low": "0",
              "high": "0",
              "date": "2018-07-14T14:32:21Z"
            },
            {
              "open": "0",
              "close": "0",
              "low": "0",
              "high": "0",
              "date": "2018-07-14T15:32:21Z"
            },
            {
              "open": "0",
              "close": "0",
              "low": "0",
              "high": "0",
              "date": "2018-07-14T16:32:21Z"
            }
          ],
          "orders": [
            {
              "id": "V41095-24",
              "remaining": "42"
            }
          ]
        }
      ]
    }
  }

Add CORS support to GraphQL (subscriptions, queries & mutations)

In GitLab by @cdm on Aug 6, 2018, 16:52

The VEGA.trading web-app requires CORS support from the trading-core to operate as designed (via GraphQL).

  1. Add CORS support for subscriptions (websockets) on the GraphQL server
  2. Add CORS support for queries/mutations (tcp http) on the GraphQL server

Currently (initial impl) does not support CORS

Experiment: Add Financial Information eXchange (FIX) protocol support on API

In GitLab by @edd on Jul 6, 2018, 12:04

FIX support will be required as an integration point

The Financial Information eXchange (FIX) Protocol has revolutionised the trading environment, proving fundamental in facilitating many of the electronic trading trends that have emerged over the past decade.

FIX has become the language of the global financial markets used extensively by buy and sell-side firms, trading platforms and even regulators to communicate trade information. This non-proprietary, free and open standard is constantly being developed to support evolving business and regulatory needs, and is used by thousands of firms every day to complete millions of transactions.

https://www.fixtrading.org/what-is-fix/
http://fixwiki.fixtrading.org/index.php/Category:Message

Tendermint ABCI protobuf types

In GitLab by @asktav on May 31, 2018, 10:41

Incorporate the various ABCI-related protobuf types into our repo, with an associated generator script for a Go package.

Fix QueryFilter to support for multiple of the same field in filter e.g. id+id+id

In GitLab by @cdm on Aug 10, 2018, 15:45

  • Current design only supports filters with one of each of the fields, id. market. price. etc
  • Whilst adding filter support for graphQL we should be able to compose more complex queries. e.g. WHERE ID='X4' AND ID='U1' AND ID='K2'
  • Improve the datastore filters design to support filtergroups or filtersets so that we can have a slice of queryfilters that get applied when we iterate the memstore slices for comparison

Core: Structured Logging to file for test-net debugging etc

In GitLab by @cdm on Aug 3, 2018, 12:06

Currently the logger only logs to console, we should also allow logging to file (new file daily)

Tasks

Default location /tmp/vegalog.txt
Also ability to override on command line flag e.g. -logfile=/blah/projects/testfile.log

Produce docker image in CI

In GitLab by @edd on Jun 1, 2018, 09:54

In the CI process we should build a docker image and push it to the Gitlab registry. This will help us set up a testnet (product#11).

Tasks

  • Produce a docker image in CI
  • Publish docker image to gitlab registry

Data-stores: Add Trade and Order storage (in memory)

In GitLab by @barnabee on Mar 12, 2018, 18:37

Task

Currently the matching-engine maintains Order and Trade state internally. This state is not exposed to other packages. The trades and orders are sent over two broadcast channels and these channels receive orders/trades as they are created. The initial plan is to subscribe to the two channels from a datastore component that can save the order/trade data down to memory or a DB engine e.g. sqlite.

Goal

Provide a way for the API-services to read trade/order data without querying the matching engine component directly.

Tasks

  • Store Orders in a memory datastore, ensuring scope for implementing a different db engine e.g. sqlite
  • Store Trades (as above)
  • Create datastore service to provide access to the underlying data stores and provide configuration
  • Ensure 80%+ test coverage
  • Scope out SQLite version of store/providers : Sqlx seems like a sensible choice for working with an in memory sqlite impl of the datastores interfaces

FInd out why performance benchmarks scales so badly non-linearly

In GitLab by @barnabee on Mar 13, 2018, 18:39

The ME is quick in what are likely to be normal cases but the performance fall-off when submitting large numbers of randomised orders is exponential. There's no reason it ought to be and it's not yet clear if it scales with the size of the book or the cumulative total orders submitted, if the latter that would be a problem.

Potential culprits:

  • Serialising large numbers of trades
  • Memory leaking somewhere
  • Btree structure becoming inefficient/unbalanced (if possible?)
  • ???

Benchmark output

➜  tests (master) ✗ go test -bench=.
goos: darwin
goarch: amd64
pkg: vega/src/tests
BenchmarkMatching100-8               	    3000	    403336 ns/op
BenchmarkMatching1000-8              	     300	   5055301 ns/op
BenchmarkMatching10000-8             	      10	 131372499 ns/op
BenchmarkMatching100000-8            	       1	13832542777 ns/op
BenchmarkMatching100Allocated-8      	    3000	    415770 ns/op
BenchmarkMatching1000Allocated-8     	     300	   5064084 ns/op
BenchmarkMatching10000Allocated-8    	      10	 133959081 ns/op
BenchmarkMatching100000Allocated-8   	       1	15091063252 ns/op
BenchmarkMatching100Uniform-8        	    5000	    331250 ns/op
BenchmarkMatching1000Uniform-8       	     300	   4175048 ns/op
BenchmarkMatching10000Uniform-8      	      10	 112162524 ns/op
BenchmarkMatching100000Uniform-8     	       1	12883249625 ns/op
PASS
ok  	vega/src/tests	56.036s
(n=100) Elapsed = 624.523µs, average = 6.245µs; matched 34 trades, average 0.34 trades per order.
(n=1000) Elapsed = 6.461691ms, average = 6.461µs; matched 390 trades, average 0.39 trades per order.
(n=10000) Elapsed = 133.170407ms, average = 13.317µs; matched 3938 trades, average 0.3938 trades per order.
(n=100000) Elapsed = 12.658638828s, average = 126.586µs; matched 39465 trades, average 0.39465 trades per order.
(n=1000000) Elapsed = 1h3m18.882776069s, average = 3.798882ms; matched 394627 trades, average 0.394627 trades per order

API: Add Trade price history API with time filter & aggregation

In GitLab by @barnabee on Mar 12, 2018, 18:38

Task

We need to add an API that can feed data in to #26. It's currently looking like react-stockcharts is the winner. For a basic candlestick chart it expects data that looks a bit like this: https://gitlab.com/vega-protocol/client/blob/add-react-stockcharts/trading-ui/src/components/chart-view/chart-view.tsx#L18-31

{
  date: parse(`2018-04-${index}`),
  high: randomIntFromInterval(1, 100),
  low: randomIntFromInterval(1, 25),
  open: randomIntFromInterval(1, 30),
  close: randomIntFromInterval(1, 70),
  volume: randomIntFromInterval(1, 300)
}

We need two things from the API:

  • Historical data at a particular tick size
  • An ongoing event stream adding new candles

The client side API client is this horrible TS file: https://gitlab.com/vega-protocol/client/blob/add-react-stockcharts/trading-ui/src/api/index.ts

In an ideal world, this API would be an API subscription, but that entails a lot of setup on both the server and client side. As a compromise, it should probably be an event stream that, on connection, fires off a bit array of historical data, then individual events as new candles come in. These should trigger redux events, which should replace the current random data generator in https://gitlab.com/vega-protocol/client/blob/add-react-stockcharts/trading-ui/src/components/chart-view/chart-view.tsx

Tasks

  • Add historical data to current vega core
  • Add a new Event Source for chart data
  • Add horrible data adapter to api/index.ts
  • Create redux events for adding chart data
  • Add appropriate data structure & TS types for chart data
  • Update the current chart redux container to pass in the chart data
  • Add a reducer that adds chart data

Previous text

In:

  • market (eg BTC)
  • periodLength (10mins)
  • startDate
  • endDate

Out:
An array of

  • Start time
  • Open
  • High
  • Low
  • Close

Websockets? Request? Both?

API: Filter support for GraphQL

In GitLab by @cdm on Aug 3, 2018, 09:24

Add filtering to GraphQL queries, using the new datastore query filters maks has built for the platform.

Improve trading-core gitlab ci build pipeline (coverage, data-race, linting etc)

In GitLab by @cdm on May 31, 2018, 11:29

trading-core has a basic / working CI pipeline which 'does the job' for now, however we can improve on this and expand the ci process to include things like data race and mem sanitiser, improve (fix) the coverage output.

For bonus points, generate and store a docker image in the gitlab registry. Starting point:

https://about.gitlab.com/2017/11/27/go-tools-and-gitlab-how-to-do-continuous-integration-like-a-boss/

Datastores: Change Order reference field to both Aggressive and Passive Order relations on datastore.Trade

In GitLab by @cdm on Jul 9, 2018, 17:18

Our initial datastore implementation does not have both foreign relations passed when storing a Trade. This was an oversight, having discussed with @makspachucki we need to pass order ID's from both aggressive and passive orders to the datastore.

In datastore/types.go:

type Trade struct { msg.Trade OrderId string }

should become:

type Trade struct { msg.Trade PassiveOrderId string AggressiveOrderId string }

Within the VEGA core app we can then update all relationships for new aggressive orders, new trades AND update any remaining on passive orders.

API: Order Book depth

In GitLab by @barnabee on Mar 12, 2018, 18:37

We need an API to drive product#31. The client side implementation of this ticket is already partially implemented, but hasn't yet been hooked up to an API - you can the current implementation by following the instructions here: https://gitlab.com/vega-protocol/client/tree/master/trading-ui/src/stories

Outline

The orderbook API needs to take a market as an argument, and return an orderbook type outlined below. This should contain a number of price levels, the number of orders at that price level, and the cumulative volume to that price level. Price levels are defined as part of the product definition based on a price interval - for BTCDEC18 the interval could be 5, making the price levels that a trader can place orders at 5, 10, 15, 20 etc. Each side of the current mark price should contain n price levels, where n is a parameter that defaults to 10.

This API is also likely to drive the Market Depth Chart

Types & interfaces

message OrderBookDepth {
  message DepthAtPriceLevel {
    uint64 price
    uint64 numOrders
    uint64 volumeAtLevel
    uint64 cumulativeVolumeAtLevel   -- total cumulative remaining size of orders at or better than price, reversed for sell
  }
  repeated DepthAtPriceLevel buyDepth
  repeated DepthAtPriceLevel sellDepth
}

Client view (ticket)

export type OrderBook = {
  loading: boolean
  loaded: boolean
  id: string
  bestBid: number
  bestOffer: number
  midPoint: number
  buySide: PriceLevel[]
  sellSide: PriceLevel[]
  orders: Order[]
}

export type PriceLevel = {
  side: Side
  price: number
  volume: number
  orders?: Order[]
  total: number
}

Add listener style interfaces for channels in vega core config

In GitLab by @cdm on May 23, 2018, 14:28

Currently the vega->main.go adds order/trade channels as follows:

orderSseChan := make(chan msg.Order, sseChannelSize)
tradeSseChan := make(chan msg.Trade, sseChannelSize)
...
config := core.DefaultConfig()
config.Matching.OrderChans = append(config.Matching.OrderChans, orderSseChan)
config.Matching.TradeChans = append(config.Matching.TradeChans, tradeSseChan)

@barnabee suggested we implement a listener approach to subscribing to order channels rather than using append in this way.

Debug Tendermint issues

In GitLab by @asktav on May 31, 2018, 10:45

We're currently seeing a number of issues with Tendermint where it stops passing along messages after "falling over" at high throughputs. Figure out what's causing the issue and see if we can resolve it, or perhaps work with upstream to resolve it, if it is an issue with Tendermint itself.

Bad transactions should be filtered out in checkTx, not deliverTx

In GitLab by @edd on Jun 21, 2018, 15:48

We currently have a situation where a bad transaction submitted to Tendermint will pass CheckTX, but when Tendermint passes it in to DeliverTX it will return a non-OK response code and all subsequent transactions will sit in the backlog forever.

https://gitlab.com/vega-protocol/trading-core/blob/develop/blockchain/blockchain.go#L60

To recreate

curl 'http://ldn.testnet.vegaprotocol.io:46657/broadcast_tx_async?tx=%221.23452536666973245205||||eyJNYXJrZXQiOiJCVEMvREVDMTgiLCJQYXJ0eSI6IjczNzBmMzRhOWFmOTQ0NjdjYjFlMjVlMGI4NWE1MWFhIiwiU2lkZSI6MCwiUHJpY2 UiOjEsIlNpemUiOjEsIlJlbWFpbmluZyI6MSwiVHlwZSI6MCwiVGltZXN0YW1wcyI6MTUyNTI1NDAzMjc4NH0=%22'

Expected

Transaction should be rejected

Actual

Transaction will be accepted, and no more blocks will ever be produced

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.