From 108b49ea0374abc30a96bb090378ed3cf35a2e88 Mon Sep 17 00:00:00 2001 From: Jaco Greeff Date: Fri, 5 Mar 2021 13:25:00 +0100 Subject: [PATCH] Expose the hash field from contract wasm (#3267) --- packages/api-contract/src/Abi.spec.ts | 22 +++++++++++++++++++ .../api-contract/test/contracts/ink/index.ts | 1 + .../interfaces/contractsAbi/definitions.ts | 5 ++++- .../src/interfaces/contractsAbi/types.ts | 2 +- 4 files changed, 28 insertions(+), 2 deletions(-) diff --git a/packages/api-contract/src/Abi.spec.ts b/packages/api-contract/src/Abi.spec.ts index b6a9cdead0..bfb743bc92 100644 --- a/packages/api-contract/src/Abi.spec.ts +++ b/packages/api-contract/src/Abi.spec.ts @@ -1,10 +1,18 @@ // Copyright 2017-2021 @polkadot/api-contract authors & contributors // SPDX-License-Identifier: Apache-2.0 +import { blake2AsHex } from '@polkadot/util-crypto'; + import abis from '../test/contracts'; import { Abi } from '.'; interface JSONAbi { + source: { + compiler: string, + hash: string, + language: string, + wasm: string + }, spec: { messages: { name: string[] | string @@ -27,4 +35,18 @@ describe('Abi', (): void => { } }); }); + + it('has the correct hash for the source', (): void => { + const bundle = abis.ink_flipperBundle as JSONAbi; + const abi = new Abi(bundle as any); + + // manual + expect(bundle.source.hash).toEqual(blake2AsHex(bundle.source.wasm)); + + // the Codec hash + expect(bundle.source.hash).toEqual(abi.project.source.wasm.hash.toHex()); + + // the hash as per the actual Abi + expect(bundle.source.hash).toEqual(abi.project.source.wasmHash.toHex()); + }); }); diff --git a/packages/api-contract/test/contracts/ink/index.ts b/packages/api-contract/test/contracts/ink/index.ts index a4acb15ae5..7129e29c1b 100644 --- a/packages/api-contract/test/contracts/ink/index.ts +++ b/packages/api-contract/test/contracts/ink/index.ts @@ -6,5 +6,6 @@ export { default as dns } from './dns.json'; export { default as erc20 } from './erc20.json'; export { default as erc721 } from './erc721.json'; export { default as flipper } from './flipper.json'; +export { default as flipperBundle } from './flipper.contract.json'; export { default as incrementer } from './incrementer.json'; export { default as multisigPlain } from './multisig_plain.json'; diff --git a/packages/types/src/interfaces/contractsAbi/definitions.ts b/packages/types/src/interfaces/contractsAbi/definitions.ts index 67f2d1a573..91ccd29631 100644 --- a/packages/types/src/interfaces/contractsAbi/definitions.ts +++ b/packages/types/src/interfaces/contractsAbi/definitions.ts @@ -126,7 +126,10 @@ export default { license: 'Option' }, ContractProjectSource: { - hash: '[u8; 32]', + _alias: { + wasmHash: 'hash' + }, + wasmHash: '[u8; 32]', language: 'Text', compiler: 'Text', wasm: 'Raw' diff --git a/packages/types/src/interfaces/contractsAbi/types.ts b/packages/types/src/interfaces/contractsAbi/types.ts index ed17748ebc..8f371c6cab 100644 --- a/packages/types/src/interfaces/contractsAbi/types.ts +++ b/packages/types/src/interfaces/contractsAbi/types.ts @@ -136,7 +136,7 @@ export interface ContractProjectContract extends Struct { /** @name ContractProjectSource */ export interface ContractProjectSource extends Struct { - readonly hash: U8aFixed; + readonly wasmHash: U8aFixed; readonly language: Text; readonly compiler: Text; readonly wasm: Raw;