diff --git a/.env.example b/.env.example index 8ae4fb6..1472c1f 100644 --- a/.env.example +++ b/.env.example @@ -1,4 +1,4 @@ -APP_VERSION=0.8.5 +APP_VERSION=0.8.7 NEXT_PUBLIC_PINATA_ENDPOINT_URL=https://api.pinata.cloud/pinning/pinFileToIPFS NEXT_PUBLIC_SG721_CODE_ID=2595 diff --git a/components/LinkTabs.data.ts b/components/LinkTabs.data.ts index cfc268a..e5664b7 100644 --- a/components/LinkTabs.data.ts +++ b/components/LinkTabs.data.ts @@ -158,3 +158,16 @@ export const royaltyRegistryLinkTabs: LinkTabProps[] = [ href: '/contracts/royaltyRegistry/execute', }, ] + +export const authzLinkTabs: LinkTabProps[] = [ + { + title: 'Grant', + description: `Grant authorizations to a given address`, + href: '/authz/grant', + }, + { + title: 'Revoke', + description: `Revoke already granted authorizations`, + href: '/authz/revoke', + }, +] diff --git a/components/Sidebar.tsx b/components/Sidebar.tsx index c58078d..e9450e6 100644 --- a/components/Sidebar.tsx +++ b/components/Sidebar.tsx @@ -45,7 +45,7 @@ export const Sidebar = () => { }, []) const handleResize = () => { - setIsTallWindow(window.innerHeight > 700) + setIsTallWindow(window.innerHeight > 768) } useEffect(() => { @@ -67,7 +67,7 @@ export const Sidebar = () => { {/* main navigation routes */}
-
diff --git a/config/authz.ts b/config/authz.ts new file mode 100644 index 0000000..12471ac --- /dev/null +++ b/config/authz.ts @@ -0,0 +1,324 @@ +/* eslint-disable eslint-comments/disable-enable-pair */ +/* eslint-disable no-nested-ternary */ +/* eslint-disable @typescript-eslint/no-explicit-any */ +/* eslint-disable camelcase */ + +import { GenericAuthorization } from 'cosmjs-types/cosmos/authz/v1beta1/authz' +import { MsgGrant } from 'cosmjs-types/cosmos/authz/v1beta1/tx' +import { SendAuthorization } from 'cosmjs-types/cosmos/bank/v1beta1/authz' +import { Coin } from 'cosmjs-types/cosmos/base/v1beta1/coin' +import type { AuthorizationType } from 'cosmjs-types/cosmos/staking/v1beta1/authz' +import { StakeAuthorization, StakeAuthorization_Validators } from 'cosmjs-types/cosmos/staking/v1beta1/authz' +import { + AcceptedMessageKeysFilter, + AllowAllMessagesFilter, + CombinedLimit, + ContractExecutionAuthorization, + ContractMigrationAuthorization, + MaxCallsLimit, + MaxFundsLimit, +} from 'cosmjs-types/cosmwasm/wasm/v1/authz' +import type { AuthorizationMode, GenericAuthorizationType, GrantAuthorizationType } from 'pages/authz/grant' + +export interface Msg { + typeUrl: string + value: any +} + +export interface AuthzMessage { + authzMode: AuthorizationMode + authzType: GrantAuthorizationType + displayName: string + typeUrl: string + genericAuthzType?: GenericAuthorizationType +} + +export const grantGenericStakeAuthorization: AuthzMessage = { + authzMode: 'Grant', + authzType: 'Generic', + displayName: 'Stake', + typeUrl: '/cosmos.staking.v1beta1.MsgDelegate', + genericAuthzType: 'MsgDelegate', +} + +export const grantGenericSendAuthorization: AuthzMessage = { + authzMode: 'Grant', + authzType: 'Generic', + displayName: 'Send', + typeUrl: '/cosmos.bank.v1beta1.MsgSend', + genericAuthzType: 'MsgSend', +} + +export const authzMessages: AuthzMessage[] = [grantGenericStakeAuthorization, grantGenericSendAuthorization] + +const msgAuthzGrantTypeUrl = '/cosmos.authz.v1beta1.MsgGrant' + +export function AuthzSendGrantMsg( + granter: string, + grantee: string, + denom: string, + spendLimit: number, + expiration: number, + allowList?: string[], +): Msg { + const sendAuthValue = SendAuthorization.encode( + SendAuthorization.fromPartial({ + spendLimit: [ + Coin.fromPartial({ + amount: String(spendLimit), + denom, + }), + ], + // Needs cosmos-sdk >= 0.47 + // allowList, + }), + ).finish() + + const grantValue = MsgGrant.fromPartial({ + grant: { + authorization: { + typeUrl: '/cosmos.bank.v1beta1.SendAuthorization', + value: sendAuthValue, + }, + expiration: expiration ? { seconds: BigInt(expiration) } : undefined, + }, + grantee, + granter, + }) + + return { + typeUrl: msgAuthzGrantTypeUrl, + value: grantValue, + } +} + +export function AuthzExecuteContractGrantMsg( + granter: string, + grantee: string, + contract: string, + expiration: number, + callsRemaining?: number, + amounts?: Coin[], + allowedMessages?: string[], +): Msg { + const sendAuthValue = ContractExecutionAuthorization.encode( + ContractExecutionAuthorization.fromPartial({ + grants: [ + { + contract, + filter: { + typeUrl: allowedMessages + ? '/cosmwasm.wasm.v1.AcceptedMessageKeysFilter' + : '/cosmwasm.wasm.v1.AllowAllMessagesFilter', + value: allowedMessages + ? AcceptedMessageKeysFilter.encode({ keys: allowedMessages }).finish() + : AllowAllMessagesFilter.encode({}).finish(), + }, + limit: + callsRemaining || amounts + ? { + typeUrl: + callsRemaining && amounts + ? '/cosmwasm.wasm.v1.CombinedLimit' + : callsRemaining + ? '/cosmwasm.wasm.v1.MaxCallsLimit' + : '/cosmwasm.wasm.v1.MaxFundsLimit', + value: + callsRemaining && amounts + ? CombinedLimit.encode({ + callsRemaining: BigInt(callsRemaining), + amounts, + }).finish() + : callsRemaining + ? MaxCallsLimit.encode({ + remaining: BigInt(callsRemaining), + }).finish() + : MaxFundsLimit.encode({ + amounts: amounts || [], + }).finish(), + } + : { + // limit: undefined is not accepted + typeUrl: '/cosmwasm.wasm.v1.MaxCallsLimit', + value: MaxCallsLimit.encode({ + remaining: BigInt(100000), + }).finish(), + }, + }, + ], + }), + ).finish() + + const grantValue = MsgGrant.fromPartial({ + grant: { + authorization: { + typeUrl: '/cosmwasm.wasm.v1.ContractExecutionAuthorization', + value: sendAuthValue, + }, + expiration: expiration ? { seconds: BigInt(expiration), nanos: 0 } : undefined, + }, + grantee, + granter, + }) + + return { + typeUrl: msgAuthzGrantTypeUrl, + value: grantValue, + } +} + +export function AuthzMigrateContractGrantMsg( + granter: string, + grantee: string, + contract: string, + expiration: number, + callsRemaining?: number, + amounts?: Coin[], + allowedMessages?: string[], +): Msg { + const sendAuthValue = ContractMigrationAuthorization.encode( + ContractMigrationAuthorization.fromPartial({ + grants: [ + { + contract, + filter: { + typeUrl: allowedMessages + ? '/cosmwasm.wasm.v1.AcceptedMessageKeysFilter' + : '/cosmwasm.wasm.v1.AllowAllMessagesFilter', + value: allowedMessages + ? AcceptedMessageKeysFilter.encode({ keys: allowedMessages }).finish() + : AllowAllMessagesFilter.encode({}).finish(), + }, + limit: + callsRemaining || amounts + ? { + typeUrl: + callsRemaining && amounts + ? '/cosmwasm.wasm.v1.CombinedLimit' + : callsRemaining + ? '/cosmwasm.wasm.v1.MaxCallsLimit' + : '/cosmwasm.wasm.v1.MaxFundsLimit', + value: + callsRemaining && amounts + ? CombinedLimit.encode({ + callsRemaining: BigInt(callsRemaining), + amounts, + }).finish() + : callsRemaining + ? MaxCallsLimit.encode({ + remaining: BigInt(callsRemaining), + }).finish() + : MaxFundsLimit.encode({ + amounts: amounts || [], + }).finish(), + } + : { + // limit: undefined is not accepted + typeUrl: '/cosmwasm.wasm.v1.MaxCallsLimit', + value: MaxCallsLimit.encode({ + remaining: BigInt(100000), + }).finish(), + }, + }, + ], + }), + ).finish() + + const grantValue = MsgGrant.fromPartial({ + grant: { + authorization: { + typeUrl: '/cosmwasm.wasm.v1.ContractMigrationAuthorization', + value: sendAuthValue, + }, + expiration: expiration ? { seconds: BigInt(expiration), nanos: 0 } : undefined, + }, + grantee, + granter, + }) + + return { + typeUrl: msgAuthzGrantTypeUrl, + value: grantValue, + } +} + +export function AuthzGenericGrantMsg(granter: string, grantee: string, typeURL: string, expiration: number): Msg { + return { + typeUrl: msgAuthzGrantTypeUrl, + value: { + grant: { + authorization: { + typeUrl: '/cosmos.authz.v1beta1.GenericAuthorization', + value: GenericAuthorization.encode( + GenericAuthorization.fromPartial({ + msg: typeURL, + }), + ).finish(), + }, + expiration: expiration ? { seconds: expiration } : undefined, + }, + grantee, + granter, + }, + } +} + +export function AuthzStakeGrantMsg({ + expiration, + grantee, + granter, + allowList, + denyList, + maxTokens, + denom, + stakeAuthzType, +}: { + granter: string + grantee: string + expiration: number + allowList?: string[] + denyList?: string[] + maxTokens?: string + denom?: string + stakeAuthzType: AuthorizationType +}): Msg { + const allow_list = StakeAuthorization_Validators.encode( + StakeAuthorization_Validators.fromPartial({ + address: allowList, + }), + ).finish() + const deny_list = StakeAuthorization_Validators.encode( + StakeAuthorization_Validators.fromPartial({ + address: denyList, + }), + ).finish() + const stakeAuthValue = StakeAuthorization.encode( + StakeAuthorization.fromPartial({ + authorizationType: stakeAuthzType, + allowList: allowList?.length ? StakeAuthorization_Validators.decode(allow_list) : undefined, + denyList: denyList?.length ? StakeAuthorization_Validators.decode(deny_list) : undefined, + maxTokens: maxTokens + ? Coin.fromPartial({ + amount: maxTokens, + denom, + }) + : undefined, + }), + ).finish() + const grantValue = MsgGrant.fromPartial({ + grant: { + authorization: { + typeUrl: '/cosmos.staking.v1beta1.StakeAuthorization', + value: stakeAuthValue, + }, + expiration: { seconds: BigInt(expiration) }, + }, + grantee, + granter, + }) + + return { + typeUrl: msgAuthzGrantTypeUrl, + value: grantValue, + } +} diff --git a/package.json b/package.json index a3ac908..883afc6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "stargaze-studio", - "version": "0.8.5", + "version": "0.8.7", "workspaces": [ "packages/*" ], @@ -13,11 +13,12 @@ }, "dependencies": { "@aws-sdk/client-s3": "^3", - "@cosmjs/cosmwasm-stargate": "^0", - "@cosmjs/encoding": "^0", - "@cosmjs/math": "^0", - "@cosmjs/proto-signing": "^0", - "@cosmjs/stargate": "^0", + "@cosmjs/cosmwasm-stargate": "0.32.2", + "@cosmjs/encoding": "0.32.2", + "@cosmjs/math": "0.32.2", + "@cosmjs/proto-signing": "0.32.2", + "@cosmjs/stargate": "0.32.2", + "cosmjs-types": "0.9.0", "@cosmos-kit/keplr": "^2.4.4", "@cosmos-kit/leap": "^2.4.3", "@cosmos-kit/leap-metamask-cosmos-snap": "^0.3.3", @@ -61,7 +62,7 @@ "zustand": "^4" }, "devDependencies": { - "@stargazezone/types": "^0.7.2", + "@stargazezone/types": "0.9.0", "@types/node": "^14", "@types/react": "^18", "@types/react-datetime-picker": "^3", diff --git a/pages/authz/grant.tsx b/pages/authz/grant.tsx new file mode 100644 index 0000000..482fa9f --- /dev/null +++ b/pages/authz/grant.tsx @@ -0,0 +1,366 @@ +/* eslint-disable eslint-comments/disable-enable-pair */ +/* eslint-disable @typescript-eslint/no-unnecessary-condition */ +/* eslint-disable no-nested-ternary */ + +/* eslint-disable @typescript-eslint/no-unsafe-member-access */ +/* eslint-disable tailwindcss/classnames-order */ + +import { coins, GasPrice, SigningStargateClient } from '@cosmjs/stargate' +import { Alert } from 'components/Alert' +import { Button } from 'components/Button' +import { Conditional } from 'components/Conditional' +import { ContractPageHeader } from 'components/ContractPageHeader' +import { FormControl } from 'components/FormControl' +import { AddressInput, NumberInput, TextInput } from 'components/forms/FormInput' +import { useInputState, useNumberInputState } from 'components/forms/FormInput.hooks' +import { InputDateTime } from 'components/InputDateTime' +import { LinkTabs } from 'components/LinkTabs' +import { authzLinkTabs } from 'components/LinkTabs.data' +import { getConfig } from 'config' +import type { Msg } from 'config/authz' +import { + AuthzExecuteContractGrantMsg, + AuthzGenericGrantMsg, + AuthzMigrateContractGrantMsg, + AuthzSendGrantMsg, +} from 'config/authz' +import { useGlobalSettings } from 'contexts/globalSettings' +import type { NextPage } from 'next' +import { NextSeo } from 'next-seo' +import { useState } from 'react' +import toast from 'react-hot-toast' +import { NETWORK } from 'utils/constants' +import { withMetadata } from 'utils/layout' +import { useWallet } from 'utils/wallet' + +export type AuthorizationMode = 'Grant' | 'Revoke' +export type GrantAuthorizationType = 'Generic' | 'Send' | 'Execute Smart Contract' | 'Migrate Smart Contract' +export type GenericAuthorizationType = + | 'MsgDelegate' + | 'MsgUndelegate' + | 'MsgBeginRedelegate' + | 'MsgWithdrawDelegatorReward' + | 'MsgVote' + | 'MsgSend' + | 'MsgExecuteContract' + | 'MsgMigrateContract' + | 'MsgStoreCode' + +const Grant: NextPage = () => { + const wallet = useWallet() + const { timezone } = useGlobalSettings() + + const [authMode, setAuthMode] = useState('Grant') + const [authType, setAuthType] = useState('Generic') + const [genericAuthType, setGenericAuthType] = useState('MsgSend') + const [expiration, setExpiration] = useState() + const [transactionHash, setTransactionHash] = useState(undefined) + const [isLoading, setIsLoading] = useState(false) + + const granteeAddressState = useInputState({ + id: 'grantee-address', + name: 'granteeAddress', + title: 'Grantee Address', + placeholder: 'stars1...', + subtitle: 'The address to grant authorization to', + }) + + const spendLimitDenomState = useInputState({ + id: 'spend-limit-denom', + name: 'spendLimitDenom', + title: 'Spend Limit Denom', + placeholder: `ustars`, + subtitle: 'The spend limit denom', + }) + + const spendLimitState = useNumberInputState({ + id: 'spend-limit', + name: 'spendLimit', + title: 'Spend Limit', + placeholder: `1000000`, + subtitle: 'The spend limit', + }) + + const maxFundsLimitDenomState = useInputState({ + id: 'max-funds-limit-denom', + name: 'maxFundsLimitDenom', + title: 'Max Funds Limit Denom', + placeholder: `ustars`, + subtitle: 'The denom for max funds limit', + }) + + const maxFundsLimitState = useNumberInputState({ + id: 'max-funds-limit', + name: 'maxFundsLimit', + title: 'Max Funds Limit', + placeholder: `1000000`, + subtitle: 'The max funds limit for contract execution (leave blank for no limit)', + }) + + const allowListState = useInputState({ + id: 'allow-list', + name: 'allowList', + title: 'Allow List', + placeholder: `stars1..., stars1...`, + subtitle: 'Comma separated list of addresses to allow transactions to', + }) + + const contractAddressState = useInputState({ + id: 'contract-address', + name: 'contractAddress', + title: 'Contract Address', + placeholder: `stars1...`, + subtitle: 'The contract address to authorize execution on', + }) + + const allowedMessageKeysState = useInputState({ + id: 'allowed-message-keys', + name: 'allowedMessageKeys', + title: 'Allowed Message Keys', + placeholder: `mint_to, burn, transfer`, + subtitle: 'Comma separated list of allowed message keys (leave blank to allow all)', + }) + + const callsRemainingState = useNumberInputState({ + id: 'calls-remaining', + name: 'callsRemaining', + title: 'Calls Remaining', + placeholder: `10`, + subtitle: 'The allowed number of contract execution calls (leave blank for no limit)', + }) + + const messageToSign = () => { + if (authType === 'Generic') { + if (genericAuthType === 'MsgSend') { + return AuthzGenericGrantMsg( + wallet.address || '', + granteeAddressState.value, + '/cosmos.bank.v1beta1.MsgSend', + (expiration?.getTime() as number) / 1000 || 0, + ) + } + if (genericAuthType === 'MsgDelegate') { + return AuthzGenericGrantMsg( + wallet.address || '', + granteeAddressState.value, + '/cosmos.staking.v1beta1.MsgDelegate', + (expiration?.getTime() as number) / 1000 || 0, + ) + } + if (genericAuthType === 'MsgUndelegate') { + return AuthzGenericGrantMsg( + wallet.address || '', + granteeAddressState.value, + '/cosmos.staking.v1beta1.MsgUndelegate', + (expiration?.getTime() as number) / 1000 || 0, + ) + } + if (genericAuthType === 'MsgBeginRedelegate') { + return AuthzGenericGrantMsg( + wallet.address || '', + granteeAddressState.value, + '/cosmos.staking.v1beta1.MsgBeginRedelegate', + (expiration?.getTime() as number) / 1000 || 0, + ) + } + if (genericAuthType === 'MsgWithdrawDelegatorReward') { + return AuthzGenericGrantMsg( + wallet.address || '', + granteeAddressState.value, + '/cosmos.distribution.v1beta1.MsgWithdrawDelegatorReward', + (expiration?.getTime() as number) / 1000 || 0, + ) + } + if (genericAuthType === 'MsgVote') { + return AuthzGenericGrantMsg( + wallet.address || '', + granteeAddressState.value, + '/cosmos.gov.v1beta1.MsgVote', + (expiration?.getTime() as number) / 1000 || 0, + ) + } + if (genericAuthType === 'MsgExecuteContract') { + return AuthzGenericGrantMsg( + wallet.address || '', + granteeAddressState.value, + '/cosmwasm.wasm.v1.MsgExecuteContract', + (expiration?.getTime() as number) / 1000 || 0, + ) + } + if (genericAuthType === 'MsgMigrateContract') { + return AuthzGenericGrantMsg( + wallet.address || '', + granteeAddressState.value, + '/cosmwasm.wasm.v1.MsgMigrateContract', + (expiration?.getTime() as number) / 1000 || 0, + ) + } + if (genericAuthType === 'MsgStoreCode') { + return AuthzGenericGrantMsg( + wallet.address || '', + granteeAddressState.value, + '/cosmwasm.wasm.v1.MsgStoreCode', + (expiration?.getTime() as number) / 1000 || 0, + ) + } + } else if (authType === 'Send') { + return AuthzSendGrantMsg( + wallet.address || '', + granteeAddressState.value, + spendLimitDenomState.value, + spendLimitState.value, + (expiration?.getTime() as number) / 1000 || 0, + allowListState.value ? allowListState.value.split(',').map((address) => address.trim()) : [], + ) + } else if (authType === 'Execute Smart Contract') { + return AuthzExecuteContractGrantMsg( + wallet.address || '', + granteeAddressState.value, + contractAddressState.value, + (expiration?.getTime() as number) / 1000 || 0, + callsRemainingState.value ? callsRemainingState.value : undefined, + maxFundsLimitState.value > 0 ? coins(maxFundsLimitState.value, maxFundsLimitDenomState.value) : undefined, + allowedMessageKeysState.value ? allowedMessageKeysState.value.split(',').map((key) => key.trim()) : undefined, + ) + } else if (authType === 'Migrate Smart Contract') { + return AuthzMigrateContractGrantMsg( + wallet.address || '', + granteeAddressState.value, + contractAddressState.value, + (expiration?.getTime() as number) / 1000 || 0, + callsRemainingState.value ? callsRemainingState.value : undefined, + maxFundsLimitState.value > 0 ? coins(maxFundsLimitState.value, maxFundsLimitDenomState.value) : undefined, + allowedMessageKeysState.value ? allowedMessageKeysState.value.split(',').map((key) => key.trim()) : undefined, + ) + } + } + const handleSendMessage = async () => { + try { + if (!wallet.isWalletConnected) return toast.error('Please connect your wallet.') + setTransactionHash(undefined) + setIsLoading(true) + const offlineSigner = wallet.getOfflineSignerDirect() + const stargateClient = await SigningStargateClient.connectWithSigner(getConfig(NETWORK).rpcUrl, offlineSigner, { + gasPrice: GasPrice.fromString('0.025ustars'), + }) + + const response = await stargateClient.signAndBroadcast(wallet.address || '', [messageToSign() as Msg], 'auto') + setTransactionHash(response.transactionHash) + toast.success(`${authType} authorization success.`, { style: { maxWidth: 'none' } }) + setIsLoading(false) + } catch (error: any) { + toast.error(error.message, { style: { maxWidth: 'none' } }) + setIsLoading(false) + setTransactionHash(undefined) + console.error('Error: ', error) + } + } + + return ( +
+ + + +
+ Authorization Type + +
+ +
+ Generic Authorization Type + +
+
+ + +
+ + +
+ {/* Needs cosmos-sdk v0.47 */} + {/* */} +
+ + + + +
+ + +
+
+ + + + date + ? setExpiration( + timezone === 'Local' ? date : new Date(date?.getTime() - new Date().getTimezoneOffset() * 60 * 1000), + ) + : setExpiration(undefined) + } + value={ + timezone === 'Local' + ? expiration + : expiration + ? new Date(expiration.getTime() + new Date().getTimezoneOffset() * 60 * 1000) + : undefined + } + /> + + + + {transactionHash && ( + + {`Transaction Hash: ${transactionHash}`} + + )} +
+ ) +} + +export default withMetadata(Grant, { center: false }) diff --git a/pages/authz/index.tsx b/pages/authz/index.tsx new file mode 100644 index 0000000..52bf43c --- /dev/null +++ b/pages/authz/index.tsx @@ -0,0 +1 @@ +export { default } from './grant' diff --git a/pages/authz/revoke.tsx b/pages/authz/revoke.tsx new file mode 100644 index 0000000..dc737eb --- /dev/null +++ b/pages/authz/revoke.tsx @@ -0,0 +1,144 @@ +/* eslint-disable eslint-comments/disable-enable-pair */ +/* eslint-disable @typescript-eslint/no-unsafe-member-access */ +import { GasPrice, SigningStargateClient } from '@cosmjs/stargate' +import { Alert } from 'components/Alert' +import { Button } from 'components/Button' +import { ContractPageHeader } from 'components/ContractPageHeader' +import { TextInput } from 'components/forms/FormInput' +import { useInputState } from 'components/forms/FormInput.hooks' +import { LinkTabs } from 'components/LinkTabs' +import { authzLinkTabs } from 'components/LinkTabs.data' +import { getConfig } from 'config' +import type { NextPage } from 'next' +import { NextSeo } from 'next-seo' +import { useState } from 'react' +import toast from 'react-hot-toast' +import { NETWORK } from 'utils/constants' +import { withMetadata } from 'utils/layout' +import { useWallet } from 'utils/wallet' + +const RevokeAuthorization: NextPage = () => { + const wallet = useWallet() + + const [transactionHash, setTransactionHash] = useState(undefined) + const [isLoading, setIsLoading] = useState(false) + + const granteeAddressState = useInputState({ + id: 'grantee-address', + name: 'granteeAddress', + title: 'Grantee Address', + subtitle: 'Address to revoke message authorization', + placeholder: 'stars1...', + }) + + const messageState = useInputState({ + id: 'message', + name: 'message', + title: 'Message', + subtitle: 'Message to revoke authorization for', + placeholder: '/cosmos.bank.v1beta1.MsgSend', + defaultValue: '/cosmos.bank.v1beta1.MsgSend', + }) + + const revokeAuthorization = async (granteeAddress: string, msg: string) => { + try { + if (!wallet.isWalletConnected) throw new Error('Wallet not connected.') + setTransactionHash(undefined) + setIsLoading(true) + const offlineSigner = wallet.getOfflineSignerDirect() + const stargateClient = await SigningStargateClient.connectWithSigner(getConfig(NETWORK).rpcUrl, offlineSigner, { + gasPrice: GasPrice.fromString('0.25ustars'), + }) + + const response = await stargateClient.signAndBroadcast( + wallet.address || '', + [ + { + typeUrl: '/cosmos.authz.v1beta1.MsgRevoke', + value: { + granter: wallet.address, + grantee: granteeAddress, + msgTypeUrl: msg, + }, + }, + ], + { + amount: [{ amount: '500000', denom: 'ustars' }], + gas: '200000', + }, + ) + setTransactionHash(response.transactionHash) + if (response.rawLog?.includes('failed')) toast.error(response.rawLog, { style: { maxWidth: 'none' } }) + else toast.success(`Revoke authorization success.`, { style: { maxWidth: 'none' } }) + setIsLoading(false) + } catch (e: any) { + console.log(e) + setIsLoading(false) + setTransactionHash(undefined) + toast.error(e.message, { style: { maxWidth: 'none' } }) + } + } + + return ( +
+ + + +
+ Authorization Type + +
+ + {/* */} + + {transactionHash && ( + + {`Transaction Hash: ${transactionHash}`} + + )} +
+ ) +} +export default withMetadata(RevokeAuthorization, { center: false }) diff --git a/pages/contracts/upload/upload.tsx b/pages/contracts/upload/upload.tsx index ce5364b..e1b3374 100644 --- a/pages/contracts/upload/upload.tsx +++ b/pages/contracts/upload/upload.tsx @@ -1,4 +1,5 @@ /* eslint-disable eslint-comments/disable-enable-pair */ +/* eslint-disable @typescript-eslint/no-unsafe-assignment */ import clsx from 'clsx' import { Alert } from 'components/Alert' @@ -62,8 +63,7 @@ const UploadContract: NextPage = () => { codeId: result.codeId, originalSize: result.originalSize, compressedSize: result.compressedSize, - originalChecksum: result.originalChecksum, - compressedChecksum: result.compressedChecksum, + originalChecksum: result.checksum, }) setLoading(false) diff --git a/pages/revoke.tsx b/pages/revoke.tsx deleted file mode 100644 index 860c189..0000000 --- a/pages/revoke.tsx +++ /dev/null @@ -1,97 +0,0 @@ -/* eslint-disable eslint-comments/disable-enable-pair */ -/* eslint-disable @typescript-eslint/no-unsafe-member-access */ -import { coins } from '@cosmjs/proto-signing' -import { ContractPageHeader } from 'components/ContractPageHeader' -import { TextInput } from 'components/forms/FormInput' -import { useInputState } from 'components/forms/FormInput.hooks' -import type { NextPage } from 'next' -import { NextSeo } from 'next-seo' -import { useState } from 'react' -import toast from 'react-hot-toast' -import { withMetadata } from 'utils/layout' -import { links } from 'utils/links' -import { useWallet } from 'utils/wallet' - -const RevokeAuthorization: NextPage = () => { - const wallet = useWallet() - - const [transactionHash, setTransactionHash] = useState(undefined) - - const granteeAddressState = useInputState({ - id: 'grantee-address', - name: 'granteeAddress', - title: 'Grantee Address', - subtitle: 'Address to revoke message authorization', - placeholder: 'stars1234567890abcdefghijklmnopqrstuvwxyz...', - defaultValue: 'stars12vfpmlvmqrh9p0kcrtv6lw9ylkh7reuczdmmz5', - }) - - const messageState = useInputState({ - id: 'message', - name: 'message', - title: 'Message', - subtitle: 'Message to revoke authorization for', - placeholder: '/cosmos.bank.v1beta1.MsgSend', - defaultValue: '/cosmos.bank.v1beta1.MsgSend', - }) - - const revokeAuthorization = async (granteeAddress: string, msg: string) => { - console.log('Wallet Address: ', wallet.address) - try { - if (!wallet.isWalletConnected) throw new Error('Wallet not connected.') - const result = await ( - await wallet.getSigningCosmWasmClient() - ).signAndBroadcast( - wallet.address || '', - [ - { - typeUrl: '/cosmos.authz.v1beta1.MsgRevoke', - value: { - granter: wallet.address, - grantee: granteeAddress, - msgTypeUrl: msg, - funds: coins('100000', 'ustars'), - }, - }, - ], - 'auto', - ) - setTransactionHash(result.transactionHash) - } catch (e: any) { - console.log(e) - toast.error(e.message, { style: { maxWidth: 'none' } }) - } - } - - return ( -
- - - -
Message Types
- - - - {transactionHash && ( -
{`Transaction Hash: ${transactionHash}`}
- )} -
- ) -} -export default withMetadata(RevokeAuthorization, { center: false }) diff --git a/yarn.lock b/yarn.lock index b825ee2..0ff72fb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1987,16 +1987,6 @@ "@noble/hashes" "^1.0.0" protobufjs "^6.8.8" -"@cosmjs/amino@0.28.4": - version "0.28.4" - resolved "https://registry.npmjs.org/@cosmjs/amino/-/amino-0.28.4.tgz" - integrity sha512-b8y5gFC0eGrH0IoYSNtDmTdsTgeQ1KFZ5YVOeIiKmzF91MeiciYO/MNqc027kctacZ+UbnVWGEUGyRBPi9ta/g== - dependencies: - "@cosmjs/crypto" "0.28.4" - "@cosmjs/encoding" "0.28.4" - "@cosmjs/math" "0.28.4" - "@cosmjs/utils" "0.28.4" - "@cosmjs/amino@^0.31.0", "@cosmjs/amino@^0.31.1": version "0.31.1" resolved "https://registry.yarnpkg.com/@cosmjs/amino/-/amino-0.31.1.tgz#e6b4adc3ebe19ddfd953c67ee04b1eae488238af" @@ -2007,36 +1997,31 @@ "@cosmjs/math" "^0.31.1" "@cosmjs/utils" "^0.31.1" -"@cosmjs/cosmwasm-stargate@^0": - version "0.28.4" - resolved "https://registry.npmjs.org/@cosmjs/cosmwasm-stargate/-/cosmwasm-stargate-0.28.4.tgz" - integrity sha512-dkTwTD+j2mjk7+l3pQQ3io2D0U7NIA4LXzkKtfBN87PGlj2G+VJFzcXk1T4DYmvrXjsQOi1kYeQRGWFA0XdvnQ== +"@cosmjs/amino@^0.32.2": + version "0.32.2" + resolved "https://registry.yarnpkg.com/@cosmjs/amino/-/amino-0.32.2.tgz#ba3cf255e4e6b1ba67461f1ef7b0b8ad3f895da7" + integrity sha512-lcK5RCVm4OfdAooxKcF2+NwaDVVpghOq6o/A40c2mHXDUzUoRZ33VAHjVJ9Me6vOFxshrw/XEFn1f4KObntjYA== dependencies: - "@cosmjs/amino" "0.28.4" - "@cosmjs/crypto" "0.28.4" - "@cosmjs/encoding" "0.28.4" - "@cosmjs/math" "0.28.4" - "@cosmjs/proto-signing" "0.28.4" - "@cosmjs/stargate" "0.28.4" - "@cosmjs/tendermint-rpc" "0.28.4" - "@cosmjs/utils" "0.28.4" - cosmjs-types "^0.4.0" - long "^4.0.0" - pako "^2.0.2" - protobufjs "~6.10.2" + "@cosmjs/crypto" "^0.32.2" + "@cosmjs/encoding" "^0.32.2" + "@cosmjs/math" "^0.32.2" + "@cosmjs/utils" "^0.32.2" -"@cosmjs/crypto@0.28.4": - version "0.28.4" - resolved "https://registry.npmjs.org/@cosmjs/crypto/-/crypto-0.28.4.tgz" - integrity sha512-JRxNLlED3DDh9d04A0RcRw3mYkoobN7q7wafUFy3vI1TjoyWx33v0gqqaYE6/hoo9ghUrJSVOfzVihl8fZajJA== +"@cosmjs/cosmwasm-stargate@0.32.2": + version "0.32.2" + resolved "https://registry.yarnpkg.com/@cosmjs/cosmwasm-stargate/-/cosmwasm-stargate-0.32.2.tgz#32aca8b4c2043cd1bc91cf4d0225b268c166e421" + integrity sha512-OwJHzIx2CoJS6AULxOpNR6m+CI0GXxy8z9svHA1ZawzNM3ZGlL0GvHdhmF0WkpX4E7UdrYlJSLpKcgg5Fo6i7Q== dependencies: - "@cosmjs/encoding" "0.28.4" - "@cosmjs/math" "0.28.4" - "@cosmjs/utils" "0.28.4" - "@noble/hashes" "^1" - bn.js "^5.2.0" - elliptic "^6.5.3" - libsodium-wrappers "^0.7.6" + "@cosmjs/amino" "^0.32.2" + "@cosmjs/crypto" "^0.32.2" + "@cosmjs/encoding" "^0.32.2" + "@cosmjs/math" "^0.32.2" + "@cosmjs/proto-signing" "^0.32.2" + "@cosmjs/stargate" "^0.32.2" + "@cosmjs/tendermint-rpc" "^0.32.2" + "@cosmjs/utils" "^0.32.2" + cosmjs-types "^0.9.0" + pako "^2.0.2" "@cosmjs/crypto@^0.31.1": version "0.31.1" @@ -2051,10 +2036,23 @@ elliptic "^6.5.4" libsodium-wrappers-sumo "^0.7.11" -"@cosmjs/encoding@0.28.4", "@cosmjs/encoding@^0": - version "0.28.4" - resolved "https://registry.npmjs.org/@cosmjs/encoding/-/encoding-0.28.4.tgz" - integrity sha512-N6Qnjs4dd8KwjW5m9t3L+rWYYGW2wyS+iLtJJ9DD8DiTTxpW9h7/AmUVO/dsRe5H2tV8/DzH/B9pFfpsgro22A== +"@cosmjs/crypto@^0.32.2": + version "0.32.2" + resolved "https://registry.yarnpkg.com/@cosmjs/crypto/-/crypto-0.32.2.tgz#8ed255d3d1c1c4d916a1586f8cbc33eaab82f511" + integrity sha512-RuxrYKzhrPF9g6NmU7VEq++Hn1vZJjqqJpZ9Tmw9lOYOV8BUsv+j/0BE86kmWi7xVJ7EwxiuxYsKuM8IR18CIA== + dependencies: + "@cosmjs/encoding" "^0.32.2" + "@cosmjs/math" "^0.32.2" + "@cosmjs/utils" "^0.32.2" + "@noble/hashes" "^1" + bn.js "^5.2.0" + elliptic "^6.5.4" + libsodium-wrappers-sumo "^0.7.11" + +"@cosmjs/encoding@0.32.2", "@cosmjs/encoding@^0.32.2": + version "0.32.2" + resolved "https://registry.yarnpkg.com/@cosmjs/encoding/-/encoding-0.32.2.tgz#8c5c64481a85cd570740c34dccce69d024a29805" + integrity sha512-WX7m1wLpA9V/zH0zRcz4EmgZdAv1F44g4dbXOgNj1eXZw1PIGR12p58OEkLN51Ha3S4DKRtCv5CkhK1KHEvQtg== dependencies: base64-js "^1.3.0" bech32 "^1.1.4" @@ -2069,18 +2067,18 @@ bech32 "^1.1.4" readonly-date "^1.0.0" -"@cosmjs/json-rpc@0.28.4": - version "0.28.4" - resolved "https://registry.npmjs.org/@cosmjs/json-rpc/-/json-rpc-0.28.4.tgz" - integrity sha512-An8ZQi9OKbnS8ew/MyHhF90zQpXBF8RTj2wdvIH+Hr8yA6QjynY8hxRpUwYUt3Skc5NeUnTZNuWCzlluHnoxVg== +"@cosmjs/json-rpc@^0.32.2": + version "0.32.2" + resolved "https://registry.yarnpkg.com/@cosmjs/json-rpc/-/json-rpc-0.32.2.tgz#f87fab0d6975ed1d1c7daafcf6f1f81e5e296912" + integrity sha512-lan2lOgmz4yVE/HR8eCOSiII/1OudIulk8836koyIDCsPEpt6eKBuctnAD168vABGArKccLAo7Mr2gy9nrKrOQ== dependencies: - "@cosmjs/stream" "0.28.4" + "@cosmjs/stream" "^0.32.2" xstream "^11.14.0" -"@cosmjs/math@0.28.4", "@cosmjs/math@^0": - version "0.28.4" - resolved "https://registry.npmjs.org/@cosmjs/math/-/math-0.28.4.tgz" - integrity sha512-wsWjbxFXvk46Dsx8jQ5vsBZOIQuiUIyaaZbUvxsgIhAMpuuBnV5O/drK87+B+4cL+umTelFqTbWnkqueVCIFxQ== +"@cosmjs/math@0.32.2", "@cosmjs/math@^0.32.2": + version "0.32.2" + resolved "https://registry.yarnpkg.com/@cosmjs/math/-/math-0.32.2.tgz#4522312769197e132679e4960862bcec0eed4cb8" + integrity sha512-b8+ruAAY8aKtVKWSft2IvtCVCUH1LigIlf9ALIiY8n9jtM4kMASiaRbQ/27etnSAInV88IaezKK9rQZrtxTjcw== dependencies: bn.js "^5.2.0" @@ -2091,19 +2089,17 @@ dependencies: bn.js "^5.2.0" -"@cosmjs/proto-signing@0.28.4", "@cosmjs/proto-signing@^0": - version "0.28.4" - resolved "https://registry.npmjs.org/@cosmjs/proto-signing/-/proto-signing-0.28.4.tgz" - integrity sha512-4vgCLK9gOsdWzD78V5XbAsupSSyntPEzokWYhgRQNwgVTcKX1kg0eKZqUvF5ua5iL9x6MevfH/sgwPyiYleMBw== +"@cosmjs/proto-signing@0.32.2", "@cosmjs/proto-signing@^0.32.2": + version "0.32.2" + resolved "https://registry.yarnpkg.com/@cosmjs/proto-signing/-/proto-signing-0.32.2.tgz#26ed2675978ce24078981f4c15a06c5d6b808f44" + integrity sha512-UV4WwkE3W3G3s7wwU9rizNcUEz2g0W8jQZS5J6/3fiN0mRPwtPKQ6EinPN9ASqcAJ7/VQH4/9EPOw7d6XQGnqw== dependencies: - "@cosmjs/amino" "0.28.4" - "@cosmjs/crypto" "0.28.4" - "@cosmjs/encoding" "0.28.4" - "@cosmjs/math" "0.28.4" - "@cosmjs/utils" "0.28.4" - cosmjs-types "^0.4.0" - long "^4.0.0" - protobufjs "~6.10.2" + "@cosmjs/amino" "^0.32.2" + "@cosmjs/crypto" "^0.32.2" + "@cosmjs/encoding" "^0.32.2" + "@cosmjs/math" "^0.32.2" + "@cosmjs/utils" "^0.32.2" + cosmjs-types "^0.9.0" "@cosmjs/proto-signing@^0.31.0": version "0.31.1" @@ -2118,67 +2114,65 @@ cosmjs-types "^0.8.0" long "^4.0.0" -"@cosmjs/socket@0.28.4": - version "0.28.4" - resolved "https://registry.npmjs.org/@cosmjs/socket/-/socket-0.28.4.tgz" - integrity sha512-jAEL3Ri+s8XuBM3mqgO4yvmeQu+R+704V37lGROC1B6kAbGxWRyOWrMdOOiFJzCZ35sSMB7L+xKjpE8ug0vJjg== +"@cosmjs/socket@^0.32.2": + version "0.32.2" + resolved "https://registry.yarnpkg.com/@cosmjs/socket/-/socket-0.32.2.tgz#a66be3863d03bf2d8df0433af476df010ff10e8c" + integrity sha512-Qc8jaw4uSBJm09UwPgkqe3g9TBFx4ZR9HkXpwT6Z9I+6kbLerXPR0Gy3NSJFSUgxIfTpO8O1yqoWAyf0Ay17Mw== dependencies: - "@cosmjs/stream" "0.28.4" + "@cosmjs/stream" "^0.32.2" isomorphic-ws "^4.0.1" ws "^7" xstream "^11.14.0" -"@cosmjs/stargate@0.28.4", "@cosmjs/stargate@^0": - version "0.28.4" - resolved "https://registry.npmjs.org/@cosmjs/stargate/-/stargate-0.28.4.tgz" - integrity sha512-tdwudilP5iLNwDm4TOMBjWuL5YehLPqGlC5/7hjJM/kVHyzLFo4Lzt0dVEwr5YegH+RsRXH/VtFLQz+NYlCobw== +"@cosmjs/stargate@0.32.2", "@cosmjs/stargate@^0.32.2": + version "0.32.2" + resolved "https://registry.yarnpkg.com/@cosmjs/stargate/-/stargate-0.32.2.tgz#73718c5c6a3ae138682ee9987333d911eca22a13" + integrity sha512-AsJa29fT7Jd4xt9Ai+HMqhyj7UQu7fyYKdXj/8+/9PD74xe6lZSYhQPcitUmMLJ1ckKPgXSk5Dd2LbsQT0IhZg== dependencies: "@confio/ics23" "^0.6.8" - "@cosmjs/amino" "0.28.4" - "@cosmjs/encoding" "0.28.4" - "@cosmjs/math" "0.28.4" - "@cosmjs/proto-signing" "0.28.4" - "@cosmjs/stream" "0.28.4" - "@cosmjs/tendermint-rpc" "0.28.4" - "@cosmjs/utils" "0.28.4" - cosmjs-types "^0.4.0" - long "^4.0.0" - protobufjs "~6.10.2" + "@cosmjs/amino" "^0.32.2" + "@cosmjs/encoding" "^0.32.2" + "@cosmjs/math" "^0.32.2" + "@cosmjs/proto-signing" "^0.32.2" + "@cosmjs/stream" "^0.32.2" + "@cosmjs/tendermint-rpc" "^0.32.2" + "@cosmjs/utils" "^0.32.2" + cosmjs-types "^0.9.0" xstream "^11.14.0" -"@cosmjs/stream@0.28.4": - version "0.28.4" - resolved "https://registry.npmjs.org/@cosmjs/stream/-/stream-0.28.4.tgz" - integrity sha512-BDwDdFOrOgRx/Wm5nknb9YCV9HHIUcsOxykTDZqdArCUsn4QJBq79QIjp919G05Z8UemkoHwiUCUNB2BfoKmFw== +"@cosmjs/stream@^0.32.2": + version "0.32.2" + resolved "https://registry.yarnpkg.com/@cosmjs/stream/-/stream-0.32.2.tgz#b1e8f977d25313d659f1aa89ad21614b5391cd93" + integrity sha512-gpCufLfHAD8Zp1ZKge7AHbDf4RA0TZp66wZY6JaQR5bSiEF2Drjtp4mwXZPGejtaUMnaAgff3LrUzPJfKYdQwg== dependencies: xstream "^11.14.0" -"@cosmjs/tendermint-rpc@0.28.4": - version "0.28.4" - resolved "https://registry.npmjs.org/@cosmjs/tendermint-rpc/-/tendermint-rpc-0.28.4.tgz" - integrity sha512-iz6p4UW2QUZNh55WeJy9wHbMdqM8COo0AJdrGU4Ikb/xU0/H6b0dFPoEK+i6ngR0cSizh+hpTMzh3AA7ySUKlA== +"@cosmjs/tendermint-rpc@^0.32.2": + version "0.32.2" + resolved "https://registry.yarnpkg.com/@cosmjs/tendermint-rpc/-/tendermint-rpc-0.32.2.tgz#c5607b8d472e5bf9fd58d5453db7194f500ccc62" + integrity sha512-DXyJHDmcAfCix4H/7/dKR0UMdshP01KxJOXHdHxBCbLIpck94BsWD3B2ZTXwfA6sv98so9wOzhp7qGQa5malxg== dependencies: - "@cosmjs/crypto" "0.28.4" - "@cosmjs/encoding" "0.28.4" - "@cosmjs/json-rpc" "0.28.4" - "@cosmjs/math" "0.28.4" - "@cosmjs/socket" "0.28.4" - "@cosmjs/stream" "0.28.4" - "@cosmjs/utils" "0.28.4" - axios "^0.21.2" + "@cosmjs/crypto" "^0.32.2" + "@cosmjs/encoding" "^0.32.2" + "@cosmjs/json-rpc" "^0.32.2" + "@cosmjs/math" "^0.32.2" + "@cosmjs/socket" "^0.32.2" + "@cosmjs/stream" "^0.32.2" + "@cosmjs/utils" "^0.32.2" + axios "^1.6.0" readonly-date "^1.0.0" xstream "^11.14.0" -"@cosmjs/utils@0.28.4": - version "0.28.4" - resolved "https://registry.npmjs.org/@cosmjs/utils/-/utils-0.28.4.tgz" - integrity sha512-lb3TU6833arPoPZF8HTeG9V418CpurvqH5Aa/ls0I0wYdPDEMO6622+PQNQhQ8Vw8Az2MXoSyc8jsqrgawT84Q== - "@cosmjs/utils@^0.31.1": version "0.31.1" resolved "https://registry.yarnpkg.com/@cosmjs/utils/-/utils-0.31.1.tgz#e6055cd7d722fa72df9cbd0d39cd1f7a9ac80483" integrity sha512-n4Se1wu4GnKwztQHNFfJvUeWcpvx3o8cWhSbNs9JQShEuB3nv3R5lqFBtDCgHZF/emFQAP+ZjF8bTfCs9UBGhA== +"@cosmjs/utils@^0.32.2": + version "0.32.2" + resolved "https://registry.yarnpkg.com/@cosmjs/utils/-/utils-0.32.2.tgz#324304aa85bfa6f10561cc17781d824d02130897" + integrity sha512-Gg5t+eR7vPJMAmhkFt6CZrzPd0EKpAslWwk5rFVYZpJsM8JG5KT9XQ99hgNM3Ov6ScNoIWbXkpX27F6A9cXR4Q== + "@cosmos-kit/core@^2.7.2": version "2.7.2" resolved "https://registry.yarnpkg.com/@cosmos-kit/core/-/core-2.7.2.tgz#de279f20fdd63cc088e18e6bd769120ef7ad8b49" @@ -3048,10 +3042,10 @@ "@stablelib/random" "^1.0.2" "@stablelib/wipe" "^1.0.1" -"@stargazezone/types@^0.7.2": - version "0.7.2" - resolved "https://registry.npmjs.org/@stargazezone/types/-/types-0.7.2.tgz" - integrity sha512-hnSOLvBbZ8/PZs+WHKBbKpZF/JiwNdfNeP4yiNBZGm6gpTLuQ1enaPC/roRoqIFHp8JaGL5HTa/E3GoeUnzRbQ== +"@stargazezone/types@0.9.0": + version "0.9.0" + resolved "https://registry.yarnpkg.com/@stargazezone/types/-/types-0.9.0.tgz#77ef70b9079d0be585b46583161bd62c2870c7fa" + integrity sha512-Za+Fv9aFY34vSx0q2AbcB+9f+T26PgK1iJxMj3yv6NpyVwBhJoHp/ampxheGhU00TSlofhNGgAK3+eYKLy1D3w== dependencies: dotenv "^10.0.0" json-schema-to-typescript "^10.1.5" @@ -3248,11 +3242,6 @@ resolved "https://registry.npmjs.org/@types/node/-/node-17.0.29.tgz" integrity sha512-tx5jMmMFwx7wBwq/V7OohKDVb/JwJU5qCVkeLMh1//xycAJ/ESuw9aJ9SEtlCZDYi2pBfe4JkisSoAtbOsBNAA== -"@types/node@^13.7.0": - version "13.13.52" - resolved "https://registry.npmjs.org/@types/node/-/node-13.13.52.tgz" - integrity sha512-s3nugnZumCC//n4moGGe6tkNMyYEdaDBitVjwPxXmR5lnMG5dHePinH2EdxkG3Rh1ghFHHixAG4NJhpJW1rthQ== - "@types/node@^14": version "14.18.16" resolved "https://registry.npmjs.org/@types/node/-/node-14.18.16.tgz" @@ -4157,13 +4146,22 @@ axios@^0: follow-redirects "^1.14.9" form-data "^4.0.0" -axios@^0.21.1, axios@^0.21.2: +axios@^0.21.1: version "0.21.4" resolved "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz" integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== dependencies: follow-redirects "^1.14.0" +axios@^1.6.0: + version "1.6.5" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.5.tgz#2c090da14aeeab3770ad30c3a1461bc970fb0cd8" + integrity sha512-Ii012v05KEVuUoFWmMW/UQv9aRIc3ZwkWDcM+h5Il8izZCtRVpDUfwpoFf7eOtajT3QiGR4yDUx7lPqHJULgbg== + dependencies: + follow-redirects "^1.15.4" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + axobject-query@^2.2.0: version "2.2.0" resolved "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz" @@ -4727,13 +4725,10 @@ cosmiconfig@^7.0.1: path-type "^4.0.0" yaml "^1.10.0" -cosmjs-types@^0.4.0: - version "0.4.1" - resolved "https://registry.npmjs.org/cosmjs-types/-/cosmjs-types-0.4.1.tgz" - integrity sha512-I7E/cHkIgoJzMNQdFF0YVqPlaTqrqKHrskuSTIqlEyxfB5Lf3WKCajSXVK2yHOfOFfSux/RxEdpMzw/eO4DIog== - dependencies: - long "^4.0.0" - protobufjs "~6.11.2" +cosmjs-types@0.9.0, cosmjs-types@^0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/cosmjs-types/-/cosmjs-types-0.9.0.tgz#c3bc482d28c7dfa25d1445093fdb2d9da1f6cfcc" + integrity sha512-MN/yUe6mkJwHnCFfsNPeCfXVhyxHYW6c/xDUzrSbBycYzw++XvWDMJArXp2pLdgD6FQ8DW79vkPjeNKVrXaHeQ== cosmjs-types@^0.8.0: version "0.8.0" @@ -5721,6 +5716,11 @@ follow-redirects@^1.14.0, follow-redirects@^1.14.9: resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.9.tgz" integrity sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w== +follow-redirects@^1.15.4: + version "1.15.5" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.5.tgz#54d4d6d062c0fa7d9d17feb008461550e3ba8020" + integrity sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw== + for-each@^0.3.3: version "0.3.3" resolved "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz" @@ -6727,18 +6727,6 @@ libsodium-wrappers-sumo@^0.7.11: dependencies: libsodium-sumo "^0.7.13" -libsodium-wrappers@^0.7.6: - version "0.7.10" - resolved "https://registry.npmjs.org/libsodium-wrappers/-/libsodium-wrappers-0.7.10.tgz" - integrity sha512-pO3F1Q9NPLB/MWIhehim42b/Fwb30JNScCNh8TcQ/kIc+qGLQch8ag8wb0keK3EP5kbGakk1H8Wwo7v+36rNQg== - dependencies: - libsodium "^0.7.0" - -libsodium@^0.7.0: - version "0.7.10" - resolved "https://registry.npmjs.org/libsodium/-/libsodium-0.7.10.tgz" - integrity sha512-eY+z7hDrDKxkAK+QKZVNv92A5KYkxfvIshtBJkmg5TSiCnYqZP3i9OO9whE79Pwgm4jGaoHgkM4ao/b9Cyu4zQ== - lilconfig@2.0.4: version "2.0.4" resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.4.tgz" @@ -7755,25 +7743,6 @@ protobufjs@^6.10.2, protobufjs@^6.11.2, protobufjs@^6.8.8, protobufjs@~6.11.2: "@types/node" ">=13.7.0" long "^4.0.0" -protobufjs@~6.10.2: - version "6.10.2" - resolved "https://registry.npmjs.org/protobufjs/-/protobufjs-6.10.2.tgz" - integrity sha512-27yj+04uF6ya9l+qfpH187aqEzfCF4+Uit0I9ZBQVqK09hk/SQzKa2MUqUpXaVa7LOFRg1TSSr3lVxGOk6c0SQ== - dependencies: - "@protobufjs/aspromise" "^1.1.2" - "@protobufjs/base64" "^1.1.2" - "@protobufjs/codegen" "^2.0.4" - "@protobufjs/eventemitter" "^1.1.0" - "@protobufjs/fetch" "^1.1.0" - "@protobufjs/float" "^1.0.2" - "@protobufjs/inquire" "^1.1.0" - "@protobufjs/path" "^1.1.2" - "@protobufjs/pool" "^1.1.0" - "@protobufjs/utf8" "^1.1.0" - "@types/long" "^4.0.1" - "@types/node" "^13.7.0" - long "^4.0.0" - proxy-compare@2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/proxy-compare/-/proxy-compare-2.1.0.tgz" @@ -7784,6 +7753,11 @@ proxy-compare@2.5.1: resolved "https://registry.yarnpkg.com/proxy-compare/-/proxy-compare-2.5.1.tgz#17818e33d1653fbac8c2ec31406bce8a2966f600" integrity sha512-oyfc0Tx87Cpwva5ZXezSp5V9vht1c7dZBhvuV/y3ctkgMVUmiAGDVeeB0dKhGSyT0v1ZTEQYpe/RXlBVBNuCLA== +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + pump@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"