Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add BigInt composite #5449

Open
wants to merge 9 commits into
base: master
Choose a base branch
from
Open

Add BigInt composite #5449

wants to merge 9 commits into from

Conversation

jacogr
Copy link
Member

@jacogr jacogr commented Jan 26, 2023

Needs polkadot-js/common#1716

Last piece for issues such as #5706, #3046, #490

TODO:

  • We may want to convert the standard Int to also use a wrapper (like here) - it is obviously a major breaking change, however does prepare the road for swap in the future

@jacogr jacogr added the WIP Work in Progress label Jan 26, 2023
Comment on lines +99 to +111
this.#bitLength = bitLength;
this.#bitLengthInitial = this.$.toString(2).length;
this.#encodedLength = this.#bitLength / 8;
this.isUnsigned = !isSigned;

const isNegative = this.$ < _0n;
const maxBits = bitLength - (isSigned && !isNegative ? 1 : 0);

if (isNegative && !isSigned) {
throw new Error(`${this.toRawType()}: Negative number passed to unsigned type`);
} else if (this.#bitLengthInitial > maxBits) {
throw new Error(`${this.toRawType()}: Input too large. Found input with ${this.#bitLengthInitial} bits, expected ${maxBits}`);
}

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It would be a bit more efficient to place validation before creating instance of a class because in case invalid state no extra operations for fill instance properties.

Suggested change
this.#bitLength = bitLength;
this.#bitLengthInitial = this.$.toString(2).length;
this.#encodedLength = this.#bitLength / 8;
this.isUnsigned = !isSigned;
const isNegative = this.$ < _0n;
const maxBits = bitLength - (isSigned && !isNegative ? 1 : 0);
if (isNegative && !isSigned) {
throw new Error(`${this.toRawType()}: Negative number passed to unsigned type`);
} else if (this.#bitLengthInitial > maxBits) {
throw new Error(`${this.toRawType()}: Input too large. Found input with ${this.#bitLengthInitial} bits, expected ${maxBits}`);
}
if (this.$ < _0n && !isSigned) {
throw new Error(`${this.toRawType()}: Negative number passed to unsigned type`);
}
this.#bitLengthInitial = this.$.toString(2).length;
if (this.#bitLengthInitial >= maxBits) {
throw new Error(`${this.toRawType()}: Input too large. Found input with ${this.#bitLengthInitial} bits, greater ${maxBits}`);
}
this.#bitLength = bitLength;
this.#encodedLength = this.#bitLength / 8;
this.isUnsigned = !isSigned;

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
WIP Work in Progress
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants