diff --git a/package.json b/package.json index b94a996..d1cb068 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "kys-service", - "version": "0.6.7", + "version": "0.7.0", "license": "AGPL-3.0", "author": "shiy2008@gmail.com", "description": "RESTful API service of KaiYuanShe", @@ -15,10 +15,11 @@ "main": "dist/index.js", "dependencies": { "@azure/storage-blob": "^12.17.0", - "@koa/cors": "^4.0.0", + "@koa/cors": "^5.0.0", "class-transformer": "^0.5.1", "class-validator": "^0.14.0", "dotenv": "^16.3.1", + "ethers": "^6.9.0", "file-type": "^16.5.4", "iterator-helpers-polyfill": "^2.3.3", "jsonwebtoken": "^9.0.2", @@ -30,13 +31,13 @@ "koa-router": "^12.0.1", "koa2-swagger-ui": "^5.10.0", "koagger": "^0.3.0", - "koajax": "^0.9.5", + "koajax": "^0.9.6", "mobx": "^5.15.7", "mobx-lark": "^1.0.0-rc.10", "mobx-restful": "^0.6.12", "pg": "^8.11.3", "pg-connection-string": "^2.6.2", - "reflect-metadata": "^0.1.13", + "reflect-metadata": "^0.1.14", "routing-controllers": "^0.10.4", "routing-controllers-openapi": "^4.0.0", "sqlite3": "^5.1.6", @@ -50,13 +51,13 @@ "@types/koa-bodyparser": "^4.3.12", "@types/koa-logger": "^3.1.5", "@types/koa-router": "^7.4.8", - "@types/node": "^18.18.12", + "@types/node": "^18.19.3", "get-git-folder": "^0.1.2", "husky": "^8.0.3", - "lint-staged": "^15.1.0", - "prettier": "^3.1.0", + "lint-staged": "^15.2.0", + "prettier": "^3.1.1", "ts-node-dev": "^2.0.0", - "typescript": "~5.3.2" + "typescript": "~5.3.3" }, "prettier": { "singleQuote": true, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 13dd638..9a488e6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,8 +9,8 @@ dependencies: specifier: ^12.17.0 version: 12.17.0 '@koa/cors': - specifier: ^4.0.0 - version: 4.0.0 + specifier: ^5.0.0 + version: 5.0.0 class-transformer: specifier: ^0.5.1 version: 0.5.1 @@ -20,6 +20,9 @@ dependencies: dotenv: specifier: ^16.3.1 version: 16.3.1 + ethers: + specifier: ^6.9.0 + version: 6.9.0 file-type: specifier: ^16.5.4 version: 16.5.4 @@ -54,17 +57,17 @@ dependencies: specifier: ^0.3.0 version: 0.3.0(@types/koa@2.13.12) koajax: - specifier: ^0.9.5 - version: 0.9.5(typescript@5.3.2) + specifier: ^0.9.6 + version: 0.9.6(typescript@5.3.3) mobx: specifier: ^5.15.7 version: 5.15.7 mobx-lark: specifier: ^1.0.0-rc.10 - version: 1.0.0-rc.10(mobx@5.15.7)(typescript@5.3.2) + version: 1.0.0-rc.10(mobx@5.15.7)(typescript@5.3.3) mobx-restful: specifier: ^0.6.12 - version: 0.6.12(mobx@5.15.7)(typescript@5.3.2) + version: 0.6.12(mobx@5.15.7)(typescript@5.3.3) pg: specifier: ^8.11.3 version: 8.11.3 @@ -72,8 +75,8 @@ dependencies: specifier: ^2.6.2 version: 2.6.2 reflect-metadata: - specifier: ^0.1.13 - version: 0.1.13 + specifier: ^0.1.14 + version: 0.1.14 routing-controllers: specifier: ^0.10.4 version: 0.10.4(class-transformer@0.5.1)(class-validator@0.14.0) @@ -91,7 +94,7 @@ dependencies: version: 0.3.17(pg@8.11.3)(sqlite3@5.1.6) web-fetch: specifier: ^1.3.3 - version: 1.3.3(@types/node@18.18.12) + version: 1.3.3(@types/node@18.19.3) devDependencies: '@types/jsonwebtoken': @@ -110,29 +113,33 @@ devDependencies: specifier: ^7.4.8 version: 7.4.8 '@types/node': - specifier: ^18.18.12 - version: 18.18.12 + specifier: ^18.19.3 + version: 18.19.3 get-git-folder: specifier: ^0.1.2 - version: 0.1.2(@types/node@18.18.12) + version: 0.1.2(@types/node@18.19.3) husky: specifier: ^8.0.3 version: 8.0.3 lint-staged: - specifier: ^15.1.0 - version: 15.1.0 + specifier: ^15.2.0 + version: 15.2.0 prettier: - specifier: ^3.1.0 - version: 3.1.0 + specifier: ^3.1.1 + version: 3.1.1 ts-node-dev: specifier: ^2.0.0 - version: 2.0.0(@types/node@18.18.12)(typescript@5.3.2) + version: 2.0.0(@types/node@18.19.3)(typescript@5.3.3) typescript: - specifier: ~5.3.2 - version: 5.3.2 + specifier: ~5.3.3 + version: 5.3.3 packages: + /@adraffy/ens-normalize@1.10.0: + resolution: {integrity: sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q==} + dev: false + /@ampproject/remapping@2.2.1: resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} engines: {node: '>=6.0.0'} @@ -317,6 +324,7 @@ packages: /@babel/helper-module-imports@7.22.15: resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} engines: {node: '>=6.9.0'} + requiresBuild: true dependencies: '@babel/types': 7.23.4 @@ -343,6 +351,7 @@ packages: /@babel/helper-simple-access@7.22.5: resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} engines: {node: '>=6.9.0'} + requiresBuild: true dependencies: '@babel/types': 7.23.4 @@ -529,8 +538,8 @@ packages: resolution: {integrity: sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==} dev: false - /@koa/cors@4.0.0: - resolution: {integrity: sha512-Y4RrbvGTlAaa04DBoPBWJqDR5gPj32OOz827ULXfgB1F7piD1MB/zwn8JR2LAnvdILhxUbXbkXGWuNVsFuVFCQ==} + /@koa/cors@5.0.0: + resolution: {integrity: sha512-x/iUDjcS90W69PryLDIMgFyV21YLTnG9zOpPXS7Bkt2b8AsY3zZsIpOLBkYr9fBcF3HbkKaER5hOBZLfpLgYNw==} engines: {node: '>= 14.0.0'} dependencies: vary: 1.1.2 @@ -583,6 +592,17 @@ packages: - supports-color dev: false + /@noble/curves@1.2.0: + resolution: {integrity: sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==} + dependencies: + '@noble/hashes': 1.3.2 + dev: false + + /@noble/hashes@1.3.2: + resolution: {integrity: sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==} + engines: {node: '>= 16'} + dev: false + /@nodelib/fs.scandir@2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -662,7 +682,7 @@ packages: tslib: 2.6.2 dev: false - /@tech_query/node-toolkit@1.2.1(@types/node@18.18.12): + /@tech_query/node-toolkit@1.2.1(@types/node@18.19.3): resolution: {integrity: sha512-XFw0EVc8LCcC+CNo+lCxi+5iiPzQyubz41rP4iNuMueN+kjn/KMliaHKLZ5kAnCi+HxmuJPmzrSi6vZtuP07Hg==} peerDependencies: '@babel/plugin-transform-modules-commonjs': ^7.0.0 @@ -670,7 +690,7 @@ packages: '@types/node': '>=18' dependencies: '@babel/core': 7.23.3 - '@types/node': 18.18.12 + '@types/node': 18.19.3 cross-spawn: 7.0.3 file-type: 16.5.4 fs-extra: 11.1.1 @@ -721,18 +741,18 @@ packages: /@types/accepts@1.3.7: resolution: {integrity: sha512-Pay9fq2lM2wXPWbteBsRAGiWH2hig4ZE2asK+mm7kUzlxRTfL961rj89I6zV/E3PcIkDqyuBEcMxFT7rccugeQ==} dependencies: - '@types/node': 18.18.12 + '@types/node': 18.19.3 /@types/body-parser@1.19.5: resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} dependencies: '@types/connect': 3.4.38 - '@types/node': 18.18.12 + '@types/node': 18.19.3 /@types/connect@3.4.38: resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} dependencies: - '@types/node': 18.18.12 + '@types/node': 18.19.3 /@types/content-disposition@0.5.8: resolution: {integrity: sha512-QVSSvno3dE0MgO76pJhmv4Qyi/j0Yk9pBp0Y7TJ2Tlj+KCgJWY6qX7nnxCOLkZ3VYRSIk1WTxCvwUSdx6CCLdg==} @@ -743,12 +763,12 @@ packages: '@types/connect': 3.4.38 '@types/express': 4.17.21 '@types/keygrip': 1.0.6 - '@types/node': 18.18.12 + '@types/node': 18.19.3 /@types/express-serve-static-core@4.17.41: resolution: {integrity: sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==} dependencies: - '@types/node': 18.18.12 + '@types/node': 18.19.3 '@types/qs': 6.9.10 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 @@ -765,7 +785,7 @@ packages: resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==} dependencies: '@types/jsonfile': 6.1.4 - '@types/node': 18.18.12 + '@types/node': 18.19.3 dev: true /@types/http-assert@1.5.5: @@ -777,7 +797,7 @@ packages: /@types/jsdom@21.1.6: resolution: {integrity: sha512-/7kkMsC+/kMs7gAYmmBR9P0vGTnOoLhQhyhQJSlXGI5bzTHp6xdo0TtKWQAsz6pmSAeVqKSbqeyP6hytqr9FDw==} dependencies: - '@types/node': 18.18.12 + '@types/node': 18.19.3 '@types/tough-cookie': 4.0.5 parse5: 7.1.2 dev: false @@ -789,13 +809,13 @@ packages: /@types/jsonfile@6.1.4: resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==} dependencies: - '@types/node': 18.18.12 + '@types/node': 18.19.3 dev: true /@types/jsonwebtoken@9.0.5: resolution: {integrity: sha512-VRLSGzik+Unrup6BsouBeHsf4d1hOEgYWTm/7Nmw1sXoN1+tRly/Gy/po3yeahnP4jfnQWWAhQAqcNfH7ngOkA==} dependencies: - '@types/node': 18.18.12 + '@types/node': 18.19.3 dev: true /@types/keygrip@1.0.6: @@ -834,7 +854,7 @@ packages: '@types/http-errors': 2.0.4 '@types/keygrip': 1.0.6 '@types/koa-compose': 3.2.8 - '@types/node': 18.18.12 + '@types/node': 18.19.3 /@types/lodash.clonedeep@4.5.9: resolution: {integrity: sha512-19429mWC+FyaAhOLzsS8kZUsI+/GmBAQ0HFiCPsKGU+7pBXOQWhyrY6xNNDwUSX8SMZMJvuFVMF9O5dQOlQK9Q==} @@ -859,12 +879,16 @@ packages: /@types/node-fetch@2.6.9: resolution: {integrity: sha512-bQVlnMLFJ2d35DkPNjEPmd9ueO/rh5EiaZt2bhqiSarPjZIuIV6bPQVqcrEyvNo+AfTrRGVazle1tl597w3gfA==} dependencies: - '@types/node': 18.18.12 + '@types/node': 18.19.3 form-data: 4.0.0 dev: false - /@types/node@18.18.12: - resolution: {integrity: sha512-G7slVfkwOm7g8VqcEF1/5SXiMjP3Tbt+pXDU3r/qhlM2KkGm786DUD4xyMA2QzEElFrv/KZV9gjygv4LnkpbMQ==} + /@types/node@18.15.13: + resolution: {integrity: sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==} + dev: false + + /@types/node@18.19.3: + resolution: {integrity: sha512-k5fggr14DwAytoA/t8rPrIz++lXK7/DqckthCmoZOKNsEbJkId4Z//BqgApXBUGrGddrigYa1oqheo/7YmW4rg==} dependencies: undici-types: 5.26.5 @@ -886,14 +910,14 @@ packages: resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} dependencies: '@types/mime': 1.3.5 - '@types/node': 18.18.12 + '@types/node': 18.19.3 /@types/serve-static@1.15.5: resolution: {integrity: sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==} dependencies: '@types/http-errors': 2.0.4 '@types/mime': 3.0.4 - '@types/node': 18.18.12 + '@types/node': 18.19.3 /@types/strip-bom@3.0.0: resolution: {integrity: sha512-xevGOReSYGM7g/kUBZzPqCrR/KYAo+F0yiPc85WFTJa0MSLtyFTVTU6cJu/aV4mid7IffDIWqo69THF2o4JiEQ==} @@ -910,7 +934,7 @@ packages: /@types/tunnel@0.0.3: resolution: {integrity: sha512-sOUTGn6h1SfQ+gbgqC364jLFBw2lnFqkgF3q0WovEHRLMrVD1sd5aufqi/aJObLekJO+Aq5z646U4Oxy6shXMA==} dependencies: - '@types/node': 18.18.12 + '@types/node': 18.19.3 dev: false /@types/validator@13.11.7: @@ -925,7 +949,7 @@ packages: resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} requiresBuild: true dependencies: - '@types/node': 18.18.12 + '@types/node': 18.19.3 dev: false optional: true @@ -957,6 +981,10 @@ packages: hasBin: true dev: true + /aes-js@4.0.0-beta.5: + resolution: {integrity: sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==} + dev: false + /agent-base@6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} @@ -1012,16 +1040,17 @@ packages: uri-js: 4.4.1 dev: false - /ansi-escapes@5.0.0: - resolution: {integrity: sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==} - engines: {node: '>=12'} + /ansi-escapes@6.2.0: + resolution: {integrity: sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==} + engines: {node: '>=14.16'} dependencies: - type-fest: 1.4.0 + type-fest: 3.13.1 dev: true /ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} + requiresBuild: true dev: false /ansi-regex@6.0.1: @@ -1386,7 +1415,7 @@ packages: lodash.groupby: 4.6.0 lodash.merge: 4.6.2 openapi3-ts: 2.0.2 - reflect-metadata: 0.1.13 + reflect-metadata: 0.1.14 tslib: 2.6.2 dev: false @@ -1423,12 +1452,12 @@ packages: yargs: 16.2.0 dev: false - /cli-truncate@3.1.0: - resolution: {integrity: sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + /cli-truncate@4.0.0: + resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} + engines: {node: '>=18'} dependencies: slice-ansi: 5.0.0 - string-width: 5.1.2 + string-width: 7.0.0 dev: true /cliui@7.0.4: @@ -1497,10 +1526,10 @@ packages: delayed-stream: 1.0.0 dev: false - /commander-jsx@0.6.9(@types/node@18.18.12): + /commander-jsx@0.6.9(@types/node@18.19.3): resolution: {integrity: sha512-E/wSYQhT7kgqd98WW8sdRiM+3i+J9Z30NOBTCdfD88p2k/po4+JEzikqOECKA1OouTqnAuIgdg5aKGbjq5B0jg==} dependencies: - '@tech_query/node-toolkit': 1.2.1(@types/node@18.18.12) + '@tech_query/node-toolkit': 1.2.1(@types/node@18.19.3) tslib: 2.6.2 transitivePeerDependencies: - '@babel/plugin-transform-modules-commonjs' @@ -1767,6 +1796,7 @@ packages: /eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + dev: false /ecdsa-sig-formatter@1.0.11: resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} @@ -1785,12 +1815,17 @@ packages: resolution: {integrity: sha512-ti2fHL8rXbz5/pu50Nu45EXvORWtx1g1xWUQuZORkszbvCxosPEeHDeGzfvaaooXJNXNblogMP4atl680r9WyQ==} dev: false + /emoji-regex@10.3.0: + resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==} + dev: true + /emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} dev: false /emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + dev: false /encodeurl@1.0.2: resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} @@ -1882,6 +1917,22 @@ packages: dev: false optional: true + /ethers@6.9.0: + resolution: {integrity: sha512-pmfNyQzc2mseLe91FnT2vmNaTt8dDzhxZ/xItAV7uGsF4dI4ek2ufMu3rAkgQETL/TIs0GS5A+U05g9QyWnv3Q==} + engines: {node: '>=14.0.0'} + dependencies: + '@adraffy/ens-normalize': 1.10.0 + '@noble/curves': 1.2.0 + '@noble/hashes': 1.3.2 + '@types/node': 18.15.13 + aes-js: 4.0.0-beta.5 + tslib: 2.4.0 + ws: 8.5.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + /event-stream@3.3.4: resolution: {integrity: sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==} dependencies: @@ -2139,11 +2190,11 @@ packages: universalify: 0.1.2 dev: false - /fs-match@1.7.1(@types/node@18.18.12): + /fs-match@1.7.1(@types/node@18.19.3): resolution: {integrity: sha512-8tb7tQsSoHpGJJscGdrdi983tRr6HZMB7i4dTPHGgL8XoRfIVnQiTq/xvSTeW3bHAfHEF/Uhe4z683Ym+ACMnA==} hasBin: true dependencies: - commander-jsx: 0.6.9(@types/node@18.18.12) + commander-jsx: 0.6.9(@types/node@18.19.3) fs-extra: 11.1.1 tslib: 2.6.2 transitivePeerDependencies: @@ -2219,11 +2270,16 @@ packages: engines: {node: 6.* || 8.* || >= 10.*} dev: false - /get-git-folder@0.1.2(@types/node@18.18.12): + /get-east-asian-width@1.2.0: + resolution: {integrity: sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==} + engines: {node: '>=18'} + dev: true + + /get-git-folder@0.1.2(@types/node@18.19.3): resolution: {integrity: sha512-LYf1bS5g3PH71uGLVe3jR2jZm2DbJjoQk7w99WAR7fsdzqEuzGUGqFiVszTHTUXGp+N0gT+kLKhy9isUhM5a2Q==} hasBin: true dependencies: - commander-jsx: 0.6.9(@types/node@18.18.12) + commander-jsx: 0.6.9(@types/node@18.19.3) zx: 7.2.3 transitivePeerDependencies: - '@babel/plugin-transform-modules-commonjs' @@ -2613,6 +2669,13 @@ packages: engines: {node: '>=12'} dev: true + /is-fullwidth-code-point@5.0.0: + resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==} + engines: {node: '>=18'} + dependencies: + get-east-asian-width: 1.2.0 + dev: true + /is-generator-function@1.0.10: resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} engines: {node: '>= 0.4'} @@ -2931,15 +2994,15 @@ packages: - supports-color dev: false - /koajax@0.9.5(typescript@5.3.2): - resolution: {integrity: sha512-tn4UouunyEGcwLZ6Q+juouIpsa7/ipW30AdTyDLcmyk1djoMIxqaMrgv9Ky2Dq/5VzEh0p7YgdNn253KrgXn/A==} + /koajax@0.9.6(typescript@5.3.3): + resolution: {integrity: sha512-Cv5HH7igfN7HEGLwRzu4TEzXLTm3QSpbR48Gif9dhPPBNKZ8ELS1bbh3Dik1s83vpKnnjC+DcFU8ql+LwNg3tQ==} peerDependencies: jsdom: '>=21' dependencies: '@swc/helpers': 0.5.3 iterable-observer: 1.0.1 regenerator-runtime: 0.14.0 - web-utility: 4.1.3(typescript@5.3.2) + web-utility: 4.1.3(typescript@5.3.3) transitivePeerDependencies: - typescript dev: false @@ -2948,17 +3011,17 @@ packages: resolution: {integrity: sha512-AOYOJslxKQ49mpwvpkSFcagoMtxeH1UpUHm+05pmPkenPpFbt6ofdeEvQ+ZylmQiJS99ocRWeEeEp7quVlFyVA==} dev: false - /lilconfig@2.1.0: - resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} - engines: {node: '>=10'} + /lilconfig@3.0.0: + resolution: {integrity: sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==} + engines: {node: '>=14'} dev: true /lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} dev: false - /lint-staged@15.1.0: - resolution: {integrity: sha512-ZPKXWHVlL7uwVpy8OZ7YQjYDAuO5X4kMh0XgZvPNxLcCCngd0PO5jKQyy3+s4TL2EnHoIXIzP1422f/l3nZKMw==} + /lint-staged@15.2.0: + resolution: {integrity: sha512-TFZzUEV00f+2YLaVPWBWGAMq7So6yQx+GG8YRMDeOEIf95Zn5RyiLMsEiX4KTNl9vq/w+NqRJkLA1kPIo15ufQ==} engines: {node: '>=18.12.0'} hasBin: true dependencies: @@ -2966,8 +3029,8 @@ packages: commander: 11.1.0 debug: 4.3.4 execa: 8.0.1 - lilconfig: 2.1.0 - listr2: 7.0.2 + lilconfig: 3.0.0 + listr2: 8.0.0 micromatch: 4.0.5 pidtree: 0.6.0 string-argv: 0.3.2 @@ -2976,16 +3039,16 @@ packages: - supports-color dev: true - /listr2@7.0.2: - resolution: {integrity: sha512-rJysbR9GKIalhTbVL2tYbF2hVyDnrf7pFUZBwjPaMIdadYHmeT+EVi/Bu3qd7ETQPahTotg2WRCatXwRBW554g==} - engines: {node: '>=16.0.0'} + /listr2@8.0.0: + resolution: {integrity: sha512-u8cusxAcyqAiQ2RhYvV7kRKNLgUvtObIbhOX2NCXqvp1UU32xIg5CT22ykS2TPKJXZWJwtK3IKLiqAGlGNE+Zg==} + engines: {node: '>=18.0.0'} dependencies: - cli-truncate: 3.1.0 + cli-truncate: 4.0.0 colorette: 2.0.20 eventemitter3: 5.0.1 - log-update: 5.0.1 + log-update: 6.0.0 rfdc: 1.3.0 - wrap-ansi: 8.1.0 + wrap-ansi: 9.0.0 dev: true /locate-path@5.0.0: @@ -3051,15 +3114,15 @@ packages: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} dev: false - /log-update@5.0.1: - resolution: {integrity: sha512-5UtUDQ/6edw4ofyljDNcOVJQ4c7OjDro4h3y8e1GQL5iYElYclVHJ3zeWchylvMaKnDbDilC8irOVyexnA/Slw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + /log-update@6.0.0: + resolution: {integrity: sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==} + engines: {node: '>=18'} dependencies: - ansi-escapes: 5.0.0 + ansi-escapes: 6.2.0 cli-cursor: 4.0.0 - slice-ansi: 5.0.0 + slice-ansi: 7.1.0 strip-ansi: 7.1.0 - wrap-ansi: 8.1.0 + wrap-ansi: 9.0.0 dev: true /lru-cache@10.1.0: @@ -3321,34 +3384,34 @@ packages: hasBin: true dev: false - /mobx-lark@1.0.0-rc.10(mobx@5.15.7)(typescript@5.3.2): + /mobx-lark@1.0.0-rc.10(mobx@5.15.7)(typescript@5.3.3): resolution: {integrity: sha512-B0RbtCotxuSkgq2BjcVKEbOxfkXiihDWmvApZoRfDGbEjv79o9XnIUPERyduyr3p8pCjNSOy8jmVTjQ9xy7R9A==} peerDependencies: mobx: '>=4' dependencies: '@swc/helpers': 0.5.3 - koajax: 0.9.5(typescript@5.3.2) + koajax: 0.9.6(typescript@5.3.3) mobx: 5.15.7 - mobx-restful: 0.6.12(mobx@5.15.7)(typescript@5.3.2) + mobx-restful: 0.6.12(mobx@5.15.7)(typescript@5.3.3) regenerator-runtime: 0.14.0 - web-utility: 4.1.3(typescript@5.3.2) + web-utility: 4.1.3(typescript@5.3.3) transitivePeerDependencies: - jsdom - typescript dev: false - /mobx-restful@0.6.12(mobx@5.15.7)(typescript@5.3.2): + /mobx-restful@0.6.12(mobx@5.15.7)(typescript@5.3.3): resolution: {integrity: sha512-T9h++i/Ca31FPiBDNPux4b4kygeBk9SYxn3Ol7Mg9rNLAd/0j2eFG7UQTeL3qgFwEDzq8M1s2SoH0SSZjm9lag==} peerDependencies: mobx: '>=4' dependencies: '@swc/helpers': 0.5.3 class-validator: 0.14.0 - koajax: 0.9.5(typescript@5.3.2) + koajax: 0.9.6(typescript@5.3.3) mobx: 5.15.7 - reflect-metadata: 0.1.13 + reflect-metadata: 0.1.14 regenerator-runtime: 0.14.0 - web-utility: 4.1.3(typescript@5.3.2) + web-utility: 4.1.3(typescript@5.3.3) transitivePeerDependencies: - jsdom - typescript @@ -3905,8 +3968,8 @@ packages: engines: {node: '>=10.13.0'} hasBin: true - /prettier@3.1.0: - resolution: {integrity: sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw==} + /prettier@3.1.1: + resolution: {integrity: sha512-22UbSzg8luF4UuZtzgiUOfcGM8s4tjBv6dJRT7j275NXsy2jb4aJa4NNveul5x4eqlF1wuhuR2RElK71RvmVaw==} engines: {node: '>=14'} hasBin: true dev: true @@ -4146,8 +4209,8 @@ packages: picomatch: 2.3.1 dev: true - /reflect-metadata@0.1.13: - resolution: {integrity: sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==} + /reflect-metadata@0.1.14: + resolution: {integrity: sha512-ZhYeb6nRaXCfhnndflDK8qI6ZQ/YcWZCISRAWICW9XYqMUwjZM9Z0DveWX/ABN01oxSHwVxKQmxeYZSsm0jh5A==} dev: false /regenerator-runtime@0.14.0: @@ -4224,7 +4287,7 @@ packages: lodash.startcase: 4.4.0 openapi3-ts: 2.0.2 path-to-regexp: 6.2.1 - reflect-metadata: 0.1.13 + reflect-metadata: 0.1.14 routing-controllers: 0.10.4(class-transformer@0.5.1)(class-validator@0.14.0) tslib: 2.6.2 dev: false @@ -4239,7 +4302,7 @@ packages: class-validator: 0.14.0 cookie: 0.5.0 glob: 10.3.10 - reflect-metadata: 0.1.13 + reflect-metadata: 0.1.14 template-url: 1.0.0 optionalDependencies: '@koa/multer': 3.0.2(multer@1.4.5-lts.1) @@ -4404,6 +4467,14 @@ packages: is-fullwidth-code-point: 4.0.0 dev: true + /slice-ansi@7.1.0: + resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==} + engines: {node: '>=18'} + dependencies: + ansi-styles: 6.2.1 + is-fullwidth-code-point: 5.0.0 + dev: true + /smart-buffer@4.2.0: resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} @@ -4569,6 +4640,16 @@ packages: eastasianwidth: 0.2.0 emoji-regex: 9.2.2 strip-ansi: 7.1.0 + dev: false + + /string-width@7.0.0: + resolution: {integrity: sha512-GPQHj7row82Hjo9hKZieKcHIhaAIKOJvFSIZXuCU9OASVZrMNUaZuz++SPVrBjnLsnk4k+z9f2EIypgxf2vNFw==} + engines: {node: '>=18'} + dependencies: + emoji-regex: 10.3.0 + get-east-asian-width: 1.2.0 + strip-ansi: 7.1.0 + dev: true /string_decoder@0.10.31: resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==} @@ -4738,7 +4819,7 @@ packages: hasBin: true dev: true - /ts-node-dev@2.0.0(@types/node@18.18.12)(typescript@5.3.2): + /ts-node-dev@2.0.0(@types/node@18.19.3)(typescript@5.3.3): resolution: {integrity: sha512-ywMrhCfH6M75yftYvrvNarLEY+SUXtUvU8/0Z6llrHQVBx12GiFk5sStF8UdfE/yfzk9IAq7O5EEbTQsxlBI8w==} engines: {node: '>=0.8.0'} hasBin: true @@ -4757,16 +4838,16 @@ packages: rimraf: 2.7.1 source-map-support: 0.5.21 tree-kill: 1.2.2 - ts-node: 10.9.1(@types/node@18.18.12)(typescript@5.3.2) + ts-node: 10.9.1(@types/node@18.19.3)(typescript@5.3.3) tsconfig: 7.0.0 - typescript: 5.3.2 + typescript: 5.3.3 transitivePeerDependencies: - '@swc/core' - '@swc/wasm' - '@types/node' dev: true - /ts-node@10.9.1(@types/node@18.18.12)(typescript@5.3.2): + /ts-node@10.9.1(@types/node@18.19.3)(typescript@5.3.3): resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true peerDependencies: @@ -4785,14 +4866,14 @@ packages: '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 18.18.12 + '@types/node': 18.19.3 acorn: 8.11.2 acorn-walk: 8.3.0 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 5.3.2 + typescript: 5.3.3 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 dev: true @@ -4806,6 +4887,10 @@ packages: strip-json-comments: 2.0.1 dev: true + /tslib@2.4.0: + resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==} + dev: false + /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} @@ -4844,9 +4929,9 @@ packages: engines: {node: '>=8'} dev: false - /type-fest@1.4.0: - resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} - engines: {node: '>=10'} + /type-fest@3.13.1: + resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==} + engines: {node: '>=14.16'} dev: true /type-is@1.6.18: @@ -4930,7 +5015,7 @@ packages: glob: 8.1.0 mkdirp: 2.1.6 pg: 8.11.3 - reflect-metadata: 0.1.13 + reflect-metadata: 0.1.14 sha.js: 2.4.11 sqlite3: 5.1.6 tslib: 2.6.2 @@ -4940,8 +5025,8 @@ packages: - supports-color dev: false - /typescript@5.3.2: - resolution: {integrity: sha512-6l+RyNy7oAHDfxC4FzSJcz9vnjTKxrLpDG5M2Vu4SHRVNg6xzqZp6LYSR9zjqQTu8DU/f5xwxUdADOkbrIX2gQ==} + /typescript@5.3.3: + resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} engines: {node: '>=14.17'} hasBin: true @@ -5079,19 +5164,19 @@ packages: xml-name-validator: 4.0.0 dev: false - /web-fetch@1.3.3(@types/node@18.18.12): + /web-fetch@1.3.3(@types/node@18.19.3): resolution: {integrity: sha512-FfNFuYP2+bhsVQhDYt3kCdxnQi3HiMGcYMFLDTqYS7wYREPuJ3XwcR8bEqL9Nk3ldXj2jZMoxAmATKJ56P9uJA==} engines: {node: '>=18'} hasBin: true requiresBuild: true dependencies: - '@tech_query/node-toolkit': 1.2.1(@types/node@18.18.12) + '@tech_query/node-toolkit': 1.2.1(@types/node@18.19.3) '@types/jsdom': 21.1.6 array-unique-proposal: 0.3.4 - commander-jsx: 0.6.9(@types/node@18.18.12) + commander-jsx: 0.6.9(@types/node@18.19.3) file-type: 16.5.4 fs-extra: 11.1.1 - fs-match: 1.7.1(@types/node@18.18.12) + fs-match: 1.7.1(@types/node@18.19.3) jsdom: 22.1.0 lodash.memoize: 4.1.2 node-fetch: 2.7.0 @@ -5116,7 +5201,7 @@ packages: engines: {node: '>= 8'} dev: true - /web-utility@4.1.3(typescript@5.3.2): + /web-utility@4.1.3(typescript@5.3.3): resolution: {integrity: sha512-NLk7jXW/3WKMXxr/THwRilzjjsGmK78nSZJShzcDSwmAmyzKLkG28kxSVX8hw9Eynp+dOKAjeK/CB/kLZec6rQ==} peerDependencies: typescript: '>=4.1' @@ -5124,7 +5209,7 @@ packages: '@swc/helpers': 0.5.3 element-internals-polyfill: 1.3.9 regenerator-runtime: 0.14.0 - typescript: 5.3.2 + typescript: 5.3.3 dev: false /webidl-conversions@3.0.1: @@ -5209,6 +5294,16 @@ packages: ansi-styles: 6.2.1 string-width: 5.1.2 strip-ansi: 7.1.0 + dev: false + + /wrap-ansi@9.0.0: + resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} + engines: {node: '>=18'} + dependencies: + ansi-styles: 6.2.1 + string-width: 7.0.0 + strip-ansi: 7.1.0 + dev: true /wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} @@ -5226,6 +5321,19 @@ packages: optional: true dev: false + /ws@8.5.0: + resolution: {integrity: sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: false + /xml-name-validator@4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} @@ -5333,7 +5441,7 @@ packages: dependencies: '@types/fs-extra': 11.0.4 '@types/minimist': 1.2.5 - '@types/node': 18.18.12 + '@types/node': 18.19.3 '@types/ps-tree': 1.1.6 '@types/which': 3.0.3 chalk: 5.3.0 diff --git a/src/controller/KToken.ts b/src/controller/KToken.ts new file mode 100644 index 0000000..2524898 --- /dev/null +++ b/src/controller/KToken.ts @@ -0,0 +1,75 @@ +import { + Contract, + ContractTransactionResponse, + InfuraProvider, + Wallet +} from 'ethers'; +import { + BodyParam, + Get, + JsonController, + Param, + Post +} from 'routing-controllers'; +import { ResponseSchema } from 'routing-controllers-openapi'; + +import { abi } from '../meta/KToken-contract.json'; +import { ContractMeta, UserMeta } from '../model'; +import { + INFURA_API_KEY, + SEPOLIA_CONTRACT_ADDRESS, + SEPOLIA_PVK +} from '../utility'; + +/** + * Sepolia 测试网 + */ +const network = 'sepolia'; +/** + * Infura 提供的接口密钥,一般是 https://sepolia.infura.io/v3/ 后面接的一串数字, + * 这个 key 用来连接 Infura 的 RPC 端口。 + */ +const provider = new InfuraProvider(network, INFURA_API_KEY); +/** + * Ethereum Sepolia 测试网上账户的私钥, + * 一般是合约的 owner,发送积分的交易使用该账户发放, + * 要确保该账户有足够的钱来支付 gas fee。 + */ +const signer = new Wallet(SEPOLIA_PVK, provider); + +@JsonController('/KToken') +export class KTokenController { + contract = new Contract(SEPOLIA_CONTRACT_ADDRESS, abi, signer); + + @Get('/meta') + @ResponseSchema(ContractMeta) + async getMeta() { + const [name, symbol, owner, decimals, totalSupply] = await Promise.all([ + this.contract.name(), + this.contract.symbol(), + this.contract.owner(), + this.contract.decimals(), + this.contract.totalSupply() + ]); + return { name, symbol, owner, decimals, totalSupply }; + } + + @Get('/user/:address') + @ResponseSchema(UserMeta) + async getUserMeta(@Param('address') address: string) { + const balance = await this.contract.balanceOf(address); + + return { balance }; + } + + @Post('/user/:address/transaction') + async transferToUser( + @Param('address') toAddress: string, + @BodyParam('amount') amount: number + ) { + const transaction: ContractTransactionResponse = + await this.contract.transfer(toAddress, amount); + + return transaction.wait(); + } +} diff --git a/src/controller/index.ts b/src/controller/index.ts index 22ad925..393c089 100644 --- a/src/controller/index.ts +++ b/src/controller/index.ts @@ -4,6 +4,7 @@ import { createAPI } from 'koagger'; import { isProduct } from '../utility'; import { CheckEventController } from './CheckEvent'; import { CrawlerController } from './Crawler'; +import { KTokenController } from './KToken'; import { SessionController } from './Session'; import { UserController } from './User'; @@ -13,6 +14,7 @@ export const { router, swagger, mocker } = createAPI({ SessionController, UserController, CheckEventController, - CrawlerController + CrawlerController, + KTokenController ] }); diff --git a/src/meta/KToken-contract.json b/src/meta/KToken-contract.json new file mode 100644 index 0000000..415dfc2 --- /dev/null +++ b/src/meta/KToken-contract.json @@ -0,0 +1,338 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "KTokenV3", + "sourceName": "contracts/ktoken-v3.sol", + "abi": [ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "subtractedValue", + "type": "uint256" + } + ], + "name": "decreaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "addedValue", + "type": "uint256" + } + ], + "name": "increaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x60806040523480156200001157600080fd5b506040518060400160405280600681526020017f4b546f6b656e00000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f4b544e000000000000000000000000000000000000000000000000000000000081525081600390816200008f9190620006d1565b508060049081620000a19190620006d1565b505050620000c4620000b86200010a60201b60201c565b6200011260201b60201c565b6200010433620000d9620001d860201b60201c565b600a620000e7919062000948565b6305f5e100620000f8919062000999565b620001e160201b60201c565b62000b42565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006012905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000253576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200024a9062000a45565b60405180910390fd5b62000267600083836200034e60201b60201c565b80600260008282546200027b919062000a67565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200032e919062000ab3565b60405180910390a36200034a600083836200042360201b60201c565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480620003c45750620003956200042860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b62000406576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003fd9062000b20565b60405180910390fd5b6200041e8383836200045260201b620006e51760201c565b505050565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620004d957607f821691505b602082108103620004ef57620004ee62000491565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620005597fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200051a565b6200056586836200051a565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620005b2620005ac620005a6846200057d565b62000587565b6200057d565b9050919050565b6000819050919050565b620005ce8362000591565b620005e6620005dd82620005b9565b84845462000527565b825550505050565b600090565b620005fd620005ee565b6200060a818484620005c3565b505050565b5b81811015620006325762000626600082620005f3565b60018101905062000610565b5050565b601f82111562000681576200064b81620004f5565b62000656846200050a565b8101602085101562000666578190505b6200067e62000675856200050a565b8301826200060f565b50505b505050565b600082821c905092915050565b6000620006a66000198460080262000686565b1980831691505092915050565b6000620006c1838362000693565b9150826002028217905092915050565b620006dc8262000457565b67ffffffffffffffff811115620006f857620006f762000462565b5b620007048254620004c0565b6200071182828562000636565b600060209050601f83116001811462000749576000841562000734578287015190505b620007408582620006b3565b865550620007b0565b601f1984166200075986620004f5565b60005b8281101562000783578489015182556001820191506020850194506020810190506200075c565b86831015620007a357848901516200079f601f89168262000693565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000846578086048111156200081e576200081d620007b8565b5b60018516156200082e5780820291505b80810290506200083e85620007e7565b9450620007fe565b94509492505050565b60008262000861576001905062000934565b8162000871576000905062000934565b81600181146200088a57600281146200089557620008cb565b600191505062000934565b60ff841115620008aa57620008a9620007b8565b5b8360020a915084821115620008c457620008c3620007b8565b5b5062000934565b5060208310610133831016604e8410600b8410161715620009055782820a905083811115620008ff57620008fe620007b8565b5b62000934565b620009148484846001620007f4565b925090508184048111156200092e576200092d620007b8565b5b81810290505b9392505050565b600060ff82169050919050565b600062000955826200057d565b915062000962836200093b565b9250620009917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846200084f565b905092915050565b6000620009a6826200057d565b9150620009b3836200057d565b9250828202620009c3816200057d565b91508282048414831517620009dd57620009dc620007b8565b5b5092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000a2d601f83620009e4565b915062000a3a82620009f5565b602082019050919050565b6000602082019050818103600083015262000a608162000a1e565b9050919050565b600062000a74826200057d565b915062000a81836200057d565b925082820190508082111562000a9c5762000a9b620007b8565b5b92915050565b62000aad816200057d565b82525050565b600060208201905062000aca600083018462000aa2565b92915050565b7f546f6b656e207472616e736665722064697361626c6564210000000000000000600082015250565b600062000b08601883620009e4565b915062000b158262000ad0565b602082019050919050565b6000602082019050818103600083015262000b3b8162000af9565b9050919050565b6117098062000b526000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063715018a61161008c578063a457c2d711610066578063a457c2d71461024f578063a9059cbb1461027f578063dd62ed3e146102af578063f2fde38b146102df576100ea565b8063715018a6146102095780638da5cb5b1461021357806395d89b4114610231576100ea565b806323b872dd116100c857806323b872dd1461015b578063313ce5671461018b57806339509351146101a957806370a08231146101d9576100ea565b806306fdde03146100ef578063095ea7b31461010d57806318160ddd1461013d575b600080fd5b6100f76102fb565b6040516101049190610e52565b60405180910390f35b61012760048036038101906101229190610f0d565b61038d565b6040516101349190610f68565b60405180910390f35b6101456103b0565b6040516101529190610f92565b60405180910390f35b61017560048036038101906101709190610fad565b6103ba565b6040516101829190610f68565b60405180910390f35b6101936103e9565b6040516101a0919061101c565b60405180910390f35b6101c360048036038101906101be9190610f0d565b6103f2565b6040516101d09190610f68565b60405180910390f35b6101f360048036038101906101ee9190611037565b610429565b6040516102009190610f92565b60405180910390f35b610211610471565b005b61021b610485565b6040516102289190611073565b60405180910390f35b6102396104af565b6040516102469190610e52565b60405180910390f35b61026960048036038101906102649190610f0d565b610541565b6040516102769190610f68565b60405180910390f35b61029960048036038101906102949190610f0d565b6105b8565b6040516102a69190610f68565b60405180910390f35b6102c960048036038101906102c4919061108e565b6105db565b6040516102d69190610f92565b60405180910390f35b6102f960048036038101906102f49190611037565b610662565b005b60606003805461030a906110fd565b80601f0160208091040260200160405190810160405280929190818152602001828054610336906110fd565b80156103835780601f1061035857610100808354040283529160200191610383565b820191906000526020600020905b81548152906001019060200180831161036657829003601f168201915b5050505050905090565b6000806103986106ea565b90506103a58185856106f2565b600191505092915050565b6000600254905090565b6000806103c56106ea565b90506103d28582856108bb565b6103dd858585610947565b60019150509392505050565b60006012905090565b6000806103fd6106ea565b905061041e81858561040f85896105db565b610419919061115d565b6106f2565b600191505092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610479610bbd565b6104836000610c3b565b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546104be906110fd565b80601f01602080910402602001604051908101604052809291908181526020018280546104ea906110fd565b80156105375780601f1061050c57610100808354040283529160200191610537565b820191906000526020600020905b81548152906001019060200180831161051a57829003601f168201915b5050505050905090565b60008061054c6106ea565b9050600061055a82866105db565b90508381101561059f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161059690611203565b60405180910390fd5b6105ac82868684036106f2565b60019250505092915050565b6000806105c36106ea565b90506105d0818585610947565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61066a610bbd565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036106d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106d090611295565b60405180910390fd5b6106e281610c3b565b50565b505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610761576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075890611327565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036107d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c7906113b9565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516108ae9190610f92565b60405180910390a3505050565b60006108c784846105db565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146109415781811015610933576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092a90611425565b60405180910390fd5b61094084848484036106f2565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036109b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ad906114b7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1c90611549565b60405180910390fd5b610a30838383610d01565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610ab6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aad906115db565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610ba49190610f92565b60405180910390a3610bb7848484610dbd565b50505050565b610bc56106ea565b73ffffffffffffffffffffffffffffffffffffffff16610be3610485565b73ffffffffffffffffffffffffffffffffffffffff1614610c39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3090611647565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610d6e5750610d3f610485565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b610dad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da4906116b3565b60405180910390fd5b610db88383836106e5565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610dfc578082015181840152602081019050610de1565b60008484015250505050565b6000601f19601f8301169050919050565b6000610e2482610dc2565b610e2e8185610dcd565b9350610e3e818560208601610dde565b610e4781610e08565b840191505092915050565b60006020820190508181036000830152610e6c8184610e19565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610ea482610e79565b9050919050565b610eb481610e99565b8114610ebf57600080fd5b50565b600081359050610ed181610eab565b92915050565b6000819050919050565b610eea81610ed7565b8114610ef557600080fd5b50565b600081359050610f0781610ee1565b92915050565b60008060408385031215610f2457610f23610e74565b5b6000610f3285828601610ec2565b9250506020610f4385828601610ef8565b9150509250929050565b60008115159050919050565b610f6281610f4d565b82525050565b6000602082019050610f7d6000830184610f59565b92915050565b610f8c81610ed7565b82525050565b6000602082019050610fa76000830184610f83565b92915050565b600080600060608486031215610fc657610fc5610e74565b5b6000610fd486828701610ec2565b9350506020610fe586828701610ec2565b9250506040610ff686828701610ef8565b9150509250925092565b600060ff82169050919050565b61101681611000565b82525050565b6000602082019050611031600083018461100d565b92915050565b60006020828403121561104d5761104c610e74565b5b600061105b84828501610ec2565b91505092915050565b61106d81610e99565b82525050565b60006020820190506110886000830184611064565b92915050565b600080604083850312156110a5576110a4610e74565b5b60006110b385828601610ec2565b92505060206110c485828601610ec2565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061111557607f821691505b602082108103611128576111276110ce565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061116882610ed7565b915061117383610ed7565b925082820190508082111561118b5761118a61112e565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006111ed602583610dcd565b91506111f882611191565b604082019050919050565b6000602082019050818103600083015261121c816111e0565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061127f602683610dcd565b915061128a82611223565b604082019050919050565b600060208201905081810360008301526112ae81611272565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000611311602483610dcd565b915061131c826112b5565b604082019050919050565b6000602082019050818103600083015261134081611304565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006113a3602283610dcd565b91506113ae82611347565b604082019050919050565b600060208201905081810360008301526113d281611396565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b600061140f601d83610dcd565b915061141a826113d9565b602082019050919050565b6000602082019050818103600083015261143e81611402565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006114a1602583610dcd565b91506114ac82611445565b604082019050919050565b600060208201905081810360008301526114d081611494565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000611533602383610dcd565b915061153e826114d7565b604082019050919050565b6000602082019050818103600083015261156281611526565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006115c5602683610dcd565b91506115d082611569565b604082019050919050565b600060208201905081810360008301526115f4816115b8565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611631602083610dcd565b915061163c826115fb565b602082019050919050565b6000602082019050818103600083015261166081611624565b9050919050565b7f546f6b656e207472616e736665722064697361626c6564210000000000000000600082015250565b600061169d601883610dcd565b91506116a882611667565b602082019050919050565b600060208201905081810360008301526116cc81611690565b905091905056fea264697066735822122042f13df6a66f727de99cb15d8e9ac463a4468fa6b498b15c0b0864359e848d3b64736f6c63430008120033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063715018a61161008c578063a457c2d711610066578063a457c2d71461024f578063a9059cbb1461027f578063dd62ed3e146102af578063f2fde38b146102df576100ea565b8063715018a6146102095780638da5cb5b1461021357806395d89b4114610231576100ea565b806323b872dd116100c857806323b872dd1461015b578063313ce5671461018b57806339509351146101a957806370a08231146101d9576100ea565b806306fdde03146100ef578063095ea7b31461010d57806318160ddd1461013d575b600080fd5b6100f76102fb565b6040516101049190610e52565b60405180910390f35b61012760048036038101906101229190610f0d565b61038d565b6040516101349190610f68565b60405180910390f35b6101456103b0565b6040516101529190610f92565b60405180910390f35b61017560048036038101906101709190610fad565b6103ba565b6040516101829190610f68565b60405180910390f35b6101936103e9565b6040516101a0919061101c565b60405180910390f35b6101c360048036038101906101be9190610f0d565b6103f2565b6040516101d09190610f68565b60405180910390f35b6101f360048036038101906101ee9190611037565b610429565b6040516102009190610f92565b60405180910390f35b610211610471565b005b61021b610485565b6040516102289190611073565b60405180910390f35b6102396104af565b6040516102469190610e52565b60405180910390f35b61026960048036038101906102649190610f0d565b610541565b6040516102769190610f68565b60405180910390f35b61029960048036038101906102949190610f0d565b6105b8565b6040516102a69190610f68565b60405180910390f35b6102c960048036038101906102c4919061108e565b6105db565b6040516102d69190610f92565b60405180910390f35b6102f960048036038101906102f49190611037565b610662565b005b60606003805461030a906110fd565b80601f0160208091040260200160405190810160405280929190818152602001828054610336906110fd565b80156103835780601f1061035857610100808354040283529160200191610383565b820191906000526020600020905b81548152906001019060200180831161036657829003601f168201915b5050505050905090565b6000806103986106ea565b90506103a58185856106f2565b600191505092915050565b6000600254905090565b6000806103c56106ea565b90506103d28582856108bb565b6103dd858585610947565b60019150509392505050565b60006012905090565b6000806103fd6106ea565b905061041e81858561040f85896105db565b610419919061115d565b6106f2565b600191505092915050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610479610bbd565b6104836000610c3b565b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546104be906110fd565b80601f01602080910402602001604051908101604052809291908181526020018280546104ea906110fd565b80156105375780601f1061050c57610100808354040283529160200191610537565b820191906000526020600020905b81548152906001019060200180831161051a57829003601f168201915b5050505050905090565b60008061054c6106ea565b9050600061055a82866105db565b90508381101561059f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161059690611203565b60405180910390fd5b6105ac82868684036106f2565b60019250505092915050565b6000806105c36106ea565b90506105d0818585610947565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61066a610bbd565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036106d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106d090611295565b60405180910390fd5b6106e281610c3b565b50565b505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610761576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075890611327565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036107d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c7906113b9565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516108ae9190610f92565b60405180910390a3505050565b60006108c784846105db565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146109415781811015610933576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092a90611425565b60405180910390fd5b61094084848484036106f2565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036109b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ad906114b7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1c90611549565b60405180910390fd5b610a30838383610d01565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015610ab6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aad906115db565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610ba49190610f92565b60405180910390a3610bb7848484610dbd565b50505050565b610bc56106ea565b73ffffffffffffffffffffffffffffffffffffffff16610be3610485565b73ffffffffffffffffffffffffffffffffffffffff1614610c39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3090611647565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610d6e5750610d3f610485565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b610dad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da4906116b3565b60405180910390fd5b610db88383836106e5565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015610dfc578082015181840152602081019050610de1565b60008484015250505050565b6000601f19601f8301169050919050565b6000610e2482610dc2565b610e2e8185610dcd565b9350610e3e818560208601610dde565b610e4781610e08565b840191505092915050565b60006020820190508181036000830152610e6c8184610e19565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610ea482610e79565b9050919050565b610eb481610e99565b8114610ebf57600080fd5b50565b600081359050610ed181610eab565b92915050565b6000819050919050565b610eea81610ed7565b8114610ef557600080fd5b50565b600081359050610f0781610ee1565b92915050565b60008060408385031215610f2457610f23610e74565b5b6000610f3285828601610ec2565b9250506020610f4385828601610ef8565b9150509250929050565b60008115159050919050565b610f6281610f4d565b82525050565b6000602082019050610f7d6000830184610f59565b92915050565b610f8c81610ed7565b82525050565b6000602082019050610fa76000830184610f83565b92915050565b600080600060608486031215610fc657610fc5610e74565b5b6000610fd486828701610ec2565b9350506020610fe586828701610ec2565b9250506040610ff686828701610ef8565b9150509250925092565b600060ff82169050919050565b61101681611000565b82525050565b6000602082019050611031600083018461100d565b92915050565b60006020828403121561104d5761104c610e74565b5b600061105b84828501610ec2565b91505092915050565b61106d81610e99565b82525050565b60006020820190506110886000830184611064565b92915050565b600080604083850312156110a5576110a4610e74565b5b60006110b385828601610ec2565b92505060206110c485828601610ec2565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061111557607f821691505b602082108103611128576111276110ce565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061116882610ed7565b915061117383610ed7565b925082820190508082111561118b5761118a61112e565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006111ed602583610dcd565b91506111f882611191565b604082019050919050565b6000602082019050818103600083015261121c816111e0565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061127f602683610dcd565b915061128a82611223565b604082019050919050565b600060208201905081810360008301526112ae81611272565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000611311602483610dcd565b915061131c826112b5565b604082019050919050565b6000602082019050818103600083015261134081611304565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006113a3602283610dcd565b91506113ae82611347565b604082019050919050565b600060208201905081810360008301526113d281611396565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b600061140f601d83610dcd565b915061141a826113d9565b602082019050919050565b6000602082019050818103600083015261143e81611402565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006114a1602583610dcd565b91506114ac82611445565b604082019050919050565b600060208201905081810360008301526114d081611494565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000611533602383610dcd565b915061153e826114d7565b604082019050919050565b6000602082019050818103600083015261156281611526565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006115c5602683610dcd565b91506115d082611569565b604082019050919050565b600060208201905081810360008301526115f4816115b8565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611631602083610dcd565b915061163c826115fb565b602082019050919050565b6000602082019050818103600083015261166081611624565b9050919050565b7f546f6b656e207472616e736665722064697361626c6564210000000000000000600082015250565b600061169d601883610dcd565b91506116a882611667565b602082019050919050565b600060208201905081810360008301526116cc81611690565b905091905056fea264697066735822122042f13df6a66f727de99cb15d8e9ac463a4468fa6b498b15c0b0864359e848d3b64736f6c63430008120033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/src/model/KToken.ts b/src/model/KToken.ts new file mode 100644 index 0000000..7e0604e --- /dev/null +++ b/src/model/KToken.ts @@ -0,0 +1,34 @@ +import { IsInt, IsNumber, IsString } from 'class-validator'; + +export class ContractMeta { + /** + * token 名称 + */ + @IsString() + name: string; + /** + * token 符号 + */ + @IsString() + symbol: string; + /** + * ERC20 合约所有者 + */ + @IsString() + owner: string; + /** + * ERC20 合约小数位数 + */ + @IsInt() + decimals: number; + /** + * token 总发行数 + */ + @IsInt() + totalSupply: number; +} + +export class UserMeta { + @IsNumber() + balance: number; +} diff --git a/src/model/index.ts b/src/model/index.ts index fb64022..5184ff8 100644 --- a/src/model/index.ts +++ b/src/model/index.ts @@ -9,6 +9,7 @@ import { User } from './User'; export * from './Base'; export * from './CheckEvent'; export * from './Crawler'; +export * from './KToken'; export * from './User'; const { ssl, host, port, user, password, database } = isProduct diff --git a/src/utility.ts b/src/utility.ts index 2ce36d3..6f854e0 100644 --- a/src/utility.ts +++ b/src/utility.ts @@ -12,7 +12,10 @@ export const { WEB_HOOK_TOKEN, AUTHING_APP_SECRET, LARK_APP_ID, - LARK_APP_SECRET + LARK_APP_SECRET, + INFURA_API_KEY, + SEPOLIA_PVK, + SEPOLIA_CONTRACT_ADDRESS } = process.env; export const isProduct = NODE_ENV === 'production'; diff --git a/tsconfig.json b/tsconfig.json index e2408fc..bc79b52 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -4,6 +4,7 @@ "module": "CommonJS", "moduleResolution": "Node", "esModuleInterop": true, + "resolveJsonModule": true, "experimentalDecorators": true, "emitDecoratorMetadata": true, "declaration": true, diff --git a/type/package.json b/type/package.json index fb15746..fffa01d 100644 --- a/type/package.json +++ b/type/package.json @@ -1,10 +1,10 @@ { "name": "@kaiyuanshe/kys-service", - "version": "0.6.9", + "version": "0.7.0", "types": "index.d.ts", "dependencies": { - "@types/jsonwebtoken": "^9.0.3", - "@types/koa": "^2.13.9", + "@types/jsonwebtoken": "^9.0.5", + "@types/koa": "^2.13.12", "mobx-restful": "^0.6.12" }, "peerDependencies": {