diff --git a/packages/api-contract/src/MetaRegistry.ts b/packages/api-contract/src/MetaRegistry.ts index 956831de78..ce4e07b31f 100644 --- a/packages/api-contract/src/MetaRegistry.ts +++ b/packages/api-contract/src/MetaRegistry.ts @@ -22,6 +22,8 @@ const PRIMITIVE_ALIAS: Record = { Str: 'Text' }; +const PRIMITIVE_ALWAYS = ['AccountId', 'AccountIndex', 'Address', 'Balance']; + export default class MetaRegistry extends TypeRegistry { public readonly metaTypeDefs: TypeDef[] = []; @@ -56,8 +58,8 @@ export default class MetaRegistry extends TypeRegistry { typeDef = { ...typeDef, displayName, - type: ['Balance'].includes(displayName) - ? 'Balance' + type: PRIMITIVE_ALWAYS.includes(displayName) + ? displayName : typeDef.type }; } @@ -84,10 +86,10 @@ export default class MetaRegistry extends TypeRegistry { #extract = (type: SiType, id: SiLookupTypeId): TypeDef => { const path = [...type.path]; + const pathFinal = path.length ? path[path.length - 1].toString() : ''; let typeDef: Omit; - // TODO solang? - if (type.path.join('::').startsWith('ink_env::types::')) { + if (type.path.join('::').startsWith('ink_env::types::') || PRIMITIVE_ALWAYS.includes(pathFinal)) { typeDef = this.#extractPrimitivePath(type); } else if (type.def.isPrimitive) { typeDef = this.#extractPrimitive(type); diff --git a/packages/api-contract/test/compare/assetTransfer.test.json b/packages/api-contract/test/compare/assetTransfer.test.json new file mode 100644 index 0000000000..4ccfa66245 --- /dev/null +++ b/packages/api-contract/test/compare/assetTransfer.test.json @@ -0,0 +1,28 @@ +[ + { + "info": 6, + "type": "u256" + }, + { + "info": 6, + "type": "u8" + }, + { + "info": 12, + "length": 32, + "sub": { + "info": 6, + "type": "u8" + }, + "type": "[u8;32]" + }, + { + "displayName": "AccountId", + "info": 6, + "type": "AccountId" + }, + { + "info": 6, + "type": "Text" + } +] \ No newline at end of file diff --git a/packages/api-contract/test/contracts/user/assetTransfer.json b/packages/api-contract/test/contracts/user/assetTransfer.json new file mode 100644 index 0000000000..05608b1d2f --- /dev/null +++ b/packages/api-contract/test/contracts/user/assetTransfer.json @@ -0,0 +1,299 @@ +{ + "contract": { + "authors": [ + "unknown" + ], + "name": "AssetTransfer", + "version": "0.0.1" + }, + "metadataVersion": "0.1.0", + "source": { + "compiler": "solang 0.1.4", + "hash": "0x7d163f445bec3d33e90d0f60bda40acd42f2760dbc1b731616af70a6001e05c7", + "language": "Solidity 0.1.4" + }, + "spec": { + "constructors": [ + { + "args": [], + "docs": [ + "" + ], + "name": "new", + "selector": "0x861731d5" + } + ], + "events": [ + { + "args": [ + { + "indexed": false, + "name": "_newUser", + "type": { + "display_name": [ + "AccountId" + ], + "type": 4 + } + } + ], + "docs": [ + "" + ], + "name": "successfulRegistration" + }, + { + "args": [ + { + "indexed": false, + "name": "sender", + "type": { + "display_name": [ + "AccountId" + ], + "type": 4 + } + }, + { + "indexed": false, + "name": "_hexAsset", + "type": { + "display_name": [ + "String" + ], + "type": 5 + } + } + ], + "docs": [ + "" + ], + "name": "addedAsset" + }, + { + "args": [ + { + "indexed": false, + "name": "sender", + "type": { + "display_name": [ + "AccountId" + ], + "type": 4 + } + }, + { + "indexed": false, + "name": "receiver", + "type": { + "display_name": [ + "AccountId" + ], + "type": 4 + } + }, + { + "indexed": false, + "name": "hexOfAsset", + "type": { + "display_name": [ + "String" + ], + "type": 5 + } + } + ], + "docs": [ + "" + ], + "name": "assetSent" + } + ], + "messages": [ + { + "args": [ + { + "name": "_user", + "type": { + "display_name": [ + "AccountId" + ], + "type": 4 + } + } + ], + "docs": [ + "" + ], + "mutates": false, + "name": "viewBalance", + "payable": false, + "return_type": { + "display_name": [ + "u256" + ], + "type": 1 + }, + "selector": "0xc1a13d1a" + }, + { + "args": [ + { + "name": "_assetHex", + "type": { + "display_name": [ + "String" + ], + "type": 5 + } + } + ], + "docs": [ + "" + ], + "mutates": false, + "name": "findOwner", + "payable": false, + "return_type": { + "display_name": [ + "AccountId" + ], + "type": 4 + }, + "selector": "0x63560a8e" + }, + { + "args": [ + { + "name": "_hexAsset", + "type": { + "display_name": [ + "String" + ], + "type": 5 + } + } + ], + "docs": [ + "" + ], + "mutates": true, + "name": "addAsset", + "payable": false, + "return_type": null, + "selector": "0xa7c6b52e" + }, + { + "args": [], + "docs": [ + "" + ], + "mutates": true, + "name": "receiveAsset", + "payable": false, + "return_type": { + "display_name": [ + "String" + ], + "type": 5 + }, + "selector": "0xb2f3b5bc" + }, + { + "args": [ + { + "name": "_assetHex", + "type": { + "display_name": [ + "String" + ], + "type": 5 + } + }, + { + "name": "_receiver", + "type": { + "display_name": [ + "AccountId" + ], + "type": 4 + } + } + ], + "docs": [ + "" + ], + "mutates": true, + "name": "sendAsset", + "payable": false, + "return_type": null, + "selector": "0xd6e5288f" + }, + { + "args": [ + { + "name": "_newUser", + "type": { + "display_name": [ + "AccountId" + ], + "type": 4 + } + } + ], + "docs": [ + "" + ], + "mutates": true, + "name": "register", + "payable": false, + "return_type": null, + "selector": "0x4420e486" + } + ] + }, + "storage": { + "struct": { + "fields": [] + } + }, + "types": [ + { + "def": { + "primitive": "u256" + } + }, + { + "def": { + "primitive": "u8" + } + }, + { + "def": { + "array": { + "len": 32, + "type": 2 + } + } + }, + { + "def": { + "composite": { + "fields": [ + { + "type": 3 + } + ] + } + }, + "path": [ + "AccountId" + ] + }, + { + "def": { + "primitive": "str" + } + } + ] +} diff --git a/packages/api-contract/test/contracts/user/assetTransfer.wasm b/packages/api-contract/test/contracts/user/assetTransfer.wasm new file mode 100644 index 0000000000..516f769852 Binary files /dev/null and b/packages/api-contract/test/contracts/user/assetTransfer.wasm differ diff --git a/packages/api-contract/test/contracts/user/index.ts b/packages/api-contract/test/contracts/user/index.ts index c884122c39..d97ae5f30c 100644 --- a/packages/api-contract/test/contracts/user/index.ts +++ b/packages/api-contract/test/contracts/user/index.ts @@ -1,4 +1,5 @@ // Copyright 2017-2020 @polkadot/api-contract authors & contributors // SPDX-License-Identifier: Apache-2.0 +export { default as assetTransfer } from './assetTransfer.json'; export { default as withString } from './withString.json';