SPB Git

Repository Public

testnet-mandate-proof.json 6.5 KB 195 lines json

1{2 "recordedAt": "2026-11-11T06:04:35.450Z",3 "network": "testnet",4 "note": "throwaway seed generated in memory by scripts/hl-mandate-testnet.mts; the account never existed on the venue",5 "account": "0x8300112dfcd111c77ec78e2af506507bd8e00b44",6 "agent": "0xc174d2c52561a66e5a947feb023233f19e9e0682",7 "mandateId": "86575464-ba0f-442e-a39a-aad3812ee7b0",8 "exchanges": [9  {10   "step": "signer read: clearinghouseState + frontendOpenOrders of the throwaway account (testnet info endpoint)",11   "answer": {12    "time": 1794377071146,13    "accountValue": "0.0",14    "totalNtlPos": "0.0",15    "positions": [],16    "openOrders": []17   }18  },19  {20   "step": "API authorization/approve (signer signs approveAgent with the wallet key; the API sends it to the testnet)",21   "status": 422,22   "answer": {23    "error": "venue_rejected",24    "message": "the venue did not register the trading key: hyperliquid: Must deposit before performing actions. User: 0x8300112dfcd111c77ec78e2af506507bd8e00b44 — the authorization was revoked on the signer, nothing can trade. Fund the venue account first if the venue asks for a deposit, then prepare a new authorization."25   }26  },27  {28   "step": "approveAgent signed by the wallet key (user-signed action)",29   "request": {30    "action": {31     "type": "approveAgent",32     "hyperliquidChain": "Testnet",33     "signatureChainId": "0x66eee",34     "agentAddress": "0xc174d2c52561a66e5a947feb023233f19e9e0682",35     "agentName": "spw-live valid_until 1794549872000",36     "nonce": 179437707271937    },38    "nonce": 1794377072719,39    "signature": {40     "r": "0x50dfb8e6ef0f58149bb141d0e441aa360900e9efe7b3e54cb0ea888f568283b0",41     "s": "0x4f2b95412c478397ec74e3510b32df683411cf97bb9616e8c0f9b2c321a1e6ce",42     "v": 2743    },44    "vaultAddress": null,45    "expiresAfter": null46   },47   "status": 200,48   "answer": {49    "status": "err",50    "response": "Must deposit before performing actions. User: 0x8300112dfcd111c77ec78e2af506507bd8e00b44"51   }52  },53  {54   "step": "updateLeverage signed under the mandate (no passkey)",55   "request": {56    "action": {57     "type": "updateLeverage",58     "asset": 3,59     "isCross": true,60     "leverage": 361    },62    "nonce": 1794377073225,63    "signature": {64     "r": "0xded78f8b34d2ed7e70835b2aec63879458814399a256785348303dec44870769",65     "s": "0x6f94f1e205ba13a6de1ee332a6c9158491169be0f3f4af29a07b7b90f4eae374",66     "v": 2867    },68    "vaultAddress": null,69    "expiresAfter": 179437710322570   },71   "status": 200,72   "answer": {73    "status": "err",74    "response": "User or API Wallet 0xc174d2c52561a66e5a947feb023233f19e9e0682 does not exist."75   }76  },77  {78   "step": "signer: leverage 4× (the mandate says 3×)",79   "answer": "signer_leverage_exceeded: leverage 4 is above the mandate's 3× for hyperliquid:BTC"80  },81  {82   "step": "signer: order buy 0.0002 BTC @ 73509 that can add exposure, on an account the venue values at 0.0",83   "answer": "signer_floor_equity: the venue reports an account value of 0.0, below the mandate's floor of 5: only cancels and reduce-only orders are signed"84  },85  {86   "step": "reduce-only order signed under the mandate (no passkey; expiresAfter = nonce + 30 s)",87   "request": {88    "action": {89     "type": "order",90     "orders": [91      {92       "a": 3,93       "b": false,94       "p": "74259",95       "s": "0.0002",96       "r": true,97       "t": {98        "limit": {99         "tif": "Ioc"100        }101       },102       "c": "0x0eb3762f532a00385f10e50efc38bce4"103      }104     ],105     "grouping": "na"106    },107    "nonce": 1794377074412,108    "signature": {109     "r": "0x2806cbc972f18a5b9ff3a94d480f7171f7cbfd84d1abf72ce09e3ebd8d668b52",110     "s": "0x5f95171f091889b76f37d3f72e9a05963a8a541fd023fd50fcc378ae81037e2c",111     "v": 27112    },113    "vaultAddress": null,114    "expiresAfter": 1794377104412115   },116   "status": 200,117   "answer": {118    "status": "err",119    "response": "User or API Wallet 0xc174d2c52561a66e5a947feb023233f19e9e0682 does not exist."120   }121  },122  {123   "step": "cancelByCloid signed under the mandate",124   "request": {125    "action": {126     "type": "cancelByCloid",127     "cancels": [128      {129       "asset": 3,130       "cloid": "0x0eb3762f532a00385f10e50efc38bce4"131      }132     ]133    },134    "nonce": 1794377074893,135    "signature": {136     "r": "0x61f2d447136c34b692ff089d70cc9a84e3181182cc309b707eb413f4fb5bb60f",137     "s": "0x6231ae48b2eac0b94ca13920d72dadbcc28dfb40614050bf1c226c4233e85333",138     "v": 28139    },140    "vaultAddress": null,141    "expiresAfter": 1794377104893142   },143   "status": 200,144   "answer": {145    "status": "err",146    "response": "User or API Wallet 0xc174d2c52561a66e5a947feb023233f19e9e0682 does not exist."147   }148  },149  {150   "step": "signer: reduce-only order at half the market price",151   "answer": "signer_price: price 37505 is more than 1000 bps away from the signer's own BTC price 73779.9525"152  },153  {154   "step": "signer: order above the mandate's notional per order (reduce-only included)",155   "answer": "signer_order_notional: order notional 367.545 is above the mandate's 30 per order"156  },157  {158   "step": "signer: order on an instrument outside the mandate",159   "answer": "signer_instrument: hyperliquid:ETH is not allowed by the mandate"160  },161  {162   "step": "signer: the API describes a plain sell as reduce-only",163   "answer": "signer_mismatch: the order described by the API and the payload to sign differ (reduce-only)"164  },165  {166   "step": "signer: the same client id again",167   "answer": "signer_replay: an order with this client id was already signed"168  },169  {170   "step": "signer: an approveAgent for another address smuggled through /venue/mandate/sign",171   "answer": "signer_unsupported: this payload is not an order, a cancel or a leverage change (hl_user): a mandate signs nothing else"172  },173  {174   "step": "signer: a signature valid for more than 120 s",175   "answer": "signer_policy: validity window longer than 120 s"176  },177  {178   "step": "signer: an order that can add exposure during the wind-down",179   "answer": "signer_wind_down: the mandate was revoked: only cancels and reduce-only orders are signed until the wind-down ends"180  },181  {182   "step": "signer: a leverage change during the wind-down",183   "answer": "signer_wind_down: the mandate has ended: only cancels and reduce-only orders are signed until the wind-down ends"184  },185  {186   "step": "signer: a reduce-only order after the AUTHORIZATION was revoked",187   "answer": "signer_revoked: the venue authorization of this mandate was revoked: nothing is signed"188  },189  {190   "step": "signer: a cancel after the authorization was revoked",191   "answer": "signer_revoked: the venue authorization of this mandate was revoked: nothing is signed"192  }193 ]194}195
Files main
Menu

Theme