@ethersproject/constants#NegativeOne TypeScript Examples
The following examples show how to use
@ethersproject/constants#NegativeOne.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: byterepr.ts From clarity with Apache License 2.0 | 6 votes |
toBytesNumber = (
bitSize: number,
signed: boolean,
value: BigNumberish
) => {
let v = BigNumber.from(value);
// Check bounds are safe for encoding
const maxUintValue = MaxUint256.mask(bitSize);
if (signed) {
const bounds = maxUintValue.mask(bitSize - 1); // 1 bit for signed
if (v.gt(bounds) || v.lt(bounds.add(One).mul(NegativeOne))) {
throw new Error('value out-of-bounds, value: ' + value);
}
} else if (v.lt(Zero) || v.gt(maxUintValue.mask(bitSize))) {
throw new Error('value out-of-bounds, value: ' + value);
}
v = v.toTwos(bitSize).mask(bitSize);
const bytes = arrayify(v);
if (v.gte(0)) {
// for positive number, we had to deal with paddings
if (bitSize > 64) {
// for u128, u256, u512, we have to and append extra byte for length
return concat([bytes, Uint8Array.from([bytes.length])]).reverse();
} else {
// for other types, we have to add padding 0s
const byteLength = bitSize / 8;
return concat([
bytes.reverse(),
new Uint8Array(byteLength - bytes.length)
]);
}
} else {
return bytes.reverse();
}
}
Example #2
Source File: ByteConverters.ts From casper-js-sdk with Apache License 2.0 | 5 votes |
toBytesNumber = (bitSize: number, signed: boolean) => (
value: BigNumberish
): Uint8Array => {
const val = BigNumber.from(value);
// Check bounds are safe for encoding
const maxUintValue = MaxUint256.mask(bitSize);
if (signed) {
const bounds = maxUintValue.mask(bitSize - 1); // 1 bit for signed
if (val.gt(bounds) || val.lt(bounds.add(One).mul(NegativeOne))) {
throw new Error('value out-of-bounds, value: ' + value);
}
} else if (val.lt(Zero) || val.gt(maxUintValue.mask(bitSize))) {
throw new Error('value out-of-bounds, value: ' + value);
}
const valTwos = val.toTwos(bitSize).mask(bitSize);
const bytes = arrayify(valTwos);
if (valTwos.gte(0)) {
// for positive number, we had to deal with paddings
if (bitSize > 64) {
// if zero just return zero
if (valTwos.eq(0)) {
return bytes;
}
// for u128, u256, u512, we have to and append extra byte for length
return concat([bytes, Uint8Array.from([bytes.length])])
.slice()
.reverse();
} else {
// for other types, we have to add padding 0s
const byteLength = bitSize / 8;
return concat([
bytes.slice().reverse(),
new Uint8Array(byteLength - bytes.length)
]);
}
} else {
return bytes.reverse();
}
}