From 8abb82d0d5ed7bb0385d32b8c280210fae4ad43a Mon Sep 17 00:00:00 2001 From: ical10 Date: Wed, 15 May 2024 17:54:01 +0800 Subject: [PATCH 1/7] Add greeter contract on /examples --- examples/greeter/artifacts/greeter.contract | 1 + examples/greeter/artifacts/greeter.json | 494 ++++++++++++++++++++ examples/greeter/package.json | 22 + examples/greeter/tsconfig.json | 11 + 4 files changed, 528 insertions(+) create mode 100644 examples/greeter/artifacts/greeter.contract create mode 100644 examples/greeter/artifacts/greeter.json create mode 100644 examples/greeter/package.json create mode 100644 examples/greeter/tsconfig.json diff --git a/examples/greeter/artifacts/greeter.contract b/examples/greeter/artifacts/greeter.contract new file mode 100644 index 00000000..353a9e49 --- /dev/null +++ b/examples/greeter/artifacts/greeter.contract @@ -0,0 +1 @@ +{"source":{"hash":"0xd2a960874747af3b3da183bef32563be6cd8bc56bcc3efe53dd528f66c3a3a68","language":"ink! 5.0.0","compiler":"rustc 1.77.1","wasm":"0x0061736d0100000001290760027f7f0060037f7f7f0060037f7f7f017f60047f7f7f7f017f60000060047f7f7f7f006000017f02b10109057365616c310b6765745f73746f726167650003057365616c3005696e7075740000057365616c300d6465706f7369745f6576656e740005057365616c320b7365745f73746f726167650003057365616c300b7365616c5f72657475726e0001057365616c300663616c6c65720000057365616c301176616c75655f7472616e736665727265640000057365616c300f686173685f626c616b65325f323536000103656e76066d656d6f72790201021003151402020202020001060101000001000000000004040616037f01418080040b7f0041c082050b7f0041bc82050b0711020463616c6c001a066465706c6f79001b0aee1e142b01017f037f2002200346047f200005200020036a200120036a2d00003a0000200341016a21030c010b0b0b6f01017f0240200020014d04402000210303402002450d02200320012d00003a0000200141016a2101200341016a2103200241016b21020c000b000b200141016b2101200041016b210303402002450d01200220036a200120026a2d00003a0000200241016b21020c000b000b20000b2501017f037f2002200346047f200005200020036a20013a0000200341016a21030c010b0b0b3f01027f0340200245044041000f0b200241016b210220012d0000210320002d00002104200041016a2100200141016a210120032004460d000b200420036b0b8f0101017f20002d00042103200041003a0004027f0240200345044041012000280200220028020422032002490d021a200120002802002201200210081a0c010b2001200041056a2d00003a00004101200028020022002802042203200241016b2202490d011a200141016a20002802002201200210081a0b2000200320026b3602042000200120026a36020041000b0b2601017f230041106b220224002002200036020c20012002410c6a4104100e200241106a24000b4801027f024002402000280208220320026a22042003490d00200420002802044b0d00200420036b2002470d01200028020020036a2001200210081a200020043602080f0b000b000b5902017f027e230041206b2200240020004200370308200042003703002000411036021c20002000411c6a1006200028021c41114f0440000b2000290308210120002903002102200041206a2400410541042001200284501b0b4801027f230041106b22032400200341086a20024100101120032802082104200328020c2001200210082101200020023602082000200136020420002004360200200341106a24000be00101017f024002402001450440410121020c010b20014100480d01200245044041ac82042d00001a0b027f41b082042d0000044041b482042802000c010b3f00210341b4820441c0820536020041b0820441013a000041b88204200341107436020041c082050b2202200120026a22034b0d0141b882042802002003490440200141ffff036a220341107640002202417f460d022002411074220220034180807c716a22032002490d0241b882042003360200200120026a22032002490d020b41b4820420033602002002450d010b20002002360204200020013602000f0b000b7401017f230041106b2202240002402000413f4d04402001200041027410190c010b200041ffff004d0440200220004102744101723b010e20012002410e6a4102100e0c010b200041ffffffff034d044020004102744102722001100d0c010b20014103101920002001100d0b200241106a24000b0a00200120004120100e0b1000200120021012200220002001100e0bdb0701097f230041206b220324000240024020012802042204450d00200128020022052d000021022001200441016b3602042001200541016a36020002400240024002400240200241037141016b0e03020301000b200241027621020c030b2004410549200241034b720d03200528000121022001200441056b3602042001200541056a36020020024180808080044f0d020c030b200341196a20023a0000200341013a001820032001360214200341003b011c200341146a2003411c6a4102100c0d0220032f011c220241ff014d0d02200241027621020c010b200341196a20023a0000200341013a0018200320013602142003410036021c200341146a2003411c6a4104100c0d01200328021c220241808004490d01200241027621020b20012802042002490d00200341086a200241011011200128020422052002490d0020032802082108200328020c200128020022062002100821042001200520026b3602042001200220066a3602002008418080808078460d0002402002450d00200241076b22014100200120024d1b2109200441036a417c7120046b210a41002101034002400240024002400240024002400240024002400240200120046a2d0000220541187441187522074100480440200541ab80046a2d000041026b0e03030102080b200a20016b4103710d09200120094f0d080340200120046a220541046a280200200528020072418081828478710d092009200141086a22014b0d000b0c080b200141016a220620024f0d06200420066a2c000021060240200541e001470440200541ed01460d012007411f6a41ff0171410c490d042007417e71416e470d0820064140480d050c080b200641607141a07f460d040c070b2006419f7f4a0d060c030b200141016a220620024f0d05200420066a2c000021060240024002400240200541f0016b0e050100000002000b2007410f6a41ff017141024b0d0820064140480d020c080b200641f0006a41ff01714130490d010c070b2006418f7f4a0d060b200141026a220520024f0d05200420056a2c000041bf7f4a0d05200141036a220120024f0d05200120046a2c000041bf7f4c0d040c050b200141016a22012002490d020c040b200641404e0d030b200141026a220120024f0d02200120046a2c000041bf7f4c0d010c020b200120046a2c000041bf7f4a0d010b200141016a21010c030b20004180808080783602000c060b200120024f0d010340200120046a2c00004100480d022002200141016a2201470d000b0c030b200141016a21010b20012002490d000b0b2000200236020820002008ad2004ad422086843702000c010b20004180808080783602000b200341206a24000b3c01027f027f200145044041bc8204210141010c010b4101210241bc820441013a000041bd8204210141020b2103200120023a0000200020031018000b8e0101057f230041106b22022400200242808001370208200241bc82043602044100200241046a2205100d024020022802082206200228020c2203490d00200228020421042002410036020c2002200620036b3602082002200320046a3602042000200120051014200228020c220020022802084b0d00200420032002280204200010031a200241106a24000f0b000b0d00200041bc820420011004000b2d01017f2000280208220220002802044904402000200241016a360208200028020020026a20013a00000f0b000bdb0a02107f017e230041306b2201240002400240100f41ff01714105470d0020014180800136022041bc8204200141206a100120012802202200418180014f0d00024020004104490d00200141c0820436020c2001200041046b36021041bf82042d0000210041be82042d0000210241bd82042d00002103024041bc82042d00002204411f47044020044105472003412c4772200241da0147200041084772720d0241808080807821020c010b200341e70147200241c2004772200041ef0047720d01200141206a2001410c6a101520012802202202418080808078460d01200120012800253602182001200141286a28000036001b20012d002421060b2001200128001b36000720012001280218360204200142808001370224200141bc82043602204100200141206a2200100d2001280224220520012802282203490d01200128022021042001200520036b220536022020042003200320046a22032000100020052001280220220449720d012001200436021c200120033602182000200141186a10152001280220418080808078460d01200128021c0d012001200129022422103702102002418080808078470d0220002010a72010422088a71010230041106b22012400200141808001360208200141bc82043602040240200028020041808080807846044041bc82044181023b0100410221000c010b2001410136020c41bc820441003a000020002802042000280208200141046a1014200128020c220041818001490d00000b410020001018000b410141011016000b000b200141286a2001280007360000200120063a0024200120023602202001200128020436002523004180016b22002400200141206a2202280200210420022802042106200041086a200228020822034100101120002802082105200028020c20062003100821072001410c6a22022003360208200220073602042002200536020020004180800136021041bc8204200041106a10050240024020002802102202418180014f2002411f4d720d0041bc82042d00002102200041356a41d482042900003700002000412e6a41cd8204290000370100200041266a41c58204290000370100200041bd820429000037011e200020023a001d200041013a001c200020033602182000200636021420002004360210200042808001370264200041bc82043602604101200041e0006a2205101220002802682204418180014f0d002000410036026820004180800120046b22083602642000200441bc82046a2209360260418b8004200510132000280268220220002802644b0d0020002802602107200041d8006a220a4200370300200041d0006a220b4200370300200041c8006a220c4200370300200042003703400240200241214f0440200041f8006a220d4200370300200041f0006a220e4200370300200041e8006a220f4200370300200042003703602007200220051007200a200d290300370300200b200e290300370300200c200f290300370300200020002903603703400c010b200041406b2007200210081a0b200041f8006a200041d8006a290300370300200041f0006a200041d0006a290300370300200041e8006a200041c8006a29030037030020002000290340370360200041003602482000200836024420002009360240200041e0006a2205200041406b10132004200420002802486a22024b2002418180014f720d0020004180800120026b3602642000200241bc82046a2204360260200241808001460d00200441013a0000200041013602682000411d6a2005101320062003200510142000280268220320002802644b0d0041bc8204200220002802602003100220004180016a24000c010b000b200128021020012802141017410041001016000b8f0201057f230041206b22002400024002400240100f41ff01714105470d0020004180800136021441bc8204200041146a100120002802142201418180014f0d0020014104490d01200041c0820436020c2000200141046b36021041bf82042d0000210141be82042d0000210241bd82042d00002103024041bc82042d0000220441ed014704402004419b0147200341ae0147722002419d0147720d03200141de00460d010c030b200341cb00472002419d0147722001411b47720d02200041146a41808004410a10100c030b200041146a2000410c6a10152000280214418080808078460d010c020b000b410141011016000b2000280218200028021c101741bc820441003b0100410041021018000b0bee010200418080040bab0148656c6c6f20696e6b2101184de1e97d8dba311c74fa923646f3bb4c5b0b4f747447857dbe70305dcd777e01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010041ed81040b33020202020202020202020202020202020202020202020202020202020202030303030303030303030303030303030404040404","build_info":{"build_mode":"Release","cargo_contract_version":"4.0.2","rust_toolchain":"stable-aarch64-apple-darwin","wasm_opt_settings":{"keep_debug_symbols":false,"optimization_passes":"Z"}}},"contract":{"name":"greeter","version":"0.0.1","authors":["Scio Labs "]},"image":null,"spec":{"constructors":[{"args":[{"label":"init_value","type":{"displayName":["String"],"type":0}}],"default":false,"docs":["Creates a new greeter contract initialized with the given value."],"label":"new","payable":false,"returnType":{"displayName":["ink_primitives","ConstructorResult"],"type":2},"selector":"0x9bae9d5e"},{"args":[],"default":false,"docs":["Creates a new greeter contract initialized to 'Hello ink!'."],"label":"default","payable":false,"returnType":{"displayName":["ink_primitives","ConstructorResult"],"type":2},"selector":"0xed4b9d1b"}],"docs":[],"environment":{"accountId":{"displayName":["AccountId"],"type":7},"balance":{"displayName":["Balance"],"type":10},"blockNumber":{"displayName":["BlockNumber"],"type":13},"chainExtension":{"displayName":["ChainExtension"],"type":14},"hash":{"displayName":["Hash"],"type":11},"maxEventTopics":4,"staticBufferSize":16384,"timestamp":{"displayName":["Timestamp"],"type":12}},"events":[{"args":[{"docs":[],"indexed":false,"label":"from","type":{"displayName":["Option"],"type":6}},{"docs":[],"indexed":false,"label":"message","type":{"displayName":["String"],"type":0}}],"docs":[],"label":"Greeted","module_path":"greeter::greeter","signature_topic":"0x184de1e97d8dba311c74fa923646f3bb4c5b0b4f747447857dbe70305dcd777e"}],"lang_error":{"displayName":["ink","LangError"],"type":4},"messages":[{"args":[],"default":false,"docs":[" Returns the current value of 'message'."],"label":"greet","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":5},"selector":"0x052cda08"},{"args":[{"label":"new_value","type":{"displayName":["String"],"type":0}}],"default":false,"docs":[" Sets 'message' to the given value."],"label":"set_message","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":2},"selector":"0x1fe7426f"}]},"storage":{"root":{"layout":{"struct":{"fields":[{"layout":{"leaf":{"key":"0x00000000","ty":0}},"name":"message"}],"name":"Greeter"}},"root_key":"0x00000000","ty":1}},"types":[{"id":0,"type":{"def":{"primitive":"str"}}},{"id":1,"type":{"def":{"composite":{"fields":[{"name":"message","type":0,"typeName":",>>::Type"}]}},"path":["greeter","greeter","Greeter"]}},{"id":2,"type":{"def":{"variant":{"variants":[{"fields":[{"type":3}],"index":0,"name":"Ok"},{"fields":[{"type":4}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":3},{"name":"E","type":4}],"path":["Result"]}},{"id":3,"type":{"def":{"tuple":[]}}},{"id":4,"type":{"def":{"variant":{"variants":[{"index":1,"name":"CouldNotReadInput"}]}},"path":["ink_primitives","LangError"]}},{"id":5,"type":{"def":{"variant":{"variants":[{"fields":[{"type":0}],"index":0,"name":"Ok"},{"fields":[{"type":4}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":0},{"name":"E","type":4}],"path":["Result"]}},{"id":6,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":7}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":7}],"path":["Option"]}},{"id":7,"type":{"def":{"composite":{"fields":[{"type":8,"typeName":"[u8; 32]"}]}},"path":["ink_primitives","types","AccountId"]}},{"id":8,"type":{"def":{"array":{"len":32,"type":9}}}},{"id":9,"type":{"def":{"primitive":"u8"}}},{"id":10,"type":{"def":{"primitive":"u128"}}},{"id":11,"type":{"def":{"composite":{"fields":[{"type":8,"typeName":"[u8; 32]"}]}},"path":["ink_primitives","types","Hash"]}},{"id":12,"type":{"def":{"primitive":"u64"}}},{"id":13,"type":{"def":{"primitive":"u32"}}},{"id":14,"type":{"def":{"variant":{}},"path":["ink_env","types","NoChainExtension"]}}],"version":5} \ No newline at end of file diff --git a/examples/greeter/artifacts/greeter.json b/examples/greeter/artifacts/greeter.json new file mode 100644 index 00000000..eace9bcd --- /dev/null +++ b/examples/greeter/artifacts/greeter.json @@ -0,0 +1,494 @@ +{ + "source": { + "hash": "0xd2a960874747af3b3da183bef32563be6cd8bc56bcc3efe53dd528f66c3a3a68", + "language": "ink! 5.0.0", + "compiler": "rustc 1.77.1", + "build_info": { + "build_mode": "Release", + "cargo_contract_version": "4.0.2", + "rust_toolchain": "stable-aarch64-apple-darwin", + "wasm_opt_settings": { + "keep_debug_symbols": false, + "optimization_passes": "Z" + } + } + }, + "contract": { + "name": "greeter", + "version": "0.0.1", + "authors": [ + "Scio Labs " + ] + }, + "image": null, + "spec": { + "constructors": [ + { + "args": [ + { + "label": "init_value", + "type": { + "displayName": [ + "String" + ], + "type": 0 + } + } + ], + "default": false, + "docs": [ + "Creates a new greeter contract initialized with the given value." + ], + "label": "new", + "payable": false, + "returnType": { + "displayName": [ + "ink_primitives", + "ConstructorResult" + ], + "type": 2 + }, + "selector": "0x9bae9d5e" + }, + { + "args": [], + "default": false, + "docs": [ + "Creates a new greeter contract initialized to 'Hello ink!'." + ], + "label": "default", + "payable": false, + "returnType": { + "displayName": [ + "ink_primitives", + "ConstructorResult" + ], + "type": 2 + }, + "selector": "0xed4b9d1b" + } + ], + "docs": [], + "environment": { + "accountId": { + "displayName": [ + "AccountId" + ], + "type": 7 + }, + "balance": { + "displayName": [ + "Balance" + ], + "type": 10 + }, + "blockNumber": { + "displayName": [ + "BlockNumber" + ], + "type": 13 + }, + "chainExtension": { + "displayName": [ + "ChainExtension" + ], + "type": 14 + }, + "hash": { + "displayName": [ + "Hash" + ], + "type": 11 + }, + "maxEventTopics": 4, + "staticBufferSize": 16384, + "timestamp": { + "displayName": [ + "Timestamp" + ], + "type": 12 + } + }, + "events": [ + { + "args": [ + { + "docs": [], + "indexed": false, + "label": "from", + "type": { + "displayName": [ + "Option" + ], + "type": 6 + } + }, + { + "docs": [], + "indexed": false, + "label": "message", + "type": { + "displayName": [ + "String" + ], + "type": 0 + } + } + ], + "docs": [], + "label": "Greeted", + "module_path": "greeter::greeter", + "signature_topic": "0x184de1e97d8dba311c74fa923646f3bb4c5b0b4f747447857dbe70305dcd777e" + } + ], + "lang_error": { + "displayName": [ + "ink", + "LangError" + ], + "type": 4 + }, + "messages": [ + { + "args": [], + "default": false, + "docs": [ + " Returns the current value of 'message'." + ], + "label": "greet", + "mutates": false, + "payable": false, + "returnType": { + "displayName": [ + "ink", + "MessageResult" + ], + "type": 5 + }, + "selector": "0x052cda08" + }, + { + "args": [ + { + "label": "new_value", + "type": { + "displayName": [ + "String" + ], + "type": 0 + } + } + ], + "default": false, + "docs": [ + " Sets 'message' to the given value." + ], + "label": "set_message", + "mutates": true, + "payable": false, + "returnType": { + "displayName": [ + "ink", + "MessageResult" + ], + "type": 2 + }, + "selector": "0x1fe7426f" + } + ] + }, + "storage": { + "root": { + "layout": { + "struct": { + "fields": [ + { + "layout": { + "leaf": { + "key": "0x00000000", + "ty": 0 + } + }, + "name": "message" + } + ], + "name": "Greeter" + } + }, + "root_key": "0x00000000", + "ty": 1 + } + }, + "types": [ + { + "id": 0, + "type": { + "def": { + "primitive": "str" + } + } + }, + { + "id": 1, + "type": { + "def": { + "composite": { + "fields": [ + { + "name": "message", + "type": 0, + "typeName": ",>>::Type" + } + ] + } + }, + "path": [ + "greeter", + "greeter", + "Greeter" + ] + } + }, + { + "id": 2, + "type": { + "def": { + "variant": { + "variants": [ + { + "fields": [ + { + "type": 3 + } + ], + "index": 0, + "name": "Ok" + }, + { + "fields": [ + { + "type": 4 + } + ], + "index": 1, + "name": "Err" + } + ] + } + }, + "params": [ + { + "name": "T", + "type": 3 + }, + { + "name": "E", + "type": 4 + } + ], + "path": [ + "Result" + ] + } + }, + { + "id": 3, + "type": { + "def": { + "tuple": [] + } + } + }, + { + "id": 4, + "type": { + "def": { + "variant": { + "variants": [ + { + "index": 1, + "name": "CouldNotReadInput" + } + ] + } + }, + "path": [ + "ink_primitives", + "LangError" + ] + } + }, + { + "id": 5, + "type": { + "def": { + "variant": { + "variants": [ + { + "fields": [ + { + "type": 0 + } + ], + "index": 0, + "name": "Ok" + }, + { + "fields": [ + { + "type": 4 + } + ], + "index": 1, + "name": "Err" + } + ] + } + }, + "params": [ + { + "name": "T", + "type": 0 + }, + { + "name": "E", + "type": 4 + } + ], + "path": [ + "Result" + ] + } + }, + { + "id": 6, + "type": { + "def": { + "variant": { + "variants": [ + { + "index": 0, + "name": "None" + }, + { + "fields": [ + { + "type": 7 + } + ], + "index": 1, + "name": "Some" + } + ] + } + }, + "params": [ + { + "name": "T", + "type": 7 + } + ], + "path": [ + "Option" + ] + } + }, + { + "id": 7, + "type": { + "def": { + "composite": { + "fields": [ + { + "type": 8, + "typeName": "[u8; 32]" + } + ] + } + }, + "path": [ + "ink_primitives", + "types", + "AccountId" + ] + } + }, + { + "id": 8, + "type": { + "def": { + "array": { + "len": 32, + "type": 9 + } + } + } + }, + { + "id": 9, + "type": { + "def": { + "primitive": "u8" + } + } + }, + { + "id": 10, + "type": { + "def": { + "primitive": "u128" + } + } + }, + { + "id": 11, + "type": { + "def": { + "composite": { + "fields": [ + { + "type": 8, + "typeName": "[u8; 32]" + } + ] + } + }, + "path": [ + "ink_primitives", + "types", + "Hash" + ] + } + }, + { + "id": 12, + "type": { + "def": { + "primitive": "u64" + } + } + }, + { + "id": 13, + "type": { + "def": { + "primitive": "u32" + } + } + }, + { + "id": 14, + "type": { + "def": { + "variant": {} + }, + "path": [ + "ink_env", + "types", + "NoChainExtension" + ] + } + } + ], + "version": 5 +} \ No newline at end of file diff --git a/examples/greeter/package.json b/examples/greeter/package.json new file mode 100644 index 00000000..76fc765c --- /dev/null +++ b/examples/greeter/package.json @@ -0,0 +1,22 @@ +{ + "name": "flipper", + "version": "1.0.0", + "description": "examples of flipper with typechain-polkadot", + "main": "index.js", + "scripts": { + "generate": "npx typechain-polkadot --in ./artifacts --out ./out", + "start": "ts-node index.ts" + }, + "dependencies": { + "@prosopo/typechain-polkadot": "1.1.15", + "@prosopo/typechain-types": "1.1.15", + "@types/node": "^18.8.0", + "ts-node": "^10.7.0", + "typescript": "^5.2.2", + "@polkadot/api": "10.13.1", + "@polkadot/api-contract": "10.13.1", + "@types/bn.js": "^5.1.0" + }, + "author": "", + "license": "ISC" +} diff --git a/examples/greeter/tsconfig.json b/examples/greeter/tsconfig.json new file mode 100644 index 00000000..b8f78900 --- /dev/null +++ b/examples/greeter/tsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "target": "es2016", + "module": "commonjs", + "resolveJsonModule": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "strict": true, + "skipLibCheck": true + } +} From 089245a0b3e07b991ae68a532813bf6f383ef464 Mon Sep 17 00:00:00 2001 From: ical10 Date: Wed, 15 May 2024 17:54:30 +0800 Subject: [PATCH 2/7] Remove unescaped control characters --- packages/typechain-polkadot/src/utils/json.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/typechain-polkadot/src/utils/json.ts b/packages/typechain-polkadot/src/utils/json.ts index f204674e..ec40c709 100644 --- a/packages/typechain-polkadot/src/utils/json.ts +++ b/packages/typechain-polkadot/src/utils/json.ts @@ -3,5 +3,5 @@ * @param json - JSON string */ export function minimizeJson(json: string): string { - return JSON.stringify(JSON.parse(json)); -} \ No newline at end of file + return JSON.stringify(JSON.parse(json)).replace(/\\n/g, ""); +} From d812f7838931313d27c23a07c1c816b5667cf631 Mon Sep 17 00:00:00 2001 From: ical10 Date: Wed, 15 May 2024 17:58:00 +0800 Subject: [PATCH 3/7] Add generated files from output folder --- .../greeter/out/build-extrinsic/greeter.ts | 45 ++++++++ examples/greeter/out/constructors/greeter.ts | 83 ++++++++++++++ examples/greeter/out/contract-info/greeter.ts | 2 + examples/greeter/out/contracts/greeter.ts | 107 ++++++++++++++++++ examples/greeter/out/data/greeter.json | 3 + examples/greeter/out/event-data/greeter.json | 3 + examples/greeter/out/event-types/greeter.ts | 8 ++ examples/greeter/out/events/greeter.ts | 59 ++++++++++ examples/greeter/out/mixed-methods/greeter.ts | 68 +++++++++++ examples/greeter/out/query/greeter.ts | 57 ++++++++++ examples/greeter/out/shared/utils.ts | 37 ++++++ .../greeter/out/tx-sign-and-send/greeter.ts | 58 ++++++++++ .../greeter/out/types-arguments/greeter.ts | 8 ++ examples/greeter/out/types-returns/greeter.ts | 9 ++ 14 files changed, 547 insertions(+) create mode 100644 examples/greeter/out/build-extrinsic/greeter.ts create mode 100644 examples/greeter/out/constructors/greeter.ts create mode 100644 examples/greeter/out/contract-info/greeter.ts create mode 100644 examples/greeter/out/contracts/greeter.ts create mode 100644 examples/greeter/out/data/greeter.json create mode 100644 examples/greeter/out/event-data/greeter.json create mode 100644 examples/greeter/out/event-types/greeter.ts create mode 100644 examples/greeter/out/events/greeter.ts create mode 100644 examples/greeter/out/mixed-methods/greeter.ts create mode 100644 examples/greeter/out/query/greeter.ts create mode 100644 examples/greeter/out/shared/utils.ts create mode 100644 examples/greeter/out/tx-sign-and-send/greeter.ts create mode 100644 examples/greeter/out/types-arguments/greeter.ts create mode 100644 examples/greeter/out/types-returns/greeter.ts diff --git a/examples/greeter/out/build-extrinsic/greeter.ts b/examples/greeter/out/build-extrinsic/greeter.ts new file mode 100644 index 00000000..0fc61cbb --- /dev/null +++ b/examples/greeter/out/build-extrinsic/greeter.ts @@ -0,0 +1,45 @@ +/* This file is auto-generated */ + +import type { ContractPromise } from '@polkadot/api-contract'; +import type { GasLimit, GasLimitAndRequiredValue } from '@prosopo/typechain-types'; +import { buildSubmittableExtrinsic } from '@prosopo/typechain-types'; +import type * as ArgumentTypes from '../types-arguments/greeter'; +import type BN from 'bn.js'; +import type { ApiPromise } from '@polkadot/api'; + + + +export default class Methods { + readonly __nativeContract : ContractPromise; + readonly __apiPromise: ApiPromise; + + constructor( + nativeContract : ContractPromise, + apiPromise: ApiPromise, + ) { + this.__nativeContract = nativeContract; + this.__apiPromise = apiPromise; + } + /** + * greet + * + */ + "greet" ( + __options: GasLimit, + ){ + return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "greet", [], __options); + } + + /** + * setMessage + * + * @param { string } newValue, + */ + "setMessage" ( + newValue: string, + __options: GasLimit, + ){ + return buildSubmittableExtrinsic( this.__apiPromise, this.__nativeContract, "setMessage", [newValue], __options); + } + +} \ No newline at end of file diff --git a/examples/greeter/out/constructors/greeter.ts b/examples/greeter/out/constructors/greeter.ts new file mode 100644 index 00000000..b4de1c7f --- /dev/null +++ b/examples/greeter/out/constructors/greeter.ts @@ -0,0 +1,83 @@ +import {CodePromise} from "@polkadot/api-contract"; +import type {KeyringPair} from "@polkadot/keyring/types"; +import type {ApiPromise} from "@polkadot/api"; +import {_genValidGasLimitAndValue, _signAndSend, SignAndSendSuccessResponse} from "@prosopo/typechain-types"; +import type {ConstructorOptions} from "@prosopo/typechain-types"; +import type {WeightV2} from "@polkadot/types/interfaces"; +import type * as ArgumentTypes from '../types-arguments/greeter'; +import { ContractFile } from '../contract-info/greeter'; +import type BN from 'bn.js'; + +export default class Constructors { + readonly nativeAPI: ApiPromise; + readonly signer: KeyringPair; + + constructor( + nativeAPI: ApiPromise, + signer: KeyringPair, + ) { + this.nativeAPI = nativeAPI; + this.signer = signer; + } + + /** + * new + * + * @param { string } initValue, + */ + async "new" ( + initValue: string, + __options ? : ConstructorOptions, + ) { + const __contract = JSON.parse(ContractFile); + const code = new CodePromise(this.nativeAPI, __contract, __contract.source.wasm); + const gasLimit = (await _genValidGasLimitAndValue(this.nativeAPI, __options)).gasLimit as WeightV2; + + const storageDepositLimit = __options?.storageDepositLimit; + const tx = code.tx["new"]!({ gasLimit, storageDepositLimit, value: __options?.value }, initValue); + let response; + + try { + response = await _signAndSend(this.nativeAPI.registry, tx, this.signer, (event: any) => event); + } + catch (error) { + console.log(error); + } + + return { + result: response as SignAndSendSuccessResponse, + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + address: (response as SignAndSendSuccessResponse)!.result!.contract.address.toString(), + }; + } + /** + * default + * + */ + async "default" ( + __options ? : ConstructorOptions, + ) { + const __contract = JSON.parse(ContractFile); + const code = new CodePromise(this.nativeAPI, __contract, __contract.source.wasm); + const gasLimit = (await _genValidGasLimitAndValue(this.nativeAPI, __options)).gasLimit as WeightV2; + + const storageDepositLimit = __options?.storageDepositLimit; + const tx = code.tx["default"]!({ gasLimit, storageDepositLimit, value: __options?.value }, ); + let response; + + try { + response = await _signAndSend(this.nativeAPI.registry, tx, this.signer, (event: any) => event); + } + catch (error) { + console.log(error); + } + + return { + result: response as SignAndSendSuccessResponse, + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + address: (response as SignAndSendSuccessResponse)!.result!.contract.address.toString(), + }; + } +} \ No newline at end of file diff --git a/examples/greeter/out/contract-info/greeter.ts b/examples/greeter/out/contract-info/greeter.ts new file mode 100644 index 00000000..93b7b205 --- /dev/null +++ b/examples/greeter/out/contract-info/greeter.ts @@ -0,0 +1,2 @@ +export const ContractAbi = `{"source":{"hash":"0xd2a960874747af3b3da183bef32563be6cd8bc56bcc3efe53dd528f66c3a3a68","language":"ink! 5.0.0","compiler":"rustc 1.77.1","build_info":{"build_mode":"Release","cargo_contract_version":"4.0.2","rust_toolchain":"stable-aarch64-apple-darwin","wasm_opt_settings":{"keep_debug_symbols":false,"optimization_passes":"Z"}}},"contract":{"name":"greeter","version":"0.0.1","authors":["Scio Labs "]},"image":null,"spec":{"constructors":[{"args":[{"label":"init_value","type":{"displayName":["String"],"type":0}}],"default":false,"docs":["Creates a new greeter contract initialized with the given value."],"label":"new","payable":false,"returnType":{"displayName":["ink_primitives","ConstructorResult"],"type":2},"selector":"0x9bae9d5e"},{"args":[],"default":false,"docs":["Creates a new greeter contract initialized to 'Hello ink!'."],"label":"default","payable":false,"returnType":{"displayName":["ink_primitives","ConstructorResult"],"type":2},"selector":"0xed4b9d1b"}],"docs":[],"environment":{"accountId":{"displayName":["AccountId"],"type":7},"balance":{"displayName":["Balance"],"type":10},"blockNumber":{"displayName":["BlockNumber"],"type":13},"chainExtension":{"displayName":["ChainExtension"],"type":14},"hash":{"displayName":["Hash"],"type":11},"maxEventTopics":4,"staticBufferSize":16384,"timestamp":{"displayName":["Timestamp"],"type":12}},"events":[{"args":[{"docs":[],"indexed":false,"label":"from","type":{"displayName":["Option"],"type":6}},{"docs":[],"indexed":false,"label":"message","type":{"displayName":["String"],"type":0}}],"docs":[],"label":"Greeted","module_path":"greeter::greeter","signature_topic":"0x184de1e97d8dba311c74fa923646f3bb4c5b0b4f747447857dbe70305dcd777e"}],"lang_error":{"displayName":["ink","LangError"],"type":4},"messages":[{"args":[],"default":false,"docs":[" Returns the current value of 'message'."],"label":"greet","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":5},"selector":"0x052cda08"},{"args":[{"label":"new_value","type":{"displayName":["String"],"type":0}}],"default":false,"docs":[" Sets 'message' to the given value."],"label":"set_message","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":2},"selector":"0x1fe7426f"}]},"storage":{"root":{"layout":{"struct":{"fields":[{"layout":{"leaf":{"key":"0x00000000","ty":0}},"name":"message"}],"name":"Greeter"}},"root_key":"0x00000000","ty":1}},"types":[{"id":0,"type":{"def":{"primitive":"str"}}},{"id":1,"type":{"def":{"composite":{"fields":[{"name":"message","type":0,"typeName":",>>::Type"}]}},"path":["greeter","greeter","Greeter"]}},{"id":2,"type":{"def":{"variant":{"variants":[{"fields":[{"type":3}],"index":0,"name":"Ok"},{"fields":[{"type":4}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":3},{"name":"E","type":4}],"path":["Result"]}},{"id":3,"type":{"def":{"tuple":[]}}},{"id":4,"type":{"def":{"variant":{"variants":[{"index":1,"name":"CouldNotReadInput"}]}},"path":["ink_primitives","LangError"]}},{"id":5,"type":{"def":{"variant":{"variants":[{"fields":[{"type":0}],"index":0,"name":"Ok"},{"fields":[{"type":4}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":0},{"name":"E","type":4}],"path":["Result"]}},{"id":6,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":7}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":7}],"path":["Option"]}},{"id":7,"type":{"def":{"composite":{"fields":[{"type":8,"typeName":"[u8; 32]"}]}},"path":["ink_primitives","types","AccountId"]}},{"id":8,"type":{"def":{"array":{"len":32,"type":9}}}},{"id":9,"type":{"def":{"primitive":"u8"}}},{"id":10,"type":{"def":{"primitive":"u128"}}},{"id":11,"type":{"def":{"composite":{"fields":[{"type":8,"typeName":"[u8; 32]"}]}},"path":["ink_primitives","types","Hash"]}},{"id":12,"type":{"def":{"primitive":"u64"}}},{"id":13,"type":{"def":{"primitive":"u32"}}},{"id":14,"type":{"def":{"variant":{}},"path":["ink_env","types","NoChainExtension"]}}],"version":5}`; +export const ContractFile = `{"source":{"hash":"0xd2a960874747af3b3da183bef32563be6cd8bc56bcc3efe53dd528f66c3a3a68","language":"ink! 5.0.0","compiler":"rustc 1.77.1","wasm":"0x0061736d0100000001290760027f7f0060037f7f7f0060037f7f7f017f60047f7f7f7f017f60000060047f7f7f7f006000017f02b10109057365616c310b6765745f73746f726167650003057365616c3005696e7075740000057365616c300d6465706f7369745f6576656e740005057365616c320b7365745f73746f726167650003057365616c300b7365616c5f72657475726e0001057365616c300663616c6c65720000057365616c301176616c75655f7472616e736665727265640000057365616c300f686173685f626c616b65325f323536000103656e76066d656d6f72790201021003151402020202020001060101000001000000000004040616037f01418080040b7f0041c082050b7f0041bc82050b0711020463616c6c001a066465706c6f79001b0aee1e142b01017f037f2002200346047f200005200020036a200120036a2d00003a0000200341016a21030c010b0b0b6f01017f0240200020014d04402000210303402002450d02200320012d00003a0000200141016a2101200341016a2103200241016b21020c000b000b200141016b2101200041016b210303402002450d01200220036a200120026a2d00003a0000200241016b21020c000b000b20000b2501017f037f2002200346047f200005200020036a20013a0000200341016a21030c010b0b0b3f01027f0340200245044041000f0b200241016b210220012d0000210320002d00002104200041016a2100200141016a210120032004460d000b200420036b0b8f0101017f20002d00042103200041003a0004027f0240200345044041012000280200220028020422032002490d021a200120002802002201200210081a0c010b2001200041056a2d00003a00004101200028020022002802042203200241016b2202490d011a200141016a20002802002201200210081a0b2000200320026b3602042000200120026a36020041000b0b2601017f230041106b220224002002200036020c20012002410c6a4104100e200241106a24000b4801027f024002402000280208220320026a22042003490d00200420002802044b0d00200420036b2002470d01200028020020036a2001200210081a200020043602080f0b000b000b5902017f027e230041206b2200240020004200370308200042003703002000411036021c20002000411c6a1006200028021c41114f0440000b2000290308210120002903002102200041206a2400410541042001200284501b0b4801027f230041106b22032400200341086a20024100101120032802082104200328020c2001200210082101200020023602082000200136020420002004360200200341106a24000be00101017f024002402001450440410121020c010b20014100480d01200245044041ac82042d00001a0b027f41b082042d0000044041b482042802000c010b3f00210341b4820441c0820536020041b0820441013a000041b88204200341107436020041c082050b2202200120026a22034b0d0141b882042802002003490440200141ffff036a220341107640002202417f460d022002411074220220034180807c716a22032002490d0241b882042003360200200120026a22032002490d020b41b4820420033602002002450d010b20002002360204200020013602000f0b000b7401017f230041106b2202240002402000413f4d04402001200041027410190c010b200041ffff004d0440200220004102744101723b010e20012002410e6a4102100e0c010b200041ffffffff034d044020004102744102722001100d0c010b20014103101920002001100d0b200241106a24000b0a00200120004120100e0b1000200120021012200220002001100e0bdb0701097f230041206b220324000240024020012802042204450d00200128020022052d000021022001200441016b3602042001200541016a36020002400240024002400240200241037141016b0e03020301000b200241027621020c030b2004410549200241034b720d03200528000121022001200441056b3602042001200541056a36020020024180808080044f0d020c030b200341196a20023a0000200341013a001820032001360214200341003b011c200341146a2003411c6a4102100c0d0220032f011c220241ff014d0d02200241027621020c010b200341196a20023a0000200341013a0018200320013602142003410036021c200341146a2003411c6a4104100c0d01200328021c220241808004490d01200241027621020b20012802042002490d00200341086a200241011011200128020422052002490d0020032802082108200328020c200128020022062002100821042001200520026b3602042001200220066a3602002008418080808078460d0002402002450d00200241076b22014100200120024d1b2109200441036a417c7120046b210a41002101034002400240024002400240024002400240024002400240200120046a2d0000220541187441187522074100480440200541ab80046a2d000041026b0e03030102080b200a20016b4103710d09200120094f0d080340200120046a220541046a280200200528020072418081828478710d092009200141086a22014b0d000b0c080b200141016a220620024f0d06200420066a2c000021060240200541e001470440200541ed01460d012007411f6a41ff0171410c490d042007417e71416e470d0820064140480d050c080b200641607141a07f460d040c070b2006419f7f4a0d060c030b200141016a220620024f0d05200420066a2c000021060240024002400240200541f0016b0e050100000002000b2007410f6a41ff017141024b0d0820064140480d020c080b200641f0006a41ff01714130490d010c070b2006418f7f4a0d060b200141026a220520024f0d05200420056a2c000041bf7f4a0d05200141036a220120024f0d05200120046a2c000041bf7f4c0d040c050b200141016a22012002490d020c040b200641404e0d030b200141026a220120024f0d02200120046a2c000041bf7f4c0d010c020b200120046a2c000041bf7f4a0d010b200141016a21010c030b20004180808080783602000c060b200120024f0d010340200120046a2c00004100480d022002200141016a2201470d000b0c030b200141016a21010b20012002490d000b0b2000200236020820002008ad2004ad422086843702000c010b20004180808080783602000b200341206a24000b3c01027f027f200145044041bc8204210141010c010b4101210241bc820441013a000041bd8204210141020b2103200120023a0000200020031018000b8e0101057f230041106b22022400200242808001370208200241bc82043602044100200241046a2205100d024020022802082206200228020c2203490d00200228020421042002410036020c2002200620036b3602082002200320046a3602042000200120051014200228020c220020022802084b0d00200420032002280204200010031a200241106a24000f0b000b0d00200041bc820420011004000b2d01017f2000280208220220002802044904402000200241016a360208200028020020026a20013a00000f0b000bdb0a02107f017e230041306b2201240002400240100f41ff01714105470d0020014180800136022041bc8204200141206a100120012802202200418180014f0d00024020004104490d00200141c0820436020c2001200041046b36021041bf82042d0000210041be82042d0000210241bd82042d00002103024041bc82042d00002204411f47044020044105472003412c4772200241da0147200041084772720d0241808080807821020c010b200341e70147200241c2004772200041ef0047720d01200141206a2001410c6a101520012802202202418080808078460d01200120012800253602182001200141286a28000036001b20012d002421060b2001200128001b36000720012001280218360204200142808001370224200141bc82043602204100200141206a2200100d2001280224220520012802282203490d01200128022021042001200520036b220536022020042003200320046a22032000100020052001280220220449720d012001200436021c200120033602182000200141186a10152001280220418080808078460d01200128021c0d012001200129022422103702102002418080808078470d0220002010a72010422088a71010230041106b22012400200141808001360208200141bc82043602040240200028020041808080807846044041bc82044181023b0100410221000c010b2001410136020c41bc820441003a000020002802042000280208200141046a1014200128020c220041818001490d00000b410020001018000b410141011016000b000b200141286a2001280007360000200120063a0024200120023602202001200128020436002523004180016b22002400200141206a2202280200210420022802042106200041086a200228020822034100101120002802082105200028020c20062003100821072001410c6a22022003360208200220073602042002200536020020004180800136021041bc8204200041106a10050240024020002802102202418180014f2002411f4d720d0041bc82042d00002102200041356a41d482042900003700002000412e6a41cd8204290000370100200041266a41c58204290000370100200041bd820429000037011e200020023a001d200041013a001c200020033602182000200636021420002004360210200042808001370264200041bc82043602604101200041e0006a2205101220002802682204418180014f0d002000410036026820004180800120046b22083602642000200441bc82046a2209360260418b8004200510132000280268220220002802644b0d0020002802602107200041d8006a220a4200370300200041d0006a220b4200370300200041c8006a220c4200370300200042003703400240200241214f0440200041f8006a220d4200370300200041f0006a220e4200370300200041e8006a220f4200370300200042003703602007200220051007200a200d290300370300200b200e290300370300200c200f290300370300200020002903603703400c010b200041406b2007200210081a0b200041f8006a200041d8006a290300370300200041f0006a200041d0006a290300370300200041e8006a200041c8006a29030037030020002000290340370360200041003602482000200836024420002009360240200041e0006a2205200041406b10132004200420002802486a22024b2002418180014f720d0020004180800120026b3602642000200241bc82046a2204360260200241808001460d00200441013a0000200041013602682000411d6a2005101320062003200510142000280268220320002802644b0d0041bc8204200220002802602003100220004180016a24000c010b000b200128021020012802141017410041001016000b8f0201057f230041206b22002400024002400240100f41ff01714105470d0020004180800136021441bc8204200041146a100120002802142201418180014f0d0020014104490d01200041c0820436020c2000200141046b36021041bf82042d0000210141be82042d0000210241bd82042d00002103024041bc82042d0000220441ed014704402004419b0147200341ae0147722002419d0147720d03200141de00460d010c030b200341cb00472002419d0147722001411b47720d02200041146a41808004410a10100c030b200041146a2000410c6a10152000280214418080808078460d010c020b000b410141011016000b2000280218200028021c101741bc820441003b0100410041021018000b0bee010200418080040bab0148656c6c6f20696e6b2101184de1e97d8dba311c74fa923646f3bb4c5b0b4f747447857dbe70305dcd777e01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010041ed81040b33020202020202020202020202020202020202020202020202020202020202030303030303030303030303030303030404040404","build_info":{"build_mode":"Release","cargo_contract_version":"4.0.2","rust_toolchain":"stable-aarch64-apple-darwin","wasm_opt_settings":{"keep_debug_symbols":false,"optimization_passes":"Z"}}},"contract":{"name":"greeter","version":"0.0.1","authors":["Scio Labs "]},"image":null,"spec":{"constructors":[{"args":[{"label":"init_value","type":{"displayName":["String"],"type":0}}],"default":false,"docs":["Creates a new greeter contract initialized with the given value."],"label":"new","payable":false,"returnType":{"displayName":["ink_primitives","ConstructorResult"],"type":2},"selector":"0x9bae9d5e"},{"args":[],"default":false,"docs":["Creates a new greeter contract initialized to 'Hello ink!'."],"label":"default","payable":false,"returnType":{"displayName":["ink_primitives","ConstructorResult"],"type":2},"selector":"0xed4b9d1b"}],"docs":[],"environment":{"accountId":{"displayName":["AccountId"],"type":7},"balance":{"displayName":["Balance"],"type":10},"blockNumber":{"displayName":["BlockNumber"],"type":13},"chainExtension":{"displayName":["ChainExtension"],"type":14},"hash":{"displayName":["Hash"],"type":11},"maxEventTopics":4,"staticBufferSize":16384,"timestamp":{"displayName":["Timestamp"],"type":12}},"events":[{"args":[{"docs":[],"indexed":false,"label":"from","type":{"displayName":["Option"],"type":6}},{"docs":[],"indexed":false,"label":"message","type":{"displayName":["String"],"type":0}}],"docs":[],"label":"Greeted","module_path":"greeter::greeter","signature_topic":"0x184de1e97d8dba311c74fa923646f3bb4c5b0b4f747447857dbe70305dcd777e"}],"lang_error":{"displayName":["ink","LangError"],"type":4},"messages":[{"args":[],"default":false,"docs":[" Returns the current value of 'message'."],"label":"greet","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":5},"selector":"0x052cda08"},{"args":[{"label":"new_value","type":{"displayName":["String"],"type":0}}],"default":false,"docs":[" Sets 'message' to the given value."],"label":"set_message","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":2},"selector":"0x1fe7426f"}]},"storage":{"root":{"layout":{"struct":{"fields":[{"layout":{"leaf":{"key":"0x00000000","ty":0}},"name":"message"}],"name":"Greeter"}},"root_key":"0x00000000","ty":1}},"types":[{"id":0,"type":{"def":{"primitive":"str"}}},{"id":1,"type":{"def":{"composite":{"fields":[{"name":"message","type":0,"typeName":",>>::Type"}]}},"path":["greeter","greeter","Greeter"]}},{"id":2,"type":{"def":{"variant":{"variants":[{"fields":[{"type":3}],"index":0,"name":"Ok"},{"fields":[{"type":4}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":3},{"name":"E","type":4}],"path":["Result"]}},{"id":3,"type":{"def":{"tuple":[]}}},{"id":4,"type":{"def":{"variant":{"variants":[{"index":1,"name":"CouldNotReadInput"}]}},"path":["ink_primitives","LangError"]}},{"id":5,"type":{"def":{"variant":{"variants":[{"fields":[{"type":0}],"index":0,"name":"Ok"},{"fields":[{"type":4}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":0},{"name":"E","type":4}],"path":["Result"]}},{"id":6,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":7}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":7}],"path":["Option"]}},{"id":7,"type":{"def":{"composite":{"fields":[{"type":8,"typeName":"[u8; 32]"}]}},"path":["ink_primitives","types","AccountId"]}},{"id":8,"type":{"def":{"array":{"len":32,"type":9}}}},{"id":9,"type":{"def":{"primitive":"u8"}}},{"id":10,"type":{"def":{"primitive":"u128"}}},{"id":11,"type":{"def":{"composite":{"fields":[{"type":8,"typeName":"[u8; 32]"}]}},"path":["ink_primitives","types","Hash"]}},{"id":12,"type":{"def":{"primitive":"u64"}}},{"id":13,"type":{"def":{"primitive":"u32"}}},{"id":14,"type":{"def":{"variant":{}},"path":["ink_env","types","NoChainExtension"]}}],"version":5}`; \ No newline at end of file diff --git a/examples/greeter/out/contracts/greeter.ts b/examples/greeter/out/contracts/greeter.ts new file mode 100644 index 00000000..b5ac2961 --- /dev/null +++ b/examples/greeter/out/contracts/greeter.ts @@ -0,0 +1,107 @@ +/* This file is auto-generated */ + +import type { ApiPromise } from '@polkadot/api'; +import { Abi } from '@polkadot/api-contract'; +import type { KeyringPair } from '@polkadot/keyring/types'; +import { ContractPromise } from '@polkadot/api-contract'; +import { ContractAbi } from '../contract-info/greeter'; +import QueryMethods from '../query/greeter'; +import BuildExtrinsicMethods from '../build-extrinsic/greeter'; +import TxSignAndSendMethods from '../tx-sign-and-send/greeter'; +import MixedMethods from '../mixed-methods/greeter'; +import EventsClass from '../events/greeter'; + + +export default class Contract { + readonly query : QueryMethods; + readonly buildExtrinsic : BuildExtrinsicMethods; + readonly tx : TxSignAndSendMethods; + readonly methods : MixedMethods; + readonly events: EventsClass; + + readonly address : string; + readonly signer : KeyringPair; + + readonly nativeContract : ContractPromise; + readonly nativeAPI : ApiPromise; + readonly contractAbi: Abi; + + /** + * @constructor + + * @param address - The address of the contract. + * @param signer - The signer to use for signing transactions. + * @param nativeAPI - The API instance to use for queries. + */ + constructor( + address : string, + signer : KeyringPair, + nativeAPI : ApiPromise, + ) { + this.address = address; + this.nativeContract = new ContractPromise(nativeAPI, ContractAbi, address); + this.nativeAPI = nativeAPI; + this.signer = signer; + this.contractAbi = new Abi(ContractAbi); + + this.query = new QueryMethods(this.nativeContract, this.nativeAPI, signer.address); + this.buildExtrinsic = new BuildExtrinsicMethods(this.nativeContract, this.nativeAPI); + this.tx = new TxSignAndSendMethods(nativeAPI, this.nativeContract, signer); + this.methods = new MixedMethods(nativeAPI, this.nativeContract, signer); + this.events = new EventsClass(this.nativeContract, nativeAPI); + } + + /** + * name + * + * @returns The name of the contract. + */ + get name() : string { + return this.nativeContract.abi.info.contract.name.toString(); + } + + /** + * abi + * + * @returns The abi of the contract. + */ + get abi() : Abi { + return this.contractAbi; + } + + /** + * withSigner + * + * @param signer - The signer to use for signing transactions. + * @returns New instance of the contract class with new signer. + * @example + * ```typescript + * const contract = new Contract(address, signerAlice, api); + * await contract.mint(signerBob.address, 100); + * await contract.withSigner(signerBob).transfer(signerAlice.address, 100); + * ``` + */ + withSigner(signer : KeyringPair) : Contract { + return new Contract(this.address, signer, this.nativeAPI); + } + + /** + * withAddress + * + * @param address - The address of the contract. + * @returns New instance of the contract class to interact with new contract. + */ + withAddress(address : string) : Contract { + return new Contract(address, this.signer, this.nativeAPI); + } + + /** + * withAPI + * + * @param api - The API instance to use for queries. + * @returns New instance of the contract class to interact with new API. + */ + withAPI(api : ApiPromise) : Contract { + return new Contract(this.address, this.signer, api); + } +} \ No newline at end of file diff --git a/examples/greeter/out/data/greeter.json b/examples/greeter/out/data/greeter.json new file mode 100644 index 00000000..f632a8a9 --- /dev/null +++ b/examples/greeter/out/data/greeter.json @@ -0,0 +1,3 @@ +{ +"0": {"name":"string","isResult":false,"isPrimitive":true,"isConvertable":false},"2": {"name":"Result void) { + const callbackWrapper = (args: any[], event: any) => { + const _event: Record < string, any > = {}; + + for (let i = 0; i < args.length; i++) { + _event[event.args[i]!.name] = args[i]!.toJSON(); + } + + callback(handleEventReturn(_event, getEventTypeDescription('Greeted', EVENT_DATA_TYPE_DESCRIPTIONS)) as EventTypes.Greeted); + }; + + return this.__subscribeOnEvent(callbackWrapper, (eventName : string) => eventName == 'Greeted'); + } + + + private __subscribeOnEvent( + callback : (args: any[], event: any) => void, + filter : (eventName: string) => boolean = () => true + ) { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + return this.__api.query.system.events((events) => { + events.forEach((record: any) => { + const { event } = record; + + if (event.method == 'ContractEmitted') { + const [address, data] = record.event.data; + + if (address.toString() === this.__nativeContract.address.toString()) { + const {args, event} = this.__nativeContract.abi.decodeEvent(record); + + if (filter(event.identifier.toString())) + callback(args, event); + } + } + }); + }); + } + +} diff --git a/examples/greeter/out/mixed-methods/greeter.ts b/examples/greeter/out/mixed-methods/greeter.ts new file mode 100644 index 00000000..9e681a31 --- /dev/null +++ b/examples/greeter/out/mixed-methods/greeter.ts @@ -0,0 +1,68 @@ +/* This file is auto-generated */ + +import type { ContractPromise } from '@polkadot/api-contract'; +import type { ApiPromise } from '@polkadot/api'; +import type { KeyringPair } from '@polkadot/keyring/types'; +import type { GasLimit, GasLimitAndRequiredValue, Result } from '@prosopo/typechain-types'; +import type { QueryReturnType } from '@prosopo/typechain-types'; +import { queryOkJSON, queryJSON, handleReturnType } from '@prosopo/typechain-types'; +import { txSignAndSend } from '@prosopo/typechain-types'; +import type * as ArgumentTypes from '../types-arguments/greeter'; +import type * as ReturnTypes from '../types-returns/greeter'; +import type BN from 'bn.js'; +// eslint-disable-next-line @typescript-eslint/ban-ts-comment +// @ts-ignore +import {ReturnNumber} from '@prosopo/typechain-types'; +import {getTypeDescription} from './../shared/utils'; +// eslint-disable-next-line @typescript-eslint/ban-ts-comment +// @ts-ignore +import type { EventRecord } from '@polkadot/types/interfaces'; +import {decodeEvents} from "../shared/utils"; +import DATA_TYPE_DESCRIPTIONS from '../data/greeter.json'; +import EVENT_DATA_TYPE_DESCRIPTIONS from '../event-data/greeter.json'; + + +export default class Methods { + readonly __nativeContract : ContractPromise; + readonly __keyringPair : KeyringPair; + readonly __callerAddress : string; + readonly __apiPromise: ApiPromise; + + constructor( + apiPromise : ApiPromise, + nativeContract : ContractPromise, + keyringPair : KeyringPair, + ) { + this.__apiPromise = apiPromise; + this.__nativeContract = nativeContract; + this.__keyringPair = keyringPair; + this.__callerAddress = keyringPair.address; + } + + /** + * greet + * + * @returns { Result } + */ + "greet" ( + __options: GasLimit, + ): Promise< QueryReturnType< Result > >{ + return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "greet", [], __options, (result) => { return handleReturnType(result, getTypeDescription(5, DATA_TYPE_DESCRIPTIONS)); }); + } + + /** + * setMessage + * + * @param { string } newValue, + * @returns { void } + */ + "setMessage" ( + newValue: string, + __options: GasLimit, + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "setMessage", (events: EventRecord[]) => { + return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); + }, [newValue], __options); + } + +} \ No newline at end of file diff --git a/examples/greeter/out/query/greeter.ts b/examples/greeter/out/query/greeter.ts new file mode 100644 index 00000000..d418cc8e --- /dev/null +++ b/examples/greeter/out/query/greeter.ts @@ -0,0 +1,57 @@ +/* This file is auto-generated */ + +import type { ContractPromise } from '@polkadot/api-contract'; +import type { ApiPromise } from '@polkadot/api'; +import type { GasLimit, GasLimitAndRequiredValue, Result } from '@prosopo/typechain-types'; +import type { QueryReturnType } from '@prosopo/typechain-types'; +import { queryJSON, queryOkJSON, handleReturnType } from '@prosopo/typechain-types'; +import type * as ArgumentTypes from '../types-arguments/greeter'; +import type * as ReturnTypes from '../types-returns/greeter'; +import type BN from 'bn.js'; +// eslint-disable-next-line @typescript-eslint/ban-ts-comment +// @ts-ignore +import {ReturnNumber} from '@prosopo/typechain-types'; +import {getTypeDescription} from './../shared/utils'; +import DATA_TYPE_DESCRIPTIONS from '../data/greeter.json'; + + +export default class Methods { + readonly __nativeContract : ContractPromise; + readonly __apiPromise: ApiPromise; + readonly __callerAddress : string; + + constructor( + nativeContract : ContractPromise, + nativeApi : ApiPromise, + callerAddress : string, + ) { + this.__nativeContract = nativeContract; + this.__callerAddress = callerAddress; + this.__apiPromise = nativeApi; + } + + /** + * greet + * + * @returns { Result } + */ + "greet" ( + __options ? : GasLimit, + ): Promise< QueryReturnType< Result > >{ + return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "greet", [], __options , (result) => { return handleReturnType(result, getTypeDescription(5, DATA_TYPE_DESCRIPTIONS)); }); + } + + /** + * setMessage + * + * @param { string } newValue, + * @returns { Result } + */ + "setMessage" ( + newValue: string, + __options ? : GasLimit, + ): Promise< QueryReturnType< Result > >{ + return queryOkJSON( this.__apiPromise, this.__nativeContract, this.__callerAddress, "setMessage", [newValue], __options , (result) => { return handleReturnType(result, getTypeDescription(2, DATA_TYPE_DESCRIPTIONS)); }); + } + +} \ No newline at end of file diff --git a/examples/greeter/out/shared/utils.ts b/examples/greeter/out/shared/utils.ts new file mode 100644 index 00000000..f74c8bf7 --- /dev/null +++ b/examples/greeter/out/shared/utils.ts @@ -0,0 +1,37 @@ +import fs from "fs"; +import type {ContractPromise} from "@polkadot/api-contract"; +import {handleEventReturn} from "@prosopo/typechain-types"; + +export function getTypeDescription(id: number | string, types: any): any { + return types[id]; +} + +export function getEventTypeDescription(name: string, types: any): any { + return types[name]; +} + +export function decodeEvents(events: any[], contract: ContractPromise, types: any): any[] { + return events.filter((record: any) => { + const { event } = record; + + const [address, data] = record.event.data; + + return event.method == 'ContractEmitted' && address.toString() === contract.address.toString(); + }).map((record: any) => { + + const {args, event} = contract.abi.decodeEvent(record); + + const _event: Record < string, any > = {}; + + for (let i = 0; i < args.length; i++) { + _event[event.args[i]!.name] = args[i]!.toJSON(); + } + + handleEventReturn(_event, getEventTypeDescription(event.identifier.toString(), types)); + + return { + name: event.identifier.toString(), + args: _event, + }; + }); +} diff --git a/examples/greeter/out/tx-sign-and-send/greeter.ts b/examples/greeter/out/tx-sign-and-send/greeter.ts new file mode 100644 index 00000000..6d2eb852 --- /dev/null +++ b/examples/greeter/out/tx-sign-and-send/greeter.ts @@ -0,0 +1,58 @@ +/* This file is auto-generated */ + +import type { ContractPromise } from '@polkadot/api-contract'; +import type { KeyringPair } from '@polkadot/keyring/types'; +import type { ApiPromise } from '@polkadot/api'; +import type { GasLimit, GasLimitAndRequiredValue, Result } from '@prosopo/typechain-types'; +import { txSignAndSend } from '@prosopo/typechain-types'; +import type * as ArgumentTypes from '../types-arguments/greeter'; +import type BN from 'bn.js'; +// eslint-disable-next-line @typescript-eslint/ban-ts-comment +// @ts-ignore +import type { EventRecord } from '@polkadot/types/interfaces'; +import {decodeEvents} from "../shared/utils"; +import EVENT_DATA_TYPE_DESCRIPTIONS from '../event-data/greeter.json'; + + +export default class Methods { + readonly __nativeContract : ContractPromise; + readonly __keyringPair : KeyringPair; + readonly __apiPromise: ApiPromise; + + constructor( + apiPromise: ApiPromise, + nativeContract : ContractPromise, + keyringPair : KeyringPair, + ) { + this.__apiPromise = apiPromise; + this.__nativeContract = nativeContract; + this.__keyringPair = keyringPair; + } + + /** + * greet + * + */ + "greet" ( + __options ? : GasLimit, + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "greet", (events: EventRecord[]) => { + return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); + }, [], __options); + } + + /** + * setMessage + * + * @param { string } newValue, + */ + "setMessage" ( + newValue: string, + __options ? : GasLimit, + ){ + return txSignAndSend( this.__apiPromise, this.__nativeContract, this.__keyringPair, "setMessage", (events: EventRecord[]) => { + return decodeEvents(events, this.__nativeContract, EVENT_DATA_TYPE_DESCRIPTIONS); + }, [newValue], __options); + } + +} \ No newline at end of file diff --git a/examples/greeter/out/types-arguments/greeter.ts b/examples/greeter/out/types-arguments/greeter.ts new file mode 100644 index 00000000..85afd9d3 --- /dev/null +++ b/examples/greeter/out/types-arguments/greeter.ts @@ -0,0 +1,8 @@ +import type BN from 'bn.js'; + +export enum LangError { + couldNotReadInput = 'CouldNotReadInput' +} + +export type AccountId = string | number[] + diff --git a/examples/greeter/out/types-returns/greeter.ts b/examples/greeter/out/types-returns/greeter.ts new file mode 100644 index 00000000..e64b167c --- /dev/null +++ b/examples/greeter/out/types-returns/greeter.ts @@ -0,0 +1,9 @@ +import type BN from 'bn.js'; +import type {ReturnNumber} from '@prosopo/typechain-types'; + +export enum LangError { + couldNotReadInput = 'CouldNotReadInput' +} + +export type AccountId = string | number[] + From c860bd0d16a2bf1f88456f0c04287bcb448c05e5 Mon Sep 17 00:00:00 2001 From: ical10 Date: Mon, 20 May 2024 21:51:46 +0800 Subject: [PATCH 4/7] Fix undefined error when getting event identifier --- .../typechain-polkadot/src/templates/raw/shared/utils.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/typechain-polkadot/src/templates/raw/shared/utils.ts b/packages/typechain-polkadot/src/templates/raw/shared/utils.ts index f74c8bf7..e85d7598 100644 --- a/packages/typechain-polkadot/src/templates/raw/shared/utils.ts +++ b/packages/typechain-polkadot/src/templates/raw/shared/utils.ts @@ -27,7 +27,11 @@ export function decodeEvents(events: any[], contract: ContractPromise, types: an _event[event.args[i]!.name] = args[i]!.toJSON(); } - handleEventReturn(_event, getEventTypeDescription(event.identifier.toString(), types)); + // extract event identifier (ContractName::MethodName::EventName -> EventName) + const length = event.identifier.toString().split("::").length; + const name = event.identifier.toString().split("::")[length - 1] ?? event.identifier.toString(); + + handleEventReturn(_event, getEventTypeDescription(name, types)); return { name: event.identifier.toString(), From 8a0d5b381bcd4fe1f57b45357d78ab2616d296d8 Mon Sep 17 00:00:00 2001 From: ical10 Date: Tue, 21 May 2024 17:43:27 +0800 Subject: [PATCH 5/7] Add tests for Greeter contract --- tests/artifacts/greeter.contract | 1 + tests/artifacts/greeter.json | 494 +++++++++++++++++++++++++++++++ tests/greeter/general.test.ts | 45 +++ tests/greeter/query.test.ts | 36 +++ tests/greeter/tx.test.ts | 41 +++ 5 files changed, 617 insertions(+) create mode 100644 tests/artifacts/greeter.contract create mode 100644 tests/artifacts/greeter.json create mode 100644 tests/greeter/general.test.ts create mode 100644 tests/greeter/query.test.ts create mode 100644 tests/greeter/tx.test.ts diff --git a/tests/artifacts/greeter.contract b/tests/artifacts/greeter.contract new file mode 100644 index 00000000..353a9e49 --- /dev/null +++ b/tests/artifacts/greeter.contract @@ -0,0 +1 @@ +{"source":{"hash":"0xd2a960874747af3b3da183bef32563be6cd8bc56bcc3efe53dd528f66c3a3a68","language":"ink! 5.0.0","compiler":"rustc 1.77.1","wasm":"0x0061736d0100000001290760027f7f0060037f7f7f0060037f7f7f017f60047f7f7f7f017f60000060047f7f7f7f006000017f02b10109057365616c310b6765745f73746f726167650003057365616c3005696e7075740000057365616c300d6465706f7369745f6576656e740005057365616c320b7365745f73746f726167650003057365616c300b7365616c5f72657475726e0001057365616c300663616c6c65720000057365616c301176616c75655f7472616e736665727265640000057365616c300f686173685f626c616b65325f323536000103656e76066d656d6f72790201021003151402020202020001060101000001000000000004040616037f01418080040b7f0041c082050b7f0041bc82050b0711020463616c6c001a066465706c6f79001b0aee1e142b01017f037f2002200346047f200005200020036a200120036a2d00003a0000200341016a21030c010b0b0b6f01017f0240200020014d04402000210303402002450d02200320012d00003a0000200141016a2101200341016a2103200241016b21020c000b000b200141016b2101200041016b210303402002450d01200220036a200120026a2d00003a0000200241016b21020c000b000b20000b2501017f037f2002200346047f200005200020036a20013a0000200341016a21030c010b0b0b3f01027f0340200245044041000f0b200241016b210220012d0000210320002d00002104200041016a2100200141016a210120032004460d000b200420036b0b8f0101017f20002d00042103200041003a0004027f0240200345044041012000280200220028020422032002490d021a200120002802002201200210081a0c010b2001200041056a2d00003a00004101200028020022002802042203200241016b2202490d011a200141016a20002802002201200210081a0b2000200320026b3602042000200120026a36020041000b0b2601017f230041106b220224002002200036020c20012002410c6a4104100e200241106a24000b4801027f024002402000280208220320026a22042003490d00200420002802044b0d00200420036b2002470d01200028020020036a2001200210081a200020043602080f0b000b000b5902017f027e230041206b2200240020004200370308200042003703002000411036021c20002000411c6a1006200028021c41114f0440000b2000290308210120002903002102200041206a2400410541042001200284501b0b4801027f230041106b22032400200341086a20024100101120032802082104200328020c2001200210082101200020023602082000200136020420002004360200200341106a24000be00101017f024002402001450440410121020c010b20014100480d01200245044041ac82042d00001a0b027f41b082042d0000044041b482042802000c010b3f00210341b4820441c0820536020041b0820441013a000041b88204200341107436020041c082050b2202200120026a22034b0d0141b882042802002003490440200141ffff036a220341107640002202417f460d022002411074220220034180807c716a22032002490d0241b882042003360200200120026a22032002490d020b41b4820420033602002002450d010b20002002360204200020013602000f0b000b7401017f230041106b2202240002402000413f4d04402001200041027410190c010b200041ffff004d0440200220004102744101723b010e20012002410e6a4102100e0c010b200041ffffffff034d044020004102744102722001100d0c010b20014103101920002001100d0b200241106a24000b0a00200120004120100e0b1000200120021012200220002001100e0bdb0701097f230041206b220324000240024020012802042204450d00200128020022052d000021022001200441016b3602042001200541016a36020002400240024002400240200241037141016b0e03020301000b200241027621020c030b2004410549200241034b720d03200528000121022001200441056b3602042001200541056a36020020024180808080044f0d020c030b200341196a20023a0000200341013a001820032001360214200341003b011c200341146a2003411c6a4102100c0d0220032f011c220241ff014d0d02200241027621020c010b200341196a20023a0000200341013a0018200320013602142003410036021c200341146a2003411c6a4104100c0d01200328021c220241808004490d01200241027621020b20012802042002490d00200341086a200241011011200128020422052002490d0020032802082108200328020c200128020022062002100821042001200520026b3602042001200220066a3602002008418080808078460d0002402002450d00200241076b22014100200120024d1b2109200441036a417c7120046b210a41002101034002400240024002400240024002400240024002400240200120046a2d0000220541187441187522074100480440200541ab80046a2d000041026b0e03030102080b200a20016b4103710d09200120094f0d080340200120046a220541046a280200200528020072418081828478710d092009200141086a22014b0d000b0c080b200141016a220620024f0d06200420066a2c000021060240200541e001470440200541ed01460d012007411f6a41ff0171410c490d042007417e71416e470d0820064140480d050c080b200641607141a07f460d040c070b2006419f7f4a0d060c030b200141016a220620024f0d05200420066a2c000021060240024002400240200541f0016b0e050100000002000b2007410f6a41ff017141024b0d0820064140480d020c080b200641f0006a41ff01714130490d010c070b2006418f7f4a0d060b200141026a220520024f0d05200420056a2c000041bf7f4a0d05200141036a220120024f0d05200120046a2c000041bf7f4c0d040c050b200141016a22012002490d020c040b200641404e0d030b200141026a220120024f0d02200120046a2c000041bf7f4c0d010c020b200120046a2c000041bf7f4a0d010b200141016a21010c030b20004180808080783602000c060b200120024f0d010340200120046a2c00004100480d022002200141016a2201470d000b0c030b200141016a21010b20012002490d000b0b2000200236020820002008ad2004ad422086843702000c010b20004180808080783602000b200341206a24000b3c01027f027f200145044041bc8204210141010c010b4101210241bc820441013a000041bd8204210141020b2103200120023a0000200020031018000b8e0101057f230041106b22022400200242808001370208200241bc82043602044100200241046a2205100d024020022802082206200228020c2203490d00200228020421042002410036020c2002200620036b3602082002200320046a3602042000200120051014200228020c220020022802084b0d00200420032002280204200010031a200241106a24000f0b000b0d00200041bc820420011004000b2d01017f2000280208220220002802044904402000200241016a360208200028020020026a20013a00000f0b000bdb0a02107f017e230041306b2201240002400240100f41ff01714105470d0020014180800136022041bc8204200141206a100120012802202200418180014f0d00024020004104490d00200141c0820436020c2001200041046b36021041bf82042d0000210041be82042d0000210241bd82042d00002103024041bc82042d00002204411f47044020044105472003412c4772200241da0147200041084772720d0241808080807821020c010b200341e70147200241c2004772200041ef0047720d01200141206a2001410c6a101520012802202202418080808078460d01200120012800253602182001200141286a28000036001b20012d002421060b2001200128001b36000720012001280218360204200142808001370224200141bc82043602204100200141206a2200100d2001280224220520012802282203490d01200128022021042001200520036b220536022020042003200320046a22032000100020052001280220220449720d012001200436021c200120033602182000200141186a10152001280220418080808078460d01200128021c0d012001200129022422103702102002418080808078470d0220002010a72010422088a71010230041106b22012400200141808001360208200141bc82043602040240200028020041808080807846044041bc82044181023b0100410221000c010b2001410136020c41bc820441003a000020002802042000280208200141046a1014200128020c220041818001490d00000b410020001018000b410141011016000b000b200141286a2001280007360000200120063a0024200120023602202001200128020436002523004180016b22002400200141206a2202280200210420022802042106200041086a200228020822034100101120002802082105200028020c20062003100821072001410c6a22022003360208200220073602042002200536020020004180800136021041bc8204200041106a10050240024020002802102202418180014f2002411f4d720d0041bc82042d00002102200041356a41d482042900003700002000412e6a41cd8204290000370100200041266a41c58204290000370100200041bd820429000037011e200020023a001d200041013a001c200020033602182000200636021420002004360210200042808001370264200041bc82043602604101200041e0006a2205101220002802682204418180014f0d002000410036026820004180800120046b22083602642000200441bc82046a2209360260418b8004200510132000280268220220002802644b0d0020002802602107200041d8006a220a4200370300200041d0006a220b4200370300200041c8006a220c4200370300200042003703400240200241214f0440200041f8006a220d4200370300200041f0006a220e4200370300200041e8006a220f4200370300200042003703602007200220051007200a200d290300370300200b200e290300370300200c200f290300370300200020002903603703400c010b200041406b2007200210081a0b200041f8006a200041d8006a290300370300200041f0006a200041d0006a290300370300200041e8006a200041c8006a29030037030020002000290340370360200041003602482000200836024420002009360240200041e0006a2205200041406b10132004200420002802486a22024b2002418180014f720d0020004180800120026b3602642000200241bc82046a2204360260200241808001460d00200441013a0000200041013602682000411d6a2005101320062003200510142000280268220320002802644b0d0041bc8204200220002802602003100220004180016a24000c010b000b200128021020012802141017410041001016000b8f0201057f230041206b22002400024002400240100f41ff01714105470d0020004180800136021441bc8204200041146a100120002802142201418180014f0d0020014104490d01200041c0820436020c2000200141046b36021041bf82042d0000210141be82042d0000210241bd82042d00002103024041bc82042d0000220441ed014704402004419b0147200341ae0147722002419d0147720d03200141de00460d010c030b200341cb00472002419d0147722001411b47720d02200041146a41808004410a10100c030b200041146a2000410c6a10152000280214418080808078460d010c020b000b410141011016000b2000280218200028021c101741bc820441003b0100410041021018000b0bee010200418080040bab0148656c6c6f20696e6b2101184de1e97d8dba311c74fa923646f3bb4c5b0b4f747447857dbe70305dcd777e01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010041ed81040b33020202020202020202020202020202020202020202020202020202020202030303030303030303030303030303030404040404","build_info":{"build_mode":"Release","cargo_contract_version":"4.0.2","rust_toolchain":"stable-aarch64-apple-darwin","wasm_opt_settings":{"keep_debug_symbols":false,"optimization_passes":"Z"}}},"contract":{"name":"greeter","version":"0.0.1","authors":["Scio Labs "]},"image":null,"spec":{"constructors":[{"args":[{"label":"init_value","type":{"displayName":["String"],"type":0}}],"default":false,"docs":["Creates a new greeter contract initialized with the given value."],"label":"new","payable":false,"returnType":{"displayName":["ink_primitives","ConstructorResult"],"type":2},"selector":"0x9bae9d5e"},{"args":[],"default":false,"docs":["Creates a new greeter contract initialized to 'Hello ink!'."],"label":"default","payable":false,"returnType":{"displayName":["ink_primitives","ConstructorResult"],"type":2},"selector":"0xed4b9d1b"}],"docs":[],"environment":{"accountId":{"displayName":["AccountId"],"type":7},"balance":{"displayName":["Balance"],"type":10},"blockNumber":{"displayName":["BlockNumber"],"type":13},"chainExtension":{"displayName":["ChainExtension"],"type":14},"hash":{"displayName":["Hash"],"type":11},"maxEventTopics":4,"staticBufferSize":16384,"timestamp":{"displayName":["Timestamp"],"type":12}},"events":[{"args":[{"docs":[],"indexed":false,"label":"from","type":{"displayName":["Option"],"type":6}},{"docs":[],"indexed":false,"label":"message","type":{"displayName":["String"],"type":0}}],"docs":[],"label":"Greeted","module_path":"greeter::greeter","signature_topic":"0x184de1e97d8dba311c74fa923646f3bb4c5b0b4f747447857dbe70305dcd777e"}],"lang_error":{"displayName":["ink","LangError"],"type":4},"messages":[{"args":[],"default":false,"docs":[" Returns the current value of 'message'."],"label":"greet","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":5},"selector":"0x052cda08"},{"args":[{"label":"new_value","type":{"displayName":["String"],"type":0}}],"default":false,"docs":[" Sets 'message' to the given value."],"label":"set_message","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":2},"selector":"0x1fe7426f"}]},"storage":{"root":{"layout":{"struct":{"fields":[{"layout":{"leaf":{"key":"0x00000000","ty":0}},"name":"message"}],"name":"Greeter"}},"root_key":"0x00000000","ty":1}},"types":[{"id":0,"type":{"def":{"primitive":"str"}}},{"id":1,"type":{"def":{"composite":{"fields":[{"name":"message","type":0,"typeName":",>>::Type"}]}},"path":["greeter","greeter","Greeter"]}},{"id":2,"type":{"def":{"variant":{"variants":[{"fields":[{"type":3}],"index":0,"name":"Ok"},{"fields":[{"type":4}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":3},{"name":"E","type":4}],"path":["Result"]}},{"id":3,"type":{"def":{"tuple":[]}}},{"id":4,"type":{"def":{"variant":{"variants":[{"index":1,"name":"CouldNotReadInput"}]}},"path":["ink_primitives","LangError"]}},{"id":5,"type":{"def":{"variant":{"variants":[{"fields":[{"type":0}],"index":0,"name":"Ok"},{"fields":[{"type":4}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":0},{"name":"E","type":4}],"path":["Result"]}},{"id":6,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":7}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":7}],"path":["Option"]}},{"id":7,"type":{"def":{"composite":{"fields":[{"type":8,"typeName":"[u8; 32]"}]}},"path":["ink_primitives","types","AccountId"]}},{"id":8,"type":{"def":{"array":{"len":32,"type":9}}}},{"id":9,"type":{"def":{"primitive":"u8"}}},{"id":10,"type":{"def":{"primitive":"u128"}}},{"id":11,"type":{"def":{"composite":{"fields":[{"type":8,"typeName":"[u8; 32]"}]}},"path":["ink_primitives","types","Hash"]}},{"id":12,"type":{"def":{"primitive":"u64"}}},{"id":13,"type":{"def":{"primitive":"u32"}}},{"id":14,"type":{"def":{"variant":{}},"path":["ink_env","types","NoChainExtension"]}}],"version":5} \ No newline at end of file diff --git a/tests/artifacts/greeter.json b/tests/artifacts/greeter.json new file mode 100644 index 00000000..eace9bcd --- /dev/null +++ b/tests/artifacts/greeter.json @@ -0,0 +1,494 @@ +{ + "source": { + "hash": "0xd2a960874747af3b3da183bef32563be6cd8bc56bcc3efe53dd528f66c3a3a68", + "language": "ink! 5.0.0", + "compiler": "rustc 1.77.1", + "build_info": { + "build_mode": "Release", + "cargo_contract_version": "4.0.2", + "rust_toolchain": "stable-aarch64-apple-darwin", + "wasm_opt_settings": { + "keep_debug_symbols": false, + "optimization_passes": "Z" + } + } + }, + "contract": { + "name": "greeter", + "version": "0.0.1", + "authors": [ + "Scio Labs " + ] + }, + "image": null, + "spec": { + "constructors": [ + { + "args": [ + { + "label": "init_value", + "type": { + "displayName": [ + "String" + ], + "type": 0 + } + } + ], + "default": false, + "docs": [ + "Creates a new greeter contract initialized with the given value." + ], + "label": "new", + "payable": false, + "returnType": { + "displayName": [ + "ink_primitives", + "ConstructorResult" + ], + "type": 2 + }, + "selector": "0x9bae9d5e" + }, + { + "args": [], + "default": false, + "docs": [ + "Creates a new greeter contract initialized to 'Hello ink!'." + ], + "label": "default", + "payable": false, + "returnType": { + "displayName": [ + "ink_primitives", + "ConstructorResult" + ], + "type": 2 + }, + "selector": "0xed4b9d1b" + } + ], + "docs": [], + "environment": { + "accountId": { + "displayName": [ + "AccountId" + ], + "type": 7 + }, + "balance": { + "displayName": [ + "Balance" + ], + "type": 10 + }, + "blockNumber": { + "displayName": [ + "BlockNumber" + ], + "type": 13 + }, + "chainExtension": { + "displayName": [ + "ChainExtension" + ], + "type": 14 + }, + "hash": { + "displayName": [ + "Hash" + ], + "type": 11 + }, + "maxEventTopics": 4, + "staticBufferSize": 16384, + "timestamp": { + "displayName": [ + "Timestamp" + ], + "type": 12 + } + }, + "events": [ + { + "args": [ + { + "docs": [], + "indexed": false, + "label": "from", + "type": { + "displayName": [ + "Option" + ], + "type": 6 + } + }, + { + "docs": [], + "indexed": false, + "label": "message", + "type": { + "displayName": [ + "String" + ], + "type": 0 + } + } + ], + "docs": [], + "label": "Greeted", + "module_path": "greeter::greeter", + "signature_topic": "0x184de1e97d8dba311c74fa923646f3bb4c5b0b4f747447857dbe70305dcd777e" + } + ], + "lang_error": { + "displayName": [ + "ink", + "LangError" + ], + "type": 4 + }, + "messages": [ + { + "args": [], + "default": false, + "docs": [ + " Returns the current value of 'message'." + ], + "label": "greet", + "mutates": false, + "payable": false, + "returnType": { + "displayName": [ + "ink", + "MessageResult" + ], + "type": 5 + }, + "selector": "0x052cda08" + }, + { + "args": [ + { + "label": "new_value", + "type": { + "displayName": [ + "String" + ], + "type": 0 + } + } + ], + "default": false, + "docs": [ + " Sets 'message' to the given value." + ], + "label": "set_message", + "mutates": true, + "payable": false, + "returnType": { + "displayName": [ + "ink", + "MessageResult" + ], + "type": 2 + }, + "selector": "0x1fe7426f" + } + ] + }, + "storage": { + "root": { + "layout": { + "struct": { + "fields": [ + { + "layout": { + "leaf": { + "key": "0x00000000", + "ty": 0 + } + }, + "name": "message" + } + ], + "name": "Greeter" + } + }, + "root_key": "0x00000000", + "ty": 1 + } + }, + "types": [ + { + "id": 0, + "type": { + "def": { + "primitive": "str" + } + } + }, + { + "id": 1, + "type": { + "def": { + "composite": { + "fields": [ + { + "name": "message", + "type": 0, + "typeName": ",>>::Type" + } + ] + } + }, + "path": [ + "greeter", + "greeter", + "Greeter" + ] + } + }, + { + "id": 2, + "type": { + "def": { + "variant": { + "variants": [ + { + "fields": [ + { + "type": 3 + } + ], + "index": 0, + "name": "Ok" + }, + { + "fields": [ + { + "type": 4 + } + ], + "index": 1, + "name": "Err" + } + ] + } + }, + "params": [ + { + "name": "T", + "type": 3 + }, + { + "name": "E", + "type": 4 + } + ], + "path": [ + "Result" + ] + } + }, + { + "id": 3, + "type": { + "def": { + "tuple": [] + } + } + }, + { + "id": 4, + "type": { + "def": { + "variant": { + "variants": [ + { + "index": 1, + "name": "CouldNotReadInput" + } + ] + } + }, + "path": [ + "ink_primitives", + "LangError" + ] + } + }, + { + "id": 5, + "type": { + "def": { + "variant": { + "variants": [ + { + "fields": [ + { + "type": 0 + } + ], + "index": 0, + "name": "Ok" + }, + { + "fields": [ + { + "type": 4 + } + ], + "index": 1, + "name": "Err" + } + ] + } + }, + "params": [ + { + "name": "T", + "type": 0 + }, + { + "name": "E", + "type": 4 + } + ], + "path": [ + "Result" + ] + } + }, + { + "id": 6, + "type": { + "def": { + "variant": { + "variants": [ + { + "index": 0, + "name": "None" + }, + { + "fields": [ + { + "type": 7 + } + ], + "index": 1, + "name": "Some" + } + ] + } + }, + "params": [ + { + "name": "T", + "type": 7 + } + ], + "path": [ + "Option" + ] + } + }, + { + "id": 7, + "type": { + "def": { + "composite": { + "fields": [ + { + "type": 8, + "typeName": "[u8; 32]" + } + ] + } + }, + "path": [ + "ink_primitives", + "types", + "AccountId" + ] + } + }, + { + "id": 8, + "type": { + "def": { + "array": { + "len": 32, + "type": 9 + } + } + } + }, + { + "id": 9, + "type": { + "def": { + "primitive": "u8" + } + } + }, + { + "id": 10, + "type": { + "def": { + "primitive": "u128" + } + } + }, + { + "id": 11, + "type": { + "def": { + "composite": { + "fields": [ + { + "type": 8, + "typeName": "[u8; 32]" + } + ] + } + }, + "path": [ + "ink_primitives", + "types", + "Hash" + ] + } + }, + { + "id": 12, + "type": { + "def": { + "primitive": "u64" + } + } + }, + { + "id": 13, + "type": { + "def": { + "primitive": "u32" + } + } + }, + { + "id": 14, + "type": { + "def": { + "variant": {} + }, + "path": [ + "ink_env", + "types", + "NoChainExtension" + ] + } + } + ], + "version": 5 +} \ No newline at end of file diff --git a/tests/greeter/general.test.ts b/tests/greeter/general.test.ts new file mode 100644 index 00000000..44b9edcc --- /dev/null +++ b/tests/greeter/general.test.ts @@ -0,0 +1,45 @@ +import Contract from '../generated/contracts/greeter'; +import Constructors from '../generated/constructors/greeter'; +import {ApiPromise} from "@polkadot/api"; +import type {KeyringPair} from "@polkadot/keyring/types"; +import {GetAccounts} from "../config"; + + +describe("Correctness of the Greeter contract's methods types", () => { + let api: ApiPromise; + let contract: Contract; + let UserAlice: KeyringPair; + + const greeting = "Hello, world!"; + + const newGreeting = "Hello, Web3!"; + + beforeEach(async () => { + api = await ApiPromise.create(); + + const accounts = GetAccounts(); + + UserAlice = accounts.UserAlice; + + const factory = new Constructors(api, UserAlice); + + const {address} = await factory.new(greeting); + + contract = new Contract(address, UserAlice, api); + }); + + afterEach(async () => { + await api.disconnect(); + }); + + jest.setTimeout(10000); + + test("greeting works", async () => { + expect((await contract.query.greet()).value.unwrapRecursively().toString()).toBe(greeting); + }); + + test("setting new greeting works", async () => { + await contract.tx.setMessage(newGreeting); + expect((await contract.query.greet()).value.unwrapRecursively().toString()).toBe(newGreeting); + }); +}); \ No newline at end of file diff --git a/tests/greeter/query.test.ts b/tests/greeter/query.test.ts new file mode 100644 index 00000000..c7eccc60 --- /dev/null +++ b/tests/greeter/query.test.ts @@ -0,0 +1,36 @@ +import Contract from '../generated/contracts/greeter'; +import Constructors from '../generated/constructors/greeter'; +import {ApiPromise} from "@polkadot/api"; +import type {KeyringPair} from "@polkadot/keyring/types"; +import {GetAccounts} from "../config"; + +describe("Correctness of the Greeter contract's methods types for query", () => { + let api : ApiPromise; + let contract : Contract; + let UserAlice: KeyringPair; + + beforeAll(async () => { + api = await ApiPromise.create(); + + const accounts = GetAccounts(); + + UserAlice = accounts.UserAlice; + + const factory = new Constructors(api, UserAlice); + + const res = await factory.new("Hello, world!"); + + contract = new Contract(res.address, UserAlice, api); + }); + + afterAll(async () => { + await api.disconnect(); + }); + + jest.setTimeout(10000); + + test(`Greeter::greet`, async () => { + const { value } = await contract.query.greet(); + expect( ['string', 'number', 'object'].includes(typeof value) ).toBe(true); + }); +}); \ No newline at end of file diff --git a/tests/greeter/tx.test.ts b/tests/greeter/tx.test.ts new file mode 100644 index 00000000..70c9ef63 --- /dev/null +++ b/tests/greeter/tx.test.ts @@ -0,0 +1,41 @@ +import Contract from '../generated/contracts/greeter'; +import { + GetAccounts, +} from '../config'; +import Constructors from "../generated/constructors/greeter"; +import type {KeyringPair} from "@polkadot/keyring/types"; +import {ApiPromise} from "@polkadot/api"; + +describe("Correctness of the Greeter contract's methods types for tx", () => { + let api : ApiPromise; + let contract : Contract; + let UserAlice: KeyringPair; + + beforeAll(async () => { + api = await ApiPromise.create(); + + const accounts = GetAccounts(); + + UserAlice = accounts.UserAlice; + + const factory = new Constructors(api, UserAlice); + + const res = await factory.new("Hello, world!"); + + contract = new Contract(res.address, UserAlice, api); + }); + + afterAll(async () => { + await api.disconnect(); + }); + + jest.setTimeout(10000); + + test(`Greeter::greet`, async () => { + await contract.tx.greet(); + }); + + test(`Greeter::setMessage`, async () => { + await contract.tx.setMessage("Hello, Web3!"); + }); +}); \ No newline at end of file From 7a6e19b3ae88b5198a704a9c17c0a8b7a5a7089d Mon Sep 17 00:00:00 2001 From: ical10 Date: Mon, 24 Jun 2024 14:32:13 +0700 Subject: [PATCH 6/7] Minor refactoring --- .../typechain-polkadot/src/templates/raw/shared/utils.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/typechain-polkadot/src/templates/raw/shared/utils.ts b/packages/typechain-polkadot/src/templates/raw/shared/utils.ts index e85d7598..79a0cf3f 100644 --- a/packages/typechain-polkadot/src/templates/raw/shared/utils.ts +++ b/packages/typechain-polkadot/src/templates/raw/shared/utils.ts @@ -28,8 +28,10 @@ export function decodeEvents(events: any[], contract: ContractPromise, types: an } // extract event identifier (ContractName::MethodName::EventName -> EventName) - const length = event.identifier.toString().split("::").length; - const name = event.identifier.toString().split("::")[length - 1] ?? event.identifier.toString(); + + const splittedEvent = event.identifier.toString().split("::"); + const length = splittedEvent.length; + const name = splittedEvent[length - 1] ?? event.identifier.toString(); handleEventReturn(_event, getEventTypeDescription(name, types)); From 54042d387bc97f0cbec9e960468ed481755d2a7e Mon Sep 17 00:00:00 2001 From: ical10 Date: Mon, 24 Jun 2024 14:33:30 +0700 Subject: [PATCH 7/7] Add index.ts for Greeter example --- examples/greeter/index.ts | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 examples/greeter/index.ts diff --git a/examples/greeter/index.ts b/examples/greeter/index.ts new file mode 100644 index 00000000..5d6c9471 --- /dev/null +++ b/examples/greeter/index.ts @@ -0,0 +1,35 @@ +// In this example we will deploy & interact with greeter contract to set and get greeting message. +import Contract from "./out/contracts/greeter"; +import {ApiPromise, Keyring} from "@polkadot/api"; +import Constructors from "./out/constructors/greeter"; + +async function main() { + const api = await ApiPromise.create(); + + const keyring = new Keyring({type: 'sr25519'}); + + const aliceKeyringPair = keyring.addFromUri('//Alice'); + + const constructors = new Constructors(api, aliceKeyringPair); + const greeting = "Hello, world!"; + + const {address: TOKEN_ADDRESS} = await constructors.new(greeting); + + console.log('Contract deployed at:', TOKEN_ADDRESS); + + const contract = new Contract(TOKEN_ADDRESS, aliceKeyringPair, api); + + const {value} = await contract.query.greet(); + console.log('The greeting is: ', value); + + await contract.tx.setMessage("Hello, Web3!"); + + const {value: newGreeting} = await contract.query.greet(); + console.log('The new greeting is: ', newGreeting); + + await api.disconnect(); +} + +main().then(() => { + console.log('done'); +}); \ No newline at end of file