diff --git a/packages/api-contract/src/Abi.spec.ts b/packages/api-contract/src/Abi.spec.ts index b8f864e0ec..8da09c5ba1 100644 --- a/packages/api-contract/src/Abi.spec.ts +++ b/packages/api-contract/src/Abi.spec.ts @@ -19,72 +19,18 @@ function compareInterface (name: string, messageIds: string[]): void { } } +interface JSONAbi { + spec: { + messages: { + name: string[] | string + }[] + } +} + describe('Abi', (): void => { - describe('construction', (): void => { - it('initializes from a contract ABI (flipper)', (): void => { - compareInterface('flipper', ['flip', 'get']); - }); - - it('initializes from a contract ABI (incrementer)', (): void => { - compareInterface('incrementer', ['inc', 'get']); - }); - - it('initializes from a contract ABI (erc20)', (): void => { - compareInterface('erc20', [ - 'total_supply', - 'balance_of', - 'allowance', - 'transfer', - 'approve', - 'transfer_from' - ]); - }); - - it('initializes from a contract ABI (delegator)', (): void => { - compareInterface('delegator', [ - 'get', - 'change', - 'switch' - ]); - }); - - it('initializes from a contract ABI (dns)', (): void => { - compareInterface('dns', [ - 'register', - 'set_address', - 'transfer', - 'get_address' - ]); - }); - - it('initializes from a contract ABI (erc721)', (): void => { - compareInterface('erc721', [ - 'balance_of', - 'owner_of', - 'get_approved', - 'is_approved_for_all', - 'set_approval_for_all', - 'approve', - 'transfer', - 'transfer_from', - 'mint', - 'burn' - ]); - }); - - it('initializes from a contract ABI (multisig_plain)', (): void => { - compareInterface('multisigPlain', [ - 'add_owner', - 'remove_owner', - 'replace_owner', - 'change_requirement', - 'submit_transaction', - 'cancel_transaction', - 'confirm_transaction', - 'revoke_confirmation', - 'invoke_transaction', - 'eval_transaction' - ]); + Object.entries(abis).forEach(([abiName, abi]) => { + it(`initializes from a contract ABI (${abiName})`, (): void => { + compareInterface(abiName, (abi as JSONAbi).spec.messages.map(({ name }) => Array.isArray(name) ? name[0] : name)); }); }); }); diff --git a/packages/api-contract/src/MetaRegistry.spec.ts b/packages/api-contract/src/MetaRegistry.spec.ts index b2ac6836eb..f3139f4712 100644 --- a/packages/api-contract/src/MetaRegistry.spec.ts +++ b/packages/api-contract/src/MetaRegistry.spec.ts @@ -7,13 +7,11 @@ import path from 'path'; import Abi from './Abi'; import * as testContracts from '../test/contracts'; -import * as userContracts from '../test/contracts/user'; const abis: Record = { ...testContracts }; -const userAbis: Record = { ...userContracts }; function compareTypes (name: string): void { - const abi = new Abi(abis[name] || userAbis[name]); + const abi = new Abi(abis[name]); try { const cmpPath = path.join(__dirname, `../test/compare/${name}.test.json`); @@ -32,35 +30,9 @@ function compareTypes (name: string): void { } describe('MetaRegistry', (): void => { - describe('types', (): void => { - it('initializes from a contract ABI (flipper)', (): void => { - compareTypes('flipper'); - }); - - it('initializes from a contract ABI (incrementer)', (): void => { - compareTypes('incrementer'); - }); - - it('initializes from a contract ABI (erc20)', (): void => { - compareTypes('erc20'); - }); - - it('initializes from a contract ABI (dns)', (): void => { - compareTypes('dns'); - }); - - it('initializes from a contract ABI (erc721)', (): void => { - compareTypes('erc721'); - }); - - it('initializes from a contract ABI (multisig_plain)', (): void => { - compareTypes('multisigPlain'); - }); - }); - - describe('user ABIs', (): void => { - it('initializes from a contract ABI (withString)', (): void => { - compareTypes('withString'); + Object.keys(abis).forEach((abiName) => { + it(`initializes from a contract ABI (${abiName})`, (): void => { + compareTypes(abiName); }); }); diff --git a/packages/api-contract/test/compare/delegator.test.json b/packages/api-contract/test/compare/delegator.test.json new file mode 100644 index 0000000000..72e3aabfd8 --- /dev/null +++ b/packages/api-contract/test/compare/delegator.test.json @@ -0,0 +1,31 @@ +[ + { + "displayName": "AccountId", + "namespace": "ink_env::types", + "info": 6, + "type": "AccountId" + }, + { + "info": 12, + "length": 32, + "sub": { + "info": 6, + "type": "u8" + }, + "type": "[u8;32]" + }, + { + "info": 6, + "type": "u8" + }, + { + "info": 6, + "type": "i32" + }, + { + "displayName": "Hash", + "namespace": "ink_env::types", + "info": 6, + "type": "Hash" + } +] \ No newline at end of file diff --git a/packages/api-contract/test/compare/ints256.test.json b/packages/api-contract/test/compare/ints256.test.json new file mode 100644 index 0000000000..f97fdb2089 --- /dev/null +++ b/packages/api-contract/test/compare/ints256.test.json @@ -0,0 +1,6 @@ +[ + { + "info": 6, + "type": "u256" + } +] \ No newline at end of file diff --git a/packages/api-contract/test/contracts/index.ts b/packages/api-contract/test/contracts/index.ts index 6472e1093d..2fb2aebb7a 100644 --- a/packages/api-contract/test/contracts/index.ts +++ b/packages/api-contract/test/contracts/index.ts @@ -1,10 +1,6 @@ // Copyright 2017-2020 @polkadot/api-contract authors & contributors // SPDX-License-Identifier: Apache-2.0 -export { default as delegator } from './delegator.json'; -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 incrementer } from './incrementer.json'; -export { default as multisigPlain } from './multisig_plain.json'; +export * from './ink'; +export * from './solang'; +export * from './user'; diff --git a/packages/api-contract/test/contracts/accumulator.wasm b/packages/api-contract/test/contracts/ink/accumulator.wasm similarity index 100% rename from packages/api-contract/test/contracts/accumulator.wasm rename to packages/api-contract/test/contracts/ink/accumulator.wasm diff --git a/packages/api-contract/test/contracts/adder.wasm b/packages/api-contract/test/contracts/ink/adder.wasm similarity index 100% rename from packages/api-contract/test/contracts/adder.wasm rename to packages/api-contract/test/contracts/ink/adder.wasm diff --git a/packages/api-contract/test/contracts/delegator.json b/packages/api-contract/test/contracts/ink/delegator.json similarity index 100% rename from packages/api-contract/test/contracts/delegator.json rename to packages/api-contract/test/contracts/ink/delegator.json diff --git a/packages/api-contract/test/contracts/delegator.wasm b/packages/api-contract/test/contracts/ink/delegator.wasm similarity index 100% rename from packages/api-contract/test/contracts/delegator.wasm rename to packages/api-contract/test/contracts/ink/delegator.wasm diff --git a/packages/api-contract/test/contracts/dns.json b/packages/api-contract/test/contracts/ink/dns.json similarity index 100% rename from packages/api-contract/test/contracts/dns.json rename to packages/api-contract/test/contracts/ink/dns.json diff --git a/packages/api-contract/test/contracts/dns.wasm b/packages/api-contract/test/contracts/ink/dns.wasm similarity index 100% rename from packages/api-contract/test/contracts/dns.wasm rename to packages/api-contract/test/contracts/ink/dns.wasm diff --git a/packages/api-contract/test/contracts/erc20.json b/packages/api-contract/test/contracts/ink/erc20.json similarity index 100% rename from packages/api-contract/test/contracts/erc20.json rename to packages/api-contract/test/contracts/ink/erc20.json diff --git a/packages/api-contract/test/contracts/erc20.wasm b/packages/api-contract/test/contracts/ink/erc20.wasm similarity index 100% rename from packages/api-contract/test/contracts/erc20.wasm rename to packages/api-contract/test/contracts/ink/erc20.wasm diff --git a/packages/api-contract/test/contracts/erc721.json b/packages/api-contract/test/contracts/ink/erc721.json similarity index 100% rename from packages/api-contract/test/contracts/erc721.json rename to packages/api-contract/test/contracts/ink/erc721.json diff --git a/packages/api-contract/test/contracts/erc721.wasm b/packages/api-contract/test/contracts/ink/erc721.wasm similarity index 100% rename from packages/api-contract/test/contracts/erc721.wasm rename to packages/api-contract/test/contracts/ink/erc721.wasm diff --git a/packages/api-contract/test/contracts/flipper.json b/packages/api-contract/test/contracts/ink/flipper.json similarity index 100% rename from packages/api-contract/test/contracts/flipper.json rename to packages/api-contract/test/contracts/ink/flipper.json diff --git a/packages/api-contract/test/contracts/flipper.wasm b/packages/api-contract/test/contracts/ink/flipper.wasm similarity index 100% rename from packages/api-contract/test/contracts/flipper.wasm rename to packages/api-contract/test/contracts/ink/flipper.wasm diff --git a/packages/api-contract/test/contracts/incrementer.json b/packages/api-contract/test/contracts/ink/incrementer.json similarity index 100% rename from packages/api-contract/test/contracts/incrementer.json rename to packages/api-contract/test/contracts/ink/incrementer.json diff --git a/packages/api-contract/test/contracts/incrementer.wasm b/packages/api-contract/test/contracts/ink/incrementer.wasm similarity index 100% rename from packages/api-contract/test/contracts/incrementer.wasm rename to packages/api-contract/test/contracts/ink/incrementer.wasm diff --git a/packages/api-contract/test/contracts/ink/index.ts b/packages/api-contract/test/contracts/ink/index.ts new file mode 100644 index 0000000000..6472e1093d --- /dev/null +++ b/packages/api-contract/test/contracts/ink/index.ts @@ -0,0 +1,10 @@ +// Copyright 2017-2020 @polkadot/api-contract authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +export { default as delegator } from './delegator.json'; +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 incrementer } from './incrementer.json'; +export { default as multisigPlain } from './multisig_plain.json'; diff --git a/packages/api-contract/test/contracts/multisig_plain.json b/packages/api-contract/test/contracts/ink/multisig_plain.json similarity index 100% rename from packages/api-contract/test/contracts/multisig_plain.json rename to packages/api-contract/test/contracts/ink/multisig_plain.json diff --git a/packages/api-contract/test/contracts/multisig_plain.wasm b/packages/api-contract/test/contracts/ink/multisig_plain.wasm similarity index 100% rename from packages/api-contract/test/contracts/multisig_plain.wasm rename to packages/api-contract/test/contracts/ink/multisig_plain.wasm diff --git a/packages/api-contract/test/contracts/subber.wasm b/packages/api-contract/test/contracts/ink/subber.wasm similarity index 100% rename from packages/api-contract/test/contracts/subber.wasm rename to packages/api-contract/test/contracts/ink/subber.wasm diff --git a/packages/api-contract/test/contracts/trait-flipper.json b/packages/api-contract/test/contracts/ink/trait-flipper.json similarity index 100% rename from packages/api-contract/test/contracts/trait-flipper.json rename to packages/api-contract/test/contracts/ink/trait-flipper.json diff --git a/packages/api-contract/test/contracts/trait-flipper.wasm b/packages/api-contract/test/contracts/ink/trait-flipper.wasm similarity index 100% rename from packages/api-contract/test/contracts/trait-flipper.wasm rename to packages/api-contract/test/contracts/ink/trait-flipper.wasm diff --git a/packages/api-contract/test/contracts/solang/index.ts b/packages/api-contract/test/contracts/solang/index.ts new file mode 100644 index 0000000000..a822158159 --- /dev/null +++ b/packages/api-contract/test/contracts/solang/index.ts @@ -0,0 +1,4 @@ +// Copyright 2017-2020 @polkadot/api-contract authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +export { default as ints256 } from './ints256.json'; diff --git a/packages/api-contract/test/contracts/solang/ints256.json b/packages/api-contract/test/contracts/solang/ints256.json new file mode 100644 index 0000000000..8263c74fed --- /dev/null +++ b/packages/api-contract/test/contracts/solang/ints256.json @@ -0,0 +1,113 @@ +{ + "contract": { + "authors": [ + "Sean Young " + ], + "description": "Test 256 bits types", + "name": "ints256", + "version": "0.0.1" + }, + "metadataVersion": "0.1.0", + "source": { + "compiler": "solang 0.1.4", + "hash": "0xa85fb5c61a09d71dce84c15a8bd87e6f4eafac498a1aec3869e8cf7ea4389697", + "language": "Solidity 0.1.4" + }, + "spec": { + "constructors": [ + { + "args": [], + "docs": [ + "" + ], + "name": "new", + "selector": "0x861731d5" + } + ], + "events": [], + "messages": [ + { + "args": [ + { + "name": "a", + "type": { + "display_name": [ + "u256" + ], + "type": 1 + } + }, + { + "name": "b", + "type": { + "display_name": [ + "u256" + ], + "type": 1 + } + } + ], + "docs": [ + "Multiply two 256 bit values\n\n" + ], + "mutates": false, + "name": "multiply", + "payable": false, + "return_type": { + "display_name": [ + "u256" + ], + "type": 1 + }, + "selector": "0x165c4a16" + }, + { + "args": [ + { + "name": "a", + "type": { + "display_name": [ + "u256" + ], + "type": 1 + } + }, + { + "name": "b", + "type": { + "display_name": [ + "u256" + ], + "type": 1 + } + } + ], + "docs": [ + "Add two 256 bit values\n\n" + ], + "mutates": false, + "name": "add", + "payable": false, + "return_type": { + "display_name": [ + "u256" + ], + "type": 1 + }, + "selector": "0x771602f7" + } + ] + }, + "storage": { + "struct": { + "fields": [] + } + }, + "types": [ + { + "def": { + "primitive": "u256" + } + } + ] +} \ No newline at end of file diff --git a/packages/api-contract/test/contracts/solang/ints256.sol b/packages/api-contract/test/contracts/solang/ints256.sol new file mode 100644 index 0000000000..1225a6b912 --- /dev/null +++ b/packages/api-contract/test/contracts/solang/ints256.sol @@ -0,0 +1,13 @@ +/// @title Test 256 bits types +/// @author Sean Young +contract ints256 { + /// Multiply two 256 bit values + function multiply(uint256 a, uint256 b) public pure returns (uint256) { + return a * b; + } + + /// Add two 256 bit values + function add(uint256 a, uint256 b) public pure returns (uint256) { + return a + b; + } +} diff --git a/packages/api-contract/test/contracts/solang/ints256.wasm b/packages/api-contract/test/contracts/solang/ints256.wasm new file mode 100644 index 0000000000..1973316be5 Binary files /dev/null and b/packages/api-contract/test/contracts/solang/ints256.wasm differ