diff --git a/packages/starksheet-webapp/package-lock.json b/packages/starksheet-webapp/package-lock.json index 7ebd51be..d35a674d 100644 --- a/packages/starksheet-webapp/package-lock.json +++ b/packages/starksheet-webapp/package-lock.json @@ -7,8 +7,8 @@ "": { "name": "onsheet-webapp", "version": "0.2.0", - "hasInstallScript": true, "dependencies": { + "@argent/get-starknet": "^6.4.7", "@emotion/react": "^11.9.3", "@emotion/styled": "^11.9.3", "@mui/material": "^5.8.6", @@ -25,7 +25,7 @@ "ethers": "5.7.2", "ethers-multisend": "^2.4.0", "expr-eval": "^2.0.2", - "get-starknet": "^2.0.0", + "get-starknet": "^3.0.0", "notistack": "^2.0.5", "react": "^18.2.0", "react-contenteditable": "^3.3.6", @@ -33,16 +33,15 @@ "react-hotkeys": "^2.0.0", "react-router-dom": "^6.10.0", "react-scripts": "5.0.1", - "starknet": "^4.22.0", + "starknet": "^5.18.0", "ts-toolbelt": "^9.6.0", "web-vitals": "^2.1.4", "wido-widget": "^1.0.8" }, "devDependencies": { - "@typechain/ethers-v5": "^11.0.0", "@types/bn.js": "^5.1.0", "prettier": "2.7.1", - "typechain": "^8.2.0", + "typechain": "^8.1.0", "typescript": "^4.8.2" } }, @@ -59,41 +58,42 @@ } }, "node_modules/@argent/get-starknet": { - "version": "5.3.21", - "resolved": "https://registry.npmjs.org/@argent/get-starknet/-/get-starknet-5.3.21.tgz", - "integrity": "sha512-ykxyo5EgEHTsTLK95ILHtkigVxI/OTt6n2IfYpNi9ZJNjazLyoGiN2GG7tT8C38giasR0Wpmq6NJB74efX07oQ==", + "version": "6.4.7", + "resolved": "https://registry.npmjs.org/@argent/get-starknet/-/get-starknet-6.4.7.tgz", + "integrity": "sha512-OcNIyS8nFl436hVkhfmQvwx4Ny41nWgoDVzMF29MrkGW/OtWXyGLcTvrYGsuZj0EBDvdSxQ5I5Y58FFTBP4KaQ==", "dependencies": { - "get-starknet": "^1.0.0" + "@argent/web-sdk": "^6.4.1", + "@argent/x-window": "^6.4.0", + "bowser": "^2.11.0", + "get-starknet-core": "^3.1.0", + "lodash-es": "^4.17.21", + "svelte-forms": "^2.3.1" + }, + "peerDependencies": { + "starknet": "5.18.0" } }, - "node_modules/@argent/get-starknet/node_modules/get-starknet": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/get-starknet/-/get-starknet-1.5.0.tgz", - "integrity": "sha512-6A14mdPoMwO4orETjG5D+wwaZOzuAyNp/5+ZlDJnU+UU7QRGMYILUo8WjgqeVTg0mcN0BZoUE0C/Qhgd7dBvVQ==", + "node_modules/@argent/web-sdk": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@argent/web-sdk/-/web-sdk-6.4.1.tgz", + "integrity": "sha512-QDWmxlv0KhJKE6vqyQ1nWhcM3eRXyz0b0poA1u4r/205gnJcD8sy+EvuAAmav4mUdkmHvReEnqSXevDZ2iriuA==", "dependencies": { - "bowser": "^2.11.0" + "@argent/x-window": "^6.4.0", + "get-starknet-core": "^3.0.1", + "lodash-es": "^4.17.21", + "trpc-browser": "^1.3.2" }, "peerDependencies": { - "starknet": "^3.12.3" + "starknet": "5.12.0" } }, - "node_modules/@argent/get-starknet/node_modules/starknet": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/starknet/-/starknet-3.19.0.tgz", - "integrity": "sha512-1iUJdGtRDu2j3G8sS+yzRhp9O3O5Dr803oDfrm234Qmn05JTh5bU/wZwFPw9zWmMI0jyNZgjS+8dxPpBcpLgrQ==", - "peer": true, - "dependencies": { - "@ethersproject/bytes": "^5.6.1", - "bn.js": "^5.2.1", - "cross-fetch": "^3.1.5", - "elliptic": "^6.5.4", - "ethereum-cryptography": "^1.0.3", - "hash.js": "^1.1.7", - "json-bigint": "^1.0.0", - "minimalistic-assert": "^1.0.1", - "pako": "^2.0.4", - "ts-custom-error": "^3.2.0", - "url-join": "^4.0.1" + "node_modules/@argent/x-window": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@argent/x-window/-/x-window-6.4.0.tgz", + "integrity": "sha512-fGFUWCrtnH8OJl+OnvUh/EdCdru8cfnftOls6XgzqwZLqhNC7PMQnKEP3WR+xL+C6pzja1K2hlK84qSap+WMYA==", + "peerDependencies": { + "starknet": "^4.21.0", + "zod": "^3.20.6" } }, "node_modules/@babel/code-frame": { @@ -4499,6 +4499,31 @@ "resolved": "https://registry.npmjs.org/@multiformats/base-x/-/base-x-4.0.1.tgz", "integrity": "sha512-eMk0b9ReBbV23xXU693TAIrLyeO5iTgBZGSJfpqriG8UkYvr/hC9u9pyMlAakDNHWmbhMZCDs6KQO0jzKD8OTw==" }, + "node_modules/@noble/curves": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.0.0.tgz", + "integrity": "sha512-2upgEu0iLiDVDZkNLeFV2+ht0BAVgQnEmCk6JsOch9Rp8xfkMCbvbAZlA2pBHQc73dbl+vFOXfqkf4uemdn0bw==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "@noble/hashes": "1.3.0" + } + }, + "node_modules/@noble/curves/node_modules/@noble/hashes": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.0.tgz", + "integrity": "sha512-ilHEACi9DwqJB0pw7kv+Apvh50jiiSyR/cQ3y4W7lOR5mhvn/50FLUfsnfJz0BDZtl/RR16kXvptiv6q1msYZg==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ] + }, "node_modules/@noble/hashes": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.1.tgz", @@ -6133,6 +6158,27 @@ "node": ">= 6" } }, + "node_modules/@trpc/client": { + "version": "10.38.0", + "resolved": "https://registry.npmjs.org/@trpc/client/-/client-10.38.0.tgz", + "integrity": "sha512-+uFQeyzVBoWDYt0Oyj+hLUJeBJjMyj/yxfm9s23EU+Y50YZVRSnB9dmAfI6jAAcehJubNLu2NH+jyEJrOen+aA==", + "funding": [ + "https://trpc.io/sponsor" + ], + "peer": true, + "peerDependencies": { + "@trpc/server": "10.38.0" + } + }, + "node_modules/@trpc/server": { + "version": "10.38.0", + "resolved": "https://registry.npmjs.org/@trpc/server/-/server-10.38.0.tgz", + "integrity": "sha512-uMjWTMhqOPVmdiqPFOYwsdQ6Vzy8FtRcgM+ld3OrHsD88NiwZ1BWNIC6KwffjgrgLG/uKBFzNNKntLryv0NamQ==", + "funding": [ + "https://trpc.io/sponsor" + ], + "peer": true + }, "node_modules/@trysound/sax": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", @@ -6141,23 +6187,6 @@ "node": ">=10.13.0" } }, - "node_modules/@typechain/ethers-v5": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-11.0.0.tgz", - "integrity": "sha512-JDAvOjtzGuEQukgArIEseHznS2+v+vG3TpfODjNj4tu1kgmVu66G9gk7THOO04HJ5q+OJSLx9b46lc3GRGPIVA==", - "dev": true, - "dependencies": { - "lodash": "^4.17.15", - "ts-essentials": "^7.0.1" - }, - "peerDependencies": { - "@ethersproject/abi": "^5.0.0", - "@ethersproject/providers": "^5.0.0", - "ethers": "^5.1.3", - "typechain": "^8.2.0", - "typescript": ">=4.3.0" - } - }, "node_modules/@types/aria-query": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-4.2.2.tgz", @@ -12784,20 +12813,20 @@ } }, "node_modules/get-starknet": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-starknet/-/get-starknet-2.0.0.tgz", - "integrity": "sha512-MT5jMq0ARo4yE1MhPeWwDw2A0sp+X+HETJoZXqEzhkmeN6lv/eefpEyBbjFCleyEEnpTkZfxqhgFCnDK4OUPoA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/get-starknet/-/get-starknet-3.0.1.tgz", + "integrity": "sha512-EyUl+DVQH5PXW2OUdY06/yaqlMizzLKRLzp3S+VhYz+l6wGvW5pmhTXHLaYI4hWfebIDfFkFvAPxVPv/TkWLyA==", "dependencies": { "bowser": "^2.11.0", - "get-starknet-core": "^2.0.0" + "get-starknet-core": "^3.0.1" } }, "node_modules/get-starknet-core": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/get-starknet-core/-/get-starknet-core-2.0.1.tgz", - "integrity": "sha512-uYI8wn9a2iyIfJRSJeZvoIvAWq495AKP5U154kFf/Izet+nP/VilTxKUG6CxdUwe9KuBpG0UZE9ODIxPgBYo2w==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/get-starknet-core/-/get-starknet-core-3.2.0.tgz", + "integrity": "sha512-SZhxtLlKoPKLZ2H3l9WIU7CiNmkL3qLWGksALmvZdAXa/9PykYfLtvIB5B8A2UZMpf2ojTZlWLfuo1KhgmVobA==", "peerDependencies": { - "starknet": "^4.9.0" + "starknet": "^5.18.0" }, "peerDependenciesMeta": { "starknet": { @@ -14193,6 +14222,11 @@ "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==" }, + "node_modules/is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==" + }, "node_modules/is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", @@ -16870,6 +16904,11 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + }, "node_modules/lodash.camelcase": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", @@ -16998,6 +17037,11 @@ "loose-envify": "cli.js" } }, + "node_modules/lossless-json": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/lossless-json/-/lossless-json-2.0.11.tgz", + "integrity": "sha512-BP0vn+NGYvzDielvBZaFain/wgeJ1hTvURCqtKvhr1SCPePdaaTanmmcplrHfEJSJOUql7hk4FHwToNJjWRY3g==" + }, "node_modules/lower-case": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", @@ -17198,6 +17242,32 @@ "node": ">= 0.6" } }, + "node_modules/micro-starknet": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/micro-starknet/-/micro-starknet-0.2.3.tgz", + "integrity": "sha512-6XBcC+GerlwJSR4iA0VaeXtS2wrayWFcA4PEzrJPMuFmWCaUtuGIq5K/DB5F/XgnL54/zl2Bxo690Lj7mYVA8A==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "@noble/curves": "~1.0.0", + "@noble/hashes": "~1.3.0" + } + }, + "node_modules/micro-starknet/node_modules/@noble/hashes": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", @@ -22203,20 +22273,15 @@ } }, "node_modules/starknet": { - "version": "4.22.0", - "resolved": "https://registry.npmjs.org/starknet/-/starknet-4.22.0.tgz", - "integrity": "sha512-jC9Taxb6a/ht9zmS1LU/DSLfwJKpgCJnE9AktVksc5SE/+jQMpqxsq6fm7PRiqupjiqRC1DOS8N47cj+KaGv4Q==", + "version": "5.18.0", + "resolved": "https://registry.npmjs.org/starknet/-/starknet-5.18.0.tgz", + "integrity": "sha512-2b5+F+kfp8fTBAfBpHNmtjhuljZb3P2JMhubP/KWIJAGXwBAalPklOwEYY7Bb2slkPjfkDH0kPxI4037sQcQ+Q==", "dependencies": { - "@ethersproject/bytes": "^5.6.1", - "bn.js": "^5.2.1", - "elliptic": "^6.5.4", - "ethereum-cryptography": "^1.0.3", - "hash.js": "^1.1.7", + "@noble/curves": "~1.0.0", "isomorphic-fetch": "^3.0.0", - "json-bigint": "^1.0.0", - "minimalistic-assert": "^1.0.1", + "lossless-json": "^2.0.8", + "micro-starknet": "~0.2.1", "pako": "^2.0.4", - "ts-custom-error": "^3.3.1", "url-join": "^4.0.1" } }, @@ -22624,6 +22689,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/svelte-forms": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/svelte-forms/-/svelte-forms-2.3.1.tgz", + "integrity": "sha512-ExX9PM0JgvdOWlHl2ztD7XzLNPOPt9U5hBKV8sUAisMfcYWpPRnyz+6EFmh35BOBGJJmuhTDBGm5/7seLjOTIA==", + "dependencies": { + "is-promise": "^4.0.0" + } + }, "node_modules/svg-parser": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", @@ -23237,6 +23310,15 @@ "node": ">=8" } }, + "node_modules/trpc-browser": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/trpc-browser/-/trpc-browser-1.3.2.tgz", + "integrity": "sha512-cXrm7kq+WD8yJfVB8B4pmyL8C0W//Dy+tJq7ohl6fKSK5lfmRIXAlKkNQg/cRZl7YVH/0Xo3NBqcEhVggOCC9A==", + "peerDependencies": { + "@trpc/client": "^10.0.0", + "@trpc/server": "^10.0.0" + } + }, "node_modules/tryer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", @@ -23631,9 +23713,9 @@ } }, "node_modules/typescript": { - "version": "4.8.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.2.tgz", - "integrity": "sha512-C0I1UsrrDHo2fYI5oaCGbSejwX4ch+9Y5jTQELvovfmFkK3HHSZJB8MSJcWLmCUBzQBchCrZ9rMRV6GuNrvGtw==", + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -25021,6 +25103,44 @@ "styled-components": ">=5" } }, + "node_modules/wido-widget/node_modules/@argent/get-starknet": { + "version": "5.3.21", + "resolved": "https://registry.npmjs.org/@argent/get-starknet/-/get-starknet-5.3.21.tgz", + "integrity": "sha512-ykxyo5EgEHTsTLK95ILHtkigVxI/OTt6n2IfYpNi9ZJNjazLyoGiN2GG7tT8C38giasR0Wpmq6NJB74efX07oQ==", + "dependencies": { + "get-starknet": "^1.0.0" + } + }, + "node_modules/wido-widget/node_modules/@argent/get-starknet/node_modules/get-starknet": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/get-starknet/-/get-starknet-1.5.0.tgz", + "integrity": "sha512-6A14mdPoMwO4orETjG5D+wwaZOzuAyNp/5+ZlDJnU+UU7QRGMYILUo8WjgqeVTg0mcN0BZoUE0C/Qhgd7dBvVQ==", + "dependencies": { + "bowser": "^2.11.0" + }, + "peerDependencies": { + "starknet": "^3.12.3" + } + }, + "node_modules/wido-widget/node_modules/@argent/get-starknet/node_modules/starknet": { + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/starknet/-/starknet-3.19.0.tgz", + "integrity": "sha512-1iUJdGtRDu2j3G8sS+yzRhp9O3O5Dr803oDfrm234Qmn05JTh5bU/wZwFPw9zWmMI0jyNZgjS+8dxPpBcpLgrQ==", + "peer": true, + "dependencies": { + "@ethersproject/bytes": "^5.6.1", + "bn.js": "^5.2.1", + "cross-fetch": "^3.1.5", + "elliptic": "^6.5.4", + "ethereum-cryptography": "^1.0.3", + "hash.js": "^1.1.7", + "json-bigint": "^1.0.0", + "minimalistic-assert": "^1.0.1", + "pako": "^2.0.4", + "ts-custom-error": "^3.2.0", + "url-join": "^4.0.1" + } + }, "node_modules/wido-widget/node_modules/ajv": { "version": "8.12.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", @@ -25041,6 +25161,24 @@ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, + "node_modules/wido-widget/node_modules/starknet": { + "version": "4.22.0", + "resolved": "https://registry.npmjs.org/starknet/-/starknet-4.22.0.tgz", + "integrity": "sha512-jC9Taxb6a/ht9zmS1LU/DSLfwJKpgCJnE9AktVksc5SE/+jQMpqxsq6fm7PRiqupjiqRC1DOS8N47cj+KaGv4Q==", + "dependencies": { + "@ethersproject/bytes": "^5.6.1", + "bn.js": "^5.2.1", + "elliptic": "^6.5.4", + "ethereum-cryptography": "^1.0.3", + "hash.js": "^1.1.7", + "isomorphic-fetch": "^3.0.0", + "json-bigint": "^1.0.0", + "minimalistic-assert": "^1.0.1", + "pako": "^2.0.4", + "ts-custom-error": "^3.3.1", + "url-join": "^4.0.1" + } + }, "node_modules/word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", @@ -25617,6 +25755,15 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } + }, + "node_modules/zod": { + "version": "3.22.2", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.2.tgz", + "integrity": "sha512-wvWkphh5WQsJbVk1tbx1l1Ly4yg+XecD+Mq280uBGt9wa5BKSWf4Mhp6GmrkPixhMxmabYY7RbzlwVP32pbGCg==", + "peer": true, + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } } }, "dependencies": { @@ -25630,42 +25777,35 @@ } }, "@argent/get-starknet": { - "version": "5.3.21", - "resolved": "https://registry.npmjs.org/@argent/get-starknet/-/get-starknet-5.3.21.tgz", - "integrity": "sha512-ykxyo5EgEHTsTLK95ILHtkigVxI/OTt6n2IfYpNi9ZJNjazLyoGiN2GG7tT8C38giasR0Wpmq6NJB74efX07oQ==", + "version": "6.4.7", + "resolved": "https://registry.npmjs.org/@argent/get-starknet/-/get-starknet-6.4.7.tgz", + "integrity": "sha512-OcNIyS8nFl436hVkhfmQvwx4Ny41nWgoDVzMF29MrkGW/OtWXyGLcTvrYGsuZj0EBDvdSxQ5I5Y58FFTBP4KaQ==", "requires": { - "get-starknet": "^1.0.0" - }, - "dependencies": { - "get-starknet": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/get-starknet/-/get-starknet-1.5.0.tgz", - "integrity": "sha512-6A14mdPoMwO4orETjG5D+wwaZOzuAyNp/5+ZlDJnU+UU7QRGMYILUo8WjgqeVTg0mcN0BZoUE0C/Qhgd7dBvVQ==", - "requires": { - "bowser": "^2.11.0" - } - }, - "starknet": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/starknet/-/starknet-3.19.0.tgz", - "integrity": "sha512-1iUJdGtRDu2j3G8sS+yzRhp9O3O5Dr803oDfrm234Qmn05JTh5bU/wZwFPw9zWmMI0jyNZgjS+8dxPpBcpLgrQ==", - "peer": true, - "requires": { - "@ethersproject/bytes": "^5.6.1", - "bn.js": "^5.2.1", - "cross-fetch": "^3.1.5", - "elliptic": "^6.5.4", - "ethereum-cryptography": "^1.0.3", - "hash.js": "^1.1.7", - "json-bigint": "^1.0.0", - "minimalistic-assert": "^1.0.1", - "pako": "^2.0.4", - "ts-custom-error": "^3.2.0", - "url-join": "^4.0.1" - } - } + "@argent/web-sdk": "^6.4.1", + "@argent/x-window": "^6.4.0", + "bowser": "^2.11.0", + "get-starknet-core": "^3.1.0", + "lodash-es": "^4.17.21", + "svelte-forms": "^2.3.1" } }, + "@argent/web-sdk": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@argent/web-sdk/-/web-sdk-6.4.1.tgz", + "integrity": "sha512-QDWmxlv0KhJKE6vqyQ1nWhcM3eRXyz0b0poA1u4r/205gnJcD8sy+EvuAAmav4mUdkmHvReEnqSXevDZ2iriuA==", + "requires": { + "@argent/x-window": "^6.4.0", + "get-starknet-core": "^3.0.1", + "lodash-es": "^4.17.21", + "trpc-browser": "^1.3.2" + } + }, + "@argent/x-window": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/@argent/x-window/-/x-window-6.4.0.tgz", + "integrity": "sha512-fGFUWCrtnH8OJl+OnvUh/EdCdru8cfnftOls6XgzqwZLqhNC7PMQnKEP3WR+xL+C6pzja1K2hlK84qSap+WMYA==", + "requires": {} + }, "@babel/code-frame": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", @@ -28640,6 +28780,21 @@ "resolved": "https://registry.npmjs.org/@multiformats/base-x/-/base-x-4.0.1.tgz", "integrity": "sha512-eMk0b9ReBbV23xXU693TAIrLyeO5iTgBZGSJfpqriG8UkYvr/hC9u9pyMlAakDNHWmbhMZCDs6KQO0jzKD8OTw==" }, + "@noble/curves": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.0.0.tgz", + "integrity": "sha512-2upgEu0iLiDVDZkNLeFV2+ht0BAVgQnEmCk6JsOch9Rp8xfkMCbvbAZlA2pBHQc73dbl+vFOXfqkf4uemdn0bw==", + "requires": { + "@noble/hashes": "1.3.0" + }, + "dependencies": { + "@noble/hashes": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.0.tgz", + "integrity": "sha512-ilHEACi9DwqJB0pw7kv+Apvh50jiiSyR/cQ3y4W7lOR5mhvn/50FLUfsnfJz0BDZtl/RR16kXvptiv6q1msYZg==" + } + } + }, "@noble/hashes": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.1.1.tgz", @@ -29869,21 +30024,24 @@ "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==" }, + "@trpc/client": { + "version": "10.38.0", + "resolved": "https://registry.npmjs.org/@trpc/client/-/client-10.38.0.tgz", + "integrity": "sha512-+uFQeyzVBoWDYt0Oyj+hLUJeBJjMyj/yxfm9s23EU+Y50YZVRSnB9dmAfI6jAAcehJubNLu2NH+jyEJrOen+aA==", + "peer": true, + "requires": {} + }, + "@trpc/server": { + "version": "10.38.0", + "resolved": "https://registry.npmjs.org/@trpc/server/-/server-10.38.0.tgz", + "integrity": "sha512-uMjWTMhqOPVmdiqPFOYwsdQ6Vzy8FtRcgM+ld3OrHsD88NiwZ1BWNIC6KwffjgrgLG/uKBFzNNKntLryv0NamQ==", + "peer": true + }, "@trysound/sax": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==" }, - "@typechain/ethers-v5": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-11.0.0.tgz", - "integrity": "sha512-JDAvOjtzGuEQukgArIEseHznS2+v+vG3TpfODjNj4tu1kgmVu66G9gk7THOO04HJ5q+OJSLx9b46lc3GRGPIVA==", - "dev": true, - "requires": { - "lodash": "^4.17.15", - "ts-essentials": "^7.0.1" - } - }, "@types/aria-query": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-4.2.2.tgz", @@ -35029,18 +35187,18 @@ "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==" }, "get-starknet": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-starknet/-/get-starknet-2.0.0.tgz", - "integrity": "sha512-MT5jMq0ARo4yE1MhPeWwDw2A0sp+X+HETJoZXqEzhkmeN6lv/eefpEyBbjFCleyEEnpTkZfxqhgFCnDK4OUPoA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/get-starknet/-/get-starknet-3.0.1.tgz", + "integrity": "sha512-EyUl+DVQH5PXW2OUdY06/yaqlMizzLKRLzp3S+VhYz+l6wGvW5pmhTXHLaYI4hWfebIDfFkFvAPxVPv/TkWLyA==", "requires": { "bowser": "^2.11.0", - "get-starknet-core": "^2.0.0" + "get-starknet-core": "^3.0.1" } }, "get-starknet-core": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/get-starknet-core/-/get-starknet-core-2.0.1.tgz", - "integrity": "sha512-uYI8wn9a2iyIfJRSJeZvoIvAWq495AKP5U154kFf/Izet+nP/VilTxKUG6CxdUwe9KuBpG0UZE9ODIxPgBYo2w==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/get-starknet-core/-/get-starknet-core-3.2.0.tgz", + "integrity": "sha512-SZhxtLlKoPKLZ2H3l9WIU7CiNmkL3qLWGksALmvZdAXa/9PykYfLtvIB5B8A2UZMpf2ojTZlWLfuo1KhgmVobA==", "requires": {} }, "get-stream": { @@ -36029,6 +36187,11 @@ "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==" }, + "is-promise": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz", + "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==" + }, "is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", @@ -37968,6 +38131,11 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, + "lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + }, "lodash.camelcase": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", @@ -38068,6 +38236,11 @@ "js-tokens": "^3.0.0 || ^4.0.0" } }, + "lossless-json": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/lossless-json/-/lossless-json-2.0.11.tgz", + "integrity": "sha512-BP0vn+NGYvzDielvBZaFain/wgeJ1hTvURCqtKvhr1SCPePdaaTanmmcplrHfEJSJOUql7hk4FHwToNJjWRY3g==" + }, "lower-case": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", @@ -38222,6 +38395,22 @@ "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" }, + "micro-starknet": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/micro-starknet/-/micro-starknet-0.2.3.tgz", + "integrity": "sha512-6XBcC+GerlwJSR4iA0VaeXtS2wrayWFcA4PEzrJPMuFmWCaUtuGIq5K/DB5F/XgnL54/zl2Bxo690Lj7mYVA8A==", + "requires": { + "@noble/curves": "~1.0.0", + "@noble/hashes": "~1.3.0" + }, + "dependencies": { + "@noble/hashes": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==" + } + } + }, "micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", @@ -41764,20 +41953,15 @@ } }, "starknet": { - "version": "4.22.0", - "resolved": "https://registry.npmjs.org/starknet/-/starknet-4.22.0.tgz", - "integrity": "sha512-jC9Taxb6a/ht9zmS1LU/DSLfwJKpgCJnE9AktVksc5SE/+jQMpqxsq6fm7PRiqupjiqRC1DOS8N47cj+KaGv4Q==", + "version": "5.18.0", + "resolved": "https://registry.npmjs.org/starknet/-/starknet-5.18.0.tgz", + "integrity": "sha512-2b5+F+kfp8fTBAfBpHNmtjhuljZb3P2JMhubP/KWIJAGXwBAalPklOwEYY7Bb2slkPjfkDH0kPxI4037sQcQ+Q==", "requires": { - "@ethersproject/bytes": "^5.6.1", - "bn.js": "^5.2.1", - "elliptic": "^6.5.4", - "ethereum-cryptography": "^1.0.3", - "hash.js": "^1.1.7", + "@noble/curves": "~1.0.0", "isomorphic-fetch": "^3.0.0", - "json-bigint": "^1.0.0", - "minimalistic-assert": "^1.0.1", + "lossless-json": "^2.0.8", + "micro-starknet": "~0.2.1", "pako": "^2.0.4", - "ts-custom-error": "^3.3.1", "url-join": "^4.0.1" } }, @@ -42064,6 +42248,14 @@ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" }, + "svelte-forms": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/svelte-forms/-/svelte-forms-2.3.1.tgz", + "integrity": "sha512-ExX9PM0JgvdOWlHl2ztD7XzLNPOPt9U5hBKV8sUAisMfcYWpPRnyz+6EFmh35BOBGJJmuhTDBGm5/7seLjOTIA==", + "requires": { + "is-promise": "^4.0.0" + } + }, "svg-parser": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", @@ -42523,6 +42715,12 @@ "punycode": "^2.1.1" } }, + "trpc-browser": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/trpc-browser/-/trpc-browser-1.3.2.tgz", + "integrity": "sha512-cXrm7kq+WD8yJfVB8B4pmyL8C0W//Dy+tJq7ohl6fKSK5lfmRIXAlKkNQg/cRZl7YVH/0Xo3NBqcEhVggOCC9A==", + "requires": {} + }, "tryer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", @@ -42826,9 +43024,9 @@ } }, "typescript": { - "version": "4.8.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.2.tgz", - "integrity": "sha512-C0I1UsrrDHo2fYI5oaCGbSejwX4ch+9Y5jTQELvovfmFkK3HHSZJB8MSJcWLmCUBzQBchCrZ9rMRV6GuNrvGtw==" + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==" }, "typical": { "version": "4.0.0", @@ -43944,6 +44142,43 @@ "wido": "^0.2.6" }, "dependencies": { + "@argent/get-starknet": { + "version": "5.3.21", + "resolved": "https://registry.npmjs.org/@argent/get-starknet/-/get-starknet-5.3.21.tgz", + "integrity": "sha512-ykxyo5EgEHTsTLK95ILHtkigVxI/OTt6n2IfYpNi9ZJNjazLyoGiN2GG7tT8C38giasR0Wpmq6NJB74efX07oQ==", + "requires": { + "get-starknet": "^1.0.0" + }, + "dependencies": { + "get-starknet": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/get-starknet/-/get-starknet-1.5.0.tgz", + "integrity": "sha512-6A14mdPoMwO4orETjG5D+wwaZOzuAyNp/5+ZlDJnU+UU7QRGMYILUo8WjgqeVTg0mcN0BZoUE0C/Qhgd7dBvVQ==", + "requires": { + "bowser": "^2.11.0" + } + }, + "starknet": { + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/starknet/-/starknet-3.19.0.tgz", + "integrity": "sha512-1iUJdGtRDu2j3G8sS+yzRhp9O3O5Dr803oDfrm234Qmn05JTh5bU/wZwFPw9zWmMI0jyNZgjS+8dxPpBcpLgrQ==", + "peer": true, + "requires": { + "@ethersproject/bytes": "^5.6.1", + "bn.js": "^5.2.1", + "cross-fetch": "^3.1.5", + "elliptic": "^6.5.4", + "ethereum-cryptography": "^1.0.3", + "hash.js": "^1.1.7", + "json-bigint": "^1.0.0", + "minimalistic-assert": "^1.0.1", + "pako": "^2.0.4", + "ts-custom-error": "^3.2.0", + "url-join": "^4.0.1" + } + } + } + }, "ajv": { "version": "8.12.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", @@ -43959,6 +44194,24 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "starknet": { + "version": "4.22.0", + "resolved": "https://registry.npmjs.org/starknet/-/starknet-4.22.0.tgz", + "integrity": "sha512-jC9Taxb6a/ht9zmS1LU/DSLfwJKpgCJnE9AktVksc5SE/+jQMpqxsq6fm7PRiqupjiqRC1DOS8N47cj+KaGv4Q==", + "requires": { + "@ethersproject/bytes": "^5.6.1", + "bn.js": "^5.2.1", + "elliptic": "^6.5.4", + "ethereum-cryptography": "^1.0.3", + "hash.js": "^1.1.7", + "isomorphic-fetch": "^3.0.0", + "json-bigint": "^1.0.0", + "minimalistic-assert": "^1.0.1", + "pako": "^2.0.4", + "ts-custom-error": "^3.3.1", + "url-join": "^4.0.1" + } } } }, @@ -44446,6 +44699,12 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" + }, + "zod": { + "version": "3.22.2", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.2.tgz", + "integrity": "sha512-wvWkphh5WQsJbVk1tbx1l1Ly4yg+XecD+Mq280uBGt9wa5BKSWf4Mhp6GmrkPixhMxmabYY7RbzlwVP32pbGCg==", + "peer": true } } } diff --git a/packages/starksheet-webapp/package.json b/packages/starksheet-webapp/package.json index bd29e5b5..b5b401ba 100644 --- a/packages/starksheet-webapp/package.json +++ b/packages/starksheet-webapp/package.json @@ -3,6 +3,7 @@ "version": "0.2.0", "private": true, "dependencies": { + "@argent/get-starknet": "^6.4.7", "@emotion/react": "^11.9.3", "@emotion/styled": "^11.9.3", "@mui/material": "^5.8.6", @@ -19,7 +20,6 @@ "ethers": "5.7.2", "ethers-multisend": "^2.4.0", "expr-eval": "^2.0.2", - "get-starknet": "^2.0.0", "notistack": "^2.0.5", "react": "^18.2.0", "react-contenteditable": "^3.3.6", @@ -27,7 +27,7 @@ "react-hotkeys": "^2.0.0", "react-router-dom": "^6.10.0", "react-scripts": "5.0.1", - "starknet": "^4.22.0", + "starknet": "^5.18.0", "ts-toolbelt": "^9.6.0", "web-vitals": "^2.1.4", "wido-widget": "^1.0.8" diff --git a/packages/starksheet-webapp/src/components/ActionBar/ActionBar.tsx b/packages/starksheet-webapp/src/components/ActionBar/ActionBar.tsx index 7c34eff7..126e38a3 100644 --- a/packages/starksheet-webapp/src/components/ActionBar/ActionBar.tsx +++ b/packages/starksheet-webapp/src/components/ActionBar/ActionBar.tsx @@ -2,7 +2,6 @@ import { Box, BoxProps } from "@mui/material"; import { useSnackbar } from "notistack"; import React, { useCallback, useContext, useEffect } from "react"; import ContentEditable from "react-contenteditable"; -import { number } from "starknet"; import { CELL_BORDER_WIDTH } from "../../config"; import { AbisContext } from "../../contexts/AbisContext"; import { AccountContext } from "../../contexts/AccountContext"; @@ -11,7 +10,7 @@ import { OnsheetContext } from "../../contexts/OnsheetContext"; import { chainConfig } from "../../provider/chains"; import { CellData, CellGraph, Cell as CellType } from "../../types"; import { RC_BOUND } from "../../utils/constants"; -import { bn2hex, str2hex } from "../../utils/hexUtils"; +import { bigint2hex, str2hex } from "../../utils/hexUtils"; import { resolveContractAddress, tokenIdToCellName, @@ -60,10 +59,10 @@ function ActionBar({ inputRef, sx }: ActionBarProps) { const currentCell = currentCells[currentCellId]; if ( - currentCell.contractAddress.eq(cellData.contractAddress) && - currentCell.selector.eq(cellData.selector) && + currentCell.contractAddress === cellData.contractAddress && + currentCell.selector === cellData.selector && currentCell.calldata.length === cellData.calldata.length && - currentCell.calldata.every((c, i) => c.eq(cellData.calldata[i])) + currentCell.calldata.every((c, i) => c === cellData.calldata[i]) ) { return; } @@ -149,14 +148,14 @@ function ActionBar({ inputRef, sx }: ActionBarProps) { const _contractCall = parseContractCall(_value); if (!_contractCall) { - let selector = number.toBN(0); + let selector = BigInt(0); try { - selector = number.toBN(_value); + selector = BigInt(_value); } catch (e) { try { - selector = number.toBN(str2hex(_value)); + selector = BigInt(str2hex(_value)); } catch (e) { - selector = number.toBN(0); + selector = BigInt(0); } } setCellData({ @@ -169,7 +168,7 @@ function ActionBar({ inputRef, sx }: ActionBarProps) { let contractAddress; try { - contractAddress = number.toBN(_contractCall.contractAddress); + contractAddress = BigInt(_contractCall.contractAddress); } catch (e) { return; } @@ -179,7 +178,7 @@ function ActionBar({ inputRef, sx }: ActionBarProps) { contractAddress ); - getAbiForContract(bn2hex(resolvedContractAddress)).then((abi) => { + getAbiForContract(bigint2hex(resolvedContractAddress)).then((abi) => { const _cellData = parse(_contractCall, abi, chainConfig.chainType); setCellData(_cellData); }); @@ -206,7 +205,6 @@ function ActionBar({ inputRef, sx }: ActionBarProps) { }, [selectedCell, currentCells]); const owner = currentCells[selectedCell]?.owner?.toString(16); - return ( diff --git a/packages/starksheet-webapp/src/components/ActionBar/formula.utils.ts b/packages/starksheet-webapp/src/components/ActionBar/formula.utils.ts index 2d7e3496..59fa772f 100644 --- a/packages/starksheet-webapp/src/components/ActionBar/formula.utils.ts +++ b/packages/starksheet-webapp/src/components/ActionBar/formula.utils.ts @@ -1,6 +1,5 @@ -import BN from "bn.js"; import { BigNumber, ethers } from "ethers"; -import { FunctionAbi, number, uint256 } from "starknet"; +import { FunctionAbi, uint256 } from "starknet"; import { CellData, ChainType, ContractAbi } from "../../types"; import { ARGS_SEP, @@ -11,7 +10,7 @@ import { HEX_STRING_REGEX, RC_BOUND, } from "../../utils/constants"; -import { bn2hex, bn2uint, hex2str } from "../../utils/hexUtils"; +import { bigint2hex, bigint2uint, hex2str } from "../../utils/hexUtils"; import { cellNameToTokenId, encodeConst, @@ -21,7 +20,7 @@ import { } from "../../utils/sheetUtils"; const isBigNumber = (arg: any): boolean => { - return arg instanceof BigNumber || arg instanceof BN; + return arg instanceof BigNumber || typeof arg === "bigint"; }; export function toPlainTextFormula( @@ -31,24 +30,23 @@ export function toPlainTextFormula( if (!cellData) return "0"; const { contractAddress, selector, calldata, abi } = cellData; - if (contractAddress.eq(RC_BOUND)) { - return selector.gte(RC_BOUND) ? bn2hex(selector) : selector.toString(); + if (contractAddress === RC_BOUND) { + return selector >= RC_BOUND ? bigint2hex(selector) : selector.toString(); } - const contractName = contractAddress.lt(RC_BOUND) - ? tokenIdToCellName(contractAddress.toNumber()) - : bn2hex(contractAddress); - const selectorHexString = bn2hex(selector); + const contractName = + contractAddress <= RC_BOUND + ? tokenIdToCellName(Number(contractAddress)) + : bigint2hex(contractAddress); + const selectorHexString = bigint2hex(selector); const operator = abi?.name || selectorHexString; const args = calldata.map((arg) => isDependency(arg) - ? tokenIdToCellName( - arg.sub(number.toBN(1)).div(number.toBN(2)).toNumber() - ) - : arg.gte(RC_BOUND) - ? "0x" + arg.div(number.toBN(2)).toString(16) - : arg.div(number.toBN(2)).toString() + ? tokenIdToCellName(Number((arg - 1n) / 2n)) + : arg >= RC_BOUND + ? "0x" + (arg / 2n).toString(16) + : (arg / 2n).toString() ); let displayedArgs = []; if (!!abi) { @@ -105,12 +103,10 @@ export function toPlainTextFormula( ) ._hex.slice(2) .padStart(64, "0"); - mapping[placeholder] = tokenIdToCellName( - arg.sub(number.toBN(1)).div(number.toBN(2)).toNumber() - ); + mapping[placeholder] = tokenIdToCellName(Number((arg - 1n) / 2n)); return placeholder; } - return bn2uint(32)(arg.div(number.toBN(2))); + return bigint2uint(32)(arg / 2n); }) .join(""); const decodedData = ethers.utils.defaultAbiCoder.decode( @@ -233,7 +229,7 @@ export function parse( const encodedArgs = encodeInputs(args) as any[]; // Flatten the object prefixing arrays with their len // Result dismisses the first value, with is the len of the initial array of args - calldata = flattenWithLen(encodedArgs).slice(1) as BN[]; + calldata = flattenWithLen(encodedArgs).slice(1) as bigint[]; } else if (chainType === ChainType.EVM) { const m: Record = {}; const mappedArgs = mapCellsToRandom(m)(args); @@ -251,23 +247,21 @@ export function parse( return encodeTokenId(cellNameToTokenId(cellName)); } return encodeConst("0x" + bytes32); - }) || []) as BN[]; + }) || []) as bigint[]; } else { throw new Error(`No parsing function for chainType ${chainType}`); } return { - contractAddress: number.toBN(rawCall.contractAddress), - selector: number.toBN(selector), + contractAddress: BigInt(rawCall.contractAddress), + selector: BigInt(selector), calldata, abi: selectorAbi, }; } -export const decode = (_arg: BN) => - isDependency(_arg) - ? _arg.sub(number.toBN(1)).div(number.toBN(2)) - : _arg.div(number.toBN(2)); +export const decode = (_arg: bigint) => + isDependency(_arg) ? (_arg - 1n) / 2n : _arg / 2n; /** * @@ -341,7 +335,7 @@ export function buildFormulaDisplay( if (settings?.text) { try { - return hex2str(bn2hex(number.toBN(formula))); + return hex2str(bigint2hex(BigInt(formula))); } catch (e) { return formula; } diff --git a/packages/starksheet-webapp/src/components/ComputedCell/ComputedCell.tsx b/packages/starksheet-webapp/src/components/ComputedCell/ComputedCell.tsx index 7b802bb2..8aec98cb 100644 --- a/packages/starksheet-webapp/src/components/ComputedCell/ComputedCell.tsx +++ b/packages/starksheet-webapp/src/components/ComputedCell/ComputedCell.tsx @@ -1,6 +1,6 @@ import { useSnackbar } from "notistack"; import { useContext, useMemo } from "react"; -import { constants, number } from "starknet"; +import { constants } from "starknet"; import Tooltip from "../../Tooltip/Tooltip"; import { CELL_BORDER_WIDTH, CELL_WIDTH } from "../../config"; import { AccountContext } from "../../contexts/AccountContext"; @@ -11,7 +11,7 @@ import { useLocalStorage } from "../../hooks/useLocalStorage"; import { chainConfig } from "../../provider/chains"; import { CellGraph, Cell as CellType } from "../../types"; import { RC_BOUND } from "../../utils/constants"; -import { bn2hex, hex2str } from "../../utils/hexUtils"; +import { bigint2hex, hex2str } from "../../utils/hexUtils"; import Cell from "../Cell/Cell"; const BLUE = "#0000FF"; @@ -52,18 +52,15 @@ function ComputedCell({ cell }: ComputedCellProps) { const { background, borderColor, color } = useMemo(() => { const background = - cell.owner.eq(number.toBN(0)) && - cell.contractAddress.eq(RC_BOUND) && - cell.selector.eq(number.toBN(0)) + cell.owner === 0n && + cell.contractAddress === RC_BOUND && + cell.selector === 0n ? WHITE : isInvoke ? GREEN - : accountAddress === bn2hex(cell.owner) || - (cell.owner.eq(number.toBN(0)) && - !( - cell.contractAddress.eq(RC_BOUND) && - cell.selector.eq(number.toBN(0)) - )) + : accountAddress === bigint2hex(cell.owner) || + (cell.owner === 0n && + !(cell.contractAddress === RC_BOUND && cell.selector === 0n)) ? BLUE : GREY; @@ -83,25 +80,15 @@ function ComputedCell({ cell }: ComputedCellProps) { cell.abi?.name === "name" || cell.abi?.name === "symbol" || cellSettings.text; - if (renderString) return hex2str(bn2hex(value)); - if (cell.contractAddress.eq(number.toBN(chainConfig.addresses.math))) { - return value - .add( - number - .toBN("0x" + constants.FIELD_PRIME) - .div(number.toBN(2)) - .abs() - ) - .mod(number.toBN("0x" + constants.FIELD_PRIME)) - .sub( - number - .toBN("0x" + constants.FIELD_PRIME) - .div(number.toBN(2)) - .abs() - ) - .toString(); + if (renderString) return hex2str(bigint2hex(value)); + if (cell.contractAddress === BigInt(chainConfig.addresses.math)) { + return ( + ((value + BigInt("0x" + constants.FIELD_PRIME) / 2n) % + BigInt("0x" + constants.FIELD_PRIME)) - + BigInt("0x" + constants.FIELD_PRIME) / 2n + ).toString(); } - if (value.gte(RC_BOUND)) return bn2hex(value); + if (value >= RC_BOUND) return bigint2hex(value); return value.toString(); }, [cell, background, cellSettings.text]); diff --git a/packages/starksheet-webapp/src/components/FormulaField/FormulaField.tsx b/packages/starksheet-webapp/src/components/FormulaField/FormulaField.tsx index 2856a70f..e5c58440 100644 --- a/packages/starksheet-webapp/src/components/FormulaField/FormulaField.tsx +++ b/packages/starksheet-webapp/src/components/FormulaField/FormulaField.tsx @@ -16,7 +16,7 @@ import { CELL_NAME_REGEX, CONTRACT_FUNCTION_SEP, } from "../../utils/constants"; -import { bn2hex } from "../../utils/hexUtils"; +import { bigint2hex } from "../../utils/hexUtils"; import { cellNameToTokenId } from "../../utils/sheetUtils"; import { buildFormulaDisplay } from "../ActionBar/formula.utils"; @@ -55,7 +55,7 @@ function FormulaField({ let _selectedContractAddress = value.split(CONTRACT_FUNCTION_SEP)[0]; setSelectedContractAddress(_selectedContractAddress); if (_selectedContractAddress.match(CELL_NAME_REGEX)) { - _selectedContractAddress = bn2hex( + _selectedContractAddress = bigint2hex( currentCells[cellNameToTokenId(_selectedContractAddress)].value ); } diff --git a/packages/starksheet-webapp/src/components/SheetTable/SheetTable.tsx b/packages/starksheet-webapp/src/components/SheetTable/SheetTable.tsx index b3b1446b..0c1e8416 100644 --- a/packages/starksheet-webapp/src/components/SheetTable/SheetTable.tsx +++ b/packages/starksheet-webapp/src/components/SheetTable/SheetTable.tsx @@ -1,7 +1,7 @@ import { Box, BoxProps } from "@mui/material"; import { useCallback, useContext, useEffect, useMemo } from "react"; import { useLoaderData, useNavigate } from "react-router-dom"; -import { FunctionAbi, number } from "starknet"; +import { FunctionAbi } from "starknet"; import { CELL_BORDER_WIDTH, CELL_HEIGHT, @@ -16,19 +16,19 @@ import { useSheetContract } from "../../hooks/useSheetContract"; import { chainConfig } from "../../provider/chains"; import { Cell, CellData, CellRendered } from "../../types"; import { RC_BOUND } from "../../utils/constants"; -import { bn2hex } from "../../utils/hexUtils"; +import { bigint2hex } from "../../utils/hexUtils"; import ComputedCell from "../ComputedCell/ComputedCell"; import GreyCell from "../GreyCell/GreyCell"; const defaultRenderedCell = (tokenId: number): CellRendered => ({ id: tokenId, - owner: number.toBN(0), - value: number.toBN(0), + owner: 0n, + value: 0n, }); const defaultCellData = (tokenId: number): CellData => ({ contractAddress: RC_BOUND, - selector: number.toBN(0), + selector: 0n, calldata: [], }); @@ -166,17 +166,16 @@ const SheetTable = ({ sx }: SheetTableProps) => { } ) .map(async (cell, _, array) => { - const resolvedContractAddress = cell.contractAddress.lt( - RC_BOUND - ) - ? array[cell.contractAddress.toNumber()].value - : cell.contractAddress; + const resolvedContractAddress = + cell.contractAddress < RC_BOUND + ? array[Number(cell.contractAddress)].value + : cell.contractAddress; const abi = await getAbiForContract( - bn2hex(resolvedContractAddress) + bigint2hex(resolvedContractAddress) ); return { ...cell, - abi: abi[bn2hex(cell.selector)] as FunctionAbi, + abi: abi[bigint2hex(cell.selector)] as FunctionAbi, }; }) ); diff --git a/packages/starksheet-webapp/src/contexts/AbisContext.tsx b/packages/starksheet-webapp/src/contexts/AbisContext.tsx index 760cf22f..40cc0bd1 100644 --- a/packages/starksheet-webapp/src/contexts/AbisContext.tsx +++ b/packages/starksheet-webapp/src/contexts/AbisContext.tsx @@ -3,7 +3,7 @@ import { Abi } from "starknet"; import { useChainProvider } from "../hooks/useChainProvider"; import { ContractAbi, ContractAbis, InitialContractAbis } from "../types"; import { RC_BOUND } from "../utils/constants"; -import { bn2hex, normalizeHexString } from "../utils/hexUtils"; +import { bigint2hex, normalizeHexString } from "../utils/hexUtils"; export const AbisContext = React.createContext<{ contractAbis: ContractAbis; @@ -27,7 +27,7 @@ export const AbisContextProvider = ({ [normalizeHexString(cur[0])]: chainProvider.parseAbi(cur[1] as Abi), }), { - [bn2hex(RC_BOUND)]: {}, + [bigint2hex(RC_BOUND)]: {}, } ); diff --git a/packages/starksheet-webapp/src/contexts/AccountContext.tsx b/packages/starksheet-webapp/src/contexts/AccountContext.tsx index 8dae798c..9a8b96fb 100644 --- a/packages/starksheet-webapp/src/contexts/AccountContext.tsx +++ b/packages/starksheet-webapp/src/contexts/AccountContext.tsx @@ -1,5 +1,6 @@ import { useSnackbar } from "notistack"; import React, { PropsWithChildren, useMemo, useState } from "react"; +import { BigNumberish } from "starknet"; import { useChainProvider } from "../hooks"; import { ContractCall, TransactionResponse } from "../types"; @@ -27,7 +28,6 @@ export const AccountContextProvider = ({ children }: PropsWithChildren<{}>) => { const proof = useMemo(() => [], []); const provider = useChainProvider(); - const execute = provider.execute; const connect = () => provider @@ -39,6 +39,10 @@ export const AccountContextProvider = ({ children }: PropsWithChildren<{}>) => { enqueueSnackbar(error.toString(), { variant: "warning" }); }); + const execute = (calls: ContractCall[], options?: { value?: BigNumberish }) => + // @ts-ignore + provider.execute(calls, options); + return ( void; setCurrentUpdatedCells: (cells: { [key: number]: Cell }) => void; - computeValue: (values: BN[]) => (cell: CellData) => Promise; + computeValue: (values: bigint[]) => (cell: CellData) => Promise; updateCells: (cells: Cell[]) => void; buildChildren: (children: CellGraph, depth?: number) => (id: number) => void; buildParents: (children: CellGraph, depth?: number) => (id: number) => void; @@ -36,7 +34,7 @@ export const CellValuesContext = React.createContext<{ currentUpdatedCells: {}, setUpdatedValues: () => {}, setCurrentUpdatedCells: () => {}, - computeValue: () => async () => number.toBN(0), + computeValue: () => async () => 0n, updateCells: () => {}, buildChildren: () => () => {}, buildParents: () => () => {}, @@ -76,8 +74,8 @@ export const CellValuesContextProvider = ({ [selectedSheetAddress, setUpdatedValues] ); - const computeValue = (values: BN[]) => async (cell: CellData) => { - if (cell.contractAddress.eq(RC_BOUND) || !cell.abi) { + const computeValue = (values: bigint[]) => async (cell: CellData) => { + if (cell.contractAddress === RC_BOUND || !cell.abi) { return cell.selector; } @@ -86,12 +84,10 @@ export const CellValuesContextProvider = ({ cell.contractAddress ); - const contractAddress = bn2hex(resolvedContractAddress); + const contractAddress = bigint2hex(resolvedContractAddress); const calldata = cell.calldata.map((arg) => { - return isDependency(arg) - ? values[(arg.toNumber() - 1) / 2] - : arg.div(number.toBN(2)); + return isDependency(arg) ? values[(Number(arg) - 1) / 2] : arg / 2n; }); const call = { @@ -107,7 +103,7 @@ export const CellValuesContextProvider = ({ ? await chainProvider.callContract(call) : 0; - return number.toBN(value); + return BigInt(value); }; const buildChildren = useCallback( @@ -118,10 +114,10 @@ export const CellValuesContextProvider = ({ (cell) => cell.calldata .filter(isDependency) - .map((arg) => (arg.toNumber() - 1) / 2) + .map((arg) => (Number(arg) - 1) / 2) .includes(id) || - (cell.contractAddress.lt(RC_BOUND) && - cell.contractAddress.toNumber() === id) + (cell.contractAddress < RC_BOUND && + Number(cell.contractAddress) === id) ) .map((cell) => cell.id); @@ -140,9 +136,9 @@ export const CellValuesContextProvider = ({ const cell = values[selectedSheetAddress][id]; const currentParents = cell.calldata .filter(isDependency) - .map((arg) => (arg.toNumber() - 1) / 2); - if (cell.contractAddress.lt(RC_BOUND)) { - currentParents.push(cell.contractAddress.toNumber()); + .map((arg) => (Number(arg) - 1) / 2); + if (cell.contractAddress < RC_BOUND) { + currentParents.push(Number(cell.contractAddress)); } currentParents.forEach((_id) => { @@ -165,8 +161,8 @@ export const CellValuesContextProvider = ({ ...cell, }; if ( - !cell.contractAddress.eq(currentCells[id].contractAddress) || - !cell.selector.eq(currentCells[id].selector) || + cell.contractAddress !== currentCells[id].contractAddress || + cell.selector !== currentCells[id].selector || cell.calldata !== currentCells[id].calldata ) { newUpdatedCells[id] = newCells[id]; diff --git a/packages/starksheet-webapp/src/contexts/OnsheetContext.tsx b/packages/starksheet-webapp/src/contexts/OnsheetContext.tsx index 10424308..42da0848 100644 --- a/packages/starksheet-webapp/src/contexts/OnsheetContext.tsx +++ b/packages/starksheet-webapp/src/contexts/OnsheetContext.tsx @@ -1,4 +1,3 @@ -import { BN } from "bn.js"; import React, { PropsWithChildren, useCallback, @@ -75,9 +74,7 @@ export const OnsheetContextProvider = ({ children }: PropsWithChildren) => { address, defaultRenderer: renderer, sheets: [], - sheetPrice: - sheetPrice.div(new BN(10).pow(new BN(9))).toNumber() / - 1_000_000_000, + sheetPrice: Number(sheetPrice / 10n ** 9n) / 1_000_000_000, }; }) .then((_onsheet) => { diff --git a/packages/starksheet-webapp/src/contexts/TransactionsContext.tsx b/packages/starksheet-webapp/src/contexts/TransactionsContext.tsx index 35df3ec3..30ea6f96 100644 --- a/packages/starksheet-webapp/src/contexts/TransactionsContext.tsx +++ b/packages/starksheet-webapp/src/contexts/TransactionsContext.tsx @@ -5,7 +5,6 @@ import React, { useContext, useMemo, } from "react"; -import { number } from "starknet"; import { useChainProvider } from "../hooks/useChainProvider"; import { useOnsheetContract } from "../hooks/useOnsheetContract"; import { ContractCall, NewSheet } from "../types"; @@ -59,8 +58,7 @@ export const TransactionsContextProvider = ({ .reduce((prev, cur) => [...prev, ...cur], []) .filter( (cell) => - (cell.owner.eq(number.toBN(0)) && - !cell.selector.eq(number.toBN(0))) || + (cell.owner === 0n && cell.selector !== 0n) || "0x" + cell.owner.toString(16) === accountAddress ) .map((cell) => contract.setCellTxBuilder(cell)); @@ -102,10 +100,7 @@ export const TransactionsContextProvider = ({ let options; if (costEth > 0) { options = { - value: number - .toBN(costEth * 1_000_000_000) - .mul(number.toBN(10).pow(number.toBN(9))) - .toString(), + value: (BigInt(costEth * 1_000_000_000) * 10n ** 9n).toString(), }; } diff --git a/packages/starksheet-webapp/src/contracts/spreadsheet/EvmSpreadsheetContract.ts b/packages/starksheet-webapp/src/contracts/spreadsheet/EvmSpreadsheetContract.ts index e1339842..3aeba26a 100644 --- a/packages/starksheet-webapp/src/contracts/spreadsheet/EvmSpreadsheetContract.ts +++ b/packages/starksheet-webapp/src/contracts/spreadsheet/EvmSpreadsheetContract.ts @@ -1,10 +1,9 @@ import { JsonRpcProvider } from "@ethersproject/providers"; -import BN from "bn.js"; import { BigNumber, ethers } from "ethers"; import { Cell, ContractCall, SheetConstructorArgs } from "../../types"; import { SpreadsheetContract } from "../../types/contracts"; import { RC_BOUND } from "../../utils/constants"; -import { bn2uint, hex2str } from "../../utils/hexUtils"; +import { bigint2uint, hex2str } from "../../utils/hexUtils"; import { Evmsheet, Evmsheet__factory, Sheet__factory } from "../types"; /** @@ -12,13 +11,13 @@ import { Evmsheet, Evmsheet__factory, Sheet__factory } from "../types"; */ export class EvmSpreadsheetContract implements SpreadsheetContract { private contract: Evmsheet; - private sheetPrice: BN; + private sheetPrice: bigint; /** * The class constructor. */ constructor(private address: string, private provider: JsonRpcProvider) { - this.sheetPrice = new BN(0); + this.sheetPrice = 0n; this.contract = Evmsheet__factory.connect(address, provider); this.getSheetPrice().then((price) => { this.sheetPrice = price; @@ -57,9 +56,9 @@ export class EvmSpreadsheetContract implements SpreadsheetContract { /** * @inheritDoc */ - async getSheetPrice(): Promise { + async getSheetPrice(): Promise { const value: BigNumber = await this.contract.sheetPrice(); - return new BN(value.toString()); + return BigInt(value.toString()); } /** @@ -96,16 +95,17 @@ export class EvmSpreadsheetContract implements SpreadsheetContract { ): ContractCall { // If contractAddress is RC_BOUND, then the cell is constant and we store the selector // as a regular uint256 - const selector = cell.contractAddress.eq(RC_BOUND) - ? bn2uint(32)(cell.selector) - : bn2uint(4)(cell.selector).padEnd(64, "0"); + const selector = + cell.contractAddress === RC_BOUND + ? bigint2uint(32)(cell.selector) + : bigint2uint(4)(cell.selector).padEnd(64, "0"); return { to: cell.sheetAddress, calldata: Sheet__factory.createInterface().encodeFunctionData("setCell", [ cell.id, - "0x" + bn2uint(20)(cell.contractAddress), + "0x" + bigint2uint(20)(cell.contractAddress), "0x" + selector, - "0x" + cell.calldata.map(bn2uint(32)).join(""), + "0x" + cell.calldata.map(bigint2uint(32)).join(""), ]), }; } diff --git a/packages/starksheet-webapp/src/contracts/spreadsheet/StarknetSpreadsheetContract.ts b/packages/starksheet-webapp/src/contracts/spreadsheet/StarknetSpreadsheetContract.ts index de82f508..a377f405 100644 --- a/packages/starksheet-webapp/src/contracts/spreadsheet/StarknetSpreadsheetContract.ts +++ b/packages/starksheet-webapp/src/contracts/spreadsheet/StarknetSpreadsheetContract.ts @@ -1,5 +1,10 @@ -import BN from "bn.js"; -import { Contract, hash, number, ProviderInterface, stark } from "starknet"; +import { + BigNumberish, + CallData, + Contract, + hash, + ProviderInterface, +} from "starknet"; import { Abi, Cell, @@ -7,7 +12,7 @@ import { SheetConstructorArgs, SpreadsheetContract, } from "../../types"; -import { bn2hex } from "../../utils/hexUtils"; +import { bigint2hex } from "../../utils/hexUtils"; /** * Represents a starknet implementation of the SpreadsheetContract. @@ -45,7 +50,7 @@ export class StarknetSpreadsheetContract implements SpreadsheetContract { const renderer = await this.contract.functions[ "getSheetDefaultRendererAddress" ](); - return bn2hex(renderer.address); + return bigint2hex(renderer.address); } /** @@ -53,13 +58,13 @@ export class StarknetSpreadsheetContract implements SpreadsheetContract { */ async getSheets(): Promise { const { addresses } = await this.contract.functions["getSheets"](); - return addresses.map((address: BN) => bn2hex(address)); + return addresses.map((address: bigint) => bigint2hex(address)); } /** * @inheritDoc */ - async getSheetPrice(): Promise { + async getSheetPrice(): Promise { const price = await this.contract.functions["getSheetPrice"](); return price.price; } @@ -70,13 +75,12 @@ export class StarknetSpreadsheetContract implements SpreadsheetContract { setCellTxBuilder( cell: Cell & { tokenId: number; sheetAddress: string } ): ContractCall { - return cell.owner.eq(number.toBN(0)) + return cell.owner === 0n ? { to: cell.sheetAddress, entrypoint: "mintAndSetPublic", - calldata: stark.compileCalldata({ + calldata: CallData.compile({ tokenId: { - type: "struct", low: cell.tokenId, high: 0, }, @@ -89,7 +93,7 @@ export class StarknetSpreadsheetContract implements SpreadsheetContract { : { to: cell.sheetAddress, entrypoint: "setCell", - calldata: stark.compileCalldata({ + calldata: CallData.compile({ tokenId: cell.tokenId.toString(), contractAddress: cell.contractAddress.toString(), value: cell.selector.toString(), @@ -105,7 +109,7 @@ export class StarknetSpreadsheetContract implements SpreadsheetContract { return { to: this.address, entrypoint: "addSheet", - calldata: stark.compileCalldata({ + calldata: CallData.compile({ name, symbol, proof: [], @@ -117,7 +121,7 @@ export class StarknetSpreadsheetContract implements SpreadsheetContract { * @inheritDoc */ async calculateSheetAddress( - from: number.BigNumberish, + from: BigNumberish, constructorCalldata: SheetConstructorArgs ): Promise { const classHash = await this.proxyClassHash; @@ -149,7 +153,7 @@ export class StarknetSpreadsheetContract implements SpreadsheetContract { */ private async getSheetClassHash(): Promise { const classHash = await this.contract.functions["getSheetClassHash"](); - return bn2hex(classHash.hash); + return bigint2hex(classHash.hash); } /** @@ -159,6 +163,6 @@ export class StarknetSpreadsheetContract implements SpreadsheetContract { */ private async getProxyClassHash(): Promise { const classHash = await this.contract.functions["getProxyClassHash"](); - return bn2hex(classHash.hash); + return bigint2hex(classHash.hash); } } diff --git a/packages/starksheet-webapp/src/contracts/worksheet/EvmWorksheetContract.ts b/packages/starksheet-webapp/src/contracts/worksheet/EvmWorksheetContract.ts index 7b0caebe..ac41a458 100644 --- a/packages/starksheet-webapp/src/contracts/worksheet/EvmWorksheetContract.ts +++ b/packages/starksheet-webapp/src/contracts/worksheet/EvmWorksheetContract.ts @@ -1,14 +1,8 @@ import { JsonRpcProvider } from "@ethersproject/providers"; -import BN from "bn.js"; -import "ethers"; -import { number } from "starknet"; import { N_ROW } from "../../config"; import { CellData, CellRendered, WorksheetContract } from "../../types"; import { RC_BOUND } from "../../utils/constants"; -import { - ethersHexStringToBN, - hexStringToIntegerArray, -} from "../../utils/hexUtils"; +import { hexStringToIntegerArray } from "../../utils/hexUtils"; import { Sheet, Sheet__factory } from "../types"; export class EvmWorksheetContract implements WorksheetContract { @@ -30,10 +24,11 @@ export class EvmWorksheetContract implements WorksheetContract { ); return { - contractAddress: ethersHexStringToBN(contractAddress), - selector: ethersHexStringToBN(contractAddress).eq(RC_BOUND) - ? number.toBN(selector) - : number.toBN(selector.slice(0, 10)), + contractAddress: BigInt(contractAddress), + selector: + BigInt(contractAddress) === RC_BOUND + ? BigInt(selector) + : BigInt(selector.slice(0, 10)), calldata: hexStringToIntegerArray(data.slice(2)), }; } @@ -55,13 +50,13 @@ export class EvmWorksheetContract implements WorksheetContract { /** * @inheritDoc */ - async ownerOf(tokenId: number): Promise { + async ownerOf(tokenId: number): Promise { try { return await this.contract .ownerOf(tokenId) - .then((address: string) => new BN(address)); + .then((address: string) => BigInt(address)); } catch (error) { - return new BN(0); + return 0n; } } @@ -73,14 +68,14 @@ export class EvmWorksheetContract implements WorksheetContract { const cell = await this.contract.renderCell(tokenId); return { id: tokenId, - value: number.toBN(cell.value), - owner: number.toBN(cell.owner), + value: BigInt(cell.value), + owner: BigInt(cell.owner), }; } catch (error) { const owner = await this.ownerOf(tokenId); return { id: tokenId, - value: new BN(0), + value: 0n, owner: owner, error: true, } as CellRendered; diff --git a/packages/starksheet-webapp/src/contracts/worksheet/StarknetWorksheetContract.ts b/packages/starksheet-webapp/src/contracts/worksheet/StarknetWorksheetContract.ts index 42388188..7191f541 100644 --- a/packages/starksheet-webapp/src/contracts/worksheet/StarknetWorksheetContract.ts +++ b/packages/starksheet-webapp/src/contracts/worksheet/StarknetWorksheetContract.ts @@ -1,5 +1,4 @@ -import BN from "bn.js"; -import { Contract, number, ProviderInterface } from "starknet"; +import { BigNumberish, CallData, Contract, ProviderInterface } from "starknet"; import { N_ROW } from "../../config"; import { Abi, CellData, CellRendered, WorksheetContract } from "../../types"; import { hex2str, normalizeHexString } from "../../utils/hexUtils"; @@ -46,12 +45,13 @@ export class StarknetWorksheetContract implements WorksheetContract { const result = await this.contract.call("renderCell", [tokenId], { blockIdentifier: "latest", }); - return result.cell as CellRendered; + // @ts-ignore + return { ...result.cell, id: tokenId } as CellRendered; } catch (error) { const owner = await this.ownerOf(tokenId); return { id: tokenId, - value: number.toBN(0), + value: 0n, owner: owner, error: true, } as CellRendered; @@ -62,22 +62,27 @@ export class StarknetWorksheetContract implements WorksheetContract { const result = await this.contract.call("totalSupply", [], { blockIdentifier: "latest", }); - return result.totalSupply.low.toNumber(); + // @ts-ignore + return Number(result.totalSupply.low); } - async ownerOf(tokenId: number): Promise { + async ownerOf(tokenId: number): Promise { const result = await this.contract.call("ownerOf", [[tokenId, "0"]]); + // @ts-ignore return result.owner; } - async getCell(tokenId: number.BigNumberish): Promise { - const _cell = await this.contract.call("getCell", [tokenId], { + async getCell(tokenId: BigNumberish): Promise { + const result = await this.contract.call("getCell", [tokenId], { blockIdentifier: "latest", }); return { - contractAddress: _cell.contractAddress, - selector: _cell.value, - calldata: _cell.cell_calldata, + // @ts-ignore + contractAddress: result.contractAddress, + // @ts-ignore + selector: result.value, + // @ts-ignore + calldata: result.cell_calldata, }; } @@ -90,23 +95,28 @@ export class StarknetWorksheetContract implements WorksheetContract { } private async tokenByIndex(index: number): Promise { - const result = await this.contract.call("tokenByIndex", [[index, "0"]], { - blockIdentifier: "latest", - }); - return result.tokenId.low.toNumber(); + const result = await this.contract.call( + "tokenByIndex", + CallData.compile({ + index: { + low: index, + high: 0, + }, + }) + ); + // @ts-ignore + return Number(result.tokenId.low); } async name(): Promise { - const result = await this.contract.call("name", [], { - blockIdentifier: "latest", - }); + const result = await this.contract.call("name", []); + // @ts-ignore return hex2str(normalizeHexString(result.name)); } async symbol(): Promise { - const result = await this.contract.call("symbol", [], { - blockIdentifier: "latest", - }); + const result = await this.contract.call("symbol", []); + // @ts-ignore return hex2str(normalizeHexString(result.symbol)); } } diff --git a/packages/starksheet-webapp/src/provider/EVMProvider.ts b/packages/starksheet-webapp/src/provider/EVMProvider.ts index 64b58392..110838ab 100644 --- a/packages/starksheet-webapp/src/provider/EVMProvider.ts +++ b/packages/starksheet-webapp/src/provider/EVMProvider.ts @@ -1,8 +1,6 @@ import { JsonRpcProvider } from "@ethersproject/providers"; -import BN from "bn.js"; import { ethers } from "ethers"; import { MetaTransaction, OperationType, encodeMulti } from "ethers-multisend"; -import { number } from "starknet"; import { EvmSpreadsheetContract, EvmWorksheetContract } from "../contracts"; import { MultiSendCallOnly__factory } from "../contracts/types"; import { @@ -16,7 +14,7 @@ import { TransactionReceipt, WorksheetContract, } from "../types"; -import { bn2hex, bn2uint, normalizeHexString } from "../utils/hexUtils"; +import { bigint2hex, bigint2uint, normalizeHexString } from "../utils/hexUtils"; import { chainConfig } from "./chains"; /** @@ -53,7 +51,7 @@ export class EVMProvider implements ChainProvider { /** * - * Convert a ContractCall to an EVM call. The BN are converted using bn2uint (ie. padding with 0 at left) because + * Convert a ContractCall to an EVM call. The bigints are converted using bigint2uint (ie. padding with 0 at left) because * they come from hex strings, * @param call * @returns @@ -61,8 +59,8 @@ export class EVMProvider implements ChainProvider { contractCallToEVMCalldata(call: ContractCall): string { return ( "0x" + - bn2uint(4)(call.selector! as BN) + - (call.calldata as BN[]).map(bn2uint(32)).join("") + bigint2uint(4)(BigInt("0x" + call.selector!.toString(16))) + + (call.calldata as bigint[]).map(bigint2uint(32)).join("") ); } @@ -236,7 +234,7 @@ export class EVMProvider implements ChainProvider { const transactions: MetaTransaction[] = calls.map((call) => ({ to: call.to, - value: call.value ? bn2hex(call.value) : "0x0", + value: call.value ? bigint2hex(call.value) : "0x0", data: call.calldata as string, operation: OperationType.Call, })); @@ -248,14 +246,14 @@ export class EVMProvider implements ChainProvider { ); const value = transactions - .map((tx) => number.toBN(tx.value)) - .reduce((prev, cur) => prev.add(cur), number.toBN(0)); + .map((tx) => BigInt(tx.value)) + .reduce((prev, cur) => prev + cur, 0n); const multisend = MultiSendCallOnly__factory.connect( chainConfig.addresses.multisend!, signer ); - const overrides = value.gt(number.toBN(0)) ? { value: bn2hex(value) } : {}; + const overrides = value > 0n ? { value: bigint2hex(value) } : {}; const tx = await multisend.multiSend( // encodeMulti creates a new MetaTransaction, and the data includes to bytes selector and bytes lengths // So we slices "0x" + bytes4 + 2 times bytes.length diff --git a/packages/starksheet-webapp/src/provider/StarknetProvider.ts b/packages/starksheet-webapp/src/provider/StarknetProvider.ts index 5838f09c..947ce047 100644 --- a/packages/starksheet-webapp/src/provider/StarknetProvider.ts +++ b/packages/starksheet-webapp/src/provider/StarknetProvider.ts @@ -1,13 +1,15 @@ -import BN from "bn.js"; -import { BigNumberish } from "ethers"; -import { disconnect, connect as getStarknet } from "get-starknet"; +import { + StarknetWindowObject, + connect, + disconnect, +} from "@argent/get-starknet"; import { Abi, - ProviderInterface, + BigNumberish, + CallData, RpcProvider, + TransactionFinalityStatus, hash, - number, - stark, } from "starknet"; import { StarknetSpreadsheetContract, @@ -24,12 +26,13 @@ import { WorksheetContract, } from "../types"; import { RC_BOUND } from "../utils/constants"; -import { bn2hex, hex2str, normalizeHexString } from "../utils/hexUtils"; +import { bigint2hex, hex2str, normalizeHexString } from "../utils/hexUtils"; import { chainAbi } from "./chains"; export class StarknetProvider implements ChainProvider { - private readonly provider: ProviderInterface; + private readonly provider: RpcProvider; private readonly spreadsheetContract: StarknetSpreadsheetContract; + private connection: StarknetWindowObject | undefined; /** * Constructs a StarknetProvider. @@ -111,7 +114,9 @@ export class StarknetProvider implements ChainProvider { * @inheritDoc */ waitForTransaction(hash: string): Promise { - return this.provider.waitForTransaction(hash, 3_000); + return this.provider.waitForTransaction(hash, { + successStates: [TransactionFinalityStatus.ACCEPTED_ON_L2], + }); } /** @@ -126,7 +131,7 @@ export class StarknetProvider implements ChainProvider { */ async getAbi(address: string): Promise { let abi: Abi = []; - if (number.toBN(address).eq(RC_BOUND)) { + if (BigInt(address) === RC_BOUND) { return abi; } @@ -186,7 +191,7 @@ export class StarknetProvider implements ChainProvider { { contractAddress: call.to, entrypoint: call.entrypoint, - calldata: (call.calldata as BN[]).map((c) => bn2hex(c)), + calldata: (call.calldata as bigint[]).map((c) => bigint2hex(c)), }, "latest" ); @@ -197,44 +202,48 @@ export class StarknetProvider implements ChainProvider { * @inheritDoc */ async login(): Promise { - let starknetWindow = await getStarknet({ modalMode: "neverAsk" }); - - if (starknetWindow?.isConnected) { + if (this.connection?.isConnected) { await disconnect({ clearLastWallet: true }); } - starknetWindow = await getStarknet({ modalMode: "canAsk" }); - if (starknetWindow === null) { - throw new Error( - "Cannot find a starknet window, is ArgentX or Braavos installed?" - ); + const connection = await connect({ + modalMode: "canAsk", + webWalletUrl: + this.config.chainId === ChainId.STARKNET_MAINNET + ? "https://web.argent.xyz" + : "https://web.hydrogen.argent47.net", + }); + + if (connection === null) { + return ""; } - if (!starknetWindow.isConnected) { + if (!connection.isConnected) { throw new Error("Login failed"); } if ( (this.config.chainId as string) !== - (starknetWindow.provider.chainId as string) + (connection.provider.chainId as string) ) { - if (starknetWindow.id === "argentX") { - await starknetWindow.request({ + if (connection.id === "argentX") { + await connection.request({ type: "wallet_switchStarknetChain", params: { chainId: this.config.chainId }, }); } else { - if (starknetWindow.provider.chainId !== undefined) { + if (connection.provider.chainId !== undefined) { throw new Error( `Wrong network detected: "${hex2str( - starknetWindow.provider.chainId - )}" instead of "${this.config.chainId}"` + connection.provider.chainId + )}" instead of "${hex2str(this.config.chainId)}"` ); } } } - return normalizeHexString(starknetWindow.account.address); + this.connection = connection; + return normalizeHexString(connection.account.address); } /** @@ -244,23 +253,19 @@ export class StarknetProvider implements ChainProvider { calls: ContractCall[], options?: { value?: BigNumberish } ): Promise { - const starknetWindow = await getStarknet({ modalMode: "neverAsk" }); - if (starknetWindow === null) { - throw new Error("Account is not connected"); - } - if (!starknetWindow.isConnected) { + if (!this.connection?.isConnected) { throw new Error("Account is not connected"); } + if (options?.value) { calls = [ { to: "0x49D36570D4E46F48E99674BD3FCC84644DDD6B96F7C741B1562B82F9E004DC7", entrypoint: "approve", - calldata: stark.compileCalldata({ + calldata: CallData.compile({ spender: calls[0].to, amount: { - type: "struct", - low: number.toBN(options.value.toString()), + low: options.value.toString(), high: 0, }, }), @@ -269,11 +274,11 @@ export class StarknetProvider implements ChainProvider { ]; } - return await starknetWindow.account.execute( + return await this.connection.account.execute( calls.map((call) => ({ contractAddress: call.to, entrypoint: call.entrypoint, - calldata: call.calldata as BN[], + calldata: call.calldata, })) ); } diff --git a/packages/starksheet-webapp/src/provider/chains.ts b/packages/starksheet-webapp/src/provider/chains.ts index 090e391f..53bf5775 100644 --- a/packages/starksheet-webapp/src/provider/chains.ts +++ b/packages/starksheet-webapp/src/provider/chains.ts @@ -40,7 +40,7 @@ const chainConfigs: Record> = { chainId: ChainId.STARKNET_MAINNET, chainType: ChainType.STARKNET, explorerBaseUrl: "https://starkscan.co/contract/", - nftBaseUrl: "https://mintsquare.io/collection/starknet/", + nftBaseUrl: "https://flexing.gg/starknet/collection/", rpcUrl: `https://starknet-mainnet.infura.io/v3/${process.env.REACT_APP_INFURA_KEY}`, }, testnet: { diff --git a/packages/starksheet-webapp/src/types/cells.ts b/packages/starksheet-webapp/src/types/cells.ts index 7d317a1b..fb4e0aba 100644 --- a/packages/starksheet-webapp/src/types/cells.ts +++ b/packages/starksheet-webapp/src/types/cells.ts @@ -1,19 +1,18 @@ -import BN from "bn.js"; import { FunctionAbi } from "starknet"; export type CellData = { - contractAddress: BN; - selector: BN; - calldata: BN[]; + contractAddress: bigint; + selector: bigint; + calldata: bigint[]; abi?: FunctionAbi; }; export type CellRendered = { id: number; - owner: BN; - value: BN; + owner: bigint; + value: bigint; error?: boolean; - parents?: BN[]; + parents?: bigint[]; }; export type Cell = CellRendered & CellData; diff --git a/packages/starksheet-webapp/src/types/contracts/SpreadsheetContract.ts b/packages/starksheet-webapp/src/types/contracts/SpreadsheetContract.ts index 26346824..18cb379d 100644 --- a/packages/starksheet-webapp/src/types/contracts/SpreadsheetContract.ts +++ b/packages/starksheet-webapp/src/types/contracts/SpreadsheetContract.ts @@ -1,4 +1,3 @@ -import BN from "bn.js"; import { Cell } from "../cells"; import { SheetConstructorArgs } from "../onsheet"; import { ContractCall } from "../provider"; @@ -10,7 +9,7 @@ export interface SpreadsheetContract { from: number | string, constructorCalldata: SheetConstructorArgs ): Promise; - getSheetPrice(): Promise; + getSheetPrice(): Promise; /** * Build a raw `setCell` transaction from a Cell. * diff --git a/packages/starksheet-webapp/src/types/contracts/WorksheetContract.ts b/packages/starksheet-webapp/src/types/contracts/WorksheetContract.ts index 1943f59b..874b99c6 100644 --- a/packages/starksheet-webapp/src/types/contracts/WorksheetContract.ts +++ b/packages/starksheet-webapp/src/types/contracts/WorksheetContract.ts @@ -1,9 +1,8 @@ -import type BN from "bn.js"; import { CellData, CellRendered } from "../cells"; export interface WorksheetContract { totalSupply(): Promise; - ownerOf(tokenId: number): Promise; + ownerOf(tokenId: number): Promise; getCell(tokenId: number): Promise; renderCell(tokenId: number): Promise; renderCells(): Promise; diff --git a/packages/starksheet-webapp/src/types/onsheet.ts b/packages/starksheet-webapp/src/types/onsheet.ts index 47bdd9cb..76f07904 100644 --- a/packages/starksheet-webapp/src/types/onsheet.ts +++ b/packages/starksheet-webapp/src/types/onsheet.ts @@ -1,14 +1,13 @@ -import BN from "bn.js"; -import { Abi, FunctionAbi, StructAbi, number } from "starknet"; +import { Abi, BigNumberish, FunctionAbi, StructAbi } from "starknet"; import { Cell } from "./cells"; export type SheetConstructorArgs = { - name: number.BigNumberish; - symbol: number.BigNumberish; - owner: number.BigNumberish; - merkleRoot: number.BigNumberish; - maxPerWallet: number.BigNumberish; - rendererAddress: number.BigNumberish; + name: BigNumberish; + symbol: BigNumberish; + owner: BigNumberish; + merkleRoot: BigNumberish; + maxPerWallet: BigNumberish; + rendererAddress: BigNumberish; }; export type Sheet = { @@ -68,5 +67,5 @@ export type OnsheetContractData = { contractAbis: { [address: string]: Abi }; }; -export type Uint256 = { low: number.BigNumberish; high: number.BigNumberish }; -export type Uint256Output = { low: BN; high: BN }; +export type Uint256 = { low: BigNumberish; high: BigNumberish }; +export type Uint256Output = { low: bigint; high: bigint }; diff --git a/packages/starksheet-webapp/src/types/provider/ChainConfig.ts b/packages/starksheet-webapp/src/types/provider/ChainConfig.ts index 7e4c3fcd..e9aa00ac 100644 --- a/packages/starksheet-webapp/src/types/provider/ChainConfig.ts +++ b/packages/starksheet-webapp/src/types/provider/ChainConfig.ts @@ -1,8 +1,6 @@ import { ChainId } from "./ChainId"; import { ChainType } from "./ChainType"; -type NetworkName = "mainnet-alpha" | "goerli-alpha" | "goerli-alpha-2"; - export interface ChainConfig { chainId: ChainId; chainType: ChainType; diff --git a/packages/starksheet-webapp/src/types/provider/ContractCall.ts b/packages/starksheet-webapp/src/types/provider/ContractCall.ts index 1ec9a20c..9b4bba64 100644 --- a/packages/starksheet-webapp/src/types/provider/ContractCall.ts +++ b/packages/starksheet-webapp/src/types/provider/ContractCall.ts @@ -1,6 +1,4 @@ -import BN from "bn.js"; -import { BigNumberish } from "ethers"; -import { FunctionAbi } from "starknet"; +import { BigNumberish, FunctionAbi } from "starknet"; /** * Represents a contract call. @@ -22,12 +20,12 @@ export interface ContractCall { /** * The function selector. */ - selector?: BigNumberish | BN; + selector?: BigNumberish; /** * The calldata. In the EVM world, the calldata includes the bytes4 function selector. */ - calldata: (BigNumberish | BN)[] | string; + calldata: BigNumberish[] | string; /** * The value to send in chain base fee token diff --git a/packages/starksheet-webapp/src/utils/constants.ts b/packages/starksheet-webapp/src/utils/constants.ts index c1a22818..8c67104f 100644 --- a/packages/starksheet-webapp/src/utils/constants.ts +++ b/packages/starksheet-webapp/src/utils/constants.ts @@ -1,6 +1,4 @@ -import { number } from "starknet"; - -export const RC_BOUND = number.toBN(2).pow(number.toBN(128)); +export const RC_BOUND = 2n ** 128n; export const CONTRACT_FUNCTION_SEP = "."; export const ARGS_SEP = ","; export const ARG_LIST_SEP = ","; diff --git a/packages/starksheet-webapp/src/utils/hexUtils.ts b/packages/starksheet-webapp/src/utils/hexUtils.ts index fecc4d3e..a43397a5 100644 --- a/packages/starksheet-webapp/src/utils/hexUtils.ts +++ b/packages/starksheet-webapp/src/utils/hexUtils.ts @@ -1,7 +1,3 @@ -import BN from "bn.js"; -import { BigNumber } from "ethers"; -import { number } from "starknet"; - export function hex2str(hex: string): string { return (hex.match(/[a-f0-9]{2}/g) || []) .map((byte) => String.fromCharCode(parseInt(byte, 16))) @@ -19,23 +15,20 @@ export function isASCII(s: string) { } export const normalizeHexString = (address: string) => - !!address ? "0x" + number.toBN(address).toString(16) : ""; + !!address ? "0x" + BigInt(address).toString(16) : ""; -export const bn2hex = (hex: BN): string => "0x" + hex.toString(16); +export const bigint2hex = (hex: bigint): string => "0x" + hex.toString(16); -export const bn2bytes = +export const bigint2bytes = (n: number) => - (hex: BN): string => + (hex: bigint): string => hex.toString(16).padEnd(n * 2, "0"); -export const bn2uint = +export const bigint2uint = (n: number) => - (hex: BN): string => + (hex: bigint): string => hex.toString(16).padStart(n * 2, "0"); -export const ethersHexStringToBN = (hexstring: string) => - new BN(BigNumber.from(hexstring).toString()); - export function hexStringToIntegerArray(hexString: string) { // Remove any non-hex characters hexString = hexString.replace(/[^0-9a-fA-F]/g, ""); @@ -48,9 +41,8 @@ export function hexStringToIntegerArray(hexString: string) { } // Convert each pair to an integer and store it in a new array - const integerArray = Array.from( - hexPairs, - (pair) => new BN(parseInt(pair, 16)) + const integerArray = Array.from(hexPairs, (pair) => + BigInt(parseInt(pair, 16)) ); return integerArray; diff --git a/packages/starksheet-webapp/src/utils/sheetUtils.ts b/packages/starksheet-webapp/src/utils/sheetUtils.ts index 86d743a0..5afff67d 100644 --- a/packages/starksheet-webapp/src/utils/sheetUtils.ts +++ b/packages/starksheet-webapp/src/utils/sheetUtils.ts @@ -1,12 +1,14 @@ -import BN from "bn.js"; -import { number } from "starknet"; +import { BigNumberish } from "starknet"; import { N_COL } from "../config"; import { Cell } from "../types"; import { RC_BOUND } from "./constants"; import { str2hex } from "./hexUtils"; -export const resolveContractAddress = (values: BN[], contractAddress: BN) => { - return contractAddress.lt(RC_BOUND) - ? values[contractAddress.toNumber()] +export const resolveContractAddress = ( + values: bigint[], + contractAddress: bigint +) => { + return contractAddress < RC_BOUND + ? values[Number(contractAddress)] : contractAddress; }; @@ -16,11 +18,10 @@ export const tokenIdToCellName = (id: number) => { return `${col}${row}`; }; -export const isDependency = (arg: BN): boolean => - arg.mod(number.toBN(2)).toNumber() !== 0; +export const isDependency = (arg: bigint): boolean => arg % 2n !== 0n; -export function getDependencies(calldata: BN[]): number[] { - return calldata.filter(isDependency).map((data) => (data.toNumber() - 1) / 2); +export function getDependencies(calldata: bigint[]): number[] { + return calldata.filter(isDependency).map((data) => (Number(data) - 1) / 2); } export const getAllDependencies = @@ -34,16 +35,18 @@ export const getAllDependencies = deps.map(getAllDependencies(cells, _dependencies)); }; -export const encodeConst = (_arg: number.BigNumberish): BN => { +export const encodeConst = (_arg: BigNumberish): bigint => { try { - return number.toBN(_arg).mul(number.toBN(2)); + // const is a number + return BigInt(_arg) * 2n; } catch (e) { - return number.toBN(str2hex(_arg.toString(16))).mul(number.toBN(2)); + // const is a string + return BigInt(str2hex(_arg.toString(16))) * 2n; } }; -export const encodeTokenId = (_arg: number.BigNumberish): BN => - number.toBN(_arg).mul(number.toBN(2)).add(number.toBN(1)); +export const encodeTokenId = (_arg: BigNumberish): bigint => + BigInt(_arg) * 2n + 1n; export const cellNameToTokenId = (arg: string) => { const col = arg.toLowerCase().charCodeAt(0) - "a".charCodeAt(0); diff --git a/packages/starksheet-webapp/tsconfig.json b/packages/starksheet-webapp/tsconfig.json index 3eec5591..2e62d025 100644 --- a/packages/starksheet-webapp/tsconfig.json +++ b/packages/starksheet-webapp/tsconfig.json @@ -1,6 +1,6 @@ { "compilerOptions": { - "target": "es5", + "target": "es2020", "lib": ["dom", "dom.iterable", "esnext"], "allowJs": true, "skipLibCheck": true,