diff --git a/packages/chain-space/src/ChainSpace.chain.ts b/packages/chain-space/src/ChainSpace.chain.ts index 3efaf634..6b6d4228 100644 --- a/packages/chain-space/src/ChainSpace.chain.ts +++ b/packages/chain-space/src/ChainSpace.chain.ts @@ -37,6 +37,7 @@ import type { SpaceDigest, AuthorizationUri, SpaceUri, + SubmittableExtrinsic } from '@cord.network/types' import { SDKErrors, DecoderUtils } from '@cord.network/utils' import { @@ -228,6 +229,33 @@ export async function getUriForSpace( * @returns A promise resolving to an object containing the ChainSpace URI and authorization ID. * @throws {SDKErrors.CordDispatchError} - Thrown when there's an error during the dispatch process. */ + +export async function prepareCreateSpaceExtrinsic( + chainSpace: IChainSpace, + creatorUri: DidUri, + signCallback: SignExtrinsicCallback, + authorAccount: CordKeyringPair +): Promise { + try { + const api = ConfigService.get('api') + + const tx = api.tx.chainSpace.create(chainSpace.digest) + const extrinsic = await Did.authorizeTx( + creatorUri, + tx, + signCallback, + authorAccount.address + ) + return extrinsic; + + + } catch (error) { + throw new SDKErrors.CordDispatchError( + `Error preparing extrinsic for creation of chainspace: "${error}".` + ); + } +} + export async function dispatchToChain( chainSpace: IChainSpace, creatorUri: DidUri, @@ -240,20 +268,9 @@ export async function dispatchToChain( } try { - const api = ConfigService.get('api') - - const exists = await isChainSpaceStored(chainSpace.uri) - if (!exists) { - const tx = api.tx.chainSpace.create(chainSpace.digest) - const extrinsic = await Did.authorizeTx( - creatorUri, - tx, - signCallback, - authorAccount.address - ) - await Chain.signAndSubmitTx(extrinsic, authorAccount) - } + const extrinsic = await prepareCreateSpaceExtrinsic(chainSpace, creatorUri, signCallback, authorAccount) + await Chain.signAndSubmitTx(extrinsic, authorAccount) return returnObject } catch (error) {