Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Clearer error coding for batch orders #7843

Closed
4 tasks
edd opened this issue Mar 14, 2023 · 0 comments · Fixed by #8063
Closed
4 tasks

Clearer error coding for batch orders #7843

edd opened this issue Mar 14, 2023 · 0 comments · Fixed by #8063
Assignees
Labels
block-explorer feature new feature to be developed size-small

Comments

@edd
Copy link
Member

edd commented Mar 14, 2023

Feature Overview

In order to display a more useful transaction status for batch orders
We will add a 'partial success' response code
So that clients can differentiate between total failure, mixed success and failure, and complete success of a batch order submission

e.g. this batch transaction:

curl 'https://be.validators-testnet.vega.xyz/rest/transactions/68CB49A98AB05E0ACCFA8F4BCA79B77BD8FCD9ABDC96B85B32499C1F16441655' -H 'Accept-Encoding: gzip, deflate, br' 

returns the following response (see bottom for complete output)

{
  "transaction": {
    "block": "274807",
    "index": 0,
    // ...
    "code": 70,
    "cursor": "274807.0",
    "command": {
      "nonce": "8130724558235875754",
      "blockHeight": "274805",
      "batchMarketInstructions": {
        "cancellations": [
          {
            "orderId": "d4d3320d69683b6d762c78ff4270a320878aa753599159fb6e15b88f1257040c",
            "marketId": "9918b1e21f690bf65b6f288e69cbee67604dfe077ea9c2cca6149d5b5c96952d"
          },
          //...
        ],
        "amendments": [
        ],
        "submissions": [
          {
            "marketId": "9918b1e21f690bf65b6f288e69cbee67604dfe077ea9c2cca6149d5b5c96952d",
            "price": "2557554",
            "size": "4074",
            "side": "SIDE_BUY",
            "timeInForce": "TIME_IN_FORCE_GTC",
            "expiresAt": "0",
            "type": "TYPE_LIMIT",
            "reference": "",
            "peggedOrder": null
          },
          // ...
        ]
      }
    },
    "signature": {
      // ...
    },
    "error": "0 (OrderError: Edit Not Allowed), 1 (OrderError: Edit Not Allowed), 17 (OrderError: Edit Not Allowed), 18 (OrderError: Edit Not Allowed), 19 (OrderError: Edit Not Allowed), 2 (OrderError: Edit Not Allowed), 20 (OrderError: Edit Not Allowed), 3 (OrderError: Edit Not Allowed)"
  }
}

Code 70 means error, which is set if more than 0 submission in the batch fail. The only way to know which submission is to:

  1. Split the error field on ,
  2. Check the start digit of each error message
  3. Iterate over each type (cancels, amends, orders) to work out which errored

This assumes that you have the full body of the batch when you have the error too. You probably will in this case. But it's fragile and prone to error.

Tasks

  • Add a new response code (replacing 70) that represents A batch that contains more than 0andless than num_submissions` errors
  • Ensure that a batch that contains all submissions that are errors still returns 70
  • Ensure that a batch that contains 0 errors returns 0
  • Feel free to add any API niceties at all that would make this easier while you're there.

Acceptance Criteria

A list of criteria (aim for 3!) that have to be met for this feature to be accepted as 'done' by the product owner.

  • It is possible to

Acceptance Criteria and Feature Test Scenarios can, in some cases, be closely related. If acceptance criteria become fully covered by feature test scenarios they can be removed leaving on acceptance criteria that can't be directly or fully proven with tests.

Test Scenarios

Detailed scenarios (1-3!) that can be executed as feature tests to verify that the feature has been implemented as expected. We use the follow format:

GIVEN (setup/context)
WHEN (action)
THEN (assertion) For example...
See here for more format information and examples.

Additional Details (optional)

Any additional information that provides context or gives information that will help us develop the feature.

Examples (optional)

{
  "transaction": {
    "block": "274807",
    "index": 0,
    "hash": "68CB49A98AB05E0ACCFA8F4BCA79B77BD8FCD9ABDC96B85B32499C1F16441655",
    "submitter": "950ba227252fc0ece8bbcc04227d07417f1024afddc0541bfe89a07c7f3719a8",
    "type": "Batch Market Instructions",
    "code": 70,
    "cursor": "274807.0",
    "command": {
      "nonce": "8130724558235875754",
      "blockHeight": "274805",
      "batchMarketInstructions": {
        "cancellations": [
          {
            "orderId": "d4d3320d69683b6d762c78ff4270a320878aa753599159fb6e15b88f1257040c",
            "marketId": "9918b1e21f690bf65b6f288e69cbee67604dfe077ea9c2cca6149d5b5c96952d"
          },
          {
            "orderId": "9d3269ffe8186b3eceda1107d20f72530e9e7fcbc9edfee0c54199d609d94673",
            "marketId": "9918b1e21f690bf65b6f288e69cbee67604dfe077ea9c2cca6149d5b5c96952d"
          },
          {
            "orderId": "88bbecdc8011a038966069bf8b6b8e44cf0449507e507f23378f30ffa2c77f2f",
            "marketId": "9918b1e21f690bf65b6f288e69cbee67604dfe077ea9c2cca6149d5b5c96952d"
          },
          {
            "orderId": "6f09707e3d87a2f37d6a3c3908056981841660ada68efacb07b1a94d1f4f7177",
            "marketId": "9918b1e21f690bf65b6f288e69cbee67604dfe077ea9c2cca6149d5b5c96952d"
          },
          {
            "orderId": "51234851f17dd3573a5f60fdf00cfd0356eb270c62ecf4af481f47c4b43b7279",
            "marketId": "9918b1e21f690bf65b6f288e69cbee67604dfe077ea9c2cca6149d5b5c96952d"
          },
          {
            "orderId": "dda0a8ef9d9628c76e74a2508c40a78789966da0cbbd527874fe58a9ae3c353e",
            "marketId": "9918b1e21f690bf65b6f288e69cbee67604dfe077ea9c2cca6149d5b5c96952d"
          },
          {
            "orderId": "decfceb61aa372798528f1076dc27e6227d579a3ad84499835cd1254210e19bd",
            "marketId": "9918b1e21f690bf65b6f288e69cbee67604dfe077ea9c2cca6149d5b5c96952d"
          },
          {
            "orderId": "94aa63d04db8c09de645c04894a0be58a9fd1ec8c7cbf4b23df0a424516722d9",
            "marketId": "9918b1e21f690bf65b6f288e69cbee67604dfe077ea9c2cca6149d5b5c96952d"
          },
          {
            "orderId": "c8a697904892d5bdb891013f4fd3f8ece65be6a0d0da41ec3d3407385cfe9a3f",
            "marketId": "9918b1e21f690bf65b6f288e69cbee67604dfe077ea9c2cca6149d5b5c96952d"
          },
          {
            "orderId": "f4e9850ee436a88bc5a074c61bd1cfeb2198b35272d275ef7ac056ade428fcb4",
            "marketId": "9918b1e21f690bf65b6f288e69cbee67604dfe077ea9c2cca6149d5b5c96952d"
          },
          {
            "orderId": "3317f72e04e9f910687e57b9dc760eee8d75c8295fc6fbae5bbbfc3afba6ddb8",
            "marketId": "9918b1e21f690bf65b6f288e69cbee67604dfe077ea9c2cca6149d5b5c96952d"
          },
          {
            "orderId": "d8a0d607fccc9ce070e7c2074b87e37e4fc0575d2755f421c96ba587a4f23efa",
            "marketId": "9918b1e21f690bf65b6f288e69cbee67604dfe077ea9c2cca6149d5b5c96952d"
          },
          {
            "orderId": "6ca5044f43ab0ce2d989f1531263b276fc914c35192124a679bb7de271401772",
            "marketId": "9918b1e21f690bf65b6f288e69cbee67604dfe077ea9c2cca6149d5b5c96952d"
          },
          {
            "orderId": "f736d9bddb5dfc7104722c9462a225eddf2d65b66084beee3d36caf915d81972",
            "marketId": "9918b1e21f690bf65b6f288e69cbee67604dfe077ea9c2cca6149d5b5c96952d"
          },
          {
            "orderId": "a97d8ba4a30de394eef5057b334ae859d863e12640bff3d942edcb492ae9929b",
            "marketId": "9918b1e21f690bf65b6f288e69cbee67604dfe077ea9c2cca6149d5b5c96952d"
          },
          {
            "orderId": "e029440be6c420b44f9b7fa3df9fd7d5d3a40e4805e5e1731e4ac4fdf2563a6f",
            "marketId": "9918b1e21f690bf65b6f288e69cbee67604dfe077ea9c2cca6149d5b5c96952d"
          },
          {
            "orderId": "a72a2aef4582b6608509ddc17dced792b5ed44cfbc4150ae70af8e2be3c1032a",
            "marketId": "9918b1e21f690bf65b6f288e69cbee67604dfe077ea9c2cca6149d5b5c96952d"
          },
          {
            "orderId": "d855cf51bc04a90fdabc184bbda7ed442559f39d31a517d27ca70e5ed5c3a74c",
            "marketId": "9918b1e21f690bf65b6f288e69cbee67604dfe077ea9c2cca6149d5b5c96952d"
          },
          {
            "orderId": "bf827c94f87e6dd077c28b60863baa1df6b36f79edaa8b4e9d67b098e25b9038",
            "marketId": "9918b1e21f690bf65b6f288e69cbee67604dfe077ea9c2cca6149d5b5c96952d"
          },
          {
            "orderId": "5f6dcac03358cc611b0498714d6cddbfad5389a0ffb8b43c5fbabf5244dd9ec4",
            "marketId": "9918b1e21f690bf65b6f288e69cbee67604dfe077ea9c2cca6149d5b5c96952d"
          },
          {
            "orderId": "44679ffbec2580f673f69222d1c4cd76c8a4607ad019b581dd926d78e04b076f",
            "marketId": "9918b1e21f690bf65b6f288e69cbee67604dfe077ea9c2cca6149d5b5c96952d"
          },
          {
            "orderId": "3787287fbfef94a454590c9fef12a05aaa82bbdf0ab81fda0ca89b38dc9ed233",
            "marketId": "9918b1e21f690bf65b6f288e69cbee67604dfe077ea9c2cca6149d5b5c96952d"
          },
          {
            "orderId": "98da76349ef3f4166d82728dd14ac2709b478c9564c87e709bc2210ed6657278",
            "marketId": "9918b1e21f690bf65b6f288e69cbee67604dfe077ea9c2cca6149d5b5c96952d"
          },
          {
            "orderId": "e707f25832537a3c73144bfdd40b699af39338f8e3567c666455f14a4e3137a9",
            "marketId": "9918b1e21f690bf65b6f288e69cbee67604dfe077ea9c2cca6149d5b5c96952d"
          },
          {
            "orderId": "fef4a18511449ef7030bcc20a8e066dfbd9aa7b72dcf0c07adfd2db9e66a5748",
            "marketId": "9918b1e21f690bf65b6f288e69cbee67604dfe077ea9c2cca6149d5b5c96952d"
          },
          {
            "orderId": "f12bc2d14245f84cd1edb8f473ce30eb5d60e1b12ce584b4b8e78d1539bc9caf",
            "marketId": "9918b1e21f690bf65b6f288e69cbee67604dfe077ea9c2cca6149d5b5c96952d"
          },
          {
            "orderId": "9c6e98b3b62e2f496141726671ce7e521e2dc3ff8636482b7bdfca4d7aba81b7",
            "marketId": "9918b1e21f690bf65b6f288e69cbee67604dfe077ea9c2cca6149d5b5c96952d"
          },
          {
            "orderId": "9b91ce1dad5fa57fb812a30f4b5180a741e4fa9be954ffa217ab4c172af1fd6c",
            "marketId": "9918b1e21f690bf65b6f288e69cbee67604dfe077ea9c2cca6149d5b5c96952d"
          },
          {
            "orderId": "0243d727cec42fe051f19f1dfbfaf8c882ca4ab3ef1aea560a9a82920c03020e",
            "marketId": "9918b1e21f690bf65b6f288e69cbee67604dfe077ea9c2cca6149d5b5c96952d"
          },
          {
            "orderId": "99b70102826e46dfac9491d27057f2ea178ce76fe77642be1223cc374e88516c",
            "marketId": "9918b1e21f690bf65b6f288e69cbee67604dfe077ea9c2cca6149d5b5c96952d"
          },
          {
            "orderId": "25db4bcb70d952d4bf65506399f501c53bb1b1899663340c3edd1c9899ca7693",
            "marketId": "9918b1e21f690bf65b6f288e69cbee67604dfe077ea9c2cca6149d5b5c96952d"
          }
        ],
        "amendments": [
        ],
        "submissions": [
          {
            "marketId": "9918b1e21f690bf65b6f288e69cbee67604dfe077ea9c2cca6149d5b5c96952d",
            "price": "2557554",
            "size": "4074",
            "side": "SIDE_BUY",
            "timeInForce": "TIME_IN_FORCE_GTC",
            "expiresAt": "0",
            "type": "TYPE_LIMIT",
            "reference": "",
            "peggedOrder": null
          },
          {
            "marketId": "9918b1e21f690bf65b6f288e69cbee67604dfe077ea9c2cca6149d5b5c96952d",
            "price": "2557143",
            "size": "1182",
            "side": "SIDE_BUY",
            "timeInForce": "TIME_IN_FORCE_GTC",
            "expiresAt": "0",
            "type": "TYPE_LIMIT",
            "reference": "",
            "peggedOrder": null
          },
          {
            "marketId": "9918b1e21f690bf65b6f288e69cbee67604dfe077ea9c2cca6149d5b5c96952d",
            "price": "2557006",
            "size": "4017",
            "side": "SIDE_BUY",
            "timeInForce": "TIME_IN_FORCE_GTC",
            "expiresAt": "0",
            "type": "TYPE_LIMIT",
            "reference": "",
            "peggedOrder": null
          },
          {
            "marketId": "9918b1e21f690bf65b6f288e69cbee67604dfe077ea9c2cca6149d5b5c96952d",
            "price": "2556869",
            "size": "6663",
            "side": "SIDE_BUY",
            "timeInForce": "TIME_IN_FORCE_GTC",
            "expiresAt": "0",
            "type": "TYPE_LIMIT",
            "reference": "",
            "peggedOrder": null
          },
          {
            "marketId": "9918b1e21f690bf65b6f288e69cbee67604dfe077ea9c2cca6149d5b5c96952d",
            "price": "2556732",
            "size": "6492",
            "side": "SIDE_BUY",
            "timeInForce": "TIME_IN_FORCE_GTC",
            "expiresAt": "0",
            "type": "TYPE_LIMIT",
            "reference": "",
            "peggedOrder": null
          },
          {
            "marketId": "9918b1e21f690bf65b6f288e69cbee67604dfe077ea9c2cca6149d5b5c96952d",
            "price": "2556595",
            "size": "5035",
            "side": "SIDE_BUY",
            "timeInForce": "TIME_IN_FORCE_GTC",
            "expiresAt": "0",
            "type": "TYPE_LIMIT",
            "reference": "",
            "peggedOrder": null
          },
          {
            "marketId": "9918b1e21f690bf65b6f288e69cbee67604dfe077ea9c2cca6149d5b5c96952d",
            "price": "2556458",
            "size": "1901",
            "side": "SIDE_BUY",
            "timeInForce": "TIME_IN_FORCE_GTC",
            "expiresAt": "0",
            "type": "TYPE_LIMIT",
            "reference": "",
            "peggedOrder": null
          },
          {
            "marketId": "9918b1e21f690bf65b6f288e69cbee67604dfe077ea9c2cca6149d5b5c96952d",
            "price": "2556047",
            "size": "4364",
            "side": "SIDE_BUY",
            "timeInForce": "TIME_IN_FORCE_GTC",
            "expiresAt": "0",
            "type": "TYPE_LIMIT",
            "reference": "",
            "peggedOrder": null
          },
          {
            "marketId": "9918b1e21f690bf65b6f288e69cbee67604dfe077ea9c2cca6149d5b5c96952d",
            "price": "2555910",
            "size": "4714",
            "side": "SIDE_BUY",
            "timeInForce": "TIME_IN_FORCE_GTC",
            "expiresAt": "0",
            "type": "TYPE_LIMIT",
            "reference": "",
            "peggedOrder": null
          },
          {
            "marketId": "9918b1e21f690bf65b6f288e69cbee67604dfe077ea9c2cca6149d5b5c96952d",
            "price": "2555773",
            "size": "4227",
            "side": "SIDE_BUY",
            "timeInForce": "TIME_IN_FORCE_GTC",
            "expiresAt": "0",
            "type": "TYPE_LIMIT",
            "reference": "",
            "peggedOrder": null
          },
          {
            "marketId": "9918b1e21f690bf65b6f288e69cbee67604dfe077ea9c2cca6149d5b5c96952d",
            "price": "2555636",
            "size": "4709",
            "side": "SIDE_BUY",
            "timeInForce": "TIME_IN_FORCE_GTC",
            "expiresAt": "0",
            "type": "TYPE_LIMIT",
            "reference": "",
            "peggedOrder": null
          },
          {
            "marketId": "9918b1e21f690bf65b6f288e69cbee67604dfe077ea9c2cca6149d5b5c96952d",
            "price": "2555499",
            "size": "1133",
            "side": "SIDE_BUY",
            "timeInForce": "TIME_IN_FORCE_GTC",
            "expiresAt": "0",
            "type": "TYPE_LIMIT",
            "reference": "",
            "peggedOrder": null
          },
          {
            "marketId": "9918b1e21f690bf65b6f288e69cbee67604dfe077ea9c2cca6149d5b5c96952d",
            "price": "2555225",
            "size": "1092",
            "side": "SIDE_BUY",
            "timeInForce": "TIME_IN_FORCE_GTC",
            "expiresAt": "0",
            "type": "TYPE_LIMIT",
            "reference": "",
            "peggedOrder": null
          },
          {
            "marketId": "9918b1e21f690bf65b6f288e69cbee67604dfe077ea9c2cca6149d5b5c96952d",
            "price": "2558377",
            "size": "4074",
            "side": "SIDE_SELL",
            "timeInForce": "TIME_IN_FORCE_GTC",
            "expiresAt": "0",
            "type": "TYPE_LIMIT",
            "reference": "",
            "peggedOrder": null
          },
          {
            "marketId": "9918b1e21f690bf65b6f288e69cbee67604dfe077ea9c2cca6149d5b5c96952d",
            "price": "2558407",
            "size": "1182",
            "side": "SIDE_SELL",
            "timeInForce": "TIME_IN_FORCE_GTC",
            "expiresAt": "0",
            "type": "TYPE_LIMIT",
            "reference": "",
            "peggedOrder": null
          },
          {
            "marketId": "9918b1e21f690bf65b6f288e69cbee67604dfe077ea9c2cca6149d5b5c96952d",
            "price": "2558417",
            "size": "4017",
            "side": "SIDE_SELL",
            "timeInForce": "TIME_IN_FORCE_GTC",
            "expiresAt": "0",
            "type": "TYPE_LIMIT",
            "reference": "",
            "peggedOrder": null
          },
          {
            "marketId": "9918b1e21f690bf65b6f288e69cbee67604dfe077ea9c2cca6149d5b5c96952d",
            "price": "2558427",
            "size": "6663",
            "side": "SIDE_SELL",
            "timeInForce": "TIME_IN_FORCE_GTC",
            "expiresAt": "0",
            "type": "TYPE_LIMIT",
            "reference": "",
            "peggedOrder": null
          },
          {
            "marketId": "9918b1e21f690bf65b6f288e69cbee67604dfe077ea9c2cca6149d5b5c96952d",
            "price": "2558437",
            "size": "6492",
            "side": "SIDE_SELL",
            "timeInForce": "TIME_IN_FORCE_GTC",
            "expiresAt": "0",
            "type": "TYPE_LIMIT",
            "reference": "",
            "peggedOrder": null
          },
          {
            "marketId": "9918b1e21f690bf65b6f288e69cbee67604dfe077ea9c2cca6149d5b5c96952d",
            "price": "2558447",
            "size": "5035",
            "side": "SIDE_SELL",
            "timeInForce": "TIME_IN_FORCE_GTC",
            "expiresAt": "0",
            "type": "TYPE_LIMIT",
            "reference": "",
            "peggedOrder": null
          },
          {
            "marketId": "9918b1e21f690bf65b6f288e69cbee67604dfe077ea9c2cca6149d5b5c96952d",
            "price": "2558457",
            "size": "1901",
            "side": "SIDE_SELL",
            "timeInForce": "TIME_IN_FORCE_GTC",
            "expiresAt": "0",
            "type": "TYPE_LIMIT",
            "reference": "",
            "peggedOrder": null
          },
          {
            "marketId": "9918b1e21f690bf65b6f288e69cbee67604dfe077ea9c2cca6149d5b5c96952d",
            "price": "2558487",
            "size": "4364",
            "side": "SIDE_SELL",
            "timeInForce": "TIME_IN_FORCE_GTC",
            "expiresAt": "0",
            "type": "TYPE_LIMIT",
            "reference": "",
            "peggedOrder": null
          },
          {
            "marketId": "9918b1e21f690bf65b6f288e69cbee67604dfe077ea9c2cca6149d5b5c96952d",
            "price": "2558497",
            "size": "4714",
            "side": "SIDE_SELL",
            "timeInForce": "TIME_IN_FORCE_GTC",
            "expiresAt": "0",
            "type": "TYPE_LIMIT",
            "reference": "",
            "peggedOrder": null
          },
          {
            "marketId": "9918b1e21f690bf65b6f288e69cbee67604dfe077ea9c2cca6149d5b5c96952d",
            "price": "2558507",
            "size": "4227",
            "side": "SIDE_SELL",
            "timeInForce": "TIME_IN_FORCE_GTC",
            "expiresAt": "0",
            "type": "TYPE_LIMIT",
            "reference": "",
            "peggedOrder": null
          },
          {
            "marketId": "9918b1e21f690bf65b6f288e69cbee67604dfe077ea9c2cca6149d5b5c96952d",
            "price": "2558517",
            "size": "4709",
            "side": "SIDE_SELL",
            "timeInForce": "TIME_IN_FORCE_GTC",
            "expiresAt": "0",
            "type": "TYPE_LIMIT",
            "reference": "",
            "peggedOrder": null
          },
          {
            "marketId": "9918b1e21f690bf65b6f288e69cbee67604dfe077ea9c2cca6149d5b5c96952d",
            "price": "2558527",
            "size": "1133",
            "side": "SIDE_SELL",
            "timeInForce": "TIME_IN_FORCE_GTC",
            "expiresAt": "0",
            "type": "TYPE_LIMIT",
            "reference": "",
            "peggedOrder": null
          },
          {
            "marketId": "9918b1e21f690bf65b6f288e69cbee67604dfe077ea9c2cca6149d5b5c96952d",
            "price": "2558547",
            "size": "1092",
            "side": "SIDE_SELL",
            "timeInForce": "TIME_IN_FORCE_GTC",
            "expiresAt": "0",
            "type": "TYPE_LIMIT",
            "reference": "",
            "peggedOrder": null
          }
        ]
      }
    },
    "signature": {
      "value": "1cc92c1bdaaa18ad1965a918f91fd0cd48f7059e2b43c4b429cb647bc13a624b1db2db91bf9ad75c36033dccb5eca40870cede7787b1e0aad7ebc8d9574a6402",
      "algo": "vega/ed25519",
      "version": 1
    },
    "error": "0 (OrderError: Edit Not Allowed), 1 (OrderError: Edit Not Allowed), 17 (OrderError: Edit Not Allowed), 18 (OrderError: Edit Not Allowed), 19 (OrderError: Edit Not Allowed), 2 (OrderError: Edit Not Allowed), 20 (OrderError: Edit Not Allowed), 3 (OrderError: Edit Not Allowed)"
  }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
block-explorer feature new feature to be developed size-small
Projects
Archived in project
Development

Successfully merging a pull request may close this issue.

4 participants