From 7766d9988d920c425604fd9d8afc041afafdf0eb Mon Sep 17 00:00:00 2001 From: devinxl <94832688+devinxl@users.noreply.github.com> Date: Thu, 18 Apr 2024 18:16:59 +0800 Subject: [PATCH] feat: Support delegateUpload feature (#49) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore: fix chore: fix dependencies versions in the example project & upgrade some packages (#40) * chore: fix dependencies versions in the example project, migrate @tot… (#36) * chore: fix dependencies versions in the example project, migrate @totejs/walletkit to @node-real/walletkit. * chore: upgrade the publish flow * chore: config commit-msg * chore: update versions (alpha) (#37) Co-authored-by: github-actions[bot] * fix: greenfield-uploadkit auto upgrade version error (#38) * chore: update versions (alpha) (#39) Co-authored-by: github-actions[bot] --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: github-actions[bot] * chore: update versions (#41) Co-authored-by: github-actions[bot] * chore: unify the default visibility (#46) * chore: unify the default visibility * chore: unify the default visibility * chore: update versions (#47) Co-authored-by: github-actions[bot] * feat: Support deletegateUpload feature --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: github-actions[bot] --- .changeset/honest-houses-dream.md | 5 + docs/package.json | 4 +- docs/src/components/UploadKit/chains.ts | 57 +----- docs/src/components/UploadKit/client.ts | 4 +- docs/src/components/UploadKit/index.tsx | 4 +- docs/src/pages/index.mdx | 26 +-- .../package.json | 4 +- .../src/app/chains.ts | 32 +--- .../src/app/client.ts | 4 +- .../src/app/providers.tsx | 4 +- .../package.json | 4 +- .../src/app/chains.ts | 32 +--- .../src/app/client.ts | 4 +- .../src/app/providers.tsx | 4 +- ...36f49cfb69972e6df38ced156c209d39350c349e27 | 1 + ...0e317741b3f3f3df05c53956d870235837ae2b73b4 | 3 +- .../app/chains.ts | 32 +--- .../app/client.ts | 4 +- .../app/root.tsx | 4 +- .../package.json | 4 +- .../package.json | 4 +- .../uploadkit-with-vite-walletkit/src/App.tsx | 4 +- .../src/chains.ts | 32 +--- .../src/client.ts | 4 +- packages/uploadkit/CHANGELOG.md | 13 ++ packages/uploadkit/README.md | 7 +- packages/uploadkit/dev/App.tsx | 7 +- packages/uploadkit/dev/bucket.ts | 23 +-- packages/uploadkit/dev/chains.ts | 54 ++---- packages/uploadkit/dev/client.ts | 4 +- packages/uploadkit/dev/main.tsx | 1 - packages/uploadkit/package.json | 10 +- .../src/components/GlobalTasks/utils.ts | 86 +++++---- .../src/components/UploadButton/index.tsx | 176 +++++++++++------- .../components/UploadKitProvider/context.ts | 17 +- .../src/components/UploadProvider/reducer.ts | 3 +- .../src/components/UploadProvider/types.ts | 8 +- .../getDefaultProviderOptions.ts | 19 +- packages/uploadkit/src/facade/bucket.ts | 28 +-- packages/uploadkit/src/facade/common.ts | 11 +- packages/uploadkit/src/facade/object.ts | 115 +++++++++--- packages/uploadkit/src/facade/offchainauth.ts | 26 ++- packages/uploadkit/src/hooks/useTotalFee.ts | 17 +- .../uploadkit/src/hooks/useUploadDisable.ts | 1 + packages/uploadkit/src/utils/error.ts | 8 + packages/uploadkit/src/utils/object.ts | 22 --- pnpm-lock.yaml | 78 ++++---- 47 files changed, 478 insertions(+), 536 deletions(-) create mode 100644 .changeset/honest-houses-dream.md create mode 100644 examples/uploadkit-with-remix-rainbowkit/.cache/content-v2/sha512/8a/48/f701d66320ddac706364699517bba645fe4c9444493bd4599523517a2c111d37022694c5f6448118fd36f49cfb69972e6df38ced156c209d39350c349e27 create mode 100644 packages/uploadkit/src/utils/error.ts diff --git a/.changeset/honest-houses-dream.md b/.changeset/honest-houses-dream.md new file mode 100644 index 0000000..037fe28 --- /dev/null +++ b/.changeset/honest-houses-dream.md @@ -0,0 +1,5 @@ +--- +"@node-real/greenfield-uploadkit": minor +--- + +support delegateUpload feature diff --git a/docs/package.json b/docs/package.json index 2f555fb..0b41ce1 100644 --- a/docs/package.json +++ b/docs/package.json @@ -18,8 +18,8 @@ "@node-real/uikit": "^2.54.2", "@node-real/walletkit": "^1.0.10-alpha.1", "@node-real/greenfield-uploadkit": "workspace:*", - "@bnb-chain/greenfield-cosmos-types": "0.4.0", - "@bnb-chain/greenfield-js-sdk": "1.2.0", + "@bnb-chain/greenfield-cosmos-types": "0.4.0-alpha.31", + "@bnb-chain/greenfield-js-sdk": "2.0.0-alpha.6", "@bnb-chain/reed-solomon": "^1.1.3", "prism-react-renderer": "~1.3.5", "react": "^18.2.0", diff --git a/docs/src/components/UploadKit/chains.ts b/docs/src/components/UploadKit/chains.ts index 9834634..367dfff 100644 --- a/docs/src/components/UploadKit/chains.ts +++ b/docs/src/components/UploadKit/chains.ts @@ -1,10 +1,10 @@ -import { bsc, mainnet } from 'wagmi/chains'; +import { bscTestnet } from 'viem/chains'; export const chains = [ { id: 5600, - name: 'BNB Greenfield Testnet', - network: 'BNB Greenfield Testnet', + name: 'BNB Greenfield Chain Testnet', + network: 'BNB Greenfield Chain Testnet', nativeCurrency: { name: 'tBNB', symbol: 'tBNB', @@ -20,59 +20,14 @@ export const chains = [ }, blockExplorers: { etherscan: { - name: `BNB Greenfield Testnet Scan`, + name: `BNB Greenfield Chain Testnet Scan`, url: 'https://greenfield-chain.bnbchain.org', }, default: { - name: `BNB Greenfield Testnet Scan`, + name: `BNB Greenfield Chain Testnet Scan`, url: 'https://greenfield-chain.bnbchain.org', }, }, }, - { - id: 204, - name: 'opBNB Mainnet', - network: 'opBNB Mainnet', - nativeCurrency: { - name: 'tcBNB', - symbol: 'tcBNB', - decimals: 18, - }, - rpcUrls: { - default: { - http: ['https://opbnb-mainnet-rpc.bnbchain.org'], - }, - public: { - http: ['https://opbnb-mainnet-rpc.bnbchain.org'], - }, - }, - blockExplorers: { - etherscan: { name: 'opBNBScan', url: `https://mainnet.opbnbscan.com` }, - default: { name: 'opBNBScan', url: `https://mainnet.opbnbscan.com` }, - }, - }, - { - id: 97, - name: 'BSC Testnet', - network: 'BSC Testnet', - nativeCurrency: { - name: 'tBNB', - symbol: 'tBNB', - decimals: 18, - }, - rpcUrls: { - default: { - http: [`https://data-seed-prebsc-1-s1.binance.org:8545`], - }, - public: { - http: [`https://data-seed-prebsc-1-s1.binance.org:8545`], - }, - }, - blockExplorers: { - etherscan: { name: 'BSC Testnet Scan', url: `https://testnet.bscscan.com` }, - default: { name: 'BSC Testnet Scan', url: `https://testnet.bscscan.com` }, - }, - }, - bsc, - mainnet, + bscTestnet, ]; diff --git a/docs/src/components/UploadKit/client.ts b/docs/src/components/UploadKit/client.ts index dbec588..1c72ffd 100644 --- a/docs/src/components/UploadKit/client.ts +++ b/docs/src/components/UploadKit/client.ts @@ -4,6 +4,4 @@ const GRPC_URL = 'https://gnfd-testnet-fullnode-tendermint-us.bnbchain.org'; const GREEN_CHAIN_ID = 5600; -export const client = Client.create(GRPC_URL, String(GREEN_CHAIN_ID), { - zkCryptoUrl: 'https://unpkg.com/@bnb-chain/greenfield-zk-crypto@0.0.3/dist/node/zk-crypto.wasm', -}); +export const client = Client.create(GRPC_URL, String(GREEN_CHAIN_ID)); diff --git a/docs/src/components/UploadKit/index.tsx b/docs/src/components/UploadKit/index.tsx index e0001c3..9172967 100644 --- a/docs/src/components/UploadKit/index.tsx +++ b/docs/src/components/UploadKit/index.tsx @@ -17,6 +17,7 @@ import { import { chains } from './chains'; import { Box, useColorMode } from '@node-real/uikit'; import { client } from './client'; +import { VisibilityType } from '@bnb-chain/greenfield-js-sdk'; const config = createConfig( getDefaultConfig({ @@ -34,11 +35,12 @@ const options: WalletKitOptions = { const uploadOptions: UploadKitOptions = { client: client, + delegateUpload: true, sp: { operatorAddress: '0x89A1CC91B642DECbC4789474694C606E0E0c420b', endpoint: 'https://gnfd-testnet-sp1.bnbchain.org', }, - visibility: 'VISIBILITY_TYPE_PUBLIC_READ', + visibility: VisibilityType.VISIBILITY_TYPE_PUBLIC_READ, }; export default function App() { diff --git a/docs/src/pages/index.mdx b/docs/src/pages/index.mdx index 00a3636..3bf293c 100644 --- a/docs/src/pages/index.mdx +++ b/docs/src/pages/index.mdx @@ -5,14 +5,14 @@ Greenfield UploadKit is a React component library for easily uploading objects t ## Installation ```bash -npm i wagmi viem @node-real/greenfield-uploadkit @bnb-chain/greenfield-js-sdk @bnb-chain/greenfield-cosmos-types @bnb-chain/reed-solomon +npm i wagmi@1 viem@1 @node-real/greenfield-uploadkit @bnb-chain/greenfield-js-sdk@2.0.0-alpha.6 @bnb-chain/greenfield-cosmos-types@0.4.0-alpha.31 @bnb-chain/reed-solomon ``` -- wagmi > 1.0.0 -- viem > 1.0.0 -- @bnb-chain/greenfield-js-sdk >= 1.2.0 +- wagmi >= 1.0.0 +- viem >= 1.0.0 +- @bnb-chain/greenfield-js-sdk = 2.0.0-alpha.6 +- @bnb-chain/greenfield-cosmos-types = 0.4.0-alpha.31 - @bnb-chain/reed-solomon >= 1.1.3 -- @bnb-chain/greenfield-cosmos-types >= 0.4.0 ## Examples @@ -360,19 +360,21 @@ export interface UploadKitProviderProps { } /** - * Configuration options for upload. + * UploadKitOptions is the options of the Greenfield UploadKit. * * @property {Client} client - The Greenfield js sdk client, Reference: https://docs.bnbchain.org/greenfield-js-sdk/client/greenfield-client * * @property {string} seedString -seedString is used to authenticate yourself to the provider. If not specified, the provider will generate one. * @property {(data: Uint8Array) => Promise} [checksumFn] - The function to calculate the checksum of the object. If not specified, the provider will use the default checksum function. * - * @property {string} [bucketName] - The name of the bucket. If not specified, the default bucket will be used. + * @property {boolean} delegateUpload - Specifies whether to use the delegate upload mode. If not specified, the default is set to true. + * + * @property {string} bucketName - The name of the bucket. If not specified, the default bucket will be used. * @property {Sp} [sp] - The storage service provider. If not specified, a random one will be selected. - * @property {keyof typeof VisibilityType} [visibility='VISIBILITY_TYPE_PUBLIC_READ'] - The visibility of the object. If not specified, 'VISIBILITY_TYPE_PUBLIC_READ' will be used. + * @property {VisibilityType} visibility - The visibility of the object. If not specified, {VisibilityType.VISIBILITY_TYPE_PUBLIC_READ} will be used. * - * @property {number} [maxObjectSize=56 * 1024 * 1024] - If not specified, the default is set to 56MB, resulting in an encoding time of under 6 seconds. Larger files may experience extended encoding times, and it is recommended to utilize a web worker for encoding large files. Reference: https://github.com/bnb-chain/greenfield-js-sdk/blob/main/packages/reed-solomon/examples/web-worker.html - * @property {number} [maxObjectCount=100] - The maximum count of objects. If not specified, 100 will be used. + * @property {number} [maxObjectSize=56 * 1024 * 1024] - If the delegateUpload is false and this field not specified, the default is set to 56MB, resulting in an encoding time of under 6 seconds. Larger files may experience extended encoding times, and it is recommended to utilize a web worker for encoding large files. Reference: https://github.com/bnb-chain/greenfield-js-sdk/blob/main/packages/reed-solomon/examples/web-worker.html. But if the delegateUpload is true, the default is set to 1GB. + * @property {number} [maxObjectCount=100] - The maximum count of objects. If the delegateUpload is false and this field not specified, the default is set to 100. But if the delegateUpload is true, the default is set to 500. * * @property {boolean} [taskManagementButton=true] - Specifies whether to show the task management button. * @@ -384,9 +386,11 @@ export interface UploadKitOptions { seedString?: string; checksumFn?: (data: Uint8Array) => Promise; + delegateUpload?: boolean; + bucketName?: string; sp?: Sp; - visibility?: keyof typeof VisibilityType; + visibility?: VisibilityType; maxObjectSize?: number; maxObjectCount?: number; diff --git a/examples/uploadkit-with-nextjs-rainbowkit/package.json b/examples/uploadkit-with-nextjs-rainbowkit/package.json index 8d59e9d..97baa17 100644 --- a/examples/uploadkit-with-nextjs-rainbowkit/package.json +++ b/examples/uploadkit-with-nextjs-rainbowkit/package.json @@ -9,8 +9,8 @@ "lint": "next lint" }, "dependencies": { - "@bnb-chain/greenfield-cosmos-types": "0.4.0", - "@bnb-chain/greenfield-js-sdk": "1.2.0", + "@bnb-chain/greenfield-cosmos-types": "0.4.0-alpha.31", + "@bnb-chain/greenfield-js-sdk": "2.0.0-alpha.6", "@bnb-chain/reed-solomon": "1.1.3", "@node-real/greenfield-uploadkit": "workspace:*", "@rainbow-me/rainbowkit": "^1.3.3", diff --git a/examples/uploadkit-with-nextjs-rainbowkit/src/app/chains.ts b/examples/uploadkit-with-nextjs-rainbowkit/src/app/chains.ts index 770dcfa..70afaac 100644 --- a/examples/uploadkit-with-nextjs-rainbowkit/src/app/chains.ts +++ b/examples/uploadkit-with-nextjs-rainbowkit/src/app/chains.ts @@ -1,4 +1,4 @@ -import { bsc, bscTestnet } from 'wagmi/chains'; +import { bscTestnet } from 'wagmi/chains'; const bnbGreenfieldIcon = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyOCIgaGVpZ2h0PSIyOCIgZmlsbD0ibm9uZSI+PGcgY2xpcC1wYXRoPSJ1cmwoI2EpIj48cGF0aCBmaWxsPSIjRjBCOTBCIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xNCAwYzcuNzMzIDAgMTQgNi4yNjcgMTQgMTRzLTYuMjY3IDE0LTE0IDE0UzAgMjEuNzMzIDAgMTQgNi4yNjcgMCAxNCAwWiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PHBhdGggZmlsbD0iI2ZmZiIgZD0ibTcuNjk0IDE0IC4wMSAzLjcwMiAzLjE0NiAxLjg1djIuMTY4bC00Ljk4Ni0yLjkyNHYtNS44NzhMNy42OTQgMTRabTAtMy43MDJ2Mi4xNTdsLTEuODMyLTEuMDgzVjkuMjE0bDEuODMyLTEuMDgzIDEuODQxIDEuMDgzLTEuODQgMS4wODRabTQuNDctMS4wODQgMS44MzItMS4wODMgMS44NCAxLjA4My0xLjg0IDEuMDg0LTEuODMyLTEuMDg0WiIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik05LjAxOCAxNi45MzV2LTIuMTY4bDEuODMyIDEuMDg0djIuMTU3bC0xLjgzMi0xLjA3M1ptMy4xNDYgMy4zOTQgMS44MzIgMS4wODQgMS44NC0xLjA4NHYyLjE1N2wtMS44NCAxLjA4NC0xLjgzMi0xLjA4NFYyMC4zM1ptNi4zLTExLjExNSAxLjgzMi0xLjA4MyAxLjg0IDEuMDgzdjIuMTU4bC0xLjg0IDEuMDgzdi0yLjE1N2wtMS44MzItMS4wODRabTEuODMyIDguNDg4LjAxLTMuNzAyIDEuODMxLTEuMDg0djUuODc5bC00Ljk4NiAyLjkyNHYtMi4xNjdsMy4xNDUtMS44NVoiLz48cGF0aCBmaWxsPSIjZmZmIiBkPSJtMTguOTgyIDE2LjkzNS0xLjgzMiAxLjA3M3YtMi4xNTdsMS44MzItMS4wODR2Mi4xNjhaIi8+PHBhdGggZmlsbD0iI2ZmZiIgZD0ibTE4Ljk4MiAxMS4wNjUuMDEgMi4xNjgtMy4xNTUgMS44NXYzLjcxMmwtMS44MzEgMS4wNzMtMS44MzItMS4wNzN2LTMuNzExbC0zLjE1NS0xLjg1MXYtMi4xNjhsMS44NC0xLjA4MyAzLjEzNSAxLjg2IDMuMTU1LTEuODYgMS44NCAxLjA4M2gtLjAwN1ptLTkuOTY0LTMuNyA0Ljk3Ny0yLjkzNSA0Ljk4NyAyLjkzNS0xLjgzMiAxLjA4My0zLjE1NC0xLjg2LTMuMTQ2IDEuODYtMS44MzItMS4wODNaIi8+PC9nPjxkZWZzPjxjbGlwUGF0aCBpZD0iYSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTAgMGgyOHYyOEgweiIvPjwvY2xpcFBhdGg+PC9kZWZzPjwvc3ZnPg=='; @@ -33,35 +33,5 @@ export const chainList = [ }, iconUrl: bnbGreenfieldIcon, }, - { - id: 1017, - name: 'BNB Greenfield Chain', - network: 'BNB Greenfield Chain', - nativeCurrency: { - name: 'BNB', - symbol: 'BNB', - decimals: 18, - }, - rpcUrls: { - default: { - http: ['https://greenfield-chain.bnbchain.org'], - }, - public: { - http: ['https://greenfield-chain.bnbchain.org'], - }, - }, - blockExplorers: { - etherscan: { - name: `BNB Greenfield Mainnet Scan`, - url: 'https://greenfieldscan.com', - }, - default: { - name: `BNB Greenfield Mainnet Scan`, - url: 'https://greenfieldscan.com', - }, - }, - iconUrl: bnbGreenfieldIcon, - }, bscTestnet, - bsc, ]; diff --git a/examples/uploadkit-with-nextjs-rainbowkit/src/app/client.ts b/examples/uploadkit-with-nextjs-rainbowkit/src/app/client.ts index ec9c8ba..897594f 100644 --- a/examples/uploadkit-with-nextjs-rainbowkit/src/app/client.ts +++ b/examples/uploadkit-with-nextjs-rainbowkit/src/app/client.ts @@ -3,6 +3,4 @@ import { Client } from '@bnb-chain/greenfield-js-sdk'; const GRPC_URL = 'https://gnfd-testnet-fullnode-tendermint-us.bnbchain.org'; const GREEN_CHAIN_ID = 5600; -export const client = Client.create(GRPC_URL, String(GREEN_CHAIN_ID), { - zkCryptoUrl: 'https://unpkg.com/@bnb-chain/greenfield-zk-crypto@0.0.3/dist/node/zk-crypto.wasm', -}); +export const client = Client.create(GRPC_URL, String(GREEN_CHAIN_ID)); diff --git a/examples/uploadkit-with-nextjs-rainbowkit/src/app/providers.tsx b/examples/uploadkit-with-nextjs-rainbowkit/src/app/providers.tsx index afaae2b..2466b1c 100644 --- a/examples/uploadkit-with-nextjs-rainbowkit/src/app/providers.tsx +++ b/examples/uploadkit-with-nextjs-rainbowkit/src/app/providers.tsx @@ -12,6 +12,7 @@ import { client } from './client'; import '@node-real/greenfield-uploadkit/styles.css'; import '@rainbow-me/rainbowkit/styles.css'; import { publicProvider } from 'wagmi/providers/public'; +import { VisibilityType } from '@bnb-chain/greenfield-js-sdk'; const { chains, publicClient } = configureChains(chainList, [publicProvider()]); @@ -32,7 +33,8 @@ const wagmiConfig = createConfig({ const uploadOptions: UploadKitOptions = { client: client, - visibility: 'VISIBILITY_TYPE_PUBLIC_READ', + visibility: VisibilityType.VISIBILITY_TYPE_PUBLIC_READ, + delegateUpload: true, }; export default function Providers({ children }: { children: React.ReactNode }) { diff --git a/examples/uploadkit-with-nextjs-walletkit/package.json b/examples/uploadkit-with-nextjs-walletkit/package.json index 90e7762..4f6b917 100644 --- a/examples/uploadkit-with-nextjs-walletkit/package.json +++ b/examples/uploadkit-with-nextjs-walletkit/package.json @@ -9,8 +9,8 @@ "lint": "next lint" }, "dependencies": { - "@bnb-chain/greenfield-cosmos-types": "0.4.0", - "@bnb-chain/greenfield-js-sdk": "1.2.0", + "@bnb-chain/greenfield-cosmos-types": "0.4.0-alpha.31", + "@bnb-chain/greenfield-js-sdk": "2.0.0-alpha.6", "@bnb-chain/reed-solomon": "1.1.3", "@node-real/greenfield-uploadkit": "workspace:*", "@node-real/walletkit": "^1.0.10-alpha.1", diff --git a/examples/uploadkit-with-nextjs-walletkit/src/app/chains.ts b/examples/uploadkit-with-nextjs-walletkit/src/app/chains.ts index 770dcfa..70afaac 100644 --- a/examples/uploadkit-with-nextjs-walletkit/src/app/chains.ts +++ b/examples/uploadkit-with-nextjs-walletkit/src/app/chains.ts @@ -1,4 +1,4 @@ -import { bsc, bscTestnet } from 'wagmi/chains'; +import { bscTestnet } from 'wagmi/chains'; const bnbGreenfieldIcon = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyOCIgaGVpZ2h0PSIyOCIgZmlsbD0ibm9uZSI+PGcgY2xpcC1wYXRoPSJ1cmwoI2EpIj48cGF0aCBmaWxsPSIjRjBCOTBCIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xNCAwYzcuNzMzIDAgMTQgNi4yNjcgMTQgMTRzLTYuMjY3IDE0LTE0IDE0UzAgMjEuNzMzIDAgMTQgNi4yNjcgMCAxNCAwWiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PHBhdGggZmlsbD0iI2ZmZiIgZD0ibTcuNjk0IDE0IC4wMSAzLjcwMiAzLjE0NiAxLjg1djIuMTY4bC00Ljk4Ni0yLjkyNHYtNS44NzhMNy42OTQgMTRabTAtMy43MDJ2Mi4xNTdsLTEuODMyLTEuMDgzVjkuMjE0bDEuODMyLTEuMDgzIDEuODQxIDEuMDgzLTEuODQgMS4wODRabTQuNDctMS4wODQgMS44MzItMS4wODMgMS44NCAxLjA4My0xLjg0IDEuMDg0LTEuODMyLTEuMDg0WiIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik05LjAxOCAxNi45MzV2LTIuMTY4bDEuODMyIDEuMDg0djIuMTU3bC0xLjgzMi0xLjA3M1ptMy4xNDYgMy4zOTQgMS44MzIgMS4wODQgMS44NC0xLjA4NHYyLjE1N2wtMS44NCAxLjA4NC0xLjgzMi0xLjA4NFYyMC4zM1ptNi4zLTExLjExNSAxLjgzMi0xLjA4MyAxLjg0IDEuMDgzdjIuMTU4bC0xLjg0IDEuMDgzdi0yLjE1N2wtMS44MzItMS4wODRabTEuODMyIDguNDg4LjAxLTMuNzAyIDEuODMxLTEuMDg0djUuODc5bC00Ljk4NiAyLjkyNHYtMi4xNjdsMy4xNDUtMS44NVoiLz48cGF0aCBmaWxsPSIjZmZmIiBkPSJtMTguOTgyIDE2LjkzNS0xLjgzMiAxLjA3M3YtMi4xNTdsMS44MzItMS4wODR2Mi4xNjhaIi8+PHBhdGggZmlsbD0iI2ZmZiIgZD0ibTE4Ljk4MiAxMS4wNjUuMDEgMi4xNjgtMy4xNTUgMS44NXYzLjcxMmwtMS44MzEgMS4wNzMtMS44MzItMS4wNzN2LTMuNzExbC0zLjE1NS0xLjg1MXYtMi4xNjhsMS44NC0xLjA4MyAzLjEzNSAxLjg2IDMuMTU1LTEuODYgMS44NCAxLjA4M2gtLjAwN1ptLTkuOTY0LTMuNyA0Ljk3Ny0yLjkzNSA0Ljk4NyAyLjkzNS0xLjgzMiAxLjA4My0zLjE1NC0xLjg2LTMuMTQ2IDEuODYtMS44MzItMS4wODNaIi8+PC9nPjxkZWZzPjxjbGlwUGF0aCBpZD0iYSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTAgMGgyOHYyOEgweiIvPjwvY2xpcFBhdGg+PC9kZWZzPjwvc3ZnPg=='; @@ -33,35 +33,5 @@ export const chainList = [ }, iconUrl: bnbGreenfieldIcon, }, - { - id: 1017, - name: 'BNB Greenfield Chain', - network: 'BNB Greenfield Chain', - nativeCurrency: { - name: 'BNB', - symbol: 'BNB', - decimals: 18, - }, - rpcUrls: { - default: { - http: ['https://greenfield-chain.bnbchain.org'], - }, - public: { - http: ['https://greenfield-chain.bnbchain.org'], - }, - }, - blockExplorers: { - etherscan: { - name: `BNB Greenfield Mainnet Scan`, - url: 'https://greenfieldscan.com', - }, - default: { - name: `BNB Greenfield Mainnet Scan`, - url: 'https://greenfieldscan.com', - }, - }, - iconUrl: bnbGreenfieldIcon, - }, bscTestnet, - bsc, ]; diff --git a/examples/uploadkit-with-nextjs-walletkit/src/app/client.ts b/examples/uploadkit-with-nextjs-walletkit/src/app/client.ts index ec9c8ba..897594f 100644 --- a/examples/uploadkit-with-nextjs-walletkit/src/app/client.ts +++ b/examples/uploadkit-with-nextjs-walletkit/src/app/client.ts @@ -3,6 +3,4 @@ import { Client } from '@bnb-chain/greenfield-js-sdk'; const GRPC_URL = 'https://gnfd-testnet-fullnode-tendermint-us.bnbchain.org'; const GREEN_CHAIN_ID = 5600; -export const client = Client.create(GRPC_URL, String(GREEN_CHAIN_ID), { - zkCryptoUrl: 'https://unpkg.com/@bnb-chain/greenfield-zk-crypto@0.0.3/dist/node/zk-crypto.wasm', -}); +export const client = Client.create(GRPC_URL, String(GREEN_CHAIN_ID)); diff --git a/examples/uploadkit-with-nextjs-walletkit/src/app/providers.tsx b/examples/uploadkit-with-nextjs-walletkit/src/app/providers.tsx index 83ef947..5cf55c6 100644 --- a/examples/uploadkit-with-nextjs-walletkit/src/app/providers.tsx +++ b/examples/uploadkit-with-nextjs-walletkit/src/app/providers.tsx @@ -13,6 +13,7 @@ import { client } from './client'; import '@node-real/greenfield-uploadkit/styles.css'; import '@node-real/walletkit/styles.css'; +import { VisibilityType } from '@bnb-chain/greenfield-js-sdk'; const config = createConfig( getDefaultConfig({ @@ -33,7 +34,8 @@ const options: WalletKitOptions = { const uploadOptions: UploadKitOptions = { client: client, - visibility: 'VISIBILITY_TYPE_PUBLIC_READ', + visibility: VisibilityType.VISIBILITY_TYPE_PUBLIC_READ, + delegateUpload: true, }; export default function Providers({ children }: { children: React.ReactNode }) { diff --git a/examples/uploadkit-with-remix-rainbowkit/.cache/content-v2/sha512/8a/48/f701d66320ddac706364699517bba645fe4c9444493bd4599523517a2c111d37022694c5f6448118fd36f49cfb69972e6df38ced156c209d39350c349e27 b/examples/uploadkit-with-remix-rainbowkit/.cache/content-v2/sha512/8a/48/f701d66320ddac706364699517bba645fe4c9444493bd4599523517a2c111d37022694c5f6448118fd36f49cfb69972e6df38ced156c209d39350c349e27 new file mode 100644 index 0000000..ef8b385 --- /dev/null +++ b/examples/uploadkit-with-remix-rainbowkit/.cache/content-v2/sha512/8a/48/f701d66320ddac706364699517bba645fe4c9444493bd4599523517a2c111d37022694c5f6448118fd36f49cfb69972e6df38ced156c209d39350c349e27 @@ -0,0 +1 @@ +{"hash":"9ca9d06291e3270b31d2efae0ae87a7bb2c233528531795dcc3958b6c1fd9f4e","exports":["default","links","loader","meta"]} \ No newline at end of file diff --git a/examples/uploadkit-with-remix-rainbowkit/.cache/index-v5/d0/c4/d960260ece228d28f70e317741b3f3f3df05c53956d870235837ae2b73b4 b/examples/uploadkit-with-remix-rainbowkit/.cache/index-v5/d0/c4/d960260ece228d28f70e317741b3f3f3df05c53956d870235837ae2b73b4 index f7c0a1e..aaf73b8 100644 --- a/examples/uploadkit-with-remix-rainbowkit/.cache/index-v5/d0/c4/d960260ece228d28f70e317741b3f3f3df05c53956d870235837ae2b73b4 +++ b/examples/uploadkit-with-remix-rainbowkit/.cache/index-v5/d0/c4/d960260ece228d28f70e317741b3f3f3df05c53956d870235837ae2b73b4 @@ -1,4 +1,5 @@ 1333454e676b89d19f6366af1b597fe13dd278cd {"key":"root.exports","integrity":"sha512-QGdfjUiKnTUbthAE5XSxkMmVJjOfu0vV1Bli6pVM5g4P1d7XqMGXYANoGMZvKNl6PTy3XRGUx3ll/6hoHvowsQ==","time":1705405448653,"size":121} 638c3591243298b1bcaf81abc893dd12e894965d {"key":"root.exports","integrity":"sha512-81+h0xGrNSHNyjIU73M7TD3N/L/xzEag3kc5VPHDbsicQXx+kiKzNOD7wJXbJcT45qT5vcaQAXohCRMC8N98xA==","time":1705405602121,"size":121} -69119b1e62ad63d5bb3aa11914194f5b7e127995 {"key":"root.exports","integrity":"sha512-kj02KAJ+95TO+t5jVvLcBqu0qBMDewcpBtXY9vLOuvYYx2CbIbJZHo9CNJPzLN65NGXXYJafUO5vC0C3uEGMTw==","time":1705405628394,"size":121} \ No newline at end of file +69119b1e62ad63d5bb3aa11914194f5b7e127995 {"key":"root.exports","integrity":"sha512-kj02KAJ+95TO+t5jVvLcBqu0qBMDewcpBtXY9vLOuvYYx2CbIbJZHo9CNJPzLN65NGXXYJafUO5vC0C3uEGMTw==","time":1705405628394,"size":121} +ba8e21b315e0d751aa75e35f0aab7b0dbde1f59c {"key":"root.exports","integrity":"sha512-ikj3AdZjIN2scGNkaZUXu6ZF/kyUREk71FmVI1F6LBEdNwImlMX2RIEY/Tb0nPtply5t84ztFWwgnTk1DDSeJw==","time":1713433755027,"size":121} \ No newline at end of file diff --git a/examples/uploadkit-with-remix-rainbowkit/app/chains.ts b/examples/uploadkit-with-remix-rainbowkit/app/chains.ts index 770dcfa..70afaac 100644 --- a/examples/uploadkit-with-remix-rainbowkit/app/chains.ts +++ b/examples/uploadkit-with-remix-rainbowkit/app/chains.ts @@ -1,4 +1,4 @@ -import { bsc, bscTestnet } from 'wagmi/chains'; +import { bscTestnet } from 'wagmi/chains'; const bnbGreenfieldIcon = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyOCIgaGVpZ2h0PSIyOCIgZmlsbD0ibm9uZSI+PGcgY2xpcC1wYXRoPSJ1cmwoI2EpIj48cGF0aCBmaWxsPSIjRjBCOTBCIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xNCAwYzcuNzMzIDAgMTQgNi4yNjcgMTQgMTRzLTYuMjY3IDE0LTE0IDE0UzAgMjEuNzMzIDAgMTQgNi4yNjcgMCAxNCAwWiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PHBhdGggZmlsbD0iI2ZmZiIgZD0ibTcuNjk0IDE0IC4wMSAzLjcwMiAzLjE0NiAxLjg1djIuMTY4bC00Ljk4Ni0yLjkyNHYtNS44NzhMNy42OTQgMTRabTAtMy43MDJ2Mi4xNTdsLTEuODMyLTEuMDgzVjkuMjE0bDEuODMyLTEuMDgzIDEuODQxIDEuMDgzLTEuODQgMS4wODRabTQuNDctMS4wODQgMS44MzItMS4wODMgMS44NCAxLjA4My0xLjg0IDEuMDg0LTEuODMyLTEuMDg0WiIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik05LjAxOCAxNi45MzV2LTIuMTY4bDEuODMyIDEuMDg0djIuMTU3bC0xLjgzMi0xLjA3M1ptMy4xNDYgMy4zOTQgMS44MzIgMS4wODQgMS44NC0xLjA4NHYyLjE1N2wtMS44NCAxLjA4NC0xLjgzMi0xLjA4NFYyMC4zM1ptNi4zLTExLjExNSAxLjgzMi0xLjA4MyAxLjg0IDEuMDgzdjIuMTU4bC0xLjg0IDEuMDgzdi0yLjE1N2wtMS44MzItMS4wODRabTEuODMyIDguNDg4LjAxLTMuNzAyIDEuODMxLTEuMDg0djUuODc5bC00Ljk4NiAyLjkyNHYtMi4xNjdsMy4xNDUtMS44NVoiLz48cGF0aCBmaWxsPSIjZmZmIiBkPSJtMTguOTgyIDE2LjkzNS0xLjgzMiAxLjA3M3YtMi4xNTdsMS44MzItMS4wODR2Mi4xNjhaIi8+PHBhdGggZmlsbD0iI2ZmZiIgZD0ibTE4Ljk4MiAxMS4wNjUuMDEgMi4xNjgtMy4xNTUgMS44NXYzLjcxMmwtMS44MzEgMS4wNzMtMS44MzItMS4wNzN2LTMuNzExbC0zLjE1NS0xLjg1MXYtMi4xNjhsMS44NC0xLjA4MyAzLjEzNSAxLjg2IDMuMTU1LTEuODYgMS44NCAxLjA4M2gtLjAwN1ptLTkuOTY0LTMuNyA0Ljk3Ny0yLjkzNSA0Ljk4NyAyLjkzNS0xLjgzMiAxLjA4My0zLjE1NC0xLjg2LTMuMTQ2IDEuODYtMS44MzItMS4wODNaIi8+PC9nPjxkZWZzPjxjbGlwUGF0aCBpZD0iYSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTAgMGgyOHYyOEgweiIvPjwvY2xpcFBhdGg+PC9kZWZzPjwvc3ZnPg=='; @@ -33,35 +33,5 @@ export const chainList = [ }, iconUrl: bnbGreenfieldIcon, }, - { - id: 1017, - name: 'BNB Greenfield Chain', - network: 'BNB Greenfield Chain', - nativeCurrency: { - name: 'BNB', - symbol: 'BNB', - decimals: 18, - }, - rpcUrls: { - default: { - http: ['https://greenfield-chain.bnbchain.org'], - }, - public: { - http: ['https://greenfield-chain.bnbchain.org'], - }, - }, - blockExplorers: { - etherscan: { - name: `BNB Greenfield Mainnet Scan`, - url: 'https://greenfieldscan.com', - }, - default: { - name: `BNB Greenfield Mainnet Scan`, - url: 'https://greenfieldscan.com', - }, - }, - iconUrl: bnbGreenfieldIcon, - }, bscTestnet, - bsc, ]; diff --git a/examples/uploadkit-with-remix-rainbowkit/app/client.ts b/examples/uploadkit-with-remix-rainbowkit/app/client.ts index ec9c8ba..897594f 100644 --- a/examples/uploadkit-with-remix-rainbowkit/app/client.ts +++ b/examples/uploadkit-with-remix-rainbowkit/app/client.ts @@ -3,6 +3,4 @@ import { Client } from '@bnb-chain/greenfield-js-sdk'; const GRPC_URL = 'https://gnfd-testnet-fullnode-tendermint-us.bnbchain.org'; const GREEN_CHAIN_ID = 5600; -export const client = Client.create(GRPC_URL, String(GREEN_CHAIN_ID), { - zkCryptoUrl: 'https://unpkg.com/@bnb-chain/greenfield-zk-crypto@0.0.3/dist/node/zk-crypto.wasm', -}); +export const client = Client.create(GRPC_URL, String(GREEN_CHAIN_ID)); diff --git a/examples/uploadkit-with-remix-rainbowkit/app/root.tsx b/examples/uploadkit-with-remix-rainbowkit/app/root.tsx index 604412b..3ea9e2f 100644 --- a/examples/uploadkit-with-remix-rainbowkit/app/root.tsx +++ b/examples/uploadkit-with-remix-rainbowkit/app/root.tsx @@ -27,6 +27,7 @@ import uploadKitStyleUrl from '@node-real/greenfield-uploadkit/styles.css'; import rainbowStylesUrl from '@rainbow-me/rainbowkit/styles.css'; import { client } from './client'; import { chainList } from './chains'; +import { VisibilityType } from '@bnb-chain/greenfield-js-sdk'; type Env = { PUBLIC_ENABLE_TESTNETS?: string }; @@ -58,7 +59,8 @@ export const loader: LoaderFunction = () => { const uploadOptions: UploadKitOptions = { client: client, - visibility: 'VISIBILITY_TYPE_PUBLIC_READ', + visibility: VisibilityType.VISIBILITY_TYPE_PUBLIC_READ, + delegateUpload: true, }; export default function App() { const { ENV } = useLoaderData(); diff --git a/examples/uploadkit-with-remix-rainbowkit/package.json b/examples/uploadkit-with-remix-rainbowkit/package.json index 99a0c1c..0053b0d 100644 --- a/examples/uploadkit-with-remix-rainbowkit/package.json +++ b/examples/uploadkit-with-remix-rainbowkit/package.json @@ -10,8 +10,8 @@ "start": "remix-serve build" }, "dependencies": { - "@bnb-chain/greenfield-cosmos-types": "0.4.0", - "@bnb-chain/greenfield-js-sdk": "1.2.0", + "@bnb-chain/greenfield-cosmos-types": "0.4.0-alpha.31", + "@bnb-chain/greenfield-js-sdk": "2.0.0-alpha.6", "@bnb-chain/reed-solomon": "1.1.3", "@node-real/greenfield-uploadkit": "workspace:*", "@rainbow-me/rainbowkit": "1.3.3", diff --git a/examples/uploadkit-with-vite-walletkit/package.json b/examples/uploadkit-with-vite-walletkit/package.json index 65985f3..d049d48 100644 --- a/examples/uploadkit-with-vite-walletkit/package.json +++ b/examples/uploadkit-with-vite-walletkit/package.json @@ -10,8 +10,8 @@ "preview": "vite preview" }, "dependencies": { - "@bnb-chain/greenfield-cosmos-types": "0.4.0", - "@bnb-chain/greenfield-js-sdk": "1.2.0", + "@bnb-chain/greenfield-cosmos-types": "0.4.0-alpha.31", + "@bnb-chain/greenfield-js-sdk": "2.0.0-alpha.6", "@bnb-chain/reed-solomon": "1.1.3", "@node-real/greenfield-uploadkit": "workspace:*", "@node-real/walletkit": "1.0.10-alpha.1", diff --git a/examples/uploadkit-with-vite-walletkit/src/App.tsx b/examples/uploadkit-with-vite-walletkit/src/App.tsx index 2f2d359..d111b35 100644 --- a/examples/uploadkit-with-vite-walletkit/src/App.tsx +++ b/examples/uploadkit-with-vite-walletkit/src/App.tsx @@ -13,6 +13,7 @@ import { UploadKitOptions, UploadKitProvider, } from '@node-real/greenfield-uploadkit'; +import { VisibilityType } from '@bnb-chain/greenfield-js-sdk'; import { client } from './client'; import '@node-real/greenfield-uploadkit/styles.css'; import '@node-real/walletkit/styles.css'; @@ -36,7 +37,8 @@ const options: WalletKitOptions = { const uploadOptions: UploadKitOptions = { client: client, - visibility: 'VISIBILITY_TYPE_PUBLIC_READ', + visibility: VisibilityType.VISIBILITY_TYPE_PUBLIC_READ, + delegateUpload: true, }; export default function App() { diff --git a/examples/uploadkit-with-vite-walletkit/src/chains.ts b/examples/uploadkit-with-vite-walletkit/src/chains.ts index 770dcfa..70afaac 100644 --- a/examples/uploadkit-with-vite-walletkit/src/chains.ts +++ b/examples/uploadkit-with-vite-walletkit/src/chains.ts @@ -1,4 +1,4 @@ -import { bsc, bscTestnet } from 'wagmi/chains'; +import { bscTestnet } from 'wagmi/chains'; const bnbGreenfieldIcon = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyOCIgaGVpZ2h0PSIyOCIgZmlsbD0ibm9uZSI+PGcgY2xpcC1wYXRoPSJ1cmwoI2EpIj48cGF0aCBmaWxsPSIjRjBCOTBCIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xNCAwYzcuNzMzIDAgMTQgNi4yNjcgMTQgMTRzLTYuMjY3IDE0LTE0IDE0UzAgMjEuNzMzIDAgMTQgNi4yNjcgMCAxNCAwWiIgY2xpcC1ydWxlPSJldmVub2RkIi8+PHBhdGggZmlsbD0iI2ZmZiIgZD0ibTcuNjk0IDE0IC4wMSAzLjcwMiAzLjE0NiAxLjg1djIuMTY4bC00Ljk4Ni0yLjkyNHYtNS44NzhMNy42OTQgMTRabTAtMy43MDJ2Mi4xNTdsLTEuODMyLTEuMDgzVjkuMjE0bDEuODMyLTEuMDgzIDEuODQxIDEuMDgzLTEuODQgMS4wODRabTQuNDctMS4wODQgMS44MzItMS4wODMgMS44NCAxLjA4My0xLjg0IDEuMDg0LTEuODMyLTEuMDg0WiIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik05LjAxOCAxNi45MzV2LTIuMTY4bDEuODMyIDEuMDg0djIuMTU3bC0xLjgzMi0xLjA3M1ptMy4xNDYgMy4zOTQgMS44MzIgMS4wODQgMS44NC0xLjA4NHYyLjE1N2wtMS44NCAxLjA4NC0xLjgzMi0xLjA4NFYyMC4zM1ptNi4zLTExLjExNSAxLjgzMi0xLjA4MyAxLjg0IDEuMDgzdjIuMTU4bC0xLjg0IDEuMDgzdi0yLjE1N2wtMS44MzItMS4wODRabTEuODMyIDguNDg4LjAxLTMuNzAyIDEuODMxLTEuMDg0djUuODc5bC00Ljk4NiAyLjkyNHYtMi4xNjdsMy4xNDUtMS44NVoiLz48cGF0aCBmaWxsPSIjZmZmIiBkPSJtMTguOTgyIDE2LjkzNS0xLjgzMiAxLjA3M3YtMi4xNTdsMS44MzItMS4wODR2Mi4xNjhaIi8+PHBhdGggZmlsbD0iI2ZmZiIgZD0ibTE4Ljk4MiAxMS4wNjUuMDEgMi4xNjgtMy4xNTUgMS44NXYzLjcxMmwtMS44MzEgMS4wNzMtMS44MzItMS4wNzN2LTMuNzExbC0zLjE1NS0xLjg1MXYtMi4xNjhsMS44NC0xLjA4MyAzLjEzNSAxLjg2IDMuMTU1LTEuODYgMS44NCAxLjA4M2gtLjAwN1ptLTkuOTY0LTMuNyA0Ljk3Ny0yLjkzNSA0Ljk4NyAyLjkzNS0xLjgzMiAxLjA4My0zLjE1NC0xLjg2LTMuMTQ2IDEuODYtMS44MzItMS4wODNaIi8+PC9nPjxkZWZzPjxjbGlwUGF0aCBpZD0iYSI+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTAgMGgyOHYyOEgweiIvPjwvY2xpcFBhdGg+PC9kZWZzPjwvc3ZnPg=='; @@ -33,35 +33,5 @@ export const chainList = [ }, iconUrl: bnbGreenfieldIcon, }, - { - id: 1017, - name: 'BNB Greenfield Chain', - network: 'BNB Greenfield Chain', - nativeCurrency: { - name: 'BNB', - symbol: 'BNB', - decimals: 18, - }, - rpcUrls: { - default: { - http: ['https://greenfield-chain.bnbchain.org'], - }, - public: { - http: ['https://greenfield-chain.bnbchain.org'], - }, - }, - blockExplorers: { - etherscan: { - name: `BNB Greenfield Mainnet Scan`, - url: 'https://greenfieldscan.com', - }, - default: { - name: `BNB Greenfield Mainnet Scan`, - url: 'https://greenfieldscan.com', - }, - }, - iconUrl: bnbGreenfieldIcon, - }, bscTestnet, - bsc, ]; diff --git a/examples/uploadkit-with-vite-walletkit/src/client.ts b/examples/uploadkit-with-vite-walletkit/src/client.ts index ec9c8ba..897594f 100644 --- a/examples/uploadkit-with-vite-walletkit/src/client.ts +++ b/examples/uploadkit-with-vite-walletkit/src/client.ts @@ -3,6 +3,4 @@ import { Client } from '@bnb-chain/greenfield-js-sdk'; const GRPC_URL = 'https://gnfd-testnet-fullnode-tendermint-us.bnbchain.org'; const GREEN_CHAIN_ID = 5600; -export const client = Client.create(GRPC_URL, String(GREEN_CHAIN_ID), { - zkCryptoUrl: 'https://unpkg.com/@bnb-chain/greenfield-zk-crypto@0.0.3/dist/node/zk-crypto.wasm', -}); +export const client = Client.create(GRPC_URL, String(GREEN_CHAIN_ID)); diff --git a/packages/uploadkit/CHANGELOG.md b/packages/uploadkit/CHANGELOG.md index a66d08e..4e47de6 100644 --- a/packages/uploadkit/CHANGELOG.md +++ b/packages/uploadkit/CHANGELOG.md @@ -1,5 +1,18 @@ # @node-real/greenfield-uploadkit +## 0.0.7 + +### Patch Changes + +- a2bc4c1: chore: unify the default visibility + +## 0.0.6 + +### Patch Changes + +- 564f074: fix: greenfield-uploadkit auto upgrade version error +- 564f074: chore: fix dependencies' versions in the example project, migrate @totejs/walletkit to @node-real/walletkit. + ## 0.0.6-alpha.2 ### Patch Changes diff --git a/packages/uploadkit/README.md b/packages/uploadkit/README.md index c8aa0c1..71f67db 100644 --- a/packages/uploadkit/README.md +++ b/packages/uploadkit/README.md @@ -25,8 +25,13 @@ The following examples are provided in the [examples](../../examples/) folder of ## Installation ```bash -npm i wagmi viem @node-real/greenfield-uploadkit @bnb-chain/greenfield-js-sdk @bnb-chain/greenfield-cosmos-types @bnb-chain/reed-solomon +npm i wagmi@1 viem@1 @node-real/greenfield-uploadkit @bnb-chain/greenfield-js-sdk@2.0.0-alpha.6 @bnb-chain/greenfield-cosmos-types@0.4.0-alpha.31 @bnb-chain/reed-solomon ``` +- wagmi >= 1.0.0 +- viem >= 1.0.0 +- @bnb-chain/greenfield-js-sdk = 2.0.0-alpha.6 +- @bnb-chain/greenfield-cosmos-types = 0.4.0-alpha.31 +- @bnb-chain/reed-solomon >= 1.1.3 ## Usage Before using Greenfield UploadKit, you need to switch your network to the BNB Greenfield Chain. We recommend using [@node-real/walletkit](https://github.com/node-real/walletkit) to connect your wallet and manage the network. This integration will ensure a seamless experience when working with Greenfield UploadKit. diff --git a/packages/uploadkit/dev/App.tsx b/packages/uploadkit/dev/App.tsx index e798715..cb3c73b 100644 --- a/packages/uploadkit/dev/App.tsx +++ b/packages/uploadkit/dev/App.tsx @@ -18,7 +18,7 @@ import { client } from './client'; import ProgressBarExample from './components/ProgressExample'; import { Icons } from './components/Icons'; import { Link } from '@/base/components/Link'; -import { ReedSolomon } from '@bnb-chain/reed-solomon'; +import { VisibilityType } from '@bnb-chain/greenfield-js-sdk'; const config = createConfig( getDefaultConfig({ @@ -41,7 +41,8 @@ const options: WalletKitOptions = { const uploadOptions: UploadKitOptions = { client: client, bucketName: 'test-upload-kit', - // seedString: '0xa25fa0de5d5e82b84826a0bce8c84a1bf1b0c8786c586ec696dc52300a9ffe007bb7e10d9901a32b67ed06fdef1d296f6d6fa00fdd33deaeadbd2363fe87708d1c', + delegateUpload: true, + // seedString: '', // checksumFn: async (data: Uint8Array) => { // const rs = new ReedSolomon(); // return rs.encode(data); @@ -50,7 +51,7 @@ const uploadOptions: UploadKitOptions = { operatorAddress: '0x89A1CC91B642DECbC4789474694C606E0E0c420b', endpoint: 'https://gnfd-testnet-sp1.bnbchain.org', }, - visibility: 'VISIBILITY_TYPE_PUBLIC_READ', + visibility: VisibilityType.VISIBILITY_TYPE_PUBLIC_READ, // onError: console.log, }; diff --git a/packages/uploadkit/dev/bucket.ts b/packages/uploadkit/dev/bucket.ts index 449d550..f3653e5 100644 --- a/packages/uploadkit/dev/bucket.ts +++ b/packages/uploadkit/dev/bucket.ts @@ -1,22 +1,16 @@ import { BroadcastResponse, resolve } from '@/facade/common'; import { ErrorResponse, broadcastFault, createTxFault, simulateFault } from '@/facade/error'; -import { AuthType } from '@/facade/tx'; import { signTypedDataCallback } from '@/facade/wallet'; -import { - Client, - CreateBucketApprovalRequest, - ISimulateGasFee, - TxResponse, -} from '@bnb-chain/greenfield-js-sdk'; +import { MsgCreateBucket } from '@bnb-chain/greenfield-cosmos-types/greenfield/storage/tx'; +import { Client, ISimulateGasFee, TxResponse } from '@bnb-chain/greenfield-js-sdk'; import { Connector } from 'wagmi'; export const simulateCreateBucket = async ( - params: CreateBucketApprovalRequest, - authType: AuthType, + params: MsgCreateBucket, client: Client, ): Promise<[ISimulateGasFee, null, TxResponse] | ErrorResponse> => { const [createBucketTx, error1] = await client.bucket - .createBucket(params, authType) + .createBucket(params) .then(resolve, createTxFault); if (!createBucketTx) return [null, error1]; @@ -33,16 +27,11 @@ export const simulateCreateBucket = async ( }; export const createBucket = async ( - params: CreateBucketApprovalRequest, - authType: AuthType, + params: MsgCreateBucket, connector: Connector, client: Client, ): BroadcastResponse => { - const [simulateInfo, error, createBucketTx] = await simulateCreateBucket( - params, - authType, - client, - ); + const [simulateInfo, error, createBucketTx] = await simulateCreateBucket(params, client); if (!simulateInfo) return [null, error]; const payload = { diff --git a/packages/uploadkit/dev/chains.ts b/packages/uploadkit/dev/chains.ts index 9834634..691a2e7 100644 --- a/packages/uploadkit/dev/chains.ts +++ b/packages/uploadkit/dev/chains.ts @@ -1,10 +1,10 @@ -import { bsc, mainnet } from 'wagmi/chains'; +import { bsc, bscTestnet } from 'wagmi/chains'; export const chains = [ { id: 5600, - name: 'BNB Greenfield Testnet', - network: 'BNB Greenfield Testnet', + name: 'BNB Greenfield Chain Testnet', + network: 'BNB Greenfield Chain Testnet', nativeCurrency: { name: 'tBNB', symbol: 'tBNB', @@ -20,59 +20,43 @@ export const chains = [ }, blockExplorers: { etherscan: { - name: `BNB Greenfield Testnet Scan`, + name: `BNB Greenfield Chain Testnet Scan`, url: 'https://greenfield-chain.bnbchain.org', }, default: { - name: `BNB Greenfield Testnet Scan`, + name: `BNB Greenfield Chain Testnet Scan`, url: 'https://greenfield-chain.bnbchain.org', }, }, }, { - id: 204, - name: 'opBNB Mainnet', - network: 'opBNB Mainnet', + id: 1017, + name: 'BNB Greenfield Chain', + network: 'BNB Greenfield Chain', nativeCurrency: { - name: 'tcBNB', - symbol: 'tcBNB', + name: 'BNB', + symbol: 'BNB', decimals: 18, }, rpcUrls: { default: { - http: ['https://opbnb-mainnet-rpc.bnbchain.org'], + http: ['https://greenfield-chain.bnbchain.org'], }, public: { - http: ['https://opbnb-mainnet-rpc.bnbchain.org'], + http: ['https://greenfield-chain.bnbchain.org'], }, }, blockExplorers: { - etherscan: { name: 'opBNBScan', url: `https://mainnet.opbnbscan.com` }, - default: { name: 'opBNBScan', url: `https://mainnet.opbnbscan.com` }, - }, - }, - { - id: 97, - name: 'BSC Testnet', - network: 'BSC Testnet', - nativeCurrency: { - name: 'tBNB', - symbol: 'tBNB', - decimals: 18, - }, - rpcUrls: { - default: { - http: [`https://data-seed-prebsc-1-s1.binance.org:8545`], + etherscan: { + name: `BNB Greenfield Mainnet Scan`, + url: 'https://greenfieldscan.com', }, - public: { - http: [`https://data-seed-prebsc-1-s1.binance.org:8545`], + default: { + name: `BNB Greenfield Mainnet Scan`, + url: 'https://greenfieldscan.com', }, }, - blockExplorers: { - etherscan: { name: 'BSC Testnet Scan', url: `https://testnet.bscscan.com` }, - default: { name: 'BSC Testnet Scan', url: `https://testnet.bscscan.com` }, - }, }, + bscTestnet, bsc, - mainnet, ]; diff --git a/packages/uploadkit/dev/client.ts b/packages/uploadkit/dev/client.ts index dbec588..1c72ffd 100644 --- a/packages/uploadkit/dev/client.ts +++ b/packages/uploadkit/dev/client.ts @@ -4,6 +4,4 @@ const GRPC_URL = 'https://gnfd-testnet-fullnode-tendermint-us.bnbchain.org'; const GREEN_CHAIN_ID = 5600; -export const client = Client.create(GRPC_URL, String(GREEN_CHAIN_ID), { - zkCryptoUrl: 'https://unpkg.com/@bnb-chain/greenfield-zk-crypto@0.0.3/dist/node/zk-crypto.wasm', -}); +export const client = Client.create(GRPC_URL, String(GREEN_CHAIN_ID)); diff --git a/packages/uploadkit/dev/main.tsx b/packages/uploadkit/dev/main.tsx index 9413b25..ede2e88 100644 --- a/packages/uploadkit/dev/main.tsx +++ b/packages/uploadkit/dev/main.tsx @@ -5,7 +5,6 @@ import './global.css'; // eslint-disable-next-line @typescript-eslint/no-non-null-assertion ReactDOM.createRoot(document.getElementById('root')!).render( - // TODO react strict mode will rerender // , // , diff --git a/packages/uploadkit/package.json b/packages/uploadkit/package.json index 3d14c72..e58191a 100644 --- a/packages/uploadkit/package.json +++ b/packages/uploadkit/package.json @@ -1,6 +1,6 @@ { "name": "@node-real/greenfield-uploadkit", - "version": "0.0.6-alpha.2", + "version": "0.0.7", "author": "node-real", "description": "Greenfield UploadKit is a React component library for easily uploading objects to BNB Greenfield.", "homepage": "https://node-real.github.io/greenfield-toolkit/packages/uploadkit", @@ -31,8 +31,8 @@ "build": "vite build" }, "peerDependencies": { - "@bnb-chain/greenfield-cosmos-types": ">=0.4.0", - "@bnb-chain/greenfield-js-sdk": "=1.2.0", + "@bnb-chain/greenfield-cosmos-types": "0.4.0-alpha.31", + "@bnb-chain/greenfield-js-sdk": "2.0.0-alpha.6", "@bnb-chain/reed-solomon": ">=1.1.3", "react": ">=17", "react-dom": ">=17", @@ -40,8 +40,8 @@ "wagmi": ">=1" }, "devDependencies": { - "@bnb-chain/greenfield-cosmos-types": "0.4.0", - "@bnb-chain/greenfield-js-sdk": "1.2.0", + "@bnb-chain/greenfield-cosmos-types": "0.4.0-alpha.31", + "@bnb-chain/greenfield-js-sdk": "2.0.0-alpha.6", "@bnb-chain/reed-solomon": "1.1.3", "@rollup/plugin-inject": "^5.0.3", "@rollup/plugin-node-resolve": "^15.2.3", diff --git a/packages/uploadkit/src/components/GlobalTasks/utils.ts b/packages/uploadkit/src/components/GlobalTasks/utils.ts index 3930826..925ed90 100644 --- a/packages/uploadkit/src/components/GlobalTasks/utils.ts +++ b/packages/uploadkit/src/components/GlobalTasks/utils.ts @@ -5,31 +5,40 @@ import { UploadObject, UploadStatus, } from '@/components/UploadProvider/types'; -import { TMakePutObjectHeaders, getCreateObjectTx, makePutObjectHeaders } from '@/facade/object'; +import { getCreateObjectTx, getPutObjectRequestConfig } from '@/facade/object'; import { broadcastTmpTx } from '@/facade/tx'; import { parseErrorXml } from '@/utils/common'; -import { AuthType, Client, CreateObjectApprovalRequest } from '@bnb-chain/greenfield-js-sdk'; +import { MsgCreateObject } from '@bnb-chain/greenfield-cosmos-types/greenfield/storage/tx'; +import { Client, Long, RedundancyType } from '@bnb-chain/greenfield-js-sdk'; +import { bytesFromBase64 } from '@bnb-chain/greenfield-cosmos-types/helpers'; import { ReedSolomon } from '@bnb-chain/reed-solomon'; import { Dispatch } from 'react'; +const MAX_PARALLEL_UPLOADS = 10; export const getHashTask = (uploadQueue: UploadObject[]) => { - const hashQueue = uploadQueue.filter((task) => task.status === 'HASH'); - const wQueue = uploadQueue.filter((task) => task.status === 'WAIT'); + const hashQueue = uploadQueue.filter((task) => task.status === 'HASH' && !task.delegateUpload); + const wQueue = uploadQueue.filter((task) => task.status === 'WAIT' && !task.delegateUpload); return hashQueue.length ? null : wQueue[0] || null; }; export const getSignTask = (uploadQueue: UploadObject[]) => { - const signQueue = uploadQueue.filter((task) => task.status === 'SIGN'); - const hashedQueue = uploadQueue.filter((task) => task.status === 'HASHED'); - const uploadingQueue = uploadQueue.filter((task) => task.status === 'UPLOAD'); + const signQueue = uploadQueue.filter((task) => task.status === 'SIGN' && !task.delegateUpload); + const hashedQueue = uploadQueue.filter( + (task) => task.status === 'HASHED' && !task.delegateUpload, + ); + const uploadingQueue = uploadQueue.filter( + (task) => task.status === 'UPLOAD' && !task.delegateUpload, + ); return uploadingQueue.length || !!signQueue.length ? null : hashedQueue[0] || null; }; export function getUploadTask(uploadQueue: UploadObject[]) { const uploadingQueue = uploadQueue.filter((t) => t.status === 'UPLOAD'); - const signedQueue = uploadQueue.filter((t) => t.status === 'SIGNED'); - const uploadingOffset = 1 - uploadingQueue.length; - return uploadingOffset > 0 ? signedQueue.slice(0, uploadingOffset).map((p) => p.id) : []; + const waitUploadQueue = uploadQueue.filter( + (t) => t.status === 'SIGNED' || (t.status === 'WAIT' && t.delegateUpload), + ); + const uploadingOffset = MAX_PARALLEL_UPLOADS - uploadingQueue.length; + return uploadingOffset > 0 ? waitUploadQueue.slice(0, uploadingOffset).map((p) => p.id) : []; } export const processHashTask = async ( @@ -118,25 +127,18 @@ export const processSignTask = async ({ tmpAccount: TTmpAccount; address: string; }) => { - const createObjectPayload: CreateObjectApprovalRequest = { + const createObjectPayload: MsgCreateObject = { bucketName: task.bucketName, objectName: task.waitObject.name, creator: tmpAccount.address, visibility: task.visibility, - fileType: task.waitObject.type || 'application/octet-stream', - contentLength: task.waitObject.size, - expectCheckSums: task.checksum, - duration: 5000, + contentType: task.waitObject.type || 'application/octet-stream', + payloadSize: Long.fromInt(task.waitObject.size), + expectChecksums: task.checksum.map((x) => bytesFromBase64(x)), + redundancyType: RedundancyType.REDUNDANCY_EC_TYPE, }; - const [createObjectTx, createError] = await getCreateObjectTx( - createObjectPayload, - { - type: 'ECDSA', - privateKey: tmpAccount.privateKey, - }, - client, - ); + const [createObjectTx, createError] = await getCreateObjectTx(createObjectPayload, client); if (createObjectTx === null || createError) { return dispatch({ @@ -191,25 +193,19 @@ export const runUploadTask = async ({ status: 'UPLOAD', }, }); - const payload: TMakePutObjectHeaders = { - bucketName: task.bucketName, - objectName: task.waitObject.name, - body: task.waitObject.file, - endpoint: selectedSp.endpoint, - txnHash: task.createHash, - }; - const authType = { - type: 'EDDSA', - seed: seedString, - domain: window.location.origin, - address, - } as AuthType; try { - const [uploadOptions, poError] = await makePutObjectHeaders(payload, authType, client); + const uploadOptions = await getPutObjectRequestConfig({ + task, + loginAccount: address, + seedString, + endpoint: selectedSp.endpoint, + file: task.waitObject.file, + client, + }); - if (!uploadOptions || poError) { - throw poError; + if (!uploadOptions) { + throw Error('Error during upload task preparation.'); } const { url, headers } = uploadOptions; @@ -240,6 +236,8 @@ export const runUploadTask = async ({ }, }); } else { + const parsedResponse = await parseErrorXml(xhr.response); + console.log('xhr.response', xhr.response, parsedResponse); const { message } = await parseErrorXml(xhr.response); const authExpired = [ 'bad signature', @@ -270,18 +268,18 @@ export const runUploadTask = async ({ }); }; - // Set custom headers - Object.entries({ + const needHeaders: { [key: string]: string | null } = { Authorization: headers.get('Authorization'), 'content-type': headers.get('content-type'), 'x-gnfd-app-domain': headers.get('x-gnfd-app-domain'), 'x-gnfd-content-sha256': headers.get('x-gnfd-content-sha256'), 'x-gnfd-date': headers.get('x-gnfd-date'), 'x-gnfd-expiry-timestamp': headers.get('x-gnfd-expiry-timestamp'), - 'x-gnfd-txn-hash': headers.get('x-gnfd-txn-hash'), 'x-gnfd-user-address': headers.get('x-gnfd-user-address'), - }).forEach(([header, value]) => { - xhr.setRequestHeader(header, value as string); + 'X-Gnfd-App-Reg-Public-Key': headers.get('X-Gnfd-App-Reg-Public-Key'), + }; + Object.entries(needHeaders).forEach(([header, value]) => { + value !== null && xhr.setRequestHeader(header, value); }); // Send the file diff --git a/packages/uploadkit/src/components/UploadButton/index.tsx b/packages/uploadkit/src/components/UploadButton/index.tsx index e529fbc..2cdb58e 100644 --- a/packages/uploadkit/src/components/UploadButton/index.tsx +++ b/packages/uploadkit/src/components/UploadButton/index.tsx @@ -4,9 +4,8 @@ import { clsUploadButton } from './styles.css'; import { cx } from '@/base/utils/css'; import { useNetwork, useAccount } from 'wagmi'; import { getCreateBucketTx } from '@/facade/bucket'; -import { CreateBucketApprovalRequest } from '@bnb-chain/greenfield-js-sdk'; import { getSps } from '@/facade/sp'; -import { getOffChainAuthKeys } from '@/facade/offchainauth'; +import { onOffChainAuth } from '@/facade/offchainauth'; import { useUploadKitContext } from '@/components/UploadKitProvider/context'; import { getCreateTmpAccountTx } from '@/facade/payment'; import { broadcastMulTxs } from '@/facade/tx'; @@ -18,10 +17,14 @@ import { toast } from '@/base/components/toast'; import { bucketIsExist, getRandomBucketName } from '@/utils/bucket'; import { BN } from '@/utils/math'; import { useUploadDisable } from '@/hooks/useUploadDisable'; +import { MsgCreateBucket } from '@bnb-chain/greenfield-cosmos-types/greenfield/storage/tx'; +import { Long, TxResponse, VisibilityType } from '@bnb-chain/greenfield-js-sdk'; +import { Sp } from '../UploadProvider/types'; +import { ErrorResponse, UNKNOWN_ERROR } from '@/facade/error'; export const DEFAULT_UPLOAD_BUTTON_TEXT = 'Upload'; export const TEMP_ACCOUNT_SAFE_RATE = 1.05; -export const CHARGED_READ_QUOTA = '0'; +export const CHARGED_READ_QUOTA = 0; export const UploadButton = (props: ButtonProps) => { const { className, children, ...restProps } = props; @@ -30,7 +33,7 @@ export const UploadButton = (props: ButtonProps) => { const { totalFee } = useTotalFee(); const { address, connector } = useAccount(); const { - options: { client, seedString, sp, visibility, bucketName, onError }, + options: { client, seedString, sp, visibility, bucketName, delegateUpload, onError }, } = useUploadKitContext(); const { isGnfd, uploadButtonDisabled } = useUploadDisable(); const { @@ -52,47 +55,44 @@ export const UploadButton = (props: ButtonProps) => { }); }; - const onSubmit = async () => { - if (!connector || !address || !chain || !visibility) { - return errorHandler('No connector, please connect wallet first'); - } - - // 1. get sp Address; - setLoading(true); - let selectSp; + const initSelectSP = async (): Promise => { + let selectedSP; if (sp?.operatorAddress && sp?.endpoint) { - selectSp = sp; + selectedSP = sp; } else { const [sps, error] = await getSps(client); if (!sps || error) { - return errorHandler(error); + return [null, error]; } - const randomSp = sps[Math.floor(Math.random() * sps.length)]; - selectSp = { - operatorAddress: randomSp.operatorAddress, - endpoint: randomSp.endpoint, + const randomSP = sps[Math.floor(Math.random() * sps.length)]; + selectedSP = { + operatorAddress: randomSP.operatorAddress, + endpoint: randomSP.endpoint, }; } dispatch({ type: 'SET_SELECTED_SP', - payload: selectSp, + payload: selectedSP, }); - // 2. get offchainauth + return [selectedSP, null]; + }; + + const initOffChain = async (): Promise => { + if (!chain) return [null, UNKNOWN_ERROR]; let seed; if (seedString) { seed = seedString; } else { const provider = await connector?.getProvider(); - - const [offChainData, error2] = await getOffChainAuthKeys({ + const [offChainData, error] = await onOffChainAuth({ address: address as string, provider, client, chainId: chain.id, }); - if (!offChainData || error2) { - return errorHandler(error2); + if (!offChainData || error) { + return [null, error]; } seed = offChainData.seedString; } @@ -101,70 +101,108 @@ export const UploadButton = (props: ButtonProps) => { payload: seed, }); - // 3. gen a create bucket tx - const txs = []; + return [seed, null]; + }; + + const createBucket = async ( + selectSP?: Sp, + ): Promise => { + if (!address || !selectSP) return [null, UNKNOWN_ERROR]; let isExisted = false; if (bucketName) { - isExisted = await bucketIsExist({ bucketName, endpoint: selectSp.endpoint }, client); + isExisted = await bucketIsExist({ bucketName, endpoint: selectSP.endpoint }, client); } const createBucketName = bucketName || getRandomBucketName(); if (!isExisted) { - const createBucketPayload: CreateBucketApprovalRequest = { + const createBucketPayload: MsgCreateBucket = { bucketName: createBucketName, - creator: address as string, - paymentAddress: address as string, - visibility: 'VISIBILITY_TYPE_PUBLIC_READ', - chargedReadQuota: CHARGED_READ_QUOTA, - spInfo: { - primarySpAddress: selectSp.operatorAddress, - }, + creator: address, + paymentAddress: address, + visibility: VisibilityType.VISIBILITY_TYPE_PUBLIC_READ, + chargedReadQuota: Long.fromNumber(CHARGED_READ_QUOTA), + primarySpAddress: selectSP.operatorAddress, }; - const [createBucketTx, ctError] = await getCreateBucketTx( - createBucketPayload, - { - type: 'EDDSA', - domain: window.location.origin, - seed: seed, - address, - }, - client, - ); + const [createBucketTx, ctError] = await getCreateBucketTx(createBucketPayload, client); if (!createBucketTx || ctError) { - return errorHandler(ctError); + return [null, ctError]; } - txs.push(createBucketTx); + return [{ tx: createBucketTx, bucketName: createBucketName }, null]; } + return [{ tx: null, bucketName: createBucketName }, null]; + }; - const [ctaRes, ctaError] = await getCreateTmpAccountTx({ - address: address as string, - bucketName: createBucketName, - amount: BN(totalFee).times(TEMP_ACCOUNT_SAFE_RATE).toNumber(), - client, - }); - if (!ctaRes || ctaError) { - return errorHandler(ctaError); + const onSubmit = async () => { + if (!connector || !address || !chain || !visibility) { + return errorHandler('No connector, please connect wallet first'); } - txs.push(...ctaRes.txs); - const [res, mtError] = await broadcastMulTxs({ - txs: txs, - address, - client, - connector, - }); - if (res === null || mtError) { - return errorHandler(mtError); + + // 1. get sp Address; + setLoading(true); + const [selectedSP, error1] = await initSelectSP(); + if (!selectedSP || error1) { + return errorHandler(error1); } + + // 2. get offchainauth + const [seed, error2] = await initOffChain(); + if (error2) { + return errorHandler(error2); + } + + // 3. gen a create bucket tx + const txs = []; + const [res3, error3] = await createBucket(selectedSP); + if (!res3 || error3) { + return errorHandler(error3); + } + const { tx: createBucketTx, bucketName: createBucketName } = res3; + createBucketTx && txs.push(createBucketTx); + + // 4. create tmp account for batch upload + let createTempAccountRes; + if (!delegateUpload) { + const [ctaRes, ctaError] = await getCreateTmpAccountTx({ + address: address as string, + bucketName: createBucketName, + amount: BN(totalFee).times(TEMP_ACCOUNT_SAFE_RATE).toNumber(), + client, + }); + if (!ctaRes || ctaError) { + return errorHandler(ctaError); + } + createTempAccountRes = ctaRes; + txs.push(...ctaRes.txs); + } + + if (txs.length > 0) { + const [res, mtError] = await broadcastMulTxs({ + txs: txs, + address, + client, + connector, + }); + if (res === null || mtError) { + return errorHandler(mtError); + } + } + setLoading(false); - dispatch({ - type: 'SET_TMP_ACCOUNT', - payload: ctaRes.tmpAccount, - }); + + if (!delegateUpload) { + if (!createTempAccountRes) return; + dispatch({ + type: 'SET_TMP_ACCOUNT', + payload: createTempAccountRes.tmpAccount, + }); + } + dispatch({ type: 'SET_UPLOAD_QUEUE', payload: { bucketName: createBucketName, - spAddress: selectSp.operatorAddress, + spAddress: selectedSP.operatorAddress, visibility, + delegateUpload, }, }); router.push(routes.UPLOAD); diff --git a/packages/uploadkit/src/components/UploadKitProvider/context.ts b/packages/uploadkit/src/components/UploadKitProvider/context.ts index 83aa9d3..e351532 100644 --- a/packages/uploadkit/src/components/UploadKitProvider/context.ts +++ b/packages/uploadkit/src/components/UploadKitProvider/context.ts @@ -1,7 +1,6 @@ import { createContext, useContext } from 'react'; -import { Client } from '@bnb-chain/greenfield-js-sdk'; +import { Client, VisibilityType } from '@bnb-chain/greenfield-js-sdk'; import { Sp } from '@/components/UploadProvider/types'; -import { VisibilityType } from '@bnb-chain/greenfield-cosmos-types/greenfield/storage/common'; /** * UploadKitOptions is the options of the Greenfield UploadKit. @@ -11,12 +10,14 @@ import { VisibilityType } from '@bnb-chain/greenfield-cosmos-types/greenfield/st * @property {string} seedString -seedString is used to authenticate yourself to the provider. If not specified, the provider will generate one. * @property {(data: Uint8Array) => Promise} [checksumFn] - The function to calculate the checksum of the object. If not specified, the provider will use the default checksum function. * - * @property {string} [bucketName] - The name of the bucket. If not specified, the default bucket will be used. + * @property {boolean} delegateUpload - Specifies whether to use the delegate upload mode. If not specified, the default is set to true. + * + * @property {string} bucketName - The name of the bucket. If not specified, the default bucket will be used. * @property {Sp} [sp] - The storage service provider. If not specified, a random one will be selected. - * @property {keyof typeof VisibilityType} [visibility='VISIBILITY_TYPE_PUBLIC_READ'] - The visibility of the object. If not specified, 'VISIBILITY_TYPE_PUBLIC_READ' will be used. + * @property {VisibilityType} [visibility=VisibilityType.VISIBILITY_TYPE_PUBLIC_READ] - visibility - The visibility of the object. If not specified, {VisibilityType.VISIBILITY_TYPE_PUBLIC_READ} will be used. * - * @property {number} [maxObjectSize=56 * 1024 * 1024] - If not specified, the default is set to 56MB, resulting in an encoding time of under 6 seconds. Larger files may experience extended encoding times, and it is recommended to utilize a web worker for encoding large files. Reference: https://github.com/bnb-chain/greenfield-js-sdk/blob/main/packages/reed-solomon/examples/web-worker.html - * @property {number} [maxObjectCount=100] - The maximum count of objects. If not specified, 100 will be used. + * @property {number} [maxObjectSize=56 * 1024 * 1024] - If the delegateUpload is false and this field not specified, the default is set to 56MB, resulting in an encoding time of under 6 seconds. Larger files may experience extended encoding times, and it is recommended to utilize a web worker for encoding large files. Reference: https://github.com/bnb-chain/greenfield-js-sdk/blob/main/packages/reed-solomon/examples/web-worker.html. But if the delegateUpload is true, the default is set to 1GB. + * @property {number} [maxObjectCount=100] - The maximum count of objects. If the delegateUpload is false and this field not specified, the default is set to 100. But if the delegateUpload is true, the default is set to 500. * * @property {boolean} [taskManagementButton=true] - Specifies whether to show the task management button. * @@ -28,9 +29,11 @@ export interface UploadKitOptions { seedString?: string; checksumFn?: (data: Uint8Array) => Promise; + delegateUpload?: boolean; + bucketName?: string; sp?: Sp; - visibility?: keyof typeof VisibilityType; + visibility?: VisibilityType; maxObjectSize?: number; maxObjectCount?: number; diff --git a/packages/uploadkit/src/components/UploadProvider/reducer.ts b/packages/uploadkit/src/components/UploadProvider/reducer.ts index 7e31064..d71996a 100644 --- a/packages/uploadkit/src/components/UploadProvider/reducer.ts +++ b/packages/uploadkit/src/components/UploadProvider/reducer.ts @@ -70,7 +70,7 @@ export const reducer: Reducer = (state, action) => { } // Set uploadQueue based on waitQueue items case 'SET_UPLOAD_QUEUE': { - const { bucketName, spAddress, visibility } = action.payload; + const { bucketName, spAddress, visibility, delegateUpload } = action.payload; const waitQueue = state.waitQueue; const uploadTasks = waitQueue.map((task) => { const uploadTask: UploadObject = { @@ -85,6 +85,7 @@ export const reducer: Reducer = (state, action) => { checksum: [], visibility: visibility, createHash: '', + delegateUpload, }; return uploadTask; }); diff --git a/packages/uploadkit/src/components/UploadProvider/types.ts b/packages/uploadkit/src/components/UploadProvider/types.ts index 4f44f87..6e21910 100644 --- a/packages/uploadkit/src/components/UploadProvider/types.ts +++ b/packages/uploadkit/src/components/UploadProvider/types.ts @@ -1,4 +1,4 @@ -import { VisibilityType } from '@bnb-chain/greenfield-cosmos-types/greenfield/storage/common'; +import { VisibilityType } from '@bnb-chain/greenfield-js-sdk'; export type WaitStatus = 'CHECK' | 'WAIT' | 'ERROR'; @@ -39,10 +39,11 @@ export type UploadObject = { waitObject: WaitObject; checksum: string[]; status: UploadStatus; - visibility: keyof typeof VisibilityType; + visibility: VisibilityType; createHash: string; msg: string; progress: number; + delegateUpload?: boolean; }; export interface Sp { @@ -74,7 +75,8 @@ export type Action = payload: { bucketName: string; spAddress: string; - visibility: keyof typeof VisibilityType; + visibility: VisibilityType; + delegateUpload?: boolean; }; } | { type: 'RESET_UPLOAD_QUEUE' } diff --git a/packages/uploadkit/src/defaultConfig/getDefaultProviderOptions.ts b/packages/uploadkit/src/defaultConfig/getDefaultProviderOptions.ts index 4abd72d..ef87dfc 100644 --- a/packages/uploadkit/src/defaultConfig/getDefaultProviderOptions.ts +++ b/packages/uploadkit/src/defaultConfig/getDefaultProviderOptions.ts @@ -1,17 +1,28 @@ import { toast } from '@/base/components/toast'; import { UploadKitOptions } from '..'; +import { VisibilityType } from '@bnb-chain/greenfield-js-sdk'; export const RECOMMEND_MAX_OBJECT_SIZE = 56 * 1024 * 1024; export const RECOMMEND_MAX_OBJECT_COUNT = 100; +export const DELEGATE_RECOMMEND_MAX_OBJECT_SIZE = 1024 * 1024 * 1024; +export const DELEGATE_RECOMMEND_MAX_OBJECT_COUNT = 500; export function getDefaultProviderOptions(options: UploadKitOptions) { - const { ...restOptions } = options; + const { delegateUpload, ...restOptions } = options; + const maxObjectSize = delegateUpload + ? DELEGATE_RECOMMEND_MAX_OBJECT_SIZE + : RECOMMEND_MAX_OBJECT_SIZE; + const maxObjectCount = delegateUpload + ? DELEGATE_RECOMMEND_MAX_OBJECT_COUNT + : RECOMMEND_MAX_OBJECT_COUNT; const mergedOptions: UploadKitOptions = { - maxObjectSize: RECOMMEND_MAX_OBJECT_SIZE, - maxObjectCount: RECOMMEND_MAX_OBJECT_COUNT, + delegateUpload, - visibility: 'VISIBILITY_TYPE_PUBLIC_READ', + maxObjectSize, + maxObjectCount, + + visibility: VisibilityType.VISIBILITY_TYPE_PUBLIC_READ, taskManagementButton: true, diff --git a/packages/uploadkit/src/facade/bucket.ts b/packages/uploadkit/src/facade/bucket.ts index b10bd01..51847e9 100644 --- a/packages/uploadkit/src/facade/bucket.ts +++ b/packages/uploadkit/src/facade/bucket.ts @@ -1,23 +1,17 @@ import { BroadcastResponse, resolve } from './common'; import { ErrorResponse, broadcastFault, createTxFault, simulateFault } from './error'; -import { - Client, - CreateBucketApprovalRequest, - ISimulateGasFee, - TxResponse, -} from '@bnb-chain/greenfield-js-sdk'; +import { Client, ISimulateGasFee, TxResponse } from '@bnb-chain/greenfield-js-sdk'; import { Connector } from 'wagmi'; import { signTypedDataCallback } from './wallet'; -import { AuthType } from '@/facade/tx'; import { commonFault } from './error'; +import { MsgCreateBucket } from '@bnb-chain/greenfield-cosmos-types/greenfield/storage/tx'; export const simulateCreateBucket = async ( - params: CreateBucketApprovalRequest, - authType: AuthType, + params: MsgCreateBucket, client: Client, ): Promise<[ISimulateGasFee, null, TxResponse] | ErrorResponse> => { const [createBucketTx, error1] = await client.bucket - .createBucket(params, authType) + .createBucket(params) .then(resolve, createTxFault); if (!createBucketTx) return [null, error1]; @@ -34,16 +28,11 @@ export const simulateCreateBucket = async ( }; export const createBucket = async ( - params: CreateBucketApprovalRequest, - authType: AuthType, + params: MsgCreateBucket, connector: Connector, client: Client, ): BroadcastResponse => { - const [simulateInfo, error, createBucketTx] = await simulateCreateBucket( - params, - authType, - client, - ); + const [simulateInfo, error, createBucketTx] = await simulateCreateBucket(params, client); if (!simulateInfo) return [null, error]; const payload = { @@ -59,11 +48,10 @@ export const createBucket = async ( }; export const getCreateBucketTx = async ( - params: CreateBucketApprovalRequest, - authType: AuthType, + msgCreateBucket: MsgCreateBucket, client: Client, ): Promise<[TxResponse, null] | ErrorResponse> => { - return client.bucket.createBucket(params, authType).then(resolve, createTxFault); + return client.bucket.createBucket(msgCreateBucket).then(resolve, createTxFault); }; export const getBucketMeta = ( diff --git a/packages/uploadkit/src/facade/common.ts b/packages/uploadkit/src/facade/common.ts index 118e956..35991cc 100644 --- a/packages/uploadkit/src/facade/common.ts +++ b/packages/uploadkit/src/facade/common.ts @@ -1,8 +1,15 @@ -import { TxResponse } from '@bnb-chain/greenfield-js-sdk'; -import { ErrorResponse } from './error'; +import { SpResponse, TxResponse } from '@bnb-chain/greenfield-js-sdk'; +import { ErrorResponse, UNKNOWN_ERROR } from './error'; export const resolve = (r: R): [R, null] => [r, null]; +export const resolveSpRequest = (r: SpResponse) => { + if (r.code !== 0) { + return [null, r.message || UNKNOWN_ERROR]; + } + return [r.body, null]; +}; + export type DeliverTxResponse = Awaited>; export type BroadcastResponse = Promise; diff --git a/packages/uploadkit/src/facade/object.ts b/packages/uploadkit/src/facade/object.ts index c04304c..1c06ff8 100644 --- a/packages/uploadkit/src/facade/object.ts +++ b/packages/uploadkit/src/facade/object.ts @@ -1,22 +1,20 @@ import { - CreateObjectApprovalRequest, Client, METHOD_PUT, SpMetaInfo, - isValidBucketName, - isValidObjectName, + verifyBucketName, + verifyObjectName, PutObjectRequest, + DelegatedPubObjectRequest, } from '@bnb-chain/greenfield-js-sdk'; import { resolve } from './common'; -import { ErrorResponse, createTxFault } from './error'; +import { createTxFault } from './error'; import { AuthType } from '@/facade/tx'; +import { MsgCreateObject } from '@bnb-chain/greenfield-cosmos-types/greenfield/storage/tx'; +import { UploadObject } from '@/components/UploadProvider/types'; -export const getCreateObjectTx = async ( - configParam: CreateObjectApprovalRequest, - authType: AuthType, - client: Client, -) => { - return client.object.createObject(configParam, authType).then(resolve, createTxFault); +export const getCreateObjectTx = async (configParam: MsgCreateObject, client: Client) => { + return client.object.createObject(configParam).then(resolve, createTxFault); }; export type TMakePutObjectHeaders = PutObjectRequest & { @@ -27,18 +25,13 @@ export const makePutObjectHeaders = async ( configParam: TMakePutObjectHeaders, authType: AuthType, client: Client, -): Promise< - ErrorResponse | [{ url: string; headers: Headers; method: string; params: URLSearchParams }, null] -> => { +) => { const { bucketName, objectName, txnHash, body, endpoint } = configParam; - if (!isValidBucketName(bucketName)) { - return [null, 'Error bucket name']; - } - if (!isValidObjectName(objectName)) { - return [null, 'Error object name']; - } + verifyBucketName(bucketName); + verifyObjectName(objectName); + if (!txnHash) { - return [null, 'Transaction hash is empty, please check.']; + throw new Error('Transaction hash is empty, please check.'); } const method = METHOD_PUT; const params = new URLSearchParams(); @@ -52,13 +45,79 @@ export const makePutObjectHeaders = async ( const { reqMeta, url } = await SpMetaInfo.getPutObjectMetaInfo(endpoint, payload); const headers = await client.spClient.signHeaders(reqMeta, authType); - return [ - { - url, - headers, - method, - params, + return { + url, + headers, + method, + params, + }; +}; + +export const makeDelegatePutObjectHeaders = async ( + delegateConfig: DelegatedPubObjectRequest, + authType: AuthType, + endpoint: string, + client: Client, +) => { + const { bucketName, objectName, body, delegatedOpts } = delegateConfig; + verifyBucketName(bucketName); + verifyObjectName(objectName); + + const method = METHOD_PUT; + const params = new URLSearchParams(); + const contentType = body?.type || 'text/plain'; + const payload = { objectName, bucketName, contentType, body, delegatedOpts }; + const { reqMeta, url } = await SpMetaInfo.getPutObjectMetaInfo(endpoint, payload); + const headers = await client.spClient.signHeaders(reqMeta, authType); + + return { url, headers, method, params }; +}; + +export const getPutObjectRequestConfig = async ({ + task, + loginAccount, + seedString, + endpoint, + file, + client, +}: { + task: UploadObject; + loginAccount: string; + seedString: string; + endpoint: string; + file: File; + client: Client; +}) => { + const fullObjectName = [...task.prefixFolders, task.waitObject.relativePath, task.waitObject.name] + .filter((item) => !!item) + .join('/'); + const authType = { + type: 'EDDSA', + seed: seedString, + domain: window.location.origin, + address: loginAccount, + } as AuthType; + + if (!task.delegateUpload) { + const payload: TMakePutObjectHeaders = { + bucketName: task.bucketName, + objectName: fullObjectName, + body: task.waitObject.file, + txnHash: task.createHash, + endpoint, + }; + + return makePutObjectHeaders(payload, authType, client); + } + + const payload: DelegatedPubObjectRequest = { + bucketName: task.bucketName, + objectName: fullObjectName, + body: file, + delegatedOpts: { + visibility: task.visibility, }, - null, - ]; + }; + + return makeDelegatePutObjectHeaders(payload, authType, endpoint, client); }; diff --git a/packages/uploadkit/src/facade/offchainauth.ts b/packages/uploadkit/src/facade/offchainauth.ts index ce5cfb5..c37da9a 100644 --- a/packages/uploadkit/src/facade/offchainauth.ts +++ b/packages/uploadkit/src/facade/offchainauth.ts @@ -1,9 +1,13 @@ -import { Client, IReturnOffChainAuthKeyPairAndUpload } from '@bnb-chain/greenfield-js-sdk'; +import { + Client, + IGenOffChainAuthKeyPairAndUpload, + IReturnOffChainAuthKeyPairAndUpload, +} from '@bnb-chain/greenfield-js-sdk'; import { getSps } from './sp'; import { ErrorResponse, UNKNOWN_ERROR } from './error'; -export const OFF_CHAIN_AUTH_EXPIRATION_MS = 5 * 24 * 60 * 60 * 1000; -export const getOffChainAuthKeys = async ({ +export const EXPIRATION_MS = 5 * 24 * 60 * 60 * 1000; +export const onOffChainAuth = async ({ address, provider, client, @@ -23,14 +27,16 @@ export const getOffChainAuthKeys = async ({ endpoint: sp.endpoint, name: sp.description?.moniker, })); + const configParam: IGenOffChainAuthKeyPairAndUpload = { + sps: sps, + chainId: chainId, + expirationMs: EXPIRATION_MS, + domain: window.location.origin, + address, + }; + const offchainAuthRes = await client.offchainauth.genOffChainAuthKeyPairAndUpload( - { - sps: sps, - chainId: chainId, - expirationMs: OFF_CHAIN_AUTH_EXPIRATION_MS, - domain: window.location.origin, - address, - }, + configParam, provider, ); diff --git a/packages/uploadkit/src/hooks/useTotalFee.ts b/packages/uploadkit/src/hooks/useTotalFee.ts index de83b25..20196ed 100644 --- a/packages/uploadkit/src/hooks/useTotalFee.ts +++ b/packages/uploadkit/src/hooks/useTotalFee.ts @@ -13,6 +13,7 @@ import { CRYPTOCURRENCY_DISPLAY_PRECISION } from '@/constants'; import BigNumber from 'bignumber.js'; import { WaitObject } from '@/components/UploadProvider/types'; import { getStoreNetflowRate } from '@/utils/fee'; +import { useUploadKitContext } from '..'; /** * useTotalFee returns the total fee of the upload queue. @@ -22,11 +23,17 @@ export function useTotalFee() { state: { waitQueue }, } = useUpload(); const [totalFee, setTotalFee] = useState('0'); + const { + options: { delegateUpload }, + } = useUploadKitContext(); const { gasHub, storeParams } = useFee(); const { gasObjects = {} } = gasHub || {}; const { address } = useAccount(); const { settlementFee } = useSettlementFee(address as string); const createTmpAccountGasFee = useMemo(() => { + if (delegateUpload) { + return '0'; + } const grantAllowTxFee = BN(gasObjects[MsgGrantAllowanceTypeUrl]?.gasFee || 0).plus( BN(gasObjects[MsgGrantAllowanceTypeUrl]?.perItemFee || 0).times(1), ); @@ -60,10 +67,12 @@ export function useTotalFee() { .dividedBy(10 ** 18) .dp(CRYPTOCURRENCY_DISPLAY_PRECISION) .toString(); - const objectsGasFee = BN(num) - .times(gasFee || 0) - .dp(CRYPTOCURRENCY_DISPLAY_PRECISION) - .toString(); + const objectsGasFee = delegateUpload + ? '0' + : BN(num) + .times(gasFee || 0) + .dp(CRYPTOCURRENCY_DISPLAY_PRECISION) + .toString(); useEffect(() => { const totalFee = BN(objectsGasFee) diff --git a/packages/uploadkit/src/hooks/useUploadDisable.ts b/packages/uploadkit/src/hooks/useUploadDisable.ts index 630c47b..4c5826a 100644 --- a/packages/uploadkit/src/hooks/useUploadDisable.ts +++ b/packages/uploadkit/src/hooks/useUploadDisable.ts @@ -12,6 +12,7 @@ export const useUploadDisable = () => { const { state: { loading, waitQueue }, } = useUpload(); + useEffect(() => { const isGnfd = isGnfdChain(chain?.id); const buttonDisabled = diff --git a/packages/uploadkit/src/utils/error.ts b/packages/uploadkit/src/utils/error.ts new file mode 100644 index 0000000..b9cabac --- /dev/null +++ b/packages/uploadkit/src/utils/error.ts @@ -0,0 +1,8 @@ +export function catchError(func: (...args: U[]) => T, ...args: U[]): string { + try { + func(...args); + return ''; + } catch (error) { + return (error as Error).message; + } +} diff --git a/packages/uploadkit/src/utils/object.ts b/packages/uploadkit/src/utils/object.ts index 95444bf..907c914 100644 --- a/packages/uploadkit/src/utils/object.ts +++ b/packages/uploadkit/src/utils/object.ts @@ -1,12 +1,5 @@ -import { VisibilityType } from '@bnb-chain/greenfield-cosmos-types/greenfield/storage/common'; import { Long } from '@bnb-chain/greenfield-js-sdk'; -export type TKey = keyof typeof VisibilityType; - -export type TReverseVisibilityType = { - [K in number]: TKey; -}; - export type DragItemProps = { items: DataTransferItemList; }; @@ -23,21 +16,6 @@ export type TransferItemFlat = { [key: string]: File; }; -const StringIsNumber = (value: string) => !isNaN(Number(value)); - -export const convertVisibility = () => { - const reverseVisibilityType: any = {} as TReverseVisibilityType; - Object.keys(VisibilityType) - .filter(StringIsNumber) - .forEach((item: any) => { - reverseVisibilityType[item] = VisibilityType[item]; - }); - - return reverseVisibilityType; -}; - -export const reverseVisibilityType = convertVisibility(); - export const isUTF8 = (str: string): boolean => { try { new TextDecoder('utf-8').decode(new TextEncoder().encode(str)); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c22d407..157cab6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -45,11 +45,11 @@ importers: docs: dependencies: '@bnb-chain/greenfield-cosmos-types': - specifier: 0.4.0 - version: 0.4.0 + specifier: 0.4.0-alpha.31 + version: 0.4.0-alpha.31 '@bnb-chain/greenfield-js-sdk': - specifier: 1.2.0 - version: 1.2.0 + specifier: 2.0.0-alpha.6 + version: 2.0.0-alpha.6 '@bnb-chain/reed-solomon': specifier: ^1.1.3 version: 1.1.3 @@ -148,11 +148,11 @@ importers: examples/uploadkit-with-nextjs-rainbowkit: dependencies: '@bnb-chain/greenfield-cosmos-types': - specifier: 0.4.0 - version: 0.4.0 + specifier: 0.4.0-alpha.31 + version: 0.4.0-alpha.31 '@bnb-chain/greenfield-js-sdk': - specifier: 1.2.0 - version: 1.2.0 + specifier: 2.0.0-alpha.6 + version: 2.0.0-alpha.6 '@bnb-chain/reed-solomon': specifier: 1.1.3 version: 1.1.3 @@ -206,11 +206,11 @@ importers: examples/uploadkit-with-nextjs-walletkit: dependencies: '@bnb-chain/greenfield-cosmos-types': - specifier: 0.4.0 - version: 0.4.0 + specifier: 0.4.0-alpha.31 + version: 0.4.0-alpha.31 '@bnb-chain/greenfield-js-sdk': - specifier: 1.2.0 - version: 1.2.0 + specifier: 2.0.0-alpha.6 + version: 2.0.0-alpha.6 '@bnb-chain/reed-solomon': specifier: 1.1.3 version: 1.1.3 @@ -264,11 +264,11 @@ importers: examples/uploadkit-with-remix-rainbowkit: dependencies: '@bnb-chain/greenfield-cosmos-types': - specifier: 0.4.0 - version: 0.4.0 + specifier: 0.4.0-alpha.31 + version: 0.4.0-alpha.31 '@bnb-chain/greenfield-js-sdk': - specifier: 1.2.0 - version: 1.2.0 + specifier: 2.0.0-alpha.6 + version: 2.0.0-alpha.6 '@bnb-chain/reed-solomon': specifier: 1.1.3 version: 1.1.3 @@ -325,11 +325,11 @@ importers: examples/uploadkit-with-vite-walletkit: dependencies: '@bnb-chain/greenfield-cosmos-types': - specifier: 0.4.0 - version: 0.4.0 + specifier: 0.4.0-alpha.31 + version: 0.4.0-alpha.31 '@bnb-chain/greenfield-js-sdk': - specifier: 1.2.0 - version: 1.2.0 + specifier: 2.0.0-alpha.6 + version: 2.0.0-alpha.6 '@bnb-chain/reed-solomon': specifier: 1.1.3 version: 1.1.3 @@ -390,11 +390,11 @@ importers: version: 9.1.2 devDependencies: '@bnb-chain/greenfield-cosmos-types': - specifier: 0.4.0 - version: 0.4.0 + specifier: 0.4.0-alpha.31 + version: 0.4.0-alpha.31 '@bnb-chain/greenfield-js-sdk': - specifier: 1.2.0 - version: 1.2.0 + specifier: 2.0.0-alpha.6 + version: 2.0.0-alpha.6 '@bnb-chain/reed-solomon': specifier: 1.1.3 version: 1.1.3 @@ -1779,23 +1779,16 @@ packages: '@babel/helper-validator-identifier': 7.22.20 to-fast-properties: 2.0.0 - /@bnb-chain/greenfield-cosmos-types@0.4.0: - resolution: {integrity: sha512-E6biyuWjVSzJ8F5lCRQsc6LsM7bJAAPZCjuUSmDZnGoQSfA+GrRXVJ+as+aVeePB4+XmP2pxMrSoh0ajzNRpPQ==} + /@bnb-chain/greenfield-cosmos-types@0.4.0-alpha.31: + resolution: {integrity: sha512-EPKQyQC/oe4/2p1Pn0FCECl7RyIvsXKs8bOmQHaylZweS6rZkXj5yov9oD1dVoHglV/tbQ/6EjdPg3wXUR+rww==} dependencies: long: 4.0.0 protobufjs: 6.11.4 - /@bnb-chain/greenfield-cosmos-types@0.4.0-alpha.30: - resolution: {integrity: sha512-nYThWPZHfq/bDMEu+Sw9cMMqgTk4NEg+PH9GkvN2OMgpo8QuCDy3Eh4C1g6lJy0BFv+ilethoPmKjSeEwa1m8g==} + /@bnb-chain/greenfield-js-sdk@2.0.0-alpha.6: + resolution: {integrity: sha512-tET1UIqqxGptyVBxKPVAbXUY40ul3nZwrcl+IeEziuMM2TdRosG4s5HCGZ792pv5ima50yDmo1Y6dOTa2WkD8Q==} dependencies: - long: 4.0.0 - protobufjs: 6.11.4 - - /@bnb-chain/greenfield-js-sdk@1.2.0: - resolution: {integrity: sha512-xYYK+4WXGiqX7MBNqRij2zo/3HI3mMwtuUOQS3qOoWkHG6oWUAKeBPxUNKz6RuPigZYAckAH0XcrJT0kjJIB+g==} - dependencies: - '@bnb-chain/greenfield-cosmos-types': 0.4.0-alpha.30 - '@bnb-chain/greenfield-zk-crypto': 1.0.0 + '@bnb-chain/greenfield-cosmos-types': 0.4.0-alpha.31 '@cosmjs/proto-signing': 0.32.2 '@cosmjs/stargate': 0.32.2 '@cosmjs/tendermint-rpc': 0.32.2 @@ -1805,7 +1798,8 @@ packages: '@ethersproject/strings': 5.7.0 '@ethersproject/units': 5.7.0 '@metamask/eth-sig-util': 5.1.0 - cross-fetch: 3.1.8 + '@noble/curves': 1.3.0 + cross-fetch: 4.0.0 dayjs: 1.11.10 ethereum-cryptography: 2.1.2 fast-xml-parser: 4.3.3 @@ -1823,9 +1817,6 @@ packages: - encoding - utf-8-validate - /@bnb-chain/greenfield-zk-crypto@1.0.0: - resolution: {integrity: sha512-QlHNIleujENh02oPidtLFVNMArVpSQDdV9omOUTLjKA1j2/rrd4OKfMLh1gpeVKl53vw50ReGkbm2VlBXTZRbQ==} - /@bnb-chain/reed-solomon@1.1.3: resolution: {integrity: sha512-DMLMPCjGPn2Mc6eFQ1boEqiq3iPgn+KuNl+ozY27b7bf+73YU1tHQ8jp+Dxq/wGv0hv8yfJaWXibiphtBY+B4w==} dependencies: @@ -6676,6 +6667,13 @@ packages: transitivePeerDependencies: - encoding + /cross-fetch@4.0.0: + resolution: {integrity: sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==} + dependencies: + node-fetch: 2.7.0 + transitivePeerDependencies: + - encoding + /cross-spawn@5.1.0: resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} dependencies: