54 Commits

Author SHA1 Message Date
Jamie Holdstock
7718476caf
webapi: Move VSP closed check to middleware.
Checking this in middleware not only removes duplicated code from each of the handlers, but also makes things more efficient. Previously, dcrd/dcrwallet/database clients were initialized (and could possibly cause errors) **before** checking if the VSP is closed. Now the check happens before those other things.

Also bundled with some improvements to setaltsignaddr_test.go which I implemented along the way.
2023-02-17 20:44:13 +00:00
Jamie Holdstock
ed1fac1a2a
Add types module for API requests/responses/errors. (#356)
* Remove helper func getCommitmentAddress.

This function is only used in one place so removing it does not introduce any duplication. Removing the func also removes the need for errors.Is comparison, which will be very useful in upcoming changes.

* Rename apiError to ErrorCode.

* Don't use inline type for API errors.

* Export webapi errors.

* Export webapi request/responses.

* Add types module for API requests/responses/errors
2022-11-18 15:06:47 -05:00
jholdstock
ebcfe0e5e9 Remove global logger from webapi. 2022-06-23 09:11:28 +01:00
Jamie Holdstock
d8dd02433c Move CanTicketVote out of dcrd RPC client.
`CanTicketVote` doesn't really fit into the RPC client code as it is more of a business logic function. Moving it into the webapi package is more appropriate.
2022-05-06 11:14:22 +01:00
jholdstock
b32bb56032 Remove hash param from CanTicketVote.
CanTicketVote already has the full rawTx, so it doesn't need the hash passed in separately.
2022-05-06 11:14:22 +01:00
jholdstock
37d51df546 Remove global vars from webapi package. 2022-03-28 08:54:09 +01:00
Jamie Holdstock
da1cb8f916
Enable treasury vote choices. (#319)
This allows both tspend and treasury policies to be set by clients on a per-ticket basis. Preferences can be set when initially registering a ticket with `/payfee`, and can be later updated using `/setvotechoices`.

Any requests which alter treasury/tspend policy will be stored in the database using the existing accountability system.

**Note:** This does not include consistency checking, it will need to be added later when dcrwallet has an RPC to retrieve policies in batches.
2022-02-04 14:14:49 -05:00
jholdstock
b1a68a94fe Use constants for web context keys. 2021-11-16 14:33:39 +00:00
jholdstock
d337e0a321 Delay dcrd client error handling.
Errors generated during dcrd client creation were previously handled in middleware, and request handling was terminated immediately.

Now the error handling is delayed by adding the error details to the request context. This enables downstream handlers to decide what to do with the error.
2021-11-16 14:33:39 +00:00
Jamie Holdstock
c1ba46347e
Be more specific about consensus vote choices. (#278)
* Be more specific about consensus vote choices.

Rather than referring to just "Vote choices", refer specifically to "consensus vote choices".

This will be useful when treasury and tspend vote choices are added, and the distinction becomes more important.

* dnldd suggestion.
2021-07-05 09:16:08 -05:00
Jamie Holdstock
978b78e745
Compare scripts rather than addresses. (#267)
* Decode fee address with stdaddr.

Compare script and script versions rather than just comparing address strings.

Also move the fee amount check higher, so it is with the rest of the fee validating code.

* Compare voting addr scripts rather than addrs.

Rather than comparing the address strings, ensure both voting script and script version match.
2021-06-08 08:46:16 -05:00
Jamie Holdstock
e05ced391a Various minor cleanups.
- Updating and adding some copyrights which were missed recently.
- Slight improvements to some commenting and naming.
2021-06-01 07:17:11 +08:00
Jamie Holdstock
b050fc3100
Set and display ticket purchase height (#250)
* Ensure purchase height set for confirmed tickets.

* Show purchase height in admin screen.

Only show purchase height when the ticket is confirmed, because if a ticket is not confirmed, its purchase height is not yet known.
2021-05-14 21:19:01 -05:00
Jamie Holdstock
4858af2682
Upgrade deps (#239)
* Update to latest deps.

Includes using the dcrd stdaddr package instead of dcrutil.

* Use stdaddr.Hash160
2021-04-26 09:12:23 -05:00
David Hill
707ded57df
webapi: put error checking where it belongs (#228) 2021-01-22 10:25:51 +00:00
Jamie Holdstock
ac8e20f3c1
Use actual request in response, dont reserialize. (#220)
Reserializing the client request can result in different bytes because
the order of iteration over a map is not guaranteed to be the same every
time.
2020-12-30 12:36:06 +00:00
jholdstock
0f657eb4fe Register tickets with invalid vote choices.
/payfee will no longer reject tickets with invalid vote choices. The tickets will be registered with the VSP and added to voting wallets, but their voting choices will be empty. A warning will be added to server logs.
2020-11-16 14:00:17 +00:00
Jamie Holdstock
b40681d38e
HTTP 428 when fee tx references unknown outputs. (#195)
JSON body will be `{"code": 16, "message":"fee transaction could not be broadcast due to unknown outputs"}`
2020-10-27 11:15:39 +00:00
David Hill
c83a2a0085
rpc: verify dcrwallet's have --manualtickets set. (#187) 2020-09-25 09:55:53 +01:00
jholdstock
825a717ca7 Store records of vote choice changes 2020-09-17 16:05:07 +00:00
jholdstock
d0c3abf258 Make funcNames constant.
Aside from just being a sensible thing to do, this also prevents a local stack allocation.
2020-09-17 14:21:17 +00:00
jholdstock
5a8bc49c22 Unique error for fee broadcast failure 2020-08-21 12:46:58 +00:00
jholdstock
4a207b15f8 Add missing copyright notices 2020-08-19 20:22:12 +00:00
jholdstock
bcb6fd5ec3 Don't export types unnecessarily 2020-08-07 17:03:03 +00:00
jholdstock
9d503e67ae Wallet consistency checks & setting ticket outcome 2020-07-28 20:09:23 +00:00
jholdstock
8c3cab7942 API versioning 2020-07-17 14:31:42 +00:00
David Hill
b24c1a4c78
webapi: sanity check the fee transaction (#151) 2020-07-06 10:07:59 +01:00
jholdstock
5e8ef4e7f2 Prefix for dcrd/dcrwallet/db errors 2020-06-25 15:45:01 +00:00
jholdstock
0e953dc225 Add extra debug info to log messages 2020-06-25 15:45:01 +00:00
jholdstock
9d6cf57219 Add funcName to web api logs 2020-06-25 15:45:01 +00:00
jholdstock
80f5e6f55c Extract code to decode tx and validate tickets 2020-06-22 16:23:31 +00:00
jholdstock
ed21f0af64 Don't put request bytes into context. 2020-06-22 16:23:31 +00:00
jholdstock
4f2766352b Improve handling of fee status.
- Fee tx status is now tracked using a dedicated field, with values none/received/broadcast/confirmed/error.
- Fee tx hex and hash are now both set in /payfee. The absense of txhash is no longer used to determine if a fee tx has been broadcast or not.
- setvotechoices can no longer be called before a fee is received.
- Remove `binding:required` from response types. It has no effect on responses, it is only needed on request types which are validated by gin.
2020-06-09 14:17:43 +00:00
David Hill
83514385d6
change feeamount from float64 to int64/atoms (#121) 2020-06-09 08:08:14 +01:00
David Hill
873d89e412
remove fee transactions if dcrd rejects it. (#114) 2020-06-08 17:31:22 +01:00
jholdstock
9f48bae78e Return parsable error codes instead of just a string.
Also
- Check if VSP is closed before /payfee
2020-06-08 15:33:06 +00:00
jholdstock
4d47bc6df8 Handle "transaction already exists" error 2020-06-05 16:19:46 +00:00
David Hill
eeaefab280
webapi: validate script version in fee transaction (#112) 2020-06-05 17:00:13 +01:00
jholdstock
1c92856303 Ensure provided private key matches ticket 2020-06-05 15:33:56 +00:00
jholdstock
81a6bf1ea8 Reject unvotable tickets.
/payfee and /getaddress will now only accept tickets which are immature or live.
2020-06-03 12:49:14 +00:00
jholdstock
1270f77fd6 Return err if fee tx already received. 2020-06-03 12:45:42 +00:00
jholdstock
86fdf888da Move to decred github org 2020-05-28 12:29:42 -05:00
Jamie Holdstock
4b2a68ea48
Populate ticket status response. (#82) 2020-05-28 18:05:56 +01:00
Jamie Holdstock
67dece7041
Rename to vspd. (#75) 2020-05-27 15:59:30 +01:00
Jamie Holdstock
ccafd8dec4
Calculate fee from percentage. (#69)
* Calculate fee from percentage.

- Reverted config to accept a fee percentage, not absolute value.
- The fee amount to be paid is now included in the `getfeeaddress` response. The current best block is used to calculate the fee percentage, and new blocks may be mined before the fee is paid, so the fee expiry period is shortened from 24 hours to 1 hour to mitigate this.
- Rename ticket db field to FeeAmount so it is more representative of the data it holds.
- API fields renamed to "FeePercentage" and "FeeAmount"
- Relay fee is still hard coded.

* Use getbestblockhash
2020-05-27 14:44:40 +01:00
Jamie Holdstock
87500c3fef
Delay fee broadcast and adding tickets to wallets. (#62)
* Delay fee broadcast and adding tickets to wallets.

- Adds a `background` package which implements a dcrd notification handler.  On each blockconnected notification, tickets with 6+ confirmations are marked confirmed, relevant fee transactions are broadcast, and any fees with 6+ confirmations have their tickets added to voting wallets.
- VSP fee is now an absolute value measured in DCR rather than a percentage. This simplifies the code and is more appropriate for an MVP. We can re-add percentage based fees later.
- Database code for tickets is now simplified to just "Insert/Update", rather than having functions for updating particular fields.
- Pay fee response no longer includes the fee tx hash, because we dont necessarily broadcast the fee tx straight away.

* Const for required confs
2020-05-27 06:39:38 +01:00
Jamie Holdstock
86c4195931
Replace local fee wallet with dcrd. (#61) 2020-05-26 17:30:51 +01:00
Jamie Holdstock
ac488464c0
Rework client/server authentication. (#58)
* Rework client/server authentication.

- Remove Signature from all requests, and instead expect a signature in HTTP header "VSP-Client-Signature".
- Remove CommitmentSignatures from the database.
- Use a bool flag to indicate when a ticket is missing from the database rather than an error.

This commit introduces a lot of duplication into each of the authenticated HTTP handlers. This should be removed in future work which moves the authentication to a dedicated middleware.

* Introduce auth and rpc middleware.

This removed the duplication added in the previous commit, and also removes the duplication of RPC client error handling.
2020-05-26 14:14:38 +01:00
Jamie Holdstock
96608718a0
Cleaning up some TODOs (#50) 2020-05-22 18:42:51 +01:00
Jamie Holdstock
740b9c8e0f
Get relay fee from wallet (#47) 2020-05-22 15:09:51 +01:00