From bbccc2c2e32ed4eb9e5971ac7415b3bacb215bee Mon Sep 17 00:00:00 2001 From: neeraj Date: Mon, 11 Mar 2024 14:10:00 +0530 Subject: [PATCH] Update methods to reassociate and dissociate record --- src/bond.test.ts | 20 +++++++--------- src/index.ts | 31 ++++++++++++++---------- src/laconic-client.ts | 38 +++++++++++++++++++++++++++++- src/types/cerc/registry/message.ts | 20 +++++++++++++++- 4 files changed, 84 insertions(+), 25 deletions(-) diff --git a/src/bond.test.ts b/src/bond.test.ts index 653d98e..84ee641 100644 --- a/src/bond.test.ts +++ b/src/bond.test.ts @@ -95,13 +95,12 @@ const bondTests = () => { }); }); - // TODO: Implement set record - xtest('Associate/Dissociate bond.', async () => { + test('Associate/Dissociate bond.', async () => { let bondId1: string; bondId1 = await registry.getNextBondId(privateKey); expect(bondId1).toBeDefined(); - await registry.createBond({ denom: DENOM, amount: BOND_AMOUNT }, privateKey, laconic2Fee); + await registry.createBond({ denom: DENOM, amount: '1000000000' }, privateKey, laconic2Fee); // Create a new record. let watcher = await publishNewWatcherVersion(bondId1); @@ -110,24 +109,23 @@ const bondTests = () => { expect(record1.bondId).toBe(bondId1); // Dissociate record, query and confirm. - await registry.dissociateBond({ recordId: record1.id }, privateKey, fee); + await registry.dissociateBond({ recordId: record1.id }, privateKey, laconic2Fee); [record1] = await registry.queryRecords(query, true); expect(record1.bondId).toBe(''); // Associate record with bond, query and confirm. - await registry.associateBond({ recordId: record1.id, bondId: bondId1 }, privateKey, fee); + await registry.associateBond({ recordId: record1.id, bondId: bondId1 }, privateKey, laconic2Fee); [record1] = await registry.queryRecords(query, true); expect(record1.bondId).toBe(bondId1); }); - // TODO: Implement set record - xtest('Reassociate/Dissociate records.', async () => { + test('Reassociate/Dissociate records.', async () => { let bondId1: string; let bondId2: string; bondId1 = await registry.getNextBondId(privateKey); expect(bondId1).toBeDefined(); - await registry.createBond({ denom: DENOM, amount: BOND_AMOUNT }, privateKey, laconic2Fee); + await registry.createBond({ denom: DENOM, amount: '1000000000' }, privateKey, laconic2Fee); // Create a new record version. let watcher = await publishNewWatcherVersion(bondId1); @@ -144,19 +142,19 @@ const bondTests = () => { // Create another bond. bondId2 = await registry.getNextBondId(privateKey); expect(bondId2).toBeDefined(); - await registry.createBond({ denom: DENOM, amount: BOND_AMOUNT }, privateKey, laconic2Fee); + await registry.createBond({ denom: DENOM, amount: '1000000000' }, privateKey, laconic2Fee); const [bond] = await registry.getBondsByIds([bondId2]); expect(bond.id).toBe(bondId2); // Reassociate records from bondId1 to bondId2, verify change. - await registry.reassociateRecords({ oldBondId: bondId1, newBondId: bondId2 }, privateKey, fee); + await registry.reassociateRecords({ oldBondId: bondId1, newBondId: bondId2 }, privateKey, laconic2Fee); records = await registry.queryRecords(queryv1, true); expect(records[0].bondId).toBe(bondId2); records = await registry.queryRecords(queryv2, true); expect(records[0].bondId).toBe(bondId2); // Dissociate all records from bond, verify change. - await registry.dissociateRecords({ bondId: bondId2 }, privateKey, fee); + await registry.dissociateRecords({ bondId: bondId2 }, privateKey, laconic2Fee); records = await registry.queryRecords(queryv1, true); expect(records[0].bondId).toBe(''); records = await registry.queryRecords(queryv2, true); diff --git a/src/index.ts b/src/index.ts index a680b48..552338d 100644 --- a/src/index.ts +++ b/src/index.ts @@ -354,29 +354,36 @@ export class Registry { /** * Dissociate all records from bond. */ - async dissociateRecords (params: MessageMsgDissociateRecords, privateKey: string, fee: Fee) { - let result; + async dissociateRecords ({ bondId }: MessageMsgDissociateRecords, privateKey: string, fee: StdFee) { const account = new Account(Buffer.from(privateKey, 'hex')); - const sender = await this._getSender(account); + await account.init(); + const laconicClient = await this.getLaconicClient(account); - const msg = createTxMsgDissociateRecords(this._chain, sender, fee, '', params); - result = await this._submitTx(msg, privateKey, sender); + const response: DeliverTxResponse = await laconicClient.dissociateRecords( + account.address, + bondId, + fee + ); - return parseTxResponse(result); + return laconicClient.registry.decode(response.msgResponses[0]); } /** * Reassociate records (switch bond). */ - async reassociateRecords (params: MessageMsgReAssociateRecords, privateKey: string, fee: Fee) { - let result; + async reassociateRecords ({ newBondId, oldBondId }: MessageMsgReAssociateRecords, privateKey: string, fee: StdFee) { const account = new Account(Buffer.from(privateKey, 'hex')); - const sender = await this._getSender(account); + await account.init(); + const laconicClient = await this.getLaconicClient(account); - const msg = createTxMsgReAssociateRecords(this._chain, sender, fee, '', params); - result = await this._submitTx(msg, privateKey, sender); + const response: DeliverTxResponse = await laconicClient.reassociateRecords( + account.address, + oldBondId, + newBondId, + fee + ); - return parseTxResponse(result); + return laconicClient.registry.decode(response.msgResponses[0]); } /** diff --git a/src/laconic-client.ts b/src/laconic-client.ts index d0e7c81..35dff72 100644 --- a/src/laconic-client.ts +++ b/src/laconic-client.ts @@ -11,7 +11,7 @@ import { Comet38Client } from '@cosmjs/tendermint-rpc'; import { MsgCancelBondEncodeObject, MsgCreateBondEncodeObject, MsgRefillBondEncodeObject, MsgWithdrawBondEncodeObject, bondTypes, typeUrlMsgCancelBond, typeUrlMsgCreateBond, typeUrlMsgRefillBond, typeUrlMsgWithdrawBond } from './types/cerc/bond/message'; import { Coin } from './proto2/cosmos/base/v1beta1/coin'; -import { MsgDeleteNameAuthorityEncodeObject, MsgReserveAuthorityEncodeObject, MsgSetAuthorityBondEncodeObject, MsgSetNameEncodeObject, MsgSetRecordEncodeObject, registryTypes, typeUrlMsgDeleteNameAuthority, typeUrlMsgReserveAuthority, typeUrlMsgSetAuthorityBond, typeUrlMsgSetName, typeUrlMsgSetRecord } from './types/cerc/registry/message'; +import { MsgAssociateBondEncodeObject, MsgDeleteNameAuthorityEncodeObject, MsgDissociateBondEncodeObject, MsgDissociateRecordsEncodeObject, MsgReassociateRecordsEncodeObject, MsgReserveAuthorityEncodeObject, MsgSetAuthorityBondEncodeObject, MsgSetNameEncodeObject, MsgSetRecordEncodeObject, registryTypes, typeUrlMsgAssociateBond, typeUrlMsgDeleteNameAuthority, typeUrlMsgDissociateBond, typeUrlMsgDissociateRecords, typeUrlMsgReassociateRecords, typeUrlMsgReserveAuthority, typeUrlMsgSetAuthorityBond, typeUrlMsgSetName, typeUrlMsgSetRecord } from './types/cerc/registry/message'; import { MsgCommitBidEncodeObject, MsgRevealBidEncodeObject, auctionTypes, typeUrlMsgCommitBid, typeUrlMsgRevealBid } from './types/cerc/auction/message'; import { Payload } from './proto2/cerc/registry/v1/tx'; import { Record, Signature } from './proto2/cerc/registry/v1/registry'; @@ -168,6 +168,42 @@ export class LaconicClient extends SigningStargateClient { return this.signAndBroadcast(signer, [createMsg], fee, memo); } + public async dissociateRecords ( + signer: string, + bondId: string, + fee: StdFee | 'auto' | number, + memo = '' + ): Promise { + const createMsg: MsgDissociateRecordsEncodeObject = { + typeUrl: typeUrlMsgDissociateRecords, + value: { + signer, + bondId + } + }; + + return this.signAndBroadcast(signer, [createMsg], fee, memo); + } + + public async reassociateRecords ( + signer: string, + oldBondId: string, + newBondId: string, + fee: StdFee | 'auto' | number, + memo = '' + ): Promise { + const createMsg: MsgReassociateRecordsEncodeObject = { + typeUrl: typeUrlMsgReassociateRecords, + value: { + signer, + oldBondId, + newBondId + } + }; + + return this.signAndBroadcast(signer, [createMsg], fee, memo); + } + public async reserveAuthority ( signer: string, name: string, diff --git a/src/types/cerc/registry/message.ts b/src/types/cerc/registry/message.ts index 3bdee6f..60997f7 100644 --- a/src/types/cerc/registry/message.ts +++ b/src/types/cerc/registry/message.ts @@ -1,6 +1,6 @@ import { EncodeObject, GeneratedType } from '@cosmjs/proto-signing'; -import { MsgReserveAuthority, MsgReserveAuthorityResponse, MsgSetAuthorityBond, MsgSetAuthorityBondResponse, MsgSetRecord, MsgSetRecordResponse, MsgSetName, MsgSetNameResponse, MsgDeleteNameAuthority, MsgDeleteNameAuthorityResponse } from '../../../proto2/cerc/registry/v1/tx'; +import { MsgReserveAuthority, MsgReserveAuthorityResponse, MsgSetAuthorityBond, MsgSetAuthorityBondResponse, MsgSetRecord, MsgSetRecordResponse, MsgSetName, MsgSetNameResponse, MsgDeleteNameAuthority, MsgDeleteNameAuthorityResponse, MsgAssociateBond, MsgAssociateBondResponse, MsgDissociateBond, MsgDissociateBondResponse, MsgDissociateRecords, MsgReassociateRecords, MsgDissociateRecordsResponse, MsgReassociateRecordsResponse } from '../../../proto2/cerc/registry/v1/tx'; export const typeUrlMsgReserveAuthority = '/cerc.registry.v1.MsgReserveAuthority'; export const typeUrlMsgSetRecord = '/cerc.registry.v1.MsgSetRecord'; @@ -16,6 +16,10 @@ export const typeUrlMsgAssociateBond = '/cerc.registry.v1.MsgAssociateBond'; export const typeUrlMsgDissociateBond = '/cerc.registry.v1.MsgDissociateBond'; export const typeUrlMsgAssociateBondResponse = '/cerc.registry.v1.MsgAssociateBondResponse'; export const typeUrlMsgDissociateBondResponse = '/cerc.registry.v1.MsgDissociateBondResponse'; +export const typeUrlMsgDissociateRecords = '/cerc.registry.v1.MsgDissociateRecords'; +export const typeUrlMsgReassociateRecords = '/cerc.registry.v1.MsgReassociateRecords'; +export const typeUrlMsgDissociateRecordsResponse = '/cerc.registry.v1.MsgDissociateRecordsResponse'; +export const typeUrlMsgReassociateRecordsResponse = '/cerc.registry.v1.MsgReassociateRecordsResponse'; export const registryTypes: ReadonlyArray<[string, GeneratedType]> = [ [typeUrlMsgReserveAuthority, MsgReserveAuthority], @@ -32,6 +36,10 @@ export const registryTypes: ReadonlyArray<[string, GeneratedType]> = [ [typeUrlMsgAssociateBondResponse, MsgAssociateBondResponse], [typeUrlMsgDissociateBond, MsgDissociateBond], [typeUrlMsgDissociateBondResponse, MsgDissociateBondResponse], + [typeUrlMsgDissociateRecords, MsgDissociateRecords], + [typeUrlMsgReassociateRecords, MsgReassociateRecords], + [typeUrlMsgDissociateRecordsResponse, MsgDissociateRecordsResponse], + [typeUrlMsgReassociateRecordsResponse, MsgReassociateRecordsResponse] ]; export interface MsgReserveAuthorityEncodeObject extends EncodeObject { @@ -68,3 +76,13 @@ export interface MsgDissociateBondEncodeObject extends EncodeObject { readonly typeUrl: '/cerc.registry.v1.MsgDissociateBond'; readonly value: Partial; } + +export interface MsgDissociateRecordsEncodeObject extends EncodeObject { + readonly typeUrl: '/cerc.registry.v1.MsgDissociateRecords'; + readonly value: Partial; +} + +export interface MsgReassociateRecordsEncodeObject extends EncodeObject { + readonly typeUrl: '/cerc.registry.v1.MsgReassociateRecords'; + readonly value: Partial; +}