itns-sidechain/lib/protocol/errors.js

76 lines
1.9 KiB
JavaScript
Raw Permalink Normal View History

2024-09-24 17:51:55 +04:00
// @ts-check
2016-04-29 17:45:13 -07:00
/*!
2018-08-01 20:00:09 -07:00
* errors.js - error objects for hsd
2018-02-01 13:40:45 -08:00
* Copyright (c) 2017-2018, Christopher Jeffrey (MIT License).
2018-08-01 20:00:09 -07:00
* https://github.com/handshake-org/hsd
2016-04-29 17:45:13 -07:00
*/
2016-06-13 01:06:01 -07:00
'use strict';
2017-02-03 22:47:26 -08:00
/**
* @module protocol/errors
*/
2018-07-19 05:40:48 -07:00
const assert = require('bsert');
2016-04-29 17:45:13 -07:00
2024-09-24 17:51:55 +04:00
/** @typedef {import('../primitives/block')} Block */
/** @typedef {import('../primitives/tx')} TX */
/** @typedef {import('../primitives/claim')} Claim */
/** @typedef {import('../types').Hash} Hash */
2016-04-29 17:45:13 -07:00
/**
2017-11-16 19:46:19 -08:00
* Verify Error
2016-04-29 17:45:13 -07:00
* An error thrown during verification. Can be either
* a mempool transaction validation error or a blockchain
* block verification error. Ultimately used to send
* `reject` packets to peers.
* @extends Error
2024-09-24 17:51:55 +04:00
* @property {Block|TX|Claim} msg
* @property {String} code - Reject packet code.
* @property {String} reason - Reject packet reason.
* @property {Number} score - Ban score increase
2016-04-29 17:45:13 -07:00
* (can be -1 for no reject packet).
2024-09-24 17:51:55 +04:00
* @property {Boolean} malleated
2016-04-29 17:45:13 -07:00
*/
2017-11-16 19:46:19 -08:00
class VerifyError extends Error {
/**
* Create a verify error.
* @constructor
2024-09-24 17:51:55 +04:00
* @param {Block|TX|Claim} msg
2017-11-16 19:46:19 -08:00
* @param {String} code - Reject packet code.
* @param {String} reason - Reject packet reason.
* @param {Number} score - Ban score increase
* (can be -1 for no reject packet).
2024-09-24 17:51:55 +04:00
* @param {Boolean} [malleated=false]
2017-11-16 19:46:19 -08:00
*/
2016-04-29 17:45:13 -07:00
2017-11-16 19:46:19 -08:00
constructor(msg, code, reason, score, malleated) {
super();
2016-05-23 00:49:52 -07:00
2017-11-16 19:46:19 -08:00
assert(typeof code === 'string');
assert(typeof reason === 'string');
assert(score >= 0);
2017-11-16 19:46:19 -08:00
this.type = 'VerifyError';
this.message = '';
this.code = code;
this.reason = reason;
this.score = score;
this.hash = msg.hash();
2017-11-16 19:46:19 -08:00
this.malleated = malleated || false;
2017-07-13 11:12:28 -07:00
2017-11-16 19:46:19 -08:00
this.message = `Verification failure: ${reason}`
+ ` (code=${code} score=${score} hash=${msg.hash().toString('hex')})`;
2016-04-29 17:45:13 -07:00
2017-11-16 19:46:19 -08:00
if (Error.captureStackTrace)
Error.captureStackTrace(this, VerifyError);
}
}
2016-04-29 17:45:13 -07:00
2016-05-15 18:07:06 -07:00
/*
* Expose
*/
2016-05-13 09:23:57 -07:00
exports.VerifyError = VerifyError;