Skip to content

Commit

Permalink
Add zero padding for nanos (hiero-ledger#1573)
Browse files Browse the repository at this point in the history
* add zero padding for nanos

Signed-off-by: Petar Tonev <[email protected]>

* fix unit tests after TransactionId.toString() zero padding

Signed-off-by: Petar Tonev <[email protected]>

---------

Signed-off-by: Petar Tonev <[email protected]>
  • Loading branch information
petreze authored Apr 25, 2023
1 parent 5ef0e5e commit 5596a33
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 19 deletions.
3 changes: 2 additions & 1 deletion src/transaction/TransactionId.js
Original file line number Diff line number Diff line change
Expand Up @@ -159,10 +159,11 @@ export default class TransactionId {
*/
toString() {
if (this.accountId != null && this.validStart != null) {
const zeroPaddedNanos = String(this.validStart.nanos).padStart(9, "0");
const nonce =
this.nonce != null ? "/".concat(this.nonce.toString()) : "";
const scheduled = this.scheduled ? "?scheduled" : "";
return `${this.accountId.toString()}@${this.validStart.seconds.toString()}.${this.validStart.nanos.toString()}${scheduled}${nonce}`;
return `${this.accountId.toString()}@${this.validStart.seconds.toString()}.${zeroPaddedNanos}${scheduled}${nonce}`;
} else {
throw new Error("neither `accountId` nor `validStart` are set");
}
Expand Down
2 changes: 1 addition & 1 deletion test/unit/AccountInfoMocking.js
Original file line number Diff line number Diff line change
Expand Up @@ -399,7 +399,7 @@ describe("AccountInfoMocking", function () {
} catch (error) {
if (
error.message !==
"transaction 0.0.1854@1651168054.29348185 failed precheck with status TRANSACTION_EXPIRED"
"transaction 0.0.1854@1651168054.029348185 failed precheck with status TRANSACTION_EXPIRED"
) {
throw error;
}
Expand Down
32 changes: 16 additions & 16 deletions test/unit/TransactionId.js
Original file line number Diff line number Diff line change
Expand Up @@ -66,25 +66,25 @@ describe("TransactionId", function () {
it("should parse {shard}.{realm}.{num}@{seconds}.{nanos}", function () {
const transactionId = TransactionId.fromString("[email protected]");

expect(transactionId.toString()).to.be.equal("1.2.3@4.5");
expect(transactionId.toString()).to.be.equal("1.2.3@4.000000005");
});

it("should parse {num}@{seconds}.{nanos}", function () {
const transactionId = TransactionId.fromString("[email protected]");

expect(transactionId.toString()).to.be.equal("0.0.3@4.5");
expect(transactionId.toString()).to.be.equal("0.0.3@4.000000005");
});

it("should parse {shard}.{realm}.{num}@{seconds}.{nanos}?scheduled", function () {
const transactionId = TransactionId.fromString("[email protected]?scheduled");

expect(transactionId.toString()).to.be.equal("1.2.3@4.5?scheduled");
expect(transactionId.toString()).to.be.equal("1.2.3@4.000000005?scheduled");
});

it("should parse {num}@{seconds}.{nanos}?scheduled", function () {
const transactionId = TransactionId.fromString("[email protected]?scheduled");

expect(transactionId.toString()).to.be.equal("0.0.3@4.5?scheduled");
expect(transactionId.toString()).to.be.equal("0.0.3@4.000000005?scheduled");
});

it("should construct with nonce", function () {
Expand All @@ -106,11 +106,11 @@ describe("TransactionId", function () {
const validStart = new Timestamp(5, 4);
let transactionId = new TransactionId(accountId, validStart, true);

expect(transactionId.toString()).to.equal("1.1.1@5.4?scheduled");
expect(transactionId.toString()).to.equal("1.1.1@5.000000004?scheduled");

transactionId = new TransactionId(accountId, validStart, true, null);

expect(transactionId.toString()).to.equal("1.1.1@5.4?scheduled");
expect(transactionId.toString()).to.equal("1.1.1@5.000000004?scheduled");

transactionId = new TransactionId(
accountId,
Expand All @@ -119,7 +119,7 @@ describe("TransactionId", function () {
undefined
);

expect(transactionId.toString()).to.equal("1.1.1@5.4?scheduled");
expect(transactionId.toString()).to.equal("1.1.1@5.000000004?scheduled");
});

it("should construct with nonce without scheduled", function () {
Expand All @@ -133,11 +133,11 @@ describe("TransactionId", function () {
nonce
);

expect(transactionId.toString()).to.equal("1.1.1@5.4/117");
expect(transactionId.toString()).to.equal("1.1.1@5.000000004/117");

transactionId = new TransactionId(accountId, validStart, NaN, nonce);

expect(transactionId.toString()).to.equal("1.1.1@5.4/117");
expect(transactionId.toString()).to.equal("1.1.1@5.000000004/117");

transactionId = new TransactionId(
accountId,
Expand All @@ -146,7 +146,7 @@ describe("TransactionId", function () {
nonce
);

expect(transactionId.toString()).to.equal("1.1.1@5.4/117");
expect(transactionId.toString()).to.equal("1.1.1@5.000000004/117");
});

it("should construct without scheduled and nonce", function () {
Expand All @@ -159,7 +159,7 @@ describe("TransactionId", function () {
null
);

expect(transactionId.toString()).to.equal("1.1.1@5.4");
expect(transactionId.toString()).to.equal("1.1.1@5.000000004");

transactionId = new TransactionId(
accountId,
Expand All @@ -168,35 +168,35 @@ describe("TransactionId", function () {
undefined
);

expect(transactionId.toString()).to.equal("1.1.1@5.4");
expect(transactionId.toString()).to.equal("1.1.1@5.000000004");
});

it("should construct fromString", function () {
let stringId = "[email protected]?scheduled/117";
let transactionId = TransactionId.fromString(stringId).toString();

expect(transactionId).to.eql(stringId);
expect(transactionId).to.eql("[email protected]?scheduled/117");
});

it("should construct fromString without nonce", function () {
let stringId = "[email protected]?scheduled";
let transactionId = TransactionId.fromString(stringId).toString();

expect(transactionId).to.eql(stringId);
expect(transactionId).to.eql("[email protected]?scheduled");
});

it("should construct fromString without scheduled", function () {
let stringId = "[email protected]/117";
let transactionId = TransactionId.fromString(stringId).toString();

expect(transactionId).to.eql(stringId);
expect(transactionId).to.eql("[email protected]/117");
});

it("should construct fromString without nonce and scheduled", function () {
let stringId = "[email protected]";
let transactionId = TransactionId.fromString(stringId).toString();

expect(transactionId).to.eql(stringId);
expect(transactionId).to.eql("[email protected]");
});

it("should be able to update nonce with a number or date", function () {
Expand Down
2 changes: 1 addition & 1 deletion test/unit/TransactionReceiptMocking.js
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ describe("TransactionReceiptMocking", function () {
} catch (error) {
err =
error.message ===
"receipt for transaction 0.0.3@4.5 contained error status INVALID_SIGNATURE";
"receipt for transaction 0.0.3@4.000000005 contained error status INVALID_SIGNATURE";
}

expect(err).to.be.true;
Expand Down

0 comments on commit 5596a33

Please sign in to comment.