diff --git a/contracts/Cargo.toml b/contracts/Cargo.toml index 3596028..d490c0a 100644 --- a/contracts/Cargo.toml +++ b/contracts/Cargo.toml @@ -1,4 +1,4 @@ [workspace] resolver = "1" -members = ["src/greeter"] +members = ["src/zkdex"] diff --git a/contracts/deployments/greeter/alephzero-testnet.ts b/contracts/deployments/greeter/alephzero-testnet.ts deleted file mode 100644 index 134525b..0000000 --- a/contracts/deployments/greeter/alephzero-testnet.ts +++ /dev/null @@ -1,2 +0,0 @@ -export const address = '5CrtpVyLB8iaRPJyB39DvfGgHP1BLGpEfmb9XF1qzN5CFQbX' -export const blockNumber = 41737105 diff --git a/contracts/deployments/greeter/alephzero.ts b/contracts/deployments/greeter/alephzero.ts deleted file mode 100644 index e7cf6f6..0000000 --- a/contracts/deployments/greeter/alephzero.ts +++ /dev/null @@ -1,2 +0,0 @@ -export const address = '5DhCVg3QmsPXPpYBGGPerVfnopMUSr49L3eMKmetmJkLfpot' -export const blockNumber = 58304564 diff --git a/contracts/deployments/greeter/greeter.contract b/contracts/deployments/greeter/greeter.contract deleted file mode 100644 index 5d00d06..0000000 --- a/contracts/deployments/greeter/greeter.contract +++ /dev/null @@ -1 +0,0 @@ -{"source":{"hash":"0x586a59fc04eeb2b7d0e89b7d7ce98689f8e520a27a3522ca3b1a112f0129af9d","language":"ink! 4.3.0","compiler":"rustc 1.75.0","wasm":"0x0061736d0100000001290760027f7f0060037f7f7f0060000060047f7f7f7f017f60037f7f7f017f60047f7f7f7f006000017f02b10109057365616c310b6765745f73746f726167650003057365616c301176616c75655f7472616e736665727265640000057365616c3005696e7075740000057365616c300663616c6c65720000057365616c300f686173685f626c616b65325f3235360001057365616c300d6465706f7369745f6576656e740005057365616c320b7365745f73746f726167650003057365616c300b7365616c5f72657475726e000103656e76066d656d6f7279020102100313120404000106010100010000020000000002020608017f01418080040b0711020463616c6c0018066465706c6f7900190ad31c122b01017f037f2002200346047f200005200020036a200120036a2d00003a0000200341016a21030c010b0b0b8e0101017f20002d00042103200041003a0004027f0240200304402001200041056a2d00003a00004101200028020022002802042203200241016b2202490d021a200141016a20002802002201200210081a0c010b41012000280200220028020422032002490d011a200120002802002201200210081a0b2000200320026b3602042000200120026a36020041000b0b2601017f230041106b220224002002200036020c20012002410c6a4104100b200241106a24000b4801027f024002402000280208220320026a22042003490d00200420002802044b0d00200420036b2002470d01200028020020036a2001200210081a200020043602080f0b000b000b4d02017f027e230041206b2200240020004200370308200042003703002000411036021c20002000411c6a10012000290308210120002903002102200041206a2400410541042001200284501b0b4801027f230041106b22032400200341086a20024100100e200328020c210420032802082001200210082101200020023602082000200436020420002001360200200341106a24000bab0101017f024002402001450440410121020c010b20014100480d01200245044041a482052d00001a0b419c8204280200220220016a22032002490d0141a082042802002003490440200141ffff036a22034110764000220241ffff034b0d022002411074220220034180807c716a22032002490d0241a082042003360200200120026a22032002490d020b419c820420033602002002450d010b20002001360204200020023602000f0b000b7401017f230041106b2202240002402000413f4d04402001200041027410170c010b200041ffff004d0440200220004102744101723b010e20012002410e6a4102100b0c010b200041ffffffff034d044020004102744102722001100a0c010b20014103101720002001100a0b200241106a24000b100020012002100f200220002001100b0b0a00200120004120100b0bca0702087f017e230041206b220324000240024020012802042204450d00200128020022052d000021022001200441016b3602042001200541016a36020002400240024002400240200241037141016b0e03020301000b200241027621020c030b2004410549200241034b720d03200528000121022001200441056b3602042001200541056a36020020024180808080044f0d020c030b200341196a20023a0000200341013a001820032001360214200341003b011c200341146a2003411c6a410210090d0220032f011c220241ff014d0d02200241027621020c010b200341196a20023a0000200341013a0018200320013602142003410036021c200341146a2003411c6a410410090d01200328021c220241808004490d01200241027621020b20012802042002490d00200341086a20024101100e200128020422052002490d00200335020c210a2003280208200128020022062002100821042001200520026b3602042001200220066a36020002402002450d00200241076b22014100200120024d1b2108200441036a417c7120046b21094100210103400240024002400240024002400240024002400240200120046a2d00002205411874411875220741004804402005419a80046a2d000041026b0e03030102080b200920016b410371450440200120084f0d090340200120046a220541046a280200200528020072418081828478710d0a2008200141086a22014b0d000b0c090b200141016a21010c090b200141016a220620024f0d06200420066a2c000021060240200541e001470440200541ed01460d012007411f6a41ff0171410c490d042007417e71416e470d0820064140480d050c080b200641607141a07f460d040c070b2006419f7f4a0d060c030b200141016a220620024f0d05200420066a2c000021060240024002400240200541f0016b0e050100000002000b2007410f6a41ff017141024b0d0820064140480d020c080b200641f0006a41ff01714130490d010c070b2006418f7f4a0d060b200141026a220520024f0d05200420056a2c000041bf7f4a0d05200141036a220120024f0d05200120046a2c000041bf7f4a0d050c040b200141016a22012002490d020c040b200641404e0d030b200141026a220120024f0d02200120046a2c000041bf7f4c0d010c020b200120046a2c000041bf7f4a0d010b200141016a21010c020b200041003602000c050b200120024f0d000340200120046a2c00004100480d012002200141016a2201470d000b0c020b20012002490d000b0b20002002ad422086200a84370204200020043602000c010b200041003602000b200341206a24000b120041a4820441003b0100410041021016000b3c01027f027f200145044041a48204210141010c010b4101210241a4820441013a000041a58204210141020b2103200120023a0000200020031016000b8f0101047f230041106b22022400200242808001370208200241a482043602044100200241046a100a024020022802082205200228020c2203490d00200228020421042002410036020c2002200520036b3602082002200320046a36020420002001200241046a1010200228020c220020022802084b0d00200420032002280204200010061a200241106a24000f0b000b0d00200041a4820420011007000b2d01017f2000280208220220002802044904402000200241016a360208200028020020026a20013a00000f0b000be10a020e7f017e230041306b2201240002400240100c41ff01714105470d0020014180800136022041a48204200141206a100220012802202200418180014f0d00024020004104490d00200141a8820436020c2001200041046b36021041a782042d0000210041a682042d0000210241a582042d00002104024041a482042d00002203411f47044020034105472004412c4772200241da0147200041084772720d02410021000c010b200441e70147200241c2004772200041ef0047720d01200141206a2001410c6a101220012802202200450d01200120012800253602182001200141286a28000036001b20012d002421050b2001200128001b36000720012001280218360204200142808001370224200141a482043602204100200141206a100a2001280224220320012802282202490d01200128022021042001200320026b220336022020042002200220046a2202200141206a100020032001280220220449720d012001200436021c20012002360218200141206a200141186a101220012802202202450d0120012001290224220e3702102001200236020c20000d02200141206a2002200e422088a7100d2001280220210220012802282101230041106b22002400200041808001360208200041a482043602040240200245044041a482044181023b0100410221000c010b2000410136020c41a4820441003a000020022001200041046a1010200028020c220041818001490d00000b410020001016000b410141011014000b000b200141286a2001280007360000200120053a0024200120003602202001200128020436002523004180016b22002400200141206a2202280204210320022802002105200041086a200228020822044100100e200028020c2106200028020820052004100821072001410c6a22022004360208200220063602042002200736020020004180800136021041a48204200041106a100341a482042d00002102200041356a41bc82042900003700002000412e6a41b58204290000370100200041266a41ad8204290000370100200041a5820429000037011e200020023a001d200041013a001c200020043602182000200336021420002005360210200042808001370264200041a482043602604101200041e0006a100f0240024020002802682203418180014f0d002000410036026820004180800120036b22073602642000200341a482046a2208360260418080044100200041e0006a220210102002418080044110100b2000280268220220002802644b0d0020002802602106200041d8006a22094200370300200041d0006a4200370300200041c8006a220a4200370300200042003703400240200241214f0440200041f8006a220b4200370300200041f0006a220c4200370300200041e8006a220d42003703002000420037036020062002200041e0006a10042009200b290300370300200041d0006a200c290300370300200a200d290300370300200020002903603703400c010b200041406b2006200210081a0b200041f8006a200041d8006a290300370300200041f0006a200041d0006a290300370300200041e8006a200041c8006a29030037030020002000290340370360200041003602482000200736024420002008360240200041e0006a200041406b10112003200320002802486a22024b2002418180014f720d0020004180800120026b3602642000200241a482046a2203360260200241808001460d00200341003a0000200241ffff004f0d00200341013a0001200041023602682000411d6a200041e0006a2203101120052004200310102000280268220420002802644b0d0041a48204200220002802602004100520004180016a24000c010b000b200128020c20012802141015410041001014000b830201057f230041206b2200240002400240100c41ff01714105470d0020004180800136021441a48204200041146a100220002802142201418180014f0d0020014104490d01200041a8820436020c2000200141046b36021041a782042d0000210141a682042d0000210241a582042d00002103024041a482042d0000220441ed014704402004419b0147200341ae0147722002419d0147720d03200141de00460d010c030b200341cb00472002419d0147722001411b47720d02200041146a41908004410a100d2000280214200028021c10151013000b200041146a2000410c6a101220002802142201450d012001200028021c10151013000b000b410141011014000b0bdd010200418080040b9a01477265657465723a3a4772656574656448656c6c6f20696e6b2101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010041dc81040b33020202020202020202020202020202020202020202020202020202020202030303030303030303030303030303030404040404","build_info":{"build_mode":"Release","cargo_contract_version":"3.2.0","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 "]},"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":1},"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":1},"selector":"0xed4b9d1b"}],"docs":[],"environment":{"accountId":{"displayName":["AccountId"],"type":6},"balance":{"displayName":["Balance"],"type":9},"blockNumber":{"displayName":["BlockNumber"],"type":12},"chainExtension":{"displayName":["ChainExtension"],"type":13},"hash":{"displayName":["Hash"],"type":10},"maxEventTopics":4,"timestamp":{"displayName":["Timestamp"],"type":11}},"events":[{"args":[{"docs":[],"indexed":false,"label":"from","type":{"displayName":["Option"],"type":5}},{"docs":[],"indexed":false,"label":"message","type":{"displayName":["String"],"type":0}}],"docs":[],"label":"Greeted"}],"lang_error":{"displayName":["ink","LangError"],"type":3},"messages":[{"args":[],"default":false,"docs":[" Returns the current value of `message`."],"label":"greet","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":4},"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":1},"selector":"0x1fe7426f"}]},"storage":{"root":{"layout":{"struct":{"fields":[{"layout":{"leaf":{"key":"0x00000000","ty":0}},"name":"message"}],"name":"Greeter"}},"root_key":"0x00000000"}},"types":[{"id":0,"type":{"def":{"primitive":"str"}}},{"id":1,"type":{"def":{"variant":{"variants":[{"fields":[{"type":2}],"index":0,"name":"Ok"},{"fields":[{"type":3}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":2},{"name":"E","type":3}],"path":["Result"]}},{"id":2,"type":{"def":{"tuple":[]}}},{"id":3,"type":{"def":{"variant":{"variants":[{"index":1,"name":"CouldNotReadInput"}]}},"path":["ink_primitives","LangError"]}},{"id":4,"type":{"def":{"variant":{"variants":[{"fields":[{"type":0}],"index":0,"name":"Ok"},{"fields":[{"type":3}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":0},{"name":"E","type":3}],"path":["Result"]}},{"id":5,"type":{"def":{"variant":{"variants":[{"index":0,"name":"None"},{"fields":[{"type":6}],"index":1,"name":"Some"}]}},"params":[{"name":"T","type":6}],"path":["Option"]}},{"id":6,"type":{"def":{"composite":{"fields":[{"type":7,"typeName":"[u8; 32]"}]}},"path":["ink_primitives","types","AccountId"]}},{"id":7,"type":{"def":{"array":{"len":32,"type":8}}}},{"id":8,"type":{"def":{"primitive":"u8"}}},{"id":9,"type":{"def":{"primitive":"u128"}}},{"id":10,"type":{"def":{"composite":{"fields":[{"type":7,"typeName":"[u8; 32]"}]}},"path":["ink_primitives","types","Hash"]}},{"id":11,"type":{"def":{"primitive":"u64"}}},{"id":12,"type":{"def":{"primitive":"u32"}}},{"id":13,"type":{"def":{"variant":{}},"path":["ink_env","types","NoChainExtension"]}}],"version":"4"} \ No newline at end of file diff --git a/contracts/deployments/greeter/greeter.json b/contracts/deployments/greeter/greeter.json deleted file mode 100644 index b123d6a..0000000 --- a/contracts/deployments/greeter/greeter.json +++ /dev/null @@ -1,468 +0,0 @@ -{ - "source": { - "hash": "0x586a59fc04eeb2b7d0e89b7d7ce98689f8e520a27a3522ca3b1a112f0129af9d", - "language": "ink! 4.3.0", - "compiler": "rustc 1.75.0", - "build_info": { - "build_mode": "Release", - "cargo_contract_version": "3.2.0", - "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 " - ] - }, - "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": 1 - }, - "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": 1 - }, - "selector": "0xed4b9d1b" - } - ], - "docs": [], - "environment": { - "accountId": { - "displayName": [ - "AccountId" - ], - "type": 6 - }, - "balance": { - "displayName": [ - "Balance" - ], - "type": 9 - }, - "blockNumber": { - "displayName": [ - "BlockNumber" - ], - "type": 12 - }, - "chainExtension": { - "displayName": [ - "ChainExtension" - ], - "type": 13 - }, - "hash": { - "displayName": [ - "Hash" - ], - "type": 10 - }, - "maxEventTopics": 4, - "timestamp": { - "displayName": [ - "Timestamp" - ], - "type": 11 - } - }, - "events": [ - { - "args": [ - { - "docs": [], - "indexed": false, - "label": "from", - "type": { - "displayName": [ - "Option" - ], - "type": 5 - } - }, - { - "docs": [], - "indexed": false, - "label": "message", - "type": { - "displayName": [ - "String" - ], - "type": 0 - } - } - ], - "docs": [], - "label": "Greeted" - } - ], - "lang_error": { - "displayName": [ - "ink", - "LangError" - ], - "type": 3 - }, - "messages": [ - { - "args": [], - "default": false, - "docs": [ - " Returns the current value of `message`." - ], - "label": "greet", - "mutates": false, - "payable": false, - "returnType": { - "displayName": [ - "ink", - "MessageResult" - ], - "type": 4 - }, - "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": 1 - }, - "selector": "0x1fe7426f" - } - ] - }, - "storage": { - "root": { - "layout": { - "struct": { - "fields": [ - { - "layout": { - "leaf": { - "key": "0x00000000", - "ty": 0 - } - }, - "name": "message" - } - ], - "name": "Greeter" - } - }, - "root_key": "0x00000000" - } - }, - "types": [ - { - "id": 0, - "type": { - "def": { - "primitive": "str" - } - } - }, - { - "id": 1, - "type": { - "def": { - "variant": { - "variants": [ - { - "fields": [ - { - "type": 2 - } - ], - "index": 0, - "name": "Ok" - }, - { - "fields": [ - { - "type": 3 - } - ], - "index": 1, - "name": "Err" - } - ] - } - }, - "params": [ - { - "name": "T", - "type": 2 - }, - { - "name": "E", - "type": 3 - } - ], - "path": [ - "Result" - ] - } - }, - { - "id": 2, - "type": { - "def": { - "tuple": [] - } - } - }, - { - "id": 3, - "type": { - "def": { - "variant": { - "variants": [ - { - "index": 1, - "name": "CouldNotReadInput" - } - ] - } - }, - "path": [ - "ink_primitives", - "LangError" - ] - } - }, - { - "id": 4, - "type": { - "def": { - "variant": { - "variants": [ - { - "fields": [ - { - "type": 0 - } - ], - "index": 0, - "name": "Ok" - }, - { - "fields": [ - { - "type": 3 - } - ], - "index": 1, - "name": "Err" - } - ] - } - }, - "params": [ - { - "name": "T", - "type": 0 - }, - { - "name": "E", - "type": 3 - } - ], - "path": [ - "Result" - ] - } - }, - { - "id": 5, - "type": { - "def": { - "variant": { - "variants": [ - { - "index": 0, - "name": "None" - }, - { - "fields": [ - { - "type": 6 - } - ], - "index": 1, - "name": "Some" - } - ] - } - }, - "params": [ - { - "name": "T", - "type": 6 - } - ], - "path": [ - "Option" - ] - } - }, - { - "id": 6, - "type": { - "def": { - "composite": { - "fields": [ - { - "type": 7, - "typeName": "[u8; 32]" - } - ] - } - }, - "path": [ - "ink_primitives", - "types", - "AccountId" - ] - } - }, - { - "id": 7, - "type": { - "def": { - "array": { - "len": 32, - "type": 8 - } - } - } - }, - { - "id": 8, - "type": { - "def": { - "primitive": "u8" - } - } - }, - { - "id": 9, - "type": { - "def": { - "primitive": "u128" - } - } - }, - { - "id": 10, - "type": { - "def": { - "composite": { - "fields": [ - { - "type": 7, - "typeName": "[u8; 32]" - } - ] - } - }, - "path": [ - "ink_primitives", - "types", - "Hash" - ] - } - }, - { - "id": 11, - "type": { - "def": { - "primitive": "u64" - } - } - }, - { - "id": 12, - "type": { - "def": { - "primitive": "u32" - } - } - }, - { - "id": 13, - "type": { - "def": { - "variant": {} - }, - "path": [ - "ink_env", - "types", - "NoChainExtension" - ] - } - } - ], - "version": "4" -} \ No newline at end of file diff --git a/contracts/deployments/greeter/greeter.wasm b/contracts/deployments/greeter/greeter.wasm deleted file mode 100644 index 950fc49..0000000 Binary files a/contracts/deployments/greeter/greeter.wasm and /dev/null differ diff --git a/contracts/deployments/greeter/rococo.ts b/contracts/deployments/greeter/rococo.ts deleted file mode 100644 index 5cd358c..0000000 --- a/contracts/deployments/greeter/rococo.ts +++ /dev/null @@ -1,2 +0,0 @@ -export const address = '5HT9eGQSd4en8ey5fmehiq4kjkubSh4MKcF3n8b4wZXggibV' -export const blockNumber = 3661917 diff --git a/contracts/deployments/greeter/shibuya.ts b/contracts/deployments/greeter/shibuya.ts deleted file mode 100644 index 173c26c..0000000 --- a/contracts/deployments/greeter/shibuya.ts +++ /dev/null @@ -1,2 +0,0 @@ -export const address = 'Wnng7DETEUr9Vq1Sj1FTpCHgQmBmtWPhA4fQWf3QzafNk1Y' -export const blockNumber = 4663436 diff --git a/contracts/deployments/zkdex/alephzero-testnet.ts b/contracts/deployments/zkdex/alephzero-testnet.ts new file mode 100644 index 0000000..ee46eba --- /dev/null +++ b/contracts/deployments/zkdex/alephzero-testnet.ts @@ -0,0 +1,2 @@ +export const address = '5ErCsaZAN7q71xXMbggu3hvKVTfaLe24ZDNABCiaqGZMZapB' +export const blockNumber = 52007271 diff --git a/contracts/deployments/zkdex/zkdex.contract b/contracts/deployments/zkdex/zkdex.contract new file mode 100644 index 0000000..3a55f34 --- /dev/null +++ b/contracts/deployments/zkdex/zkdex.contract @@ -0,0 +1 @@ +{"source":{"hash":"0x7ba759d6e522cb8b4c54f20cbc0b4a1a476365618e0abeca3aa0383d626eef84","language":"ink! 4.3.0","compiler":"rustc 1.75.0","wasm":"0x0061736d0100000001420c60027f7f0060027f7f017f60000060047f7f7f7f017f60037f7f7f0060017f017f60017f0060037f7f7f017f60047f7f7f7f0060037e7e7f006000017e6000017f02b9010a057365616c310b6765745f73746f726167650003057365616c301176616c75655f7472616e736665727265640000057365616c30036e6f770000057365616c3005696e7075740000057365616c300663616c6c65720000057365616c30087472616e736665720003057365616c320b7365745f73746f726167650003057365616c3110636f6e7461696e735f73746f726167650001057365616c300b7365616c5f72657475726e000403656e76066d656d6f7279020102100328270707000000000000000501050004000000090a060b0601040000000500080800020206000202010608017f01418080040b0711020463616c6c002d066465706c6f79002e0aab48272b01017f037f2002200346047f200005200020036a200120036a2d00003a0000200341016a21030c010b0b0b8e0101017f20002d00042103200041003a0004027f0240200304402001200041056a2d00003a00004101200028020022002802042203200241016b2202490d021a200141016a20002802002201200210091a0c010b41012000280200220028020422032002490d011a200120002802002201200210091a0b2000200320026b3602042000200120026a36020041000b0b8207020b7f047e230041e0016b2203240020034280800137027420034190820436027041c7fadd9f07200341f0006a2202100c20012002100c02402003280274220420032802782201490d00200328027021022003200420016b220436027020022001200120026a2201200341f0006a10002102200420032802702205490d0002400240024020020e0400030301030b200320053602dc01200320013602d801200341f0006a210223004180016b22012400200141c8006a200341d8016a2204102202400240024002400240024002402001280248450440200428020422054120490d01200128024c21062004200541206b36020420042004280200220541206a360200200141d8006a200541086a290000370300200141e0006a200541106a290000370300200141e8006a200541186a29000037030020012005290000370350200141306a2004102320012802300d02200141406b290300210d2001290338210e200141186a2004102320012802180d03200141286a290300210f20012903202110200141106a2004101920012d00104101710d0420012d0011220541034f0d04200141f4006a2004102520012802742207450d05200128027c210820012802782109200141f4006a200410252001280274220a450d06200128027c210b2001280278210c200141086a200410222001280208450440200128020c2104200220103703302002200e37032020022001290350370000200220083602482002200936024420022007360240200220053a0060200220063602582002200b3602542002200c3602502002200a36024c200241386a200f370300200241286a200d3703002002200436025c200241186a200141e8006a290300370000200241106a200141e0006a290300370000200241086a200141d8006a2903003700000c080b200241033a00600c070b200241033a00600c060b200241033a00600c050b200241033a00600c040b200241033a00600c030b200241033a00600c020b200241033a00600c010b200241033a00600b20014180016a240020032d00d00122014103460d0220032d00702102200341116a200341f0006a41017241df0010091a2003200341d4016a28000036000b200320032800d1013602080c010b41032101410021020b200020023a0000200041016a200341116a41df0010091a200020013a006020002003280208360061200041e4006a200328000b360000200341e0016a24000f0b000b2601017f230041106b220224002002200036020c20012002410c6a41041016200241106a24000bb90402067f027e23004180016b2202240020024280800137024420024190820436024041eab0cbd904200241406b2203100c20012003100c02402002280244220420022802482201490d00200228024021032002200420016b220436024020032001200120036a2201200241406b10002103200420022802402205490d0002400240024020030e0400030301030b2002200536027c20022001360278200241406b2101230041206b22032400024002400240200241f8006a2204280204220541204f04402004200541206b36020420042004280200220541206a360200200341186a2004102220032802180d01200328021c210620041024220741ff01714104460d022003200410232003290300a7450440200341106a290300210820032903082109200120073a0034200120063602302001200937032020012005290000370000200141286a2008370300200141186a200541186a290000370000200141106a200541106a290000370000200141086a200541086a2900003700000c040b200141043a00340c030b200141043a00340c020b200141043a00340c010b200141043a00340b200341206a240020022d007422014104460d0220022d004021032002410d6a200241406b410172413310091a2002410c6a200241f7006a2d00003a0000200220022f00753b010a0c010b41042101410021030b200020033a0000200041016a2002410d6a413310091a200020013a0034200020022f010a3b0035200041376a2002410c6a2d00003a000020024180016a24000f0b000b990101037f230041106b2202240020024280800137020820024190820436020441c7fadd9f07200241046a2203100c20002003100c024020022802082204200228020c2200490d00200228020421032002410036020c2002200420006b3602082002200020036a3602042001200241046a100f200228020c220120022802084b0d00200320002002280204200110061a200241106a24000f0b000b690020002802582001100c2000200110152000290320200041286a2903002001101a2000290330200041386a2903002001101a200120002d006010182000280240200041c8006a28020020011020200028024c200041d4006a28020020011020200028025c2001100c0b990101037f230041106b2202240020024280800137020820024190820436020441eab0cbd904200241046a2203100c20002003100c024020022802082204200228020c2200490d00200228020421032002410036020c2002200420006b3602082002200020036a3602042001200241046a1011200228020c220120022802084b0d00200320002002280204200110061a200241106a24000f0b000b2b0020002001101520002802302001100c200120002d003410182000290320200041286a2903002001101a0b0d0041808004200010134100470b5801017f230041106b220224002002428080013702082002419082043602042000200241046a22001021200120001021200228020c220020022802084b0440000b2002280204200010072100200241106a24002000417f470b0d0041848004200010134100470b0a0020012000412010160b4801027f024002402000280208220320026a22042003490d00200420002802044b0d00200420036b2002470d01200028020020036a2001200210091a200020043602080f0b000b000b7401017f230041106b2202240002402001413f4d04402000200141027410180c010b200141ffff004d0440200220014102744101723b010e20002002410e6a410210160c010b200141ffffffff034d044020014102744102722000100c0c010b20004103101820012000100c0b200241106a24000b2d01017f2000280208220220002802044904402000200241016a360208200028020020026a20013a00000f0b000b3c01017f200020012802042202047f2001200241016b36020420012001280200220141016a36020020012d00000520010b3a000120002002453a00000b2a01017f230041106b2203240020032001370308200320003703002002200341101016200341106a24000b3602017f017e230041106b22002400200042003703002000410836020c20002000410c6a100220002903002101200041106a240020010b6d01017f230041106b2201240020014180800136020c419082042001410c6a1004200041918204290000370001200041096a41998204290000370000200041116a41a18204290000370000200041186a41a882042900003700002000419082042d00003a0000200141106a24000b3602017f027e230041106b220024002000101e200041086a290300210120002903002102200041106a2400410541042001200284501b0b4c02017f017e230041206b2201240020014200370308200142003703002001411036021c20012001411c6a1001200129030021022000200129030837030820002002370300200141206a24000b4801037f027f41202102034041002002450d011a200241016b210220012d0000210320002d00002104200041016a2100200141016a210120032004460d000b200420036b0b4100470b100020022001101720022000200110160b0b0020002802002001100c0b4601017f20012802042202410449047f4101052001200241046b36020420012001280200220141046a3602002001280000210241000b210120002002360204200020013602000b5c02017f037e20012802042202411049047e4201052001200241106b36020420012001280200220141106a360200200141086a29000021032001290000210442000b21052000200437030820002005370300200041106a20033703000b3d01027f230041106b22012400200141086a2000101920012d0009210020012d00082102200141106a2400410441042000200041044f1b20024101711b0bce0701087f230041206b22032400200341106a2001101902400240024020032d00104101710d000240024002400240024020032d0011220241037141016b0e03010203000b200241fc017141027621020c030b200341196a20023a0000200341013a001820032001360214200341003b011c200341146a2003411c6a4102100a0d0320032f011c220241ff014d0d03200241027621020c020b200341196a20023a0000200341013a0018200320013602142003410036021c200341146a2003411c6a4104100a0d02200328021c220241808004490d02200241027621020c010b200241044f0d01200341086a2001102220032802080d01200328020c2202418080808004490d010b200128020422062002490d00024002402002450440410121040c010b20024100480d012003410120024101102720032802002204450d01200128020421060b200220064b0d012004200128020022052002100921042001200620026b3602042001200220056a3602002002450d02200241076b22014100200120024d1b2108200441036a417c7120046b21094100210103400240024002400240024002400240024002400240200120046a2d00002206411874411875220741004804402006418880046a2d000041026b0e03030102080b200920016b410371450440200120084f0d090340200120046a220641046a280200200628020072418081828478710d0a2008200141086a22014b0d000b0c090b200141016a21010c090b200141016a220520024f0d06200420056a2c000021050240200641e001470440200641ed01460d012007411f6a41ff0171410c490d042007417e71416e470d0820054140480d050c080b200541607141a07f460d040c070b2005419f7f4a0d060c030b200141016a220520024f0d05200420056a2c000021050240024002400240200641f0016b0e050100000002000b2007410f6a41ff017141024b0d0820054140480d020c080b200541f0006a41ff01714130490d010c070b2005418f7f4a0d060b200141026a220620024f0d05200420066a2c000041bf7f4a0d05200141036a220120024f0d05200120046a2c000041bf7f4a0d050c040b200141016a22012002490d020c040b200541404e0d030b200141026a220120024f0d02200120046a2c000041bf7f4c0d010c020b200120046a2c000041bf7f4a0d010b200141016a21010c020b200041003602000c060b200120024f0d000340200120046a2c00004100480d012002200141016a2201470d000b0c040b20012002490d000b0c020b000b200041003602000c010b20002002ad4281808080107e370204200020043602000b200341206a24000bec0101037f230041106b220424002000027f024002402001044020024100480d01027f20032802040440200341086a2802002205450440200441086a200120024100102720042802082103200428020c0c020b20032802002106024020012002102f2203450440410021030c010b20032006200510091a0b20020c010b200420012002410010272004280200210320042802040b21052003044020002003360204200041086a200536020041000c040b20002001360204200041086a20023602000c020b20004100360204200041086a20023602000c010b200041003602040b41010b360200200441106a24000b2b00200204402003450440419082052d00001a0b20012002102f21010b20002002360204200020013602000b4401027f4190820441003a000041012103200141ff017141064704404191820441013a000041022103200121020b2003419082046a20023a00002000200341016a102c000b12004190820441003b010041004102102c000b1300419082044181023b010041014102102c000b8d0101047f230041106b220124002001428080013702082001419082043602044100200141046a100c024020012802082204200128020c2202490d00200128020421032001410036020c2001200420026b3602082001200220036a3602042000200141046a100c200128020c220020012802084b0d00200320022001280204200010061a200141106a24000f0b000b0d0020004190820420011008000bda20020b7f047e230041b0036b220024002000418080013602c80241908204200041c8026a10030240027f0240027f0240027f0240024020002802c8022201418180014f0d000240027f0240024020014104490d00200141046b2105419382042d00002102419282042d00002103419182042d00002104027f024002400240024002400240419082042d0000220641e5016b0e050107070702000b200641d801460d042006411d460d030240024020064131470440200641c700460d052006419701460d01200641ad01460d022006410647200441114772200341cb01472002413a4772720d094100210441002103410021020c0c0b2004418c0147200341f8004772200241a50147720d08410121020c090b200441aa0147200341e9004772200241b00147200541044972720d0720004198820436025841948204280200220441807e71210341020c060b2004418a0147200341e2014772200241dd0147720d06410321020c070b200441e701472003410b47722002413247200541104972720d05200041a482043602582000200141146b36025c419c8204290200210c41948204290200210d200041f8006a200041d8006a102520002802782201450d05200029027c210b200041e0016a200041d8006a102520002802e001450d05200028025c41034d0d05200041c8016a200041e8016a280200360200200041d1026a200c420888220e3e0000200041d7026a200e4230883c0000200041d5026a200e4220883d0000200020002902e0013703c0014104210220002000280258220341046a3602582000200c423886200d420888843700c9022000200d3c00c802200b422088a721082003280000210741002104410021030c080b2004410b47200341ff004772200241f60147200541044972720d0420004198820436025841948204280200220441807e71210341050c030b200441eb0147200341c60147722002413b4720054104497272200141186b41704f720d03200041a882043602582000200141186b36025c2000419882042902003703d0022000419482042802003602c80241a48204350200210b41a0820428020021014106210241000c050b200441ba0147200341f20047722002411447200541044972720d022000419882043602582000200141086b36025c41948204280200220441807e71210341070c010b200441d90047200341054772200241e90047200541044972720d012000419882043602582000200141086b36025c419482042802002104200041d8006a1024220141ff01714104460d01200020013a00c802200441807e71210341080b21020c030b102a000b41000b2104410021030b200041406b200041d0026a290300370300200041306a200041c8016a280200360200200020002903c8023703382000200b3e024c20002001360248200020002903c0013703282000428080013702cc022000419082043602c8024100200041c8026a100c20002802cc02220520002802d0022201490d0020002802c80221062000200520016b22053602c80220062001200120066a2206200041c8026a1000200520002802c802220149722001410449720d002003200441ff017172210120062800002104024002400240024002400240024002400240200241016b0e080208030004050607010b200041406b290300210b2000290338210c200041c8026a2201101c200041186a101e20004180036a200b37030020004190036a2008360200200041f0026a200041206a2903003703002000419c036a200041306a2802003602002000200c3703f802200020043602a003200041003a00a803200020073602a403200020002903183703e8022000200029034837038803200020002903283702940320042001100e200441016a2200450d082000102b1029000b101d41ff01714105470d07200041c8026a21084100210241002106230041e0016b220124002001410036020c200142083702040240024020040440410821030340200141f8006a2006100b20012d00d8014103460d02200141106a200141f8006a41e80010091a20012802082002460440200141046a2105230041206b2203240002400240200241016a2207450d00200528020422024100480d00410420024101742209200720072009491b2207200741044d1b220741e8006c2109200741b2a7ec0949410374210a02402002450440200341003602180c010b200341083602182003200241e8006c36021c200320052802003602140b200341086a200a2009200341146a10262003280208450d01200328020c1a0b000b200328020c21022005200736020420052002360200200341206a240020012802042103200128020c21020b2003200241e8006c6a200141106a41e80010091a200241016a2202450d022001200236020c2004200641016a2206470d000b0b20082001290204370200200841086a2001410c6a280200360200200141e0016a24000c010b000b20002802c802210120002802d0022102230041106b220024002000418080013602082000419082043602040240200104402000410136020c4190820441003a0000200041046a2002101720020440200241e8006c210203402001200041046a100f200141e8006a2101200241e8006b22020d000b0b200028020c220141818001490d01000b419082044181023b0100410221010b41002001102c000b101d41ff01714105470d06200041c8026a2108410021024100210623004180016b220124002001410036020c200142083702040240024020040440410821030340200141c8006a2006100d20012d007c4104460d02200141106a200141c8006a413810091a20012802082002460440200141046a2105230041206b2203240002400240200241016a2207450d00200528020422024100480d00410420024101742209200720072009491b2207200741044d1b220741386c210920074193c9a41249410374210a02402002450440200341003602180c010b200341083602182003200241386c36021c200320052802003602140b200341086a200a2009200341146a10262003280208450d01200328020c1a0b000b200328020c21022005200736020420052002360200200341206a240020012802042103200128020c21020b2003200241386c6a200141106a413810091a200241016a2202450d022001200236020c2004200641016a2206470d000b0b20082001290204370200200841086a2001410c6a28020036020020014180016a24000c010b000b20002802c802210120002802d0022102230041106b220024002000418080013602082000419082043602040240200104402000410136020c4190820441003a0000200041046a2002101720020440200241386c210203402001200041046a1011200141386a2101200241386b22020d000b0b200028020c220141818001490d01000b419082044181023b0100410221010b41002001102c000b101d41ff01714105470d05101b210b200041086a220142003703082001200b3703002000290308210b200041106a290300210c230041106b220024002000419082043602044190820441003a00002000428080818010370208200b200c200041046a101a200028020c2200418180014f0440000b41002000102c000b101d41ff01714105470d0420002001360254200041d8006a101c41042101200041d4006a1012450d09200041c8026a2000280254100b20002d00a8034103460d04200041e0016a2202200041c8026a41e80010091a410521012002200041d8006a101f0d09200041c8026a2000280254100b20002d00a80322024103460d044100210120020d09200041d4006a10140440200041c8026a2000280254100d20002d00fc024104460d05200041f0026a290300210b4103210120002903e802101b56200b420052200b501b0d0a0b200041c8026a2000280254100b20002d00a8034103460d04200041e0016a2201200041c8026a220241e80010091a200041023a00c00220002802542001100e20022000280254100b20002d00a8034103460d04200041f8006a200041c8026a220141c40010091a200041c8016a20004180016a290300370300200041d0016a20004188016a290300370300200041d8016a20004190016a290300370300200020002903783703c00120012000280254100b20002d00a8034103460d04200041f0026a290300210b20002903e802210c2000428080013702cc022000419082043602c802200041c0016a200041c8026a101520002802cc02220320002802d0022201490d0420002802c8022102200041003602d0022000200320016b3602cc022000200120026a3602c802200c200b200041c8026a101a20002802d002220320002802cc024b0d042002200120002802c802200310050d042004102b4106210141000c0a0b200041c8006a290300210b2000290340210c20002802382101101d41ff01714105470d0320002001360278200041e0016a101c41042101027f02400240200041f8006a1012450d00200041c8026a2000280278100b20002d00a80322024103460d064100210120020d00200041f8006a1014450d01200041c8026a2000280278100d20002d00fc024104460d06200041f0026a290300210d4103210120002903e802101b58200d50220220021b0d010b41010c010b20002802782101200041f0026a200b370300200041e0026a200041f8016a290000370300200041d8026a200041f0016a290000370300200041d0026a200041e8016a2900003703002000200c3703e802200020002900e0013703c802200041003a00fc02200020013602f8022001200041c8026a10102004102b4106210141000b20011028000b101d41ff01714105470d02200020013602c001200041f8006a101c41032101200041c0016a1014450d05200041c8026a20002802c001100d20002d00fc024104460d02200041e0016a2202200041c8026a413810091a410521012002200041f8006a101f0d05200041c8026a20002802c001100d20002d00fc0222024104460d024100210120020d05200041c8026a20002802c001100d20002d00fc024104460d02200041e0016a2201200041c8026a413810091a200041033a00940220002802c001200110102004102b4106210141000c060b20002d00382102101d41ff01714105470d0120002001360258200041c0016a101c41032101200041d8006a1014450d02200041c8026a2000280258100d20002d00fc0222034104460d014100210120030d02200041c8026a2000280258100d20002d00fc0222034104460d0120034101470d02200041c8026a2000280258100d20002d00fc024104460d01200041f8006a2201200041c8026a413810091a200020023a00ac0120002802582001101020024102460440200041c8026a20002802a8012201100b20002d00a8034103460d02200041e0016a2202200041c8026a41e80010091a200041013a00c00220012002100e0b2004102b4106210141000c030b101d41ff01714105460d070b000b41010b20011028000b41010b20011028000b41010b20011028000b230041f0006b22022400200241086a2001100b20022d00684103460440000b200041c8026a2200200241086a41e80010091a200241f0006a2400230041106b22012400200141808001360208200141908204360204024020002d00604103460440419082044181023b0100410221000c010b2001410136020c4190820441003a00002000200141046a100f200128020c220041818001490d00000b41002000102c000b840101017f230041106b2200240002400240101d41ff01714105470d0020004180800136020c419082042000410c6a1003200028020c2200418180014f0d00200041044f0440419082042d000041ed0147419182042d000041cb004772419282042d0000419d014772419382042d0000411b4772450d020b102a000b000b4100102b1029000ba00101027f02402001200020016a41016b410020006b7122004d0440024041888204280200220120006a22032001490d00418c82042802002003490440200041ffff036a22022000490d0320024110764000220141ffff034b0d032001411074220120024180807c716a22032001490d0341002102418c82042003360200200020016a22032001490d010b418882042003360200200121020b20020f0b000b41000b0bcb010200418080040b8801477df7736ad8324b01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010041ca81040b33020202020202020202020202020202020202020202020202020202020202030303030303030303030303030303030404040404","build_info":{"build_mode":"Release","cargo_contract_version":"3.2.0","rust_toolchain":"stable-aarch64-apple-darwin","wasm_opt_settings":{"keep_debug_symbols":false,"optimization_passes":"Z"}}},"contract":{"name":"zkdex","version":"0.0.1","authors":["AE Studio"]},"spec":{"constructors":[{"args":[],"default":false,"docs":["Create new instance of ZKDex contract."],"label":"default","payable":false,"returnType":{"displayName":["ink_primitives","ConstructorResult"],"type":6},"selector":"0xed4b9d1b"}],"docs":[],"environment":{"accountId":{"displayName":["AccountId"],"type":1},"balance":{"displayName":["Balance"],"type":4},"blockNumber":{"displayName":["BlockNumber"],"type":0},"chainExtension":{"displayName":["ChainExtension"],"type":26},"hash":{"displayName":["Hash"],"type":24},"maxEventTopics":4,"timestamp":{"displayName":["Timestamp"],"type":25}},"events":[],"lang_error":{"displayName":["ink","LangError"],"type":8},"messages":[{"args":[],"default":false,"docs":[" Get all orders."," Returns an empty vector if there are no orders."],"label":"get_all_orders","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":9},"selector":"0x0611cb3a"},{"args":[],"default":false,"docs":[" Get all orders claim."],"label":"get_all_orders_claim","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":13},"selector":"0x318c78a5"},{"args":[{"label":"index","type":{"displayName":["u32"],"type":0}}],"default":false,"docs":[" Get an order by its index."," Returns an error if the order does not exist."],"label":"get_order","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":17},"selector":"0x97aa69b0"},{"args":[],"default":false,"docs":[" Get the current block timestamp."],"label":"get_time","mutates":false,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":18},"selector":"0xad8ae2dd"},{"args":[{"label":"amount_to_receive","type":{"displayName":["Balance"],"type":4}},{"label":"payment_key","type":{"displayName":["String"],"type":5}},{"label":"hash_name","type":{"displayName":["String"],"type":5}},{"label":"name_length","type":{"displayName":["u32"],"type":0}}],"default":false,"docs":[" Create a new liquidity pool order, which will be filled by a buyer."," The order is created by the seller, who deposits the amount of tokens"," they want to sell into the contract."],"label":"create_order","mutates":true,"payable":true,"returnType":{"displayName":["ink","MessageResult"],"type":19},"selector":"0xe5e70b32"},{"args":[{"label":"index","type":{"displayName":["u32"],"type":0}}],"default":false,"docs":[" Cancel an order that has not been filled yet."," The seller can cancel an order at any time, and the tokens they deposited"," will be returned to them."],"label":"cancel_order","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":21},"selector":"0xe90b7ff6"},{"args":[{"label":"index","type":{"displayName":["u32"],"type":0}},{"label":"claim_expiration_time","type":{"displayName":["u128"],"type":4}}],"default":false,"docs":[" Claim an order that has not been filled yet."],"label":"claim_order","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":21},"selector":"0x47ebc63b"},{"args":[{"label":"index","type":{"displayName":["u32"],"type":0}}],"default":false,"docs":[" Cancel a claimed order that has not been filled yet."," The buyer can cancel an order at any time, and it will be removed from the"," order book."],"label":"cancel_claim_order","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":21},"selector":"0x1dba7214"},{"args":[{"label":"index_claim_order","type":{"displayName":["u32"],"type":0}},{"label":"status","type":{"displayName":["ClaimStatus"],"type":16}}],"default":false,"docs":[],"label":"update_claim_order_status","mutates":true,"payable":false,"returnType":{"displayName":["ink","MessageResult"],"type":21},"selector":"0xd8590569"}]},"storage":{"root":{"layout":{"struct":{"fields":[{"layout":{"root":{"layout":{"struct":{"fields":[{"layout":{"leaf":{"key":"0x73f77d47","ty":0}},"name":"id"},{"layout":{"leaf":{"key":"0x73f77d47","ty":1}},"name":"owner"},{"layout":{"leaf":{"key":"0x73f77d47","ty":4}},"name":"deposited"},{"layout":{"leaf":{"key":"0x73f77d47","ty":4}},"name":"amount_to_receive"},{"layout":{"enum":{"dispatchKey":"0x73f77d47","name":"OrderStatus","variants":{"0":{"fields":[],"name":"Open"},"1":{"fields":[],"name":"Filled"},"2":{"fields":[],"name":"Canceled"}}}},"name":"status"},{"layout":{"leaf":{"key":"0x73f77d47","ty":5}},"name":"payment_key"},{"layout":{"leaf":{"key":"0x73f77d47","ty":5}},"name":"hash_name"},{"layout":{"leaf":{"key":"0x73f77d47","ty":0}},"name":"name_length"}],"name":"Order"}},"root_key":"0x73f77d47"}},"name":"orders"},{"layout":{"root":{"layout":{"struct":{"fields":[{"layout":{"leaf":{"key":"0x4b32d86a","ty":1}},"name":"buyer"},{"layout":{"leaf":{"key":"0x4b32d86a","ty":0}},"name":"order_index"},{"layout":{"enum":{"dispatchKey":"0x4b32d86a","name":"ClaimStatus","variants":{"0":{"fields":[],"name":"WaitingForBuyerProof"},"1":{"fields":[],"name":"WaitingForSellerProof"},"2":{"fields":[],"name":"Filled"},"3":{"fields":[],"name":"Canceled"}}}},"name":"status"},{"layout":{"leaf":{"key":"0x4b32d86a","ty":4}},"name":"claim_expiration_time"}],"name":"OrderClaim"}},"root_key":"0x4b32d86a"}},"name":"orders_claim"},{"layout":{"leaf":{"key":"0x00000000","ty":0}},"name":"next_order_nonce"}],"name":"ZKDex"}},"root_key":"0x00000000"}},"types":[{"id":0,"type":{"def":{"primitive":"u32"}}},{"id":1,"type":{"def":{"composite":{"fields":[{"type":2,"typeName":"[u8; 32]"}]}},"path":["ink_primitives","types","AccountId"]}},{"id":2,"type":{"def":{"array":{"len":32,"type":3}}}},{"id":3,"type":{"def":{"primitive":"u8"}}},{"id":4,"type":{"def":{"primitive":"u128"}}},{"id":5,"type":{"def":{"primitive":"str"}}},{"id":6,"type":{"def":{"variant":{"variants":[{"fields":[{"type":7}],"index":0,"name":"Ok"},{"fields":[{"type":8}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":7},{"name":"E","type":8}],"path":["Result"]}},{"id":7,"type":{"def":{"tuple":[]}}},{"id":8,"type":{"def":{"variant":{"variants":[{"index":1,"name":"CouldNotReadInput"}]}},"path":["ink_primitives","LangError"]}},{"id":9,"type":{"def":{"variant":{"variants":[{"fields":[{"type":10}],"index":0,"name":"Ok"},{"fields":[{"type":8}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":10},{"name":"E","type":8}],"path":["Result"]}},{"id":10,"type":{"def":{"sequence":{"type":11}}}},{"id":11,"type":{"def":{"composite":{"fields":[{"name":"id","type":0,"typeName":"u32"},{"name":"owner","type":1,"typeName":"AccountId"},{"name":"deposited","type":4,"typeName":"Balance"},{"name":"amount_to_receive","type":4,"typeName":"Balance"},{"name":"status","type":12,"typeName":"OrderStatus"},{"name":"payment_key","type":5,"typeName":"String"},{"name":"hash_name","type":5,"typeName":"String"},{"name":"name_length","type":0,"typeName":"u32"}]}},"path":["zkdex","zkdex","Order"]}},{"id":12,"type":{"def":{"variant":{"variants":[{"index":0,"name":"Open"},{"index":1,"name":"Filled"},{"index":2,"name":"Canceled"}]}},"path":["zkdex","zkdex","OrderStatus"]}},{"id":13,"type":{"def":{"variant":{"variants":[{"fields":[{"type":14}],"index":0,"name":"Ok"},{"fields":[{"type":8}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":14},{"name":"E","type":8}],"path":["Result"]}},{"id":14,"type":{"def":{"sequence":{"type":15}}}},{"id":15,"type":{"def":{"composite":{"fields":[{"name":"buyer","type":1,"typeName":"AccountId"},{"name":"order_index","type":0,"typeName":"u32"},{"name":"status","type":16,"typeName":"ClaimStatus"},{"name":"claim_expiration_time","type":4,"typeName":"u128"}]}},"path":["zkdex","zkdex","OrderClaim"]}},{"id":16,"type":{"def":{"variant":{"variants":[{"index":0,"name":"WaitingForBuyerProof"},{"index":1,"name":"WaitingForSellerProof"},{"index":2,"name":"Filled"},{"index":3,"name":"Canceled"}]}},"path":["zkdex","zkdex","ClaimStatus"]}},{"id":17,"type":{"def":{"variant":{"variants":[{"fields":[{"type":11}],"index":0,"name":"Ok"},{"fields":[{"type":8}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":11},{"name":"E","type":8}],"path":["Result"]}},{"id":18,"type":{"def":{"variant":{"variants":[{"fields":[{"type":4}],"index":0,"name":"Ok"},{"fields":[{"type":8}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":4},{"name":"E","type":8}],"path":["Result"]}},{"id":19,"type":{"def":{"variant":{"variants":[{"fields":[{"type":20}],"index":0,"name":"Ok"},{"fields":[{"type":8}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":20},{"name":"E","type":8}],"path":["Result"]}},{"id":20,"type":{"def":{"variant":{"variants":[{"fields":[{"type":7}],"index":0,"name":"Ok"},{"fields":[{"type":7}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":7},{"name":"E","type":7}],"path":["Result"]}},{"id":21,"type":{"def":{"variant":{"variants":[{"fields":[{"type":22}],"index":0,"name":"Ok"},{"fields":[{"type":8}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":22},{"name":"E","type":8}],"path":["Result"]}},{"id":22,"type":{"def":{"variant":{"variants":[{"fields":[{"type":7}],"index":0,"name":"Ok"},{"fields":[{"type":23}],"index":1,"name":"Err"}]}},"params":[{"name":"T","type":7},{"name":"E","type":23}],"path":["Result"]}},{"id":23,"type":{"def":{"variant":{"variants":[{"index":0,"name":"StatusCanNotBeChanged"},{"index":1,"name":"OrderCancelled"},{"index":2,"name":"OrderFinalised"},{"index":3,"name":"OrderClaimed"},{"index":4,"name":"OrderNotFound"},{"index":5,"name":"Unauthorised"}]}},"path":["zkdex","zkdex","EscrowError"]}},{"id":24,"type":{"def":{"composite":{"fields":[{"type":2,"typeName":"[u8; 32]"}]}},"path":["ink_primitives","types","Hash"]}},{"id":25,"type":{"def":{"primitive":"u64"}}},{"id":26,"type":{"def":{"variant":{}},"path":["ink_env","types","NoChainExtension"]}}],"version":"4"} \ No newline at end of file diff --git a/contracts/deployments/zkdex/zkdex.json b/contracts/deployments/zkdex/zkdex.json new file mode 100644 index 0000000..5f4868f --- /dev/null +++ b/contracts/deployments/zkdex/zkdex.json @@ -0,0 +1,1282 @@ +{ + "source": { + "hash": "0x7ba759d6e522cb8b4c54f20cbc0b4a1a476365618e0abeca3aa0383d626eef84", + "language": "ink! 4.3.0", + "compiler": "rustc 1.75.0", + "build_info": { + "build_mode": "Release", + "cargo_contract_version": "3.2.0", + "rust_toolchain": "stable-aarch64-apple-darwin", + "wasm_opt_settings": { + "keep_debug_symbols": false, + "optimization_passes": "Z" + } + } + }, + "contract": { + "name": "zkdex", + "version": "0.0.1", + "authors": [ + "AE Studio" + ] + }, + "spec": { + "constructors": [ + { + "args": [], + "default": false, + "docs": [ + "Create new instance of ZKDex contract." + ], + "label": "default", + "payable": false, + "returnType": { + "displayName": [ + "ink_primitives", + "ConstructorResult" + ], + "type": 6 + }, + "selector": "0xed4b9d1b" + } + ], + "docs": [], + "environment": { + "accountId": { + "displayName": [ + "AccountId" + ], + "type": 1 + }, + "balance": { + "displayName": [ + "Balance" + ], + "type": 4 + }, + "blockNumber": { + "displayName": [ + "BlockNumber" + ], + "type": 0 + }, + "chainExtension": { + "displayName": [ + "ChainExtension" + ], + "type": 26 + }, + "hash": { + "displayName": [ + "Hash" + ], + "type": 24 + }, + "maxEventTopics": 4, + "timestamp": { + "displayName": [ + "Timestamp" + ], + "type": 25 + } + }, + "events": [], + "lang_error": { + "displayName": [ + "ink", + "LangError" + ], + "type": 8 + }, + "messages": [ + { + "args": [], + "default": false, + "docs": [ + " Get all orders.", + " Returns an empty vector if there are no orders." + ], + "label": "get_all_orders", + "mutates": false, + "payable": false, + "returnType": { + "displayName": [ + "ink", + "MessageResult" + ], + "type": 9 + }, + "selector": "0x0611cb3a" + }, + { + "args": [], + "default": false, + "docs": [ + " Get all orders claim." + ], + "label": "get_all_orders_claim", + "mutates": false, + "payable": false, + "returnType": { + "displayName": [ + "ink", + "MessageResult" + ], + "type": 13 + }, + "selector": "0x318c78a5" + }, + { + "args": [ + { + "label": "index", + "type": { + "displayName": [ + "u32" + ], + "type": 0 + } + } + ], + "default": false, + "docs": [ + " Get an order by its index.", + " Returns an error if the order does not exist." + ], + "label": "get_order", + "mutates": false, + "payable": false, + "returnType": { + "displayName": [ + "ink", + "MessageResult" + ], + "type": 17 + }, + "selector": "0x97aa69b0" + }, + { + "args": [], + "default": false, + "docs": [ + " Get the current block timestamp." + ], + "label": "get_time", + "mutates": false, + "payable": false, + "returnType": { + "displayName": [ + "ink", + "MessageResult" + ], + "type": 18 + }, + "selector": "0xad8ae2dd" + }, + { + "args": [ + { + "label": "amount_to_receive", + "type": { + "displayName": [ + "Balance" + ], + "type": 4 + } + }, + { + "label": "payment_key", + "type": { + "displayName": [ + "String" + ], + "type": 5 + } + }, + { + "label": "hash_name", + "type": { + "displayName": [ + "String" + ], + "type": 5 + } + }, + { + "label": "name_length", + "type": { + "displayName": [ + "u32" + ], + "type": 0 + } + } + ], + "default": false, + "docs": [ + " Create a new liquidity pool order, which will be filled by a buyer.", + " The order is created by the seller, who deposits the amount of tokens", + " they want to sell into the contract." + ], + "label": "create_order", + "mutates": true, + "payable": true, + "returnType": { + "displayName": [ + "ink", + "MessageResult" + ], + "type": 19 + }, + "selector": "0xe5e70b32" + }, + { + "args": [ + { + "label": "index", + "type": { + "displayName": [ + "u32" + ], + "type": 0 + } + } + ], + "default": false, + "docs": [ + " Cancel an order that has not been filled yet.", + " The seller can cancel an order at any time, and the tokens they deposited", + " will be returned to them." + ], + "label": "cancel_order", + "mutates": true, + "payable": false, + "returnType": { + "displayName": [ + "ink", + "MessageResult" + ], + "type": 21 + }, + "selector": "0xe90b7ff6" + }, + { + "args": [ + { + "label": "index", + "type": { + "displayName": [ + "u32" + ], + "type": 0 + } + }, + { + "label": "claim_expiration_time", + "type": { + "displayName": [ + "u128" + ], + "type": 4 + } + } + ], + "default": false, + "docs": [ + " Claim an order that has not been filled yet." + ], + "label": "claim_order", + "mutates": true, + "payable": false, + "returnType": { + "displayName": [ + "ink", + "MessageResult" + ], + "type": 21 + }, + "selector": "0x47ebc63b" + }, + { + "args": [ + { + "label": "index", + "type": { + "displayName": [ + "u32" + ], + "type": 0 + } + } + ], + "default": false, + "docs": [ + " Cancel a claimed order that has not been filled yet.", + " The buyer can cancel an order at any time, and it will be removed from the", + " order book." + ], + "label": "cancel_claim_order", + "mutates": true, + "payable": false, + "returnType": { + "displayName": [ + "ink", + "MessageResult" + ], + "type": 21 + }, + "selector": "0x1dba7214" + }, + { + "args": [ + { + "label": "index_claim_order", + "type": { + "displayName": [ + "u32" + ], + "type": 0 + } + }, + { + "label": "status", + "type": { + "displayName": [ + "ClaimStatus" + ], + "type": 16 + } + } + ], + "default": false, + "docs": [], + "label": "update_claim_order_status", + "mutates": true, + "payable": false, + "returnType": { + "displayName": [ + "ink", + "MessageResult" + ], + "type": 21 + }, + "selector": "0xd8590569" + } + ] + }, + "storage": { + "root": { + "layout": { + "struct": { + "fields": [ + { + "layout": { + "root": { + "layout": { + "struct": { + "fields": [ + { + "layout": { + "leaf": { + "key": "0x73f77d47", + "ty": 0 + } + }, + "name": "id" + }, + { + "layout": { + "leaf": { + "key": "0x73f77d47", + "ty": 1 + } + }, + "name": "owner" + }, + { + "layout": { + "leaf": { + "key": "0x73f77d47", + "ty": 4 + } + }, + "name": "deposited" + }, + { + "layout": { + "leaf": { + "key": "0x73f77d47", + "ty": 4 + } + }, + "name": "amount_to_receive" + }, + { + "layout": { + "enum": { + "dispatchKey": "0x73f77d47", + "name": "OrderStatus", + "variants": { + "0": { + "fields": [], + "name": "Open" + }, + "1": { + "fields": [], + "name": "Filled" + }, + "2": { + "fields": [], + "name": "Canceled" + } + } + } + }, + "name": "status" + }, + { + "layout": { + "leaf": { + "key": "0x73f77d47", + "ty": 5 + } + }, + "name": "payment_key" + }, + { + "layout": { + "leaf": { + "key": "0x73f77d47", + "ty": 5 + } + }, + "name": "hash_name" + }, + { + "layout": { + "leaf": { + "key": "0x73f77d47", + "ty": 0 + } + }, + "name": "name_length" + } + ], + "name": "Order" + } + }, + "root_key": "0x73f77d47" + } + }, + "name": "orders" + }, + { + "layout": { + "root": { + "layout": { + "struct": { + "fields": [ + { + "layout": { + "leaf": { + "key": "0x4b32d86a", + "ty": 1 + } + }, + "name": "buyer" + }, + { + "layout": { + "leaf": { + "key": "0x4b32d86a", + "ty": 0 + } + }, + "name": "order_index" + }, + { + "layout": { + "enum": { + "dispatchKey": "0x4b32d86a", + "name": "ClaimStatus", + "variants": { + "0": { + "fields": [], + "name": "WaitingForBuyerProof" + }, + "1": { + "fields": [], + "name": "WaitingForSellerProof" + }, + "2": { + "fields": [], + "name": "Filled" + }, + "3": { + "fields": [], + "name": "Canceled" + } + } + } + }, + "name": "status" + }, + { + "layout": { + "leaf": { + "key": "0x4b32d86a", + "ty": 4 + } + }, + "name": "claim_expiration_time" + } + ], + "name": "OrderClaim" + } + }, + "root_key": "0x4b32d86a" + } + }, + "name": "orders_claim" + }, + { + "layout": { + "leaf": { + "key": "0x00000000", + "ty": 0 + } + }, + "name": "next_order_nonce" + } + ], + "name": "ZKDex" + } + }, + "root_key": "0x00000000" + } + }, + "types": [ + { + "id": 0, + "type": { + "def": { + "primitive": "u32" + } + } + }, + { + "id": 1, + "type": { + "def": { + "composite": { + "fields": [ + { + "type": 2, + "typeName": "[u8; 32]" + } + ] + } + }, + "path": [ + "ink_primitives", + "types", + "AccountId" + ] + } + }, + { + "id": 2, + "type": { + "def": { + "array": { + "len": 32, + "type": 3 + } + } + } + }, + { + "id": 3, + "type": { + "def": { + "primitive": "u8" + } + } + }, + { + "id": 4, + "type": { + "def": { + "primitive": "u128" + } + } + }, + { + "id": 5, + "type": { + "def": { + "primitive": "str" + } + } + }, + { + "id": 6, + "type": { + "def": { + "variant": { + "variants": [ + { + "fields": [ + { + "type": 7 + } + ], + "index": 0, + "name": "Ok" + }, + { + "fields": [ + { + "type": 8 + } + ], + "index": 1, + "name": "Err" + } + ] + } + }, + "params": [ + { + "name": "T", + "type": 7 + }, + { + "name": "E", + "type": 8 + } + ], + "path": [ + "Result" + ] + } + }, + { + "id": 7, + "type": { + "def": { + "tuple": [] + } + } + }, + { + "id": 8, + "type": { + "def": { + "variant": { + "variants": [ + { + "index": 1, + "name": "CouldNotReadInput" + } + ] + } + }, + "path": [ + "ink_primitives", + "LangError" + ] + } + }, + { + "id": 9, + "type": { + "def": { + "variant": { + "variants": [ + { + "fields": [ + { + "type": 10 + } + ], + "index": 0, + "name": "Ok" + }, + { + "fields": [ + { + "type": 8 + } + ], + "index": 1, + "name": "Err" + } + ] + } + }, + "params": [ + { + "name": "T", + "type": 10 + }, + { + "name": "E", + "type": 8 + } + ], + "path": [ + "Result" + ] + } + }, + { + "id": 10, + "type": { + "def": { + "sequence": { + "type": 11 + } + } + } + }, + { + "id": 11, + "type": { + "def": { + "composite": { + "fields": [ + { + "name": "id", + "type": 0, + "typeName": "u32" + }, + { + "name": "owner", + "type": 1, + "typeName": "AccountId" + }, + { + "name": "deposited", + "type": 4, + "typeName": "Balance" + }, + { + "name": "amount_to_receive", + "type": 4, + "typeName": "Balance" + }, + { + "name": "status", + "type": 12, + "typeName": "OrderStatus" + }, + { + "name": "payment_key", + "type": 5, + "typeName": "String" + }, + { + "name": "hash_name", + "type": 5, + "typeName": "String" + }, + { + "name": "name_length", + "type": 0, + "typeName": "u32" + } + ] + } + }, + "path": [ + "zkdex", + "zkdex", + "Order" + ] + } + }, + { + "id": 12, + "type": { + "def": { + "variant": { + "variants": [ + { + "index": 0, + "name": "Open" + }, + { + "index": 1, + "name": "Filled" + }, + { + "index": 2, + "name": "Canceled" + } + ] + } + }, + "path": [ + "zkdex", + "zkdex", + "OrderStatus" + ] + } + }, + { + "id": 13, + "type": { + "def": { + "variant": { + "variants": [ + { + "fields": [ + { + "type": 14 + } + ], + "index": 0, + "name": "Ok" + }, + { + "fields": [ + { + "type": 8 + } + ], + "index": 1, + "name": "Err" + } + ] + } + }, + "params": [ + { + "name": "T", + "type": 14 + }, + { + "name": "E", + "type": 8 + } + ], + "path": [ + "Result" + ] + } + }, + { + "id": 14, + "type": { + "def": { + "sequence": { + "type": 15 + } + } + } + }, + { + "id": 15, + "type": { + "def": { + "composite": { + "fields": [ + { + "name": "buyer", + "type": 1, + "typeName": "AccountId" + }, + { + "name": "order_index", + "type": 0, + "typeName": "u32" + }, + { + "name": "status", + "type": 16, + "typeName": "ClaimStatus" + }, + { + "name": "claim_expiration_time", + "type": 4, + "typeName": "u128" + } + ] + } + }, + "path": [ + "zkdex", + "zkdex", + "OrderClaim" + ] + } + }, + { + "id": 16, + "type": { + "def": { + "variant": { + "variants": [ + { + "index": 0, + "name": "WaitingForBuyerProof" + }, + { + "index": 1, + "name": "WaitingForSellerProof" + }, + { + "index": 2, + "name": "Filled" + }, + { + "index": 3, + "name": "Canceled" + } + ] + } + }, + "path": [ + "zkdex", + "zkdex", + "ClaimStatus" + ] + } + }, + { + "id": 17, + "type": { + "def": { + "variant": { + "variants": [ + { + "fields": [ + { + "type": 11 + } + ], + "index": 0, + "name": "Ok" + }, + { + "fields": [ + { + "type": 8 + } + ], + "index": 1, + "name": "Err" + } + ] + } + }, + "params": [ + { + "name": "T", + "type": 11 + }, + { + "name": "E", + "type": 8 + } + ], + "path": [ + "Result" + ] + } + }, + { + "id": 18, + "type": { + "def": { + "variant": { + "variants": [ + { + "fields": [ + { + "type": 4 + } + ], + "index": 0, + "name": "Ok" + }, + { + "fields": [ + { + "type": 8 + } + ], + "index": 1, + "name": "Err" + } + ] + } + }, + "params": [ + { + "name": "T", + "type": 4 + }, + { + "name": "E", + "type": 8 + } + ], + "path": [ + "Result" + ] + } + }, + { + "id": 19, + "type": { + "def": { + "variant": { + "variants": [ + { + "fields": [ + { + "type": 20 + } + ], + "index": 0, + "name": "Ok" + }, + { + "fields": [ + { + "type": 8 + } + ], + "index": 1, + "name": "Err" + } + ] + } + }, + "params": [ + { + "name": "T", + "type": 20 + }, + { + "name": "E", + "type": 8 + } + ], + "path": [ + "Result" + ] + } + }, + { + "id": 20, + "type": { + "def": { + "variant": { + "variants": [ + { + "fields": [ + { + "type": 7 + } + ], + "index": 0, + "name": "Ok" + }, + { + "fields": [ + { + "type": 7 + } + ], + "index": 1, + "name": "Err" + } + ] + } + }, + "params": [ + { + "name": "T", + "type": 7 + }, + { + "name": "E", + "type": 7 + } + ], + "path": [ + "Result" + ] + } + }, + { + "id": 21, + "type": { + "def": { + "variant": { + "variants": [ + { + "fields": [ + { + "type": 22 + } + ], + "index": 0, + "name": "Ok" + }, + { + "fields": [ + { + "type": 8 + } + ], + "index": 1, + "name": "Err" + } + ] + } + }, + "params": [ + { + "name": "T", + "type": 22 + }, + { + "name": "E", + "type": 8 + } + ], + "path": [ + "Result" + ] + } + }, + { + "id": 22, + "type": { + "def": { + "variant": { + "variants": [ + { + "fields": [ + { + "type": 7 + } + ], + "index": 0, + "name": "Ok" + }, + { + "fields": [ + { + "type": 23 + } + ], + "index": 1, + "name": "Err" + } + ] + } + }, + "params": [ + { + "name": "T", + "type": 7 + }, + { + "name": "E", + "type": 23 + } + ], + "path": [ + "Result" + ] + } + }, + { + "id": 23, + "type": { + "def": { + "variant": { + "variants": [ + { + "index": 0, + "name": "StatusCanNotBeChanged" + }, + { + "index": 1, + "name": "OrderCancelled" + }, + { + "index": 2, + "name": "OrderFinalised" + }, + { + "index": 3, + "name": "OrderClaimed" + }, + { + "index": 4, + "name": "OrderNotFound" + }, + { + "index": 5, + "name": "Unauthorised" + } + ] + } + }, + "path": [ + "zkdex", + "zkdex", + "EscrowError" + ] + } + }, + { + "id": 24, + "type": { + "def": { + "composite": { + "fields": [ + { + "type": 2, + "typeName": "[u8; 32]" + } + ] + } + }, + "path": [ + "ink_primitives", + "types", + "Hash" + ] + } + }, + { + "id": 25, + "type": { + "def": { + "primitive": "u64" + } + } + }, + { + "id": 26, + "type": { + "def": { + "variant": {} + }, + "path": [ + "ink_env", + "types", + "NoChainExtension" + ] + } + } + ], + "version": "4" +} \ No newline at end of file diff --git a/contracts/deployments/zkdex/zkdex.wasm b/contracts/deployments/zkdex/zkdex.wasm new file mode 100644 index 0000000..dec5d0c Binary files /dev/null and b/contracts/deployments/zkdex/zkdex.wasm differ diff --git a/contracts/scripts/deploy.ts b/contracts/scripts/deploy.ts index d503dae..751930e 100644 --- a/contracts/scripts/deploy.ts +++ b/contracts/scripts/deploy.ts @@ -19,12 +19,12 @@ const main = async () => { const { api, chain, account } = initParams // Deploy greeter contract - const { abi, wasm } = await getDeploymentData('greeter') - const greeter = await deployContract(api, account, abi, wasm, 'default', []) + const { abi, wasm } = await getDeploymentData('zkdex') + const zkdex = await deployContract(api, account, abi, wasm, 'default', []) // Write contract addresses to `{contract}/{network}.ts` file(s) await writeContractAddresses(chain.network, { - greeter, + zkdex, }) } diff --git a/contracts/scripts/script.template.ts b/contracts/scripts/script.template.ts index 69b73b6..6f39030 100644 --- a/contracts/scripts/script.template.ts +++ b/contracts/scripts/script.template.ts @@ -9,7 +9,7 @@ import { } from '@scio-labs/use-inkathon/helpers' /** - * Example script that updates & reads a message from a greeter contract. + * Example script that updates & reads a message from a zkdex contract. * Can be used as a template for other scripts. * * Parameters: @@ -23,8 +23,8 @@ import { const main = async () => { const { api, account } = await initPolkadotJs() - // Deploy greeter contract - const { abi, wasm } = await getDeploymentData('greeter') + // Deploy zkdex contract + const { abi, wasm } = await getDeploymentData('zkdex') const { address } = await deployContract(api, account, abi, wasm, 'default', []) const contract = new ContractPromise(api, abi, address) diff --git a/contracts/src/greeter/lib.rs b/contracts/src/greeter/lib.rs deleted file mode 100755 index 3ebc2a4..0000000 --- a/contracts/src/greeter/lib.rs +++ /dev/null @@ -1,81 +0,0 @@ -#![cfg_attr(not(feature = "std"), no_std, no_main)] - -#[ink::contract] -mod greeter { - use ink::prelude::string::String; - - #[ink(event)] - pub struct Greeted { - from: Option, - message: String, - } - - #[ink(storage)] - pub struct Greeter { - message: String, - } - - impl Greeter { - /// Creates a new greeter contract initialized with the given value. - #[ink(constructor)] - pub fn new(init_value: String) -> Self { - Self { - message: init_value, - } - } - - /// Creates a new greeter contract initialized to 'Hello ink!'. - #[ink(constructor)] - pub fn default() -> Self { - let default_message = String::from("Hello ink!"); - Self::new(default_message) - } - - /// Returns the current value of `message`. - #[ink(message)] - pub fn greet(&self) -> String { - self.message.clone() - } - - /// Sets `message` to the given value. - #[ink(message)] - pub fn set_message(&mut self, new_value: String) { - self.message = new_value.clone(); - - let from = self.env().caller(); - self.env().emit_event(Greeted { - from: Some(from), - message: new_value, - }); - } - } - - #[cfg(test)] - mod tests { - use super::*; - - #[ink::test] - fn new_works() { - let message = "Hello ink! v4".to_string(); - let greeter = Greeter::new(message.clone()); - assert_eq!(greeter.greet(), message); - } - - #[ink::test] - fn default_new_works() { - let greeter = Greeter::default(); - let default_message = String::from("Hello ink!"); - assert_eq!(greeter.greet(), default_message); - } - - #[ink::test] - fn set_message_works() { - let message_1 = String::from("gm ink!"); - let mut greeter = Greeter::new(message_1.clone()); - assert_eq!(greeter.greet(), message_1); - let message_2 = String::from("gn"); - greeter.set_message(message_2.clone()); - assert_eq!(greeter.greet(), message_2); - } - } -} diff --git a/contracts/src/greeter/Cargo.toml b/contracts/src/zkdex/Cargo.toml old mode 100755 new mode 100644 similarity index 57% rename from contracts/src/greeter/Cargo.toml rename to contracts/src/zkdex/Cargo.toml index b5fe189..87fa35a --- a/contracts/src/greeter/Cargo.toml +++ b/contracts/src/zkdex/Cargo.toml @@ -1,19 +1,21 @@ [package] -name = "greeter" +name = "zkdex" version = "0.0.1" -authors = ["Scio Labs "] +authors = ["AE Studio"] edition = "2021" [dependencies] ink = { version = "4.3.0", default-features = false } +ink_prelude = { version = "4.3.0", default-features = false } +openbrush = { version = "4.0.0-beta", default-features = false } scale = { package = "parity-scale-codec", version = "3", default-features = false, features = ["derive"] } scale-info = { version = "2", default-features = false, features = ["derive"], optional = true } [lib] -path = "lib.rs" +path = "zkdex.rs" [features] default = ["std"] -std = ["ink/std", "scale/std", "scale-info/std"] +std = ["ink/std", "scale/std", "scale-info/std", "openbrush/std", "ink_prelude/std"] ink-as-dependency = [] diff --git a/contracts/src/zkdex/zkdex.rs b/contracts/src/zkdex/zkdex.rs new file mode 100755 index 0000000..4be3798 --- /dev/null +++ b/contracts/src/zkdex/zkdex.rs @@ -0,0 +1,587 @@ +#![cfg_attr(not(feature = "std"), no_std, no_main)] + +#[ink::contract] +mod zkdex { + use ink::prelude::vec::Vec; + use ink::storage::Mapping; + use ink_prelude::string::String; + + #[derive(Debug, Clone, scale::Encode, scale::Decode, PartialEq)] + #[cfg_attr( + feature = "std", + derive(scale_info::TypeInfo, ink::storage::traits::StorageLayout) + )] + enum OrderStatus { + Open, + Filled, + Canceled, + } + + #[derive(Debug, Clone, scale::Encode, scale::Decode, PartialEq)] + #[cfg_attr( + feature = "std", + derive(scale_info::TypeInfo, ink::storage::traits::StorageLayout) + )] + pub enum ClaimStatus { + WaitingForBuyerProof, + WaitingForSellerProof, + Filled, + Canceled, + } + + #[derive(Debug, PartialEq, Eq, scale::Encode, scale::Decode)] + #[cfg_attr(feature = "std", derive(scale_info::TypeInfo))] + pub enum EscrowError { + StatusCanNotBeChanged, + OrderCancelled, + OrderFinalised, + OrderClaimed, + OrderNotFound, + Unauthorised, + } + + #[derive(PartialEq, Debug, Clone, scale::Encode, scale::Decode)] + #[cfg_attr( + feature = "std", + derive(scale_info::TypeInfo, ink::storage::traits::StorageLayout) + )] + pub struct Order { + id: u32, + owner: AccountId, + deposited: Balance, + amount_to_receive: Balance, + status: OrderStatus, + payment_key: String, + hash_name: String, + name_length: u32, + } + + #[derive(PartialEq, Debug, Clone, scale::Encode, scale::Decode)] + #[cfg_attr( + feature = "std", + derive(scale_info::TypeInfo, ink::storage::traits::StorageLayout) + )] + pub struct OrderClaim { + buyer: AccountId, + order_index: u32, + status: ClaimStatus, + claim_expiration_time: u128, + } + + #[ink(storage)] + pub struct ZKDex { + orders: Mapping, + orders_claim: Mapping, + next_order_nonce: u32, + owner: AccountId, + } + + impl ZKDex { + /// Create new instance of ZKDex contract. + #[ink(constructor)] + pub fn default() -> Self { + let mut instance = ZKDex { + orders: Mapping::default(), + orders_claim: Mapping::default(), + next_order_nonce: 0, + owner: Self::env().caller(), + }; + instance + } + + /// Get all orders. + /// Returns an empty vector if there are no orders. + #[ink(message)] + pub fn get_all_orders(&self) -> Vec { + let mut orders: Vec = Vec::new(); + for i in 0..self.next_order_nonce { + orders.push(self.orders.get(&i).unwrap()); + } + orders + } + + /// Get all orders claim. + #[ink(message)] + pub fn get_all_orders_claim(&self) -> Vec { + let mut orders_claim: Vec = Vec::new(); + for i in 0..self.next_order_nonce { + orders_claim.push(self.orders_claim.get(&i).unwrap()); + } + orders_claim + } + + /// Get an order by its index. + /// Returns an error if the order does not exist. + #[ink(message)] + pub fn get_order(&self, index: u32) -> Order { + self.orders.get(index).unwrap() + } + + /// Get the current block timestamp. + #[ink(message)] + pub fn get_time(&self) -> u128 { + self.env().block_timestamp() as u128 + } + + /// Create a new liquidity pool order, which will be filled by a buyer. + /// The order is created by the seller, who deposits the amount of tokens + /// they want to sell into the contract. + #[ink(message, payable)] + pub fn create_order( + &mut self, + amount_to_receive: Balance, + payment_key: String, + hash_name: String, + name_length: u32, + ) -> Result<(), ()> { + let caller = self.env().caller(); + let transferred_value = self.env().transferred_value(); + ink::env::debug_println!( + "thanks for the funding of {:?} from {:?}", + transferred_value, + caller + ); + + let order = Order { + id: self.next_order_nonce, + owner: caller, + deposited: transferred_value, + amount_to_receive: amount_to_receive, + status: OrderStatus::Open, + payment_key: payment_key, + hash_name: hash_name, + name_length: name_length, + }; + self.orders.insert(self.next_order_nonce, &order); + self.next_order_nonce += 1; + Ok(()) + } + + /// Cancel an order that has not been filled yet. + /// The seller can cancel an order at any time, and the tokens they deposited + /// will be returned to them. + #[ink(message)] + pub fn cancel_order(&mut self, index: u32) -> Result<(), EscrowError> { + let caller = self.env().caller(); + + if !self.orders.contains(&index) { + return Err(EscrowError::OrderNotFound); + } + if self.orders.get(&index).unwrap().owner != caller { + return Err(EscrowError::Unauthorised); + } + if self.orders.get(&index).unwrap().status != OrderStatus::Open { + return Err(EscrowError::StatusCanNotBeChanged); + } + if self.check_order_claim(index).is_err() { + return Err(EscrowError::OrderClaimed); + } + + let mut order = self.orders.get(index).unwrap(); + order.status = OrderStatus::Canceled; + self.orders.insert(index, &order); + + let owner = self.orders.get(index).unwrap().owner; + let deposited = self.orders.get(index).unwrap().deposited; + self.env().transfer(owner, deposited).unwrap(); + + Ok(()) + } + + /// Claim an order that has not been filled yet. + #[ink(message)] + pub fn claim_order( + &mut self, + index: u32, + claim_expiration_time: u128, + ) -> Result<(), EscrowError> { + let caller = self.env().caller(); + + if !self.orders.contains(&index) { + return Err(EscrowError::OrderNotFound); + } + if self.orders.get(&index).unwrap().status != OrderStatus::Open { + return Err(EscrowError::StatusCanNotBeChanged); + } + if self.check_order_claim(index).is_err() { + return Err(EscrowError::OrderClaimed); + } + + self.orders_claim.insert( + index, + &OrderClaim { + buyer: caller, + order_index: index, + status: ClaimStatus::WaitingForBuyerProof, + claim_expiration_time: claim_expiration_time, + }, + ); + + Ok(()) + } + + /// Cancel a claimed order that has not been filled yet. + /// The buyer can cancel an order at any time, and it will be removed from the + /// order book. + #[ink(message)] + pub fn cancel_claim_order(&mut self, index: u32) -> Result<(), EscrowError> { + let caller = self.env().caller(); + + if !self.orders_claim.contains(&index) { + return Err(EscrowError::OrderNotFound); + } + + if self.orders_claim.get(&index).unwrap().buyer != caller { + return Err(EscrowError::Unauthorised); + } + + if self.orders_claim.get(&index).unwrap().status != ClaimStatus::WaitingForBuyerProof { + return Err(EscrowError::StatusCanNotBeChanged); + } + + let mut order_claim = self.orders_claim.get(index).unwrap(); + order_claim.status = ClaimStatus::Canceled; + self.orders_claim.insert(index, &order_claim); + + Ok(()) + } + + /// Update the status of a claimed order. + /// Only the owner of the contract can update the status of a claimed order. + /// It will be responsible for updating the status of the order to Filled + #[ink(message)] + pub fn update_claim_order_status( + &mut self, + index_claim_order: u32, + status: ClaimStatus, + ) -> Result<(), EscrowError> { + let caller = self.env().caller(); + + if caller != self.owner { + return Err(EscrowError::Unauthorised); + } + + if !self.orders_claim.contains(&index_claim_order) { + return Err(EscrowError::OrderNotFound); + } + + if self.orders_claim.get(&index_claim_order).unwrap().status + != ClaimStatus::WaitingForBuyerProof + && self.orders_claim.get(&index_claim_order).unwrap().status + != ClaimStatus::WaitingForSellerProof + { + return Err(EscrowError::StatusCanNotBeChanged); + } + + let mut order_claim = self.orders_claim.get(index_claim_order).unwrap(); + order_claim.status = status.clone(); + self.orders_claim.insert(index_claim_order, &order_claim); + + if status == ClaimStatus::Filled { + let mut order = self.orders.get(order_claim.order_index).unwrap(); + order.status = OrderStatus::Filled; + self.orders.insert(order_claim.order_index, &order); + } + + Ok(()) + } + + fn check_order_claim(&self, index: u32) -> Result<(), EscrowError> { + if self.orders_claim.contains(&index) + && (self.orders_claim.get(&index).unwrap().status != ClaimStatus::Canceled + && self.orders_claim.get(&index).unwrap().claim_expiration_time + > self.env().block_timestamp() as u128) + { + return Err(EscrowError::OrderClaimed); + } + + Ok(()) + } + } + + #[cfg(test)] + mod tests { + use super::*; + use ink::env::{ + self, + test::{get_account_balance, DefaultAccounts}, + DefaultEnvironment, + }; + use openbrush::test_utils; + + // === HELPERS === + fn init() -> (DefaultAccounts, ZKDex) { + let accounts = test_utils::accounts(); + test_utils::change_caller(accounts.bob); + let zkdex = ZKDex::default(); + (accounts, zkdex) + } + + fn get_balance(account_id: AccountId) -> Balance { + ink::env::test::get_account_balance::(account_id) + .expect("Cannot get account balance") + } + + fn set_balance(account_id: AccountId, balance: Balance) { + ink::env::test::set_account_balance::(account_id, balance) + } + + #[ink::test] + fn new_works() { + let zkdex = ZKDex::default(); + assert_eq!(zkdex.get_all_orders(), Vec::::new()); + } + + #[ink::test] + fn should_create_order() { + let (accounts, mut zkdex) = init(); + + ink::env::test::set_value_transferred::(100); + zkdex + .create_order(100, String::from(""), String::from(""), 0) + .unwrap(); + + // didn't work on test env + // assert_eq!(get_balance(accounts.bob), 0); + + let mut orders = Vec::::new(); + orders.push(Order { + id: 0, + owner: accounts.bob, + deposited: 100, + amount_to_receive: 100, + status: OrderStatus::Open, + payment_key: String::from(""), + hash_name: String::from(""), + name_length: 0, + }); + assert_eq!(zkdex.get_all_orders(), orders); + } + + #[ink::test] + fn should_cancel_order() { + let (accounts, mut zkdex) = init(); + + ink::env::test::set_value_transferred::(100); + zkdex + .create_order(100, String::from(""), String::from(""), 0) + .unwrap(); + zkdex.cancel_order(0).unwrap(); + + let mut orders = Vec::::new(); + orders.push(Order { + id: 0, + owner: accounts.bob, + deposited: 100, + amount_to_receive: 100, + status: OrderStatus::Canceled, + payment_key: String::from(""), + hash_name: String::from(""), + name_length: 0, + }); + assert_eq!(zkdex.get_all_orders(), orders); + } + + #[ink::test] + fn should_not_cancel_order() { + let (accounts, mut zkdex) = init(); + + ink::env::test::set_value_transferred::(100); + zkdex + .create_order(100, String::from(""), String::from(""), 0) + .unwrap(); + let result = zkdex.cancel_order(1); + assert!(!result.is_ok()); + + // diff order owner + test_utils::change_caller(accounts.alice); + let result = zkdex.cancel_order(0); + assert!(!result.is_ok()); + + // order status is not open + test_utils::change_caller(accounts.bob); + zkdex.cancel_order(0).unwrap(); + let result: Result<(), EscrowError> = zkdex.cancel_order(0); + assert!(!result.is_ok()); + + // order claim status is not canceled + zkdex + .create_order(10, String::from(""), String::from(""), 0) + .unwrap(); + zkdex.claim_order(1, 100).unwrap(); + let result: Result<(), EscrowError> = zkdex.cancel_order(1); + assert!(!result.is_ok()); + } + + #[ink::test] + fn should_claim_order() { + let (accounts, mut zkdex) = init(); + + ink::env::test::set_value_transferred::(100); + zkdex + .create_order(100, String::from(""), String::from(""), 0) + .unwrap(); + zkdex.claim_order(0, 100).unwrap(); + + let mut orders_claim = Vec::::new(); + orders_claim.push(OrderClaim { + buyer: accounts.bob, + order_index: 0, + status: ClaimStatus::WaitingForBuyerProof, + claim_expiration_time: 100, + }); + assert_eq!(zkdex.get_all_orders_claim(), orders_claim); + + zkdex.cancel_claim_order(0).unwrap(); + + ink::env::test::set_caller::(accounts.alice); + zkdex.claim_order(0, 1000).unwrap(); + + let mut orders_claim = Vec::::new(); + orders_claim.push(OrderClaim { + buyer: accounts.alice, + order_index: 0, + status: ClaimStatus::WaitingForBuyerProof, + claim_expiration_time: 1000, + }); + assert_eq!(zkdex.get_all_orders_claim(), orders_claim); + } + + #[ink::test] + fn should_not_claim_order() { + let (accounts, mut zkdex) = init(); + + ink::env::test::set_value_transferred::(100); + + zkdex + .create_order(100, String::from(""), String::from(""), 0) + .unwrap(); + zkdex.claim_order(0, 100).unwrap(); + + ink::env::test::set_caller::(accounts.alice); + let error = zkdex.claim_order(0, 100); + + assert_eq!(error, Err(EscrowError::OrderClaimed)); + + zkdex + .create_order(100, String::from(""), String::from(""), 0) + .unwrap(); + zkdex.cancel_order(1).unwrap(); + + let error = zkdex.claim_order(1, 100); + + assert_eq!(error, Err(EscrowError::StatusCanNotBeChanged)); + + let error = zkdex.claim_order(3, 100); + assert_eq!(error, Err(EscrowError::OrderNotFound)); + } + + #[ink::test] + fn should_cancel_claim_order() { + let (accounts, mut zkdex) = init(); + + ink::env::test::set_value_transferred::(100); + zkdex + .create_order(100, String::from(""), String::from(""), 0) + .unwrap(); + zkdex.claim_order(0, 100).unwrap(); + zkdex.cancel_claim_order(0).unwrap(); + + let mut orders_claim = Vec::::new(); + orders_claim.push(OrderClaim { + buyer: accounts.bob, + order_index: 0, + status: ClaimStatus::Canceled, + claim_expiration_time: 100, + }); + assert_eq!(zkdex.get_all_orders_claim(), orders_claim); + } + + #[ink::test] + fn should_not_cancel_claim_order() { + let (accounts, mut zkdex) = init(); + + ink::env::test::set_value_transferred::(100); + + zkdex + .create_order(100, String::from(""), String::from(""), 0) + .unwrap(); + zkdex.claim_order(0, 100).unwrap(); + + let error = zkdex.cancel_claim_order(1); + + assert_eq!(error, Err(EscrowError::OrderNotFound)); + + ink::env::test::set_caller::(accounts.alice); + let error = zkdex.cancel_claim_order(0); + + assert_eq!(error, Err(EscrowError::Unauthorised)); + + ink::env::test::set_caller::(accounts.bob); + zkdex + .create_order(100, String::from(""), String::from(""), 0) + .unwrap(); + zkdex.claim_order(1, 10000).unwrap(); + zkdex + .update_claim_order_status(0, ClaimStatus::WaitingForSellerProof) + .unwrap(); + + let error = zkdex.cancel_claim_order(0); + assert_eq!(error, Err(EscrowError::StatusCanNotBeChanged)); + } + + #[ink::test] + fn should_update_claim_order_status() { + let (accounts, mut zkdex) = init(); + + ink::env::test::set_value_transferred::(100); + zkdex + .create_order(100, String::from(""), String::from(""), 0) + .unwrap(); + zkdex.claim_order(0, 100).unwrap(); + zkdex + .update_claim_order_status(0, ClaimStatus::WaitingForSellerProof) + .unwrap(); + + let mut orders_claim = Vec::::new(); + orders_claim.push(OrderClaim { + buyer: accounts.bob, + order_index: 0, + status: ClaimStatus::WaitingForSellerProof, + claim_expiration_time: 100, + }); + assert_eq!(zkdex.get_all_orders_claim(), orders_claim); + } + + #[ink::test] + fn should_not_update_claim_order_status() { + let (accounts, mut zkdex) = init(); + + ink::env::test::set_value_transferred::(100); + + zkdex + .create_order(100, String::from(""), String::from(""), 0) + .unwrap(); + zkdex.claim_order(0, 100).unwrap(); + + ink::env::test::set_caller::(accounts.alice); + let error = zkdex.update_claim_order_status(0, ClaimStatus::Filled); + + assert_eq!(error, Err(EscrowError::Unauthorised)); + + ink::env::test::set_caller::(accounts.bob); + let error = zkdex.update_claim_order_status(1, ClaimStatus::WaitingForSellerProof); + assert_eq!(error, Err(EscrowError::OrderNotFound)); + + zkdex + .create_order(100, String::from(""), String::from(""), 0) + .unwrap(); + zkdex.claim_order(1, 100).unwrap(); + zkdex + .update_claim_order_status(1, ClaimStatus::Filled) + .unwrap(); + let error = zkdex.update_claim_order_status(1, ClaimStatus::WaitingForSellerProof); + assert_eq!(error, Err(EscrowError::StatusCanNotBeChanged)); + } + } +}