@unique-nft/api
Version:
Definitely typed JS API for the Unique Network blockchain
50 lines (37 loc) • 1.75 kB
text/typescript
import {ISubmittableResult, ApiPromise} from '../../../types'
import {StringUtils} from '../../../utils'
import {findEventDataBySectionAndMethod} from '../../extrinsicTools'
import {AbstractExtrinsic, ExtrinsicOptions, ExtrinsicResult, ExtrinsicSendOptions} from '../AbstractExtrinsic'
import {ExtrinsicError} from '../../../utils/errors'
import {CollectionParams} from "./types";
export interface ExtrinsicCreateCollectionParams {
collection: CollectionParams
}
export interface ExtrinsicCreateCollectionResult extends ExtrinsicResult {
collectionId: number
}
export class ExtrinsicCreateCollection extends AbstractExtrinsic<ExtrinsicCreateCollectionParams, ExtrinsicCreateCollectionResult> {
constructor(api: ApiPromise, params: ExtrinsicCreateCollectionParams, options?: ExtrinsicOptions) {
const collection = JSON.parse(JSON.stringify(params.collection))
if (!collection.mode) {
collection.mode = {nft: null}
}
for (const fieldName of ['name', 'description', 'tokenPrefix']) {
;(collection as any)[fieldName] = StringUtils.str2vec((collection as any)[fieldName])
}
const tx = api.tx.unique.createCollectionEx(collection)
super(api, tx, params)
}
protected async processResult(txResult: ISubmittableResult, options: ExtrinsicSendOptions) {
const result = await this.getBaseResult(txResult, options)
const data = findEventDataBySectionAndMethod(txResult, 'common', 'CollectionCreated')
const collectionId = (!!data && parseInt(data[0].toString(), 10)) || null
if (!collectionId) {
throw new ExtrinsicError(txResult, 'No collection id found')
}
return {
...result,
collectionId,
}
}
}