@vbyte/btc-dev
Version:
Batteries-included toolset for plebian bitcoin development
38 lines (37 loc) • 1.14 kB
JavaScript
import { Assert } from '@vbyte/micro-lib';
const LOCKTIME_THRESHOLD = 500000000;
export var LocktimeField;
(function (LocktimeField) {
LocktimeField.encode = encode_locktime;
LocktimeField.decode = decode_locktime;
})(LocktimeField || (LocktimeField = {}));
export function encode_locktime(locktime) {
switch (locktime.type) {
case 'timelock':
Assert.ok(locktime.stamp >= LOCKTIME_THRESHOLD, 'Invalid timestamp');
return locktime.stamp;
case 'heightlock':
Assert.ok(locktime.height > 0, 'height must be greater than 0');
Assert.ok(locktime.height < LOCKTIME_THRESHOLD, 'invalid block height');
return locktime.height;
default:
throw new Error('Invalid locktime type');
}
}
export function decode_locktime(locktime) {
if (isNaN(locktime) || locktime <= 0) {
return null;
}
if (locktime < LOCKTIME_THRESHOLD) {
return {
type: 'heightlock',
height: locktime
};
}
else {
return {
type: 'timelock',
stamp: locktime
};
}
}