From 875faef1c60bcdbda560631db3e4995a6f31ddd8 Mon Sep 17 00:00:00 2001 From: Denis Davidyuk Date: Tue, 28 Jan 2025 18:11:53 +0100 Subject: [PATCH] feat(aens): allow to pass salt between Name while claiming --- src/aens.ts | 16 +++++++++------- test/integration/aens.ts | 12 ++++++++++++ 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/src/aens.ts b/src/aens.ts index e37b730eda..9006bb7dd8 100644 --- a/src/aens.ts +++ b/src/aens.ts @@ -47,7 +47,7 @@ interface NamePreclaimOptions Optional {} interface NameClaimOptions - extends BuildTxOptions, + extends BuildTxOptions, Optional {} class NotAuctionNameError extends LogicError { @@ -263,10 +263,10 @@ export default class Name { const opt = { ...this.options, ...options }; const tx = await buildTxAsync({ _isInternalBuild: true, + nameSalt: this.#salt, ...opt, tag: Tag.NameClaimTx, accountId: opt.onAccount.address, - nameSalt: this.#salt, name: this.value, }); return sendTransaction(tx, opt); @@ -280,19 +280,21 @@ export default class Name { * await name.preclaim({ ttl, fee, nonce }) * ``` */ - async preclaim(options: NamePreclaimOptions = {}): ReturnType { + async preclaim( + options: NamePreclaimOptions = {}, + ): Promise> & { nameSalt: number }> { const opt = { ...this.options, ...options }; - const salt = genSalt(); + const nameSalt = genSalt(); const tx = await buildTxAsync({ _isInternalBuild: true, ...opt, tag: Tag.NamePreclaimTx, accountId: opt.onAccount.address, - commitmentId: commitmentHash(this.value, salt), + commitmentId: commitmentHash(this.value, nameSalt), }); const result = await sendTransaction(tx, opt); - this.#salt = salt; - return result; + this.#salt = nameSalt; + return { ...result, nameSalt }; } /** diff --git a/test/integration/aens.ts b/test/integration/aens.ts index 4208c3c9df..e7ad4d3d76 100644 --- a/test/integration/aens.ts +++ b/test/integration/aens.ts @@ -59,6 +59,7 @@ describe('Aens', () => { blockHash: preclaimRes.blockHash, encodedTx: preclaimRes.encodedTx, hash: preclaimRes.hash, + nameSalt: preclaimRes.nameSalt, signatures: [preclaimRes.signatures[0]], rawTx: preclaimRes.rawTx, }); @@ -98,6 +99,17 @@ describe('Aens', () => { }); }).timeout(timeoutBlock); + it('claims a name using different Name instances', async () => { + const string = randomName(30); + + const name1 = new Name(string, aeSdk.getContext()); + const { nameSalt } = await name1.preclaim(); + expect(nameSalt).to.be.a('number'); + + const name2 = new Name(string, aeSdk.getContext()); + await name2.claim({ nameSalt }); + }).timeout(timeoutBlock); + it('claims a long name without preclaim', async () => { const nameString = randomName(30); const n = new Name(nameString, aeSdk.getContext());