diff --git a/packages/api-contract/src/base/Base.ts b/packages/api-contract/src/base/Base.ts index d7b96746438..889a9797cc2 100644 --- a/packages/api-contract/src/base/Base.ts +++ b/packages/api-contract/src/base/Base.ts @@ -20,10 +20,10 @@ export abstract class Base { constructor (api: ApiBase, abi: string | Record | Abi, decorateMethod: DecorateMethod) { if (!api || !api.isConnected || !api.tx) { throw new Error('Your API has not been initialized correctly and is not connected to a chain'); - } else if (!api.tx.contracts || !isFunction(api.tx.contracts.instantiateWithCode) || api.tx.contracts.instantiateWithCode.meta.args.length !== 6) { - throw new Error('The runtime does not expose api.tx.contracts.instantiateWithCode with storageDepositLimit'); - } else if (!api.call.contractsApi || !isFunction(api.call.contractsApi.call)) { - throw new Error('Your runtime does not expose the api.call.contractsApi.call runtime interfaces'); + } else if (!api.tx.revive || !isFunction(api.tx.revive.instantiateWithCode) || api.tx.revive.instantiateWithCode.meta.args.length !== 6) { + throw new Error('The runtime does not expose api.tx.revive.instantiateWithCode with storageDepositLimit'); + } else if (!api.call.reviveApi || !isFunction(api.call.reviveApi.call)) { + throw new Error('Your runtime does not expose the api.call.reviveApi.call runtime interfaces'); } this.abi = abi instanceof Abi diff --git a/packages/api-contract/src/base/Blueprint.ts b/packages/api-contract/src/base/Blueprint.ts index 27e1e4a38ba..b206d635a1b 100644 --- a/packages/api-contract/src/base/Blueprint.ts +++ b/packages/api-contract/src/base/Blueprint.ts @@ -4,7 +4,7 @@ import type { ApiBase } from '@polkadot/api/base'; import type { SubmittableExtrinsic } from '@polkadot/api/submittable/types'; import type { ApiTypes, DecorateMethod } from '@polkadot/api/types'; -import type { AccountId, EventRecord, Hash } from '@polkadot/types/interfaces'; +import type { Hash } from '@polkadot/types/interfaces'; import type { ISubmittableResult } from '@polkadot/types/types'; import type { Abi } from '../Abi/index.js'; import type { AbiConstructor, BlueprintOptions } from '../types.js'; @@ -13,7 +13,7 @@ import type { MapConstructorExec } from './types.js'; import { SubmittableResult } from '@polkadot/api'; import { BN_ZERO, isUndefined } from '@polkadot/util'; -import { applyOnEvent } from '../util.js'; +// import { applyOnEvent } from '../util.js'; import { Base } from './Base.js'; import { Contract } from './Contract.js'; import { convertWeight, createBluePrintTx, encodeSalt } from './util.js'; @@ -55,7 +55,7 @@ export class Blueprint extends Base { } #deploy = (constructorOrId: AbiConstructor | string | number, { gasLimit = BN_ZERO, salt, storageDepositLimit = null, value = BN_ZERO }: BlueprintOptions, params: unknown[]): SubmittableExtrinsic> => { - return this.api.tx.contracts.instantiate( + return this.api.tx.revive.instantiate( value, // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore jiggle v1 weights, metadata points to latest @@ -67,9 +67,12 @@ export class Blueprint extends Base { this.abi.findConstructor(constructorOrId).toU8a(params), encodeSalt(salt) ).withResultTransform((result: ISubmittableResult) => - new BlueprintSubmittableResult(result, applyOnEvent(result, ['Instantiated'], ([record]: EventRecord[]) => - new Contract(this.api, this.abi, record.event.data[1] as AccountId, this._decorateMethod) - )) + new BlueprintSubmittableResult(result, (() => { + if (result.status.isInBlock || result.status.isFinalized) { + return new Contract(this.api, this.abi, "0x075e2a9cfb213a68dfa1f5cf6bf6d515ae212cf8", this._decorateMethod); + } + return undefined; + })()) ); }; } diff --git a/packages/api-contract/src/base/Code.ts b/packages/api-contract/src/base/Code.ts index c329792a708..94d944e8949 100644 --- a/packages/api-contract/src/base/Code.ts +++ b/packages/api-contract/src/base/Code.ts @@ -4,8 +4,9 @@ import type { ApiBase } from '@polkadot/api/base'; import type { SubmittableExtrinsic } from '@polkadot/api/submittable/types'; import type { ApiTypes, DecorateMethod } from '@polkadot/api/types'; -import type { AccountId, EventRecord } from '@polkadot/types/interfaces'; +// import type { AccountId, EventRecord } from '@polkadot/types/interfaces'; import type { ISubmittableResult } from '@polkadot/types/types'; +// @ts-ignore import type { Codec } from '@polkadot/types-codec/types'; import type { Abi } from '../Abi/index.js'; import type { AbiConstructor, BlueprintOptions } from '../types.js'; @@ -14,7 +15,7 @@ import type { MapConstructorExec } from './types.js'; import { SubmittableResult } from '@polkadot/api'; import { BN_ZERO, compactAddLength, isRiscV, isUndefined, isWasm, u8aToU8a } from '@polkadot/util'; -import { applyOnEvent } from '../util.js'; +// import { applyOnEvent } from '../util.js'; import { Base } from './Base.js'; import { Blueprint } from './Blueprint.js'; import { Contract } from './Contract.js'; @@ -68,7 +69,9 @@ export class Code extends Base { } #instantiate = (constructorOrId: AbiConstructor | string | number, { gasLimit = BN_ZERO, salt, storageDepositLimit = null, value = BN_ZERO }: BlueprintOptions, params: unknown[]): SubmittableExtrinsic> => { - return this.api.tx.contracts.instantiateWithCode( + console.log("in instantiate"); + console.log(this.abi.info.source.wasmHash); + return this.api.tx.revive.instantiateWithCode( value, // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore jiggle v1 weights, metadata points to latest @@ -80,19 +83,27 @@ export class Code extends Base { this.abi.findConstructor(constructorOrId).toU8a(params), encodeSalt(salt) ).withResultTransform((result: ISubmittableResult) => - new CodeSubmittableResult(result, ...(applyOnEvent(result, ['CodeStored', 'Instantiated'], (records: EventRecord[]) => - records.reduce<[Blueprint | undefined, Contract | undefined]>(([blueprint, contract], { event }) => - this.api.events.contracts.Instantiated.is(event) - ? [blueprint, new Contract(this.api, this.abi, (event as unknown as { data: [Codec, AccountId] }).data[1], this._decorateMethod)] - : this.api.events.contracts.CodeStored.is(event) - ? [new Blueprint(this.api, this.abi, (event as unknown as { data: [AccountId] }).data[0], this._decorateMethod), contract] - : [blueprint, contract], - [undefined, undefined]) - ) || [undefined, undefined])) + new CodeSubmittableResult( + result, + new Blueprint(this.api, this.abi, this.abi.info.source.wasmHash, this._decorateMethod), + new Contract(this.api, this.abi, "0x075e2a9cfb213a68dfa1f5cf6bf6d515ae212cf8", this._decorateMethod) + ) ); }; } + +// new CodeSubmittableResult(result, ...(applyOnEvent(result, ['CodeStored', 'Instantiated'], (records: EventRecord[]) => +// records.reduce<[Blueprint | undefined, Contract | undefined]>(([blueprint, contract], { event }) => +// this.api.events.contracts.Instantiated.is(event) +// ? [blueprint, new Contract(this.api, this.abi, (event as unknown as { data: [Codec, AccountId] }).data[1], this._decorateMethod)] +// : this.api.events.contracts.CodeStored.is(event) +// ? [new Blueprint(this.api, this.abi, (event as unknown as { data: [AccountId] }).data[0], this._decorateMethod), contract] +// : [blueprint, contract], +// [undefined, undefined]) +// ) || [undefined, undefined])) +// ); + export function extendCode (type: ApiType, decorateMethod: DecorateMethod): CodeConstructor { return class extends Code { static __CodeType = type; diff --git a/packages/api-contract/src/base/Contract.ts b/packages/api-contract/src/base/Contract.ts index a40777181b6..4c3dbc492e2 100644 --- a/packages/api-contract/src/base/Contract.ts +++ b/packages/api-contract/src/base/Contract.ts @@ -4,7 +4,7 @@ import type { ApiBase } from '@polkadot/api/base'; import type { SubmittableExtrinsic } from '@polkadot/api/submittable/types'; import type { ApiTypes, DecorateMethod } from '@polkadot/api/types'; -import type { AccountId, ContractExecResult, EventRecord, Weight, WeightV2 } from '@polkadot/types/interfaces'; +import type { AccountId, AccountId20, ContractExecResult, EventRecord, Weight, WeightV2 } from '@polkadot/types/interfaces'; import type { ISubmittableResult } from '@polkadot/types/types'; import type { Abi } from '../Abi/index.js'; import type { AbiMessage, ContractCallOutcome, ContractOptions, DecodedEvent, WeightAll } from '../types.js'; @@ -52,15 +52,15 @@ export class Contract extends Base { /** * @description The on-chain address for this contract */ - readonly address: AccountId; + readonly address: AccountId20; readonly #query: MapMessageQuery = {}; readonly #tx: MapMessageTx = {}; - constructor (api: ApiBase, abi: string | Record | Abi, address: string | AccountId, decorateMethod: DecorateMethod) { + constructor (api: ApiBase, abi: string | Record | Abi, address: string | AccountId20, decorateMethod: DecorateMethod) { super(api, abi, decorateMethod); - this.address = this.registry.createType('AccountId', address); + this.address = this.registry.createType('AccountId20', address); this.abi.messages.forEach((m): void => { if (isUndefined(this.#tx[m.method])) { @@ -100,7 +100,7 @@ export class Contract extends Base { }; #exec = (messageOrId: AbiMessage | string | number, { gasLimit = BN_ZERO, storageDepositLimit = null, value = BN_ZERO }: ContractOptions, params: unknown[]): SubmittableExtrinsic => { - return this.api.tx.contracts.call( + return this.api.tx.revive.call( this.address, value, // eslint-disable-next-line @typescript-eslint/ban-ts-comment diff --git a/packages/api-contract/src/promise/index.ts b/packages/api-contract/src/promise/index.ts index 07e5065e090..706914a7e92 100644 --- a/packages/api-contract/src/promise/index.ts +++ b/packages/api-contract/src/promise/index.ts @@ -2,7 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 import type { ApiPromise } from '@polkadot/api'; -import type { AccountId, Hash } from '@polkadot/types/interfaces'; +import type { AccountId20, Hash } from '@polkadot/types/interfaces'; import type { Abi } from '../Abi/index.js'; import { toPromiseMethod } from '@polkadot/api'; @@ -22,7 +22,7 @@ export class CodePromise extends Code<'promise'> { } export class ContractPromise extends Contract<'promise'> { - constructor (api: ApiPromise, abi: string | Record | Abi, address: string | AccountId) { + constructor (api: ApiPromise, abi: string | Record | Abi, address: string | AccountId20) { super(api, abi, address, toPromiseMethod); } }