navio-blsct
Version:
TypeScript bindings for the `libblsct` library used by the [Navio](https://nav.io/) blockchain to construct confidential transactions based on the BLS12-381 curve.
63 lines (52 loc) • 1.73 kB
text/typescript
import {
POINT_SIZE,
} from './blsct'
import { Point } from './point'
import { RangeProof } from './rangeProof'
/** A request for recovering a single amount from a non-aggregated range proof.
* Refer to `RangeProof` for a usage example.
*/
export class AmountRecoveryReq {
rangeProof: RangeProof
nonce: Point
/** Constructs a new `AmountRecoveryReq` instance.
* @param rangeProof - The range proof to recover the amount from.
* @param nonce - The nonce used to generate the range proof.
*/
constructor(
rangeProof: RangeProof,
nonce: Point,
) {
this.rangeProof = rangeProof
this.nonce = nonce
}
/** Returns a string representation of the `AmountRecoveryReq`.
* @returns a string representation of the `AmountRecoveryReq`.
*/
toString(): string {
return `${this.constructor.name}(${this.rangeProof}, ${this.nonce})`
}
serialize(): string {
const serRangeProof = this.rangeProof.serialize()
const serNonce = this.nonce.serialize()
return `${serRangeProof}${serNonce}`
}
/** Deserializes a hexadecimal string into an `AmountRecoveryReq` instance.
* @param hex - The hexadecimal string to deserialize.
* @returns An instance of `AmountRecoveryReq`.
*/
static deserialize(
hex: string
): AmountRecoveryReq {
if (hex.length % 2 !== 0) {
hex = `0${hex}`
}
const nonceHexLen = POINT_SIZE * 2
const rangeProofHexLen = hex.length - nonceHexLen
const rangeProofHex = hex.slice(0, rangeProofHexLen)
const nonceHex = hex.slice(rangeProofHexLen)
const rangeProof = RangeProof.deserialize(rangeProofHex)
const nonce = Point.deserialize(nonceHex)
return new AmountRecoveryReq(rangeProof, nonce)
}
}