Merge branch 'development' of github.com:gnosis/safe-react into development
This commit is contained in:
commit
3628ee9b5f
|
@ -214,6 +214,7 @@
|
|||
"@types/node": "14.0.12",
|
||||
"@types/react": "^16.9.32",
|
||||
"@types/react-dom": "^16.9.6",
|
||||
"@types/styled-components": "^5.1.0",
|
||||
"@typescript-eslint/eslint-plugin": "3.2.0",
|
||||
"@typescript-eslint/parser": "3.2.0",
|
||||
"autoprefixer": "9.8.0",
|
||||
|
@ -239,6 +240,7 @@
|
|||
"truffle": "5.1.29",
|
||||
"typescript": "^3.9.5",
|
||||
"wait-on": "5.0.1",
|
||||
"web3-eth-contract": "^1.2.9",
|
||||
"web3-utils": "^1.2.8"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,6 +5,7 @@ const devConfig = {
|
|||
[SIGNATURES_VIA_METAMASK]: false,
|
||||
[RELAY_API_URL]: 'https://safe-relay.staging.gnosisdev.com/api/v1/',
|
||||
[SAFE_APPS_URL]: 'https://safe-apps.dev.gnosisdev.com/'
|
||||
//[SAFE_APPS_URL]: 'http://localhost:3002/'
|
||||
}
|
||||
|
||||
export default devConfig
|
||||
|
|
|
@ -8,7 +8,7 @@ export interface AbiItemExtended extends AbiItem {
|
|||
signatureHash: string
|
||||
}
|
||||
|
||||
export const getMethodSignature = ({ inputs, name }: AbiItem) => {
|
||||
export const getMethodSignature = ({ inputs, name }: AbiItem): string => {
|
||||
const params = inputs.map((x) => x.type).join(',')
|
||||
return `${name}(${params})`
|
||||
}
|
||||
|
|
|
@ -34,7 +34,6 @@ const createERC721TokenContract = async () => {
|
|||
const web3 = getWeb3()
|
||||
const erc721Token = await contract(ERC721)
|
||||
erc721Token.setProvider(web3.currentProvider)
|
||||
|
||||
return erc721Token
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,11 @@
|
|||
import memoize from 'lodash.memoize'
|
||||
import logo from 'src/assets/icons/icon_etherTokens.svg'
|
||||
import generateBatchRequests from 'src/logic/contracts/generateBatchRequests'
|
||||
import { getStandardTokenContract, getTokenInfos } from 'src/logic/tokens/store/actions/fetchTokens'
|
||||
import {
|
||||
getStandardTokenContract,
|
||||
getTokenInfos,
|
||||
getERC721TokenContract,
|
||||
} from 'src/logic/tokens/store/actions/fetchTokens'
|
||||
import { makeToken, Token } from 'src/logic/tokens/store/model/token'
|
||||
import { ALTERNATIVE_TOKEN_ABI } from 'src/logic/tokens/utils/alternativeAbi'
|
||||
import { web3ReadOnly as web3 } from 'src/logic/wallets/getWeb3'
|
||||
|
@ -46,6 +51,14 @@ export const isSendERC721Transaction = (tx: any, txCode: string, knownTokens: an
|
|||
)
|
||||
}
|
||||
|
||||
export const getERC721Symbol = memoize(
|
||||
async (contractAddress: string): Promise<string> => {
|
||||
const ERC721token = await getERC721TokenContract()
|
||||
const tokenInstance = await ERC721token.at(contractAddress)
|
||||
return tokenInstance.symbol()
|
||||
},
|
||||
)
|
||||
|
||||
export const getERC20DecimalsAndSymbol = async (
|
||||
tokenAddress: string,
|
||||
): Promise<{ decimals: number; symbol: string }> => {
|
||||
|
|
|
@ -48,6 +48,7 @@ const wallets = [
|
|||
{ walletName: 'torus', desktop: true },
|
||||
{ walletName: 'unilogin', desktop: true },
|
||||
{ walletName: 'coinbase', desktop: false },
|
||||
{ walletName: 'walletLink', rpcUrl: infuraUrl, desktop: false },
|
||||
{ walletName: 'opera', desktop: false },
|
||||
{ walletName: 'operaTouch', desktop: false },
|
||||
]
|
||||
|
|
|
@ -145,6 +145,8 @@ const AddAppForm = ({ appList, formId, closeModal, onAppAdded, setIsSubmitDisabl
|
|||
onAppAdded(appInfo)
|
||||
}
|
||||
|
||||
const onTextFieldChange = () => {}
|
||||
|
||||
return (
|
||||
<GnoForm
|
||||
initialValues={{
|
||||
|
@ -169,7 +171,7 @@ const AddAppForm = ({ appList, formId, closeModal, onAppAdded, setIsSubmitDisabl
|
|||
|
||||
<AppInfo>
|
||||
<Img alt="Token image" height={55} src={appInfo.iconUrl} />
|
||||
<StyledTextFileAppName label="App name" readOnly value={appInfo.name} />
|
||||
<StyledTextFileAppName label="App name" readOnly value={appInfo.name} onChange={onTextFieldChange} />
|
||||
</AppInfo>
|
||||
|
||||
<FormSpy
|
||||
|
|
|
@ -38,6 +38,21 @@ const Centered = styled.div`
|
|||
justify-content: center;
|
||||
flex-direction: column;
|
||||
`
|
||||
|
||||
const IframeWrapper = styled.div`
|
||||
position: relative;
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
`
|
||||
|
||||
const IframeCoverLoading = styled.div`
|
||||
position: absolute;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
background: white;
|
||||
`
|
||||
const operations = {
|
||||
SEND_TRANSACTIONS: 'SEND_TRANSACTIONS',
|
||||
ON_SAFE_INFO: 'ON_SAFE_INFO',
|
||||
|
@ -133,17 +148,14 @@ function Apps({ closeModal, closeSnackbar, enqueueSnackbar, openModal }) {
|
|||
const app = getSelectedApp()
|
||||
|
||||
return (
|
||||
<>
|
||||
{appIsLoading && <Loader size="md" />}
|
||||
<StyledIframe
|
||||
frameBorder="0"
|
||||
id={`iframe-${app.name}`}
|
||||
ref={iframeRef}
|
||||
shouldDisplay={!appIsLoading}
|
||||
src={app.url}
|
||||
title={app.name}
|
||||
/>
|
||||
</>
|
||||
<IframeWrapper>
|
||||
{appIsLoading && (
|
||||
<IframeCoverLoading>
|
||||
<Loader size="md" />
|
||||
</IframeCoverLoading>
|
||||
)}
|
||||
<StyledIframe frameBorder="0" id={`iframe-${app.name}`} ref={iframeRef} src={app.url} title={app.name} />
|
||||
</IframeWrapper>
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,52 @@
|
|||
import React from 'react'
|
||||
|
||||
import TextareaField from 'src/components/forms/TextareaField'
|
||||
import {
|
||||
isAddress,
|
||||
isBoolean,
|
||||
isByte,
|
||||
isInt,
|
||||
isUint,
|
||||
} from 'src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/utils'
|
||||
|
||||
const validator = (value: string): string | undefined => {
|
||||
try {
|
||||
const values = JSON.parse(value)
|
||||
|
||||
if (!Array.isArray(values)) {
|
||||
return 'be sure to surround value with []'
|
||||
}
|
||||
} catch (e) {
|
||||
return 'invalid format'
|
||||
}
|
||||
}
|
||||
|
||||
const typePlaceholder = (text: string, type: string): string => {
|
||||
if (isAddress(type)) {
|
||||
return `${text} E.g.: ["0xACa94ef8bD5ffEE41947b4585a84BdA5a3d3DA6E","0x1dF62f291b2E969fB0849d99D9Ce41e2F137006e"]`
|
||||
}
|
||||
|
||||
if (isBoolean(type)) {
|
||||
return `${text} E.g.: [true, false, false, true]`
|
||||
}
|
||||
|
||||
if (isUint(type)) {
|
||||
return `${text} E.g.: [1000, 212, 320000022, 23]`
|
||||
}
|
||||
|
||||
if (isInt(type)) {
|
||||
return `${text} E.g.: [1000, -212, 1232, -1]`
|
||||
}
|
||||
|
||||
if (isByte(type)) {
|
||||
return `${text} E.g.: ["0xc00000000000000000000000000000000000", "0xc00000000000000000000000000000000001"]`
|
||||
}
|
||||
|
||||
return `${text} E.g.: ["first value", "second value", "third value"]`
|
||||
}
|
||||
|
||||
const ArrayTypeInput = ({ name, text, type }: { name: string; text: string; type: string }): JSX.Element => (
|
||||
<TextareaField name={name} placeholder={typePlaceholder(text, type)} text={text} type="text" validate={validator} />
|
||||
)
|
||||
|
||||
export default ArrayTypeInput
|
|
@ -1,3 +1,4 @@
|
|||
import { Checkbox } from '@gnosis.pm/safe-react-components'
|
||||
import React from 'react'
|
||||
|
||||
import Col from 'src/components/layout/Col'
|
||||
|
@ -5,7 +6,8 @@ import Field from 'src/components/forms/Field'
|
|||
import TextField from 'src/components/forms/TextField'
|
||||
|
||||
import { composeValidators, mustBeEthereumAddress, required } from 'src/components/forms/validator'
|
||||
import { Checkbox } from '@gnosis.pm/safe-react-components'
|
||||
import { isArrayParameter } from 'src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/utils'
|
||||
import ArrayTypeInput from './ArrayTypeInput'
|
||||
|
||||
type Props = {
|
||||
type: string
|
||||
|
@ -13,10 +15,11 @@ type Props = {
|
|||
placeholder: string
|
||||
}
|
||||
|
||||
const InputComponent = ({ type, keyValue, placeholder }: Props) => {
|
||||
const InputComponent = ({ type, keyValue, placeholder }: Props): JSX.Element => {
|
||||
if (!type) {
|
||||
return null
|
||||
}
|
||||
|
||||
switch (type) {
|
||||
case 'bool': {
|
||||
const inputProps = {
|
||||
|
@ -46,15 +49,19 @@ const InputComponent = ({ type, keyValue, placeholder }: Props) => {
|
|||
default: {
|
||||
return (
|
||||
<Col>
|
||||
<Field
|
||||
component={TextField}
|
||||
name={keyValue}
|
||||
placeholder={placeholder}
|
||||
testId={keyValue}
|
||||
text={placeholder}
|
||||
type="text"
|
||||
validate={required}
|
||||
/>
|
||||
{isArrayParameter(type) ? (
|
||||
<ArrayTypeInput name={keyValue} text={placeholder} type={type} />
|
||||
) : (
|
||||
<Field
|
||||
component={TextField}
|
||||
name={keyValue}
|
||||
placeholder={placeholder}
|
||||
testId={keyValue}
|
||||
text={placeholder}
|
||||
type="text"
|
||||
validate={required}
|
||||
/>
|
||||
)}
|
||||
</Col>
|
||||
)
|
||||
}
|
||||
|
|
|
@ -4,28 +4,32 @@ import { useField } from 'react-final-form'
|
|||
import Row from 'src/components/layout/Row'
|
||||
|
||||
import InputComponent from './InputComponent'
|
||||
import { generateFormFieldKey } from '../utils'
|
||||
import { AbiItemExtended } from 'src/logic/contractInteraction/sources/ABIService'
|
||||
|
||||
const RenderInputParams = () => {
|
||||
const RenderInputParams = (): JSX.Element => {
|
||||
const {
|
||||
meta: { valid: validABI },
|
||||
} = useField('abi', { subscription: { valid: true, value: true } })
|
||||
const {
|
||||
input: { value: method },
|
||||
}: any = useField('selectedMethod', { subscription: { value: true } })
|
||||
}: { input: { value: AbiItemExtended } } = useField('selectedMethod', { subscription: { value: true } })
|
||||
const renderInputs = validABI && !!method && method.inputs.length
|
||||
|
||||
return !renderInputs
|
||||
? null
|
||||
: method.inputs.map(({ name, type }, index) => {
|
||||
return !renderInputs ? null : (
|
||||
<>
|
||||
{method.inputs.map(({ name, type }, index) => {
|
||||
const placeholder = name ? `${name} (${type})` : type
|
||||
const key = `methodInput-${method.name}_${index}_${type}`
|
||||
const key = generateFormFieldKey(type, method.signatureHash, index)
|
||||
|
||||
return (
|
||||
<Row key={key} margin="sm">
|
||||
<InputComponent type={type} keyValue={key} placeholder={placeholder} />
|
||||
</Row>
|
||||
)
|
||||
})
|
||||
})}
|
||||
</>
|
||||
)
|
||||
}
|
||||
|
||||
export default RenderInputParams
|
||||
|
|
|
@ -22,7 +22,7 @@ import Header from 'src/routes/safe/components/Balances/SendModal/screens/Contra
|
|||
import { setImageToPlaceholder } from 'src/routes/safe/components/Balances/utils'
|
||||
import createTransaction from 'src/routes/safe/store/actions/createTransaction'
|
||||
import { safeSelector } from 'src/routes/safe/store/selectors'
|
||||
import { getValueFromTxInputs } from '../utils'
|
||||
import { generateFormFieldKey, getValueFromTxInputs } from '../utils'
|
||||
|
||||
const useStyles = makeStyles(styles)
|
||||
|
||||
|
@ -133,7 +133,7 @@ const ContractInteractionReview = ({ onClose, onPrev, tx }: Props) => {
|
|||
</Paragraph>
|
||||
</Row>
|
||||
{tx.selectedMethod.inputs.map(({ name, type }, index) => {
|
||||
const key = `methodInput-${tx.selectedMethod.name}_${index}_${type}`
|
||||
const key = generateFormFieldKey(type, tx.selectedMethod.signatureHash, index)
|
||||
const value: string = getValueFromTxInputs(key, type, tx)
|
||||
|
||||
return (
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
import { FORM_ERROR } from 'final-form'
|
||||
import { FORM_ERROR, Mutator, SubmissionErrors } from 'final-form'
|
||||
import createDecorator from 'final-form-calculate'
|
||||
import { AbiItem } from 'web3-utils'
|
||||
import { ContractSendMethod } from 'web3-eth-contract'
|
||||
|
||||
import { mustBeEthereumAddress, mustBeEthereumContractAddress } from 'src/components/forms/validator'
|
||||
import { getNetwork } from 'src/config'
|
||||
import { getConfiguredSource } from 'src/logic/contractInteraction/sources'
|
||||
import { AbiItemExtended } from 'src/logic/contractInteraction/sources/ABIService'
|
||||
import { getAddressFromENS, getWeb3 } from 'src/logic/wallets/getWeb3'
|
||||
import { TransactionReviewType } from '../Review'
|
||||
import { TransactionReviewType } from 'src/routes/safe/components/Balances/SendModal/screens/ContractInteraction/Review'
|
||||
import { isValidEnsName } from 'src/logic/wallets/ethAddresses'
|
||||
|
||||
export const NO_CONTRACT = 'no contract'
|
||||
|
@ -50,7 +50,7 @@ export const ensResolver = createDecorator({
|
|||
},
|
||||
})
|
||||
|
||||
export const formMutators = {
|
||||
export const formMutators: Record<string, Mutator<{ selectedMethod: { name: string } }>> = {
|
||||
setMax: (args, state, utils) => {
|
||||
utils.changeValue(state, 'value', () => args[0])
|
||||
},
|
||||
|
@ -73,7 +73,16 @@ export const formMutators = {
|
|||
},
|
||||
}
|
||||
|
||||
export const handleSubmitError = (error, values) => {
|
||||
export const isAddress = (type: string): boolean => type.indexOf('address') === 0
|
||||
export const isBoolean = (type: string): boolean => type.indexOf('bool') === 0
|
||||
export const isString = (type: string): boolean => type.indexOf('string') === 0
|
||||
export const isUint = (type: string): boolean => type.indexOf('uint') === 0
|
||||
export const isInt = (type: string): boolean => type.indexOf('int') === 0
|
||||
export const isByte = (type: string): boolean => type.indexOf('byte') === 0
|
||||
|
||||
export const isArrayParameter = (parameter: string): boolean => /(\[\d*])+$/.test(parameter)
|
||||
|
||||
export const handleSubmitError = (error: SubmissionErrors, values: Record<string, string>): Record<string, string> => {
|
||||
for (const key in values) {
|
||||
if (values.hasOwnProperty(key) && values[key] === error.value) {
|
||||
return { [key]: error.reason }
|
||||
|
@ -84,11 +93,30 @@ export const handleSubmitError = (error, values) => {
|
|||
return { [FORM_ERROR]: error.message }
|
||||
}
|
||||
|
||||
export const createTxObject = (method: AbiItem, contractAddress: string, values) => {
|
||||
export const generateFormFieldKey = (type: string, signatureHash: string, index: number): string => {
|
||||
const keyType = isArrayParameter(type) ? 'arrayParam' : type
|
||||
return `methodInput-${signatureHash}_${index}_${keyType}`
|
||||
}
|
||||
|
||||
const extractMethodArgs = (signatureHash: string, values: Record<string, string>) => ({ type }, index) => {
|
||||
const key = generateFormFieldKey(type, signatureHash, index)
|
||||
|
||||
if (isArrayParameter(type)) {
|
||||
return JSON.parse(values[key])
|
||||
}
|
||||
|
||||
return values[key]
|
||||
}
|
||||
|
||||
export const createTxObject = (
|
||||
method: AbiItemExtended,
|
||||
contractAddress: string,
|
||||
values: Record<string, string>,
|
||||
): ContractSendMethod => {
|
||||
const web3 = getWeb3()
|
||||
const contract: any = new web3.eth.Contract([method], contractAddress)
|
||||
const { inputs, name } = method
|
||||
const args = inputs.map(({ type }, index) => values[`methodInput-${name}_${index}_${type}`])
|
||||
const { inputs, name, signatureHash } = method
|
||||
const args = inputs.map(extractMethodArgs(signatureHash, values))
|
||||
|
||||
return contract.methods[name](...args)
|
||||
}
|
||||
|
@ -96,9 +124,15 @@ export const createTxObject = (method: AbiItem, contractAddress: string, values)
|
|||
export const isReadMethod = (method: AbiItemExtended): boolean => method && method.action === 'read'
|
||||
|
||||
export const getValueFromTxInputs = (key: string, type: string, tx: TransactionReviewType): string => {
|
||||
let value = tx[key]
|
||||
if (type === 'bool') {
|
||||
value = tx[key] ? String(tx[key]) : 'false'
|
||||
if (isArrayParameter(type)) {
|
||||
key = key.replace('[]', '')
|
||||
}
|
||||
|
||||
let value = tx[key]
|
||||
|
||||
if (type === 'bool') {
|
||||
value = String(value)
|
||||
}
|
||||
|
||||
return value
|
||||
}
|
||||
|
|
|
@ -58,7 +58,7 @@ const ReviewCollectible = ({ closeSnackbar, enqueueSnackbar, onClose, onPrev, tx
|
|||
const { fromWei, toBN } = getWeb3().utils
|
||||
|
||||
const supportsSafeTransfer = await containsMethodByHash(tx.assetAddress, SAFE_TRANSFER_FROM_WITHOUT_DATA_HASH)
|
||||
const methodToCall = supportsSafeTransfer ? SAFE_TRANSFER_FROM_WITHOUT_DATA_HASH : 'transfer'
|
||||
const methodToCall = supportsSafeTransfer ? `0x${SAFE_TRANSFER_FROM_WITHOUT_DATA_HASH}` : 'transfer'
|
||||
const transferParams = [tx.recipientAddress, tx.nftTokenId]
|
||||
const params = methodToCall === 'transfer' ? transferParams : [safeAddress, ...transferParams]
|
||||
|
||||
|
|
|
@ -45,6 +45,10 @@ export const getTxAmount = (tx, formatted = true) => {
|
|||
const { decimals = 18, decodedParams, isTokenTransfer, symbol } = tx
|
||||
const { value } = isTokenTransfer && !!decodedParams && !!decodedParams.transfer ? decodedParams.transfer : tx
|
||||
|
||||
if (tx.isCollectibleTransfer) {
|
||||
return `1 ${tx.symbol}`
|
||||
}
|
||||
|
||||
if (!isTokenTransfer && !(Number(value) > 0)) {
|
||||
return NOT_AVAILABLE
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@ import { DecodedMethods, decodeMethods } from 'src/logic/contracts/methodIds'
|
|||
import { TOKEN_REDUCER_ID } from 'src/logic/tokens/store/reducer/tokens'
|
||||
import {
|
||||
getERC20DecimalsAndSymbol,
|
||||
getERC721Symbol,
|
||||
isSendERC20Transaction,
|
||||
isSendERC721Transaction,
|
||||
} from 'src/logic/tokens/utils/tokenHelpers'
|
||||
|
@ -285,7 +286,7 @@ export const buildTx = async ({
|
|||
safeTxGas: tx.safeTxGas,
|
||||
safeTxHash: tx.safeTxHash,
|
||||
submissionDate: tx.submissionDate,
|
||||
symbol,
|
||||
symbol: isSendERC721Tx ? await getERC721Symbol(tx.to) : symbol,
|
||||
upgradeTx: isUpgradeTx,
|
||||
value: tx.value.toString(),
|
||||
})
|
||||
|
|
197
yarn.lock
197
yarn.lock
|
@ -1232,7 +1232,7 @@
|
|||
"@ethersproject/rlp" ">=5.0.0-beta.126"
|
||||
bn.js "^4.4.0"
|
||||
|
||||
"@ethersproject/address@>=5.0.0-beta.128":
|
||||
"@ethersproject/address@>=5.0.0-beta.128", "@ethersproject/address@>=5.0.0-beta.134":
|
||||
version "5.0.0-beta.135"
|
||||
resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.0.0-beta.135.tgz#8d4697c81dc27758b05e7eb7507c254f2ef0e5dc"
|
||||
integrity sha512-y9r/ajYBCDVM1ZD6kKgTRHBOxgURcQ24qTolw3oGyK373XHNrcY9ufDgZ5KR8h0OvLvczb4SGzYhahYvBnyZwA==
|
||||
|
@ -1313,6 +1313,16 @@
|
|||
"@ethersproject/bytes" ">=5.0.0-beta.137"
|
||||
"@ethersproject/logger" ">=5.0.0-beta.137"
|
||||
|
||||
"@ethersproject/signing-key@>=5.0.0-beta.135":
|
||||
version "5.0.0-beta.136"
|
||||
resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.0.0-beta.136.tgz#e24c93aeba25b8631673e490ce8ba519a3f90186"
|
||||
integrity sha512-iFIpafhDoxziOsnQaq39Hzdedji3cnuJymBHuLbO/elKZBEFrAoxPNE5YroxXdug634gncy5xDYDzmsIZ9y7mg==
|
||||
dependencies:
|
||||
"@ethersproject/bytes" ">=5.0.0-beta.137"
|
||||
"@ethersproject/logger" ">=5.0.0-beta.137"
|
||||
"@ethersproject/properties" ">=5.0.0-beta.140"
|
||||
elliptic "6.5.2"
|
||||
|
||||
"@ethersproject/strings@5.0.0-beta.136":
|
||||
version "5.0.0-beta.136"
|
||||
resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.0.0-beta.136.tgz#053cbf4f9f96a7537cbc50300597f2d707907f51"
|
||||
|
@ -1331,6 +1341,21 @@
|
|||
"@ethersproject/constants" ">=5.0.0-beta.133"
|
||||
"@ethersproject/logger" ">=5.0.0-beta.137"
|
||||
|
||||
"@ethersproject/transactions@^5.0.0-beta.135":
|
||||
version "5.0.0-beta.136"
|
||||
resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.0.0-beta.136.tgz#1c9d4521cec075b6324dc77e746a356829dc6f87"
|
||||
integrity sha512-IActPKqttlerqexp0+3bVHiFAfQ5/kjaQ+kSwjM8+vdOjvncBQWLF5NHorpu2ikQM6ub1daPwTWZn1JJeKvhkA==
|
||||
dependencies:
|
||||
"@ethersproject/address" ">=5.0.0-beta.134"
|
||||
"@ethersproject/bignumber" ">=5.0.0-beta.138"
|
||||
"@ethersproject/bytes" ">=5.0.0-beta.137"
|
||||
"@ethersproject/constants" ">=5.0.0-beta.133"
|
||||
"@ethersproject/keccak256" ">=5.0.0-beta.131"
|
||||
"@ethersproject/logger" ">=5.0.0-beta.137"
|
||||
"@ethersproject/properties" ">=5.0.0-beta.140"
|
||||
"@ethersproject/rlp" ">=5.0.0-beta.132"
|
||||
"@ethersproject/signing-key" ">=5.0.0-beta.135"
|
||||
|
||||
"@gnosis.pm/safe-contracts@1.1.1-dev.2":
|
||||
version "1.1.1-dev.2"
|
||||
resolved "https://registry.yarnpkg.com/@gnosis.pm/safe-contracts/-/safe-contracts-1.1.1-dev.2.tgz#4a5b9a9befe66d15df87d2216237d4ea4f64118f"
|
||||
|
@ -2139,6 +2164,14 @@
|
|||
"@types/minimatch" "*"
|
||||
"@types/node" "*"
|
||||
|
||||
"@types/hoist-non-react-statics@*":
|
||||
version "3.3.1"
|
||||
resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#1124aafe5118cb591977aeb1ceaaed1070eb039f"
|
||||
integrity sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==
|
||||
dependencies:
|
||||
"@types/react" "*"
|
||||
hoist-non-react-statics "^3.3.0"
|
||||
|
||||
"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0":
|
||||
version "2.0.2"
|
||||
resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.2.tgz#79d7a78bad4219f4c03d6557a1c72d9ca6ba62d5"
|
||||
|
@ -2224,6 +2257,13 @@
|
|||
dependencies:
|
||||
"@types/react" "*"
|
||||
|
||||
"@types/react-native@*":
|
||||
version "0.62.13"
|
||||
resolved "https://registry.yarnpkg.com/@types/react-native/-/react-native-0.62.13.tgz#c688c5ae03e426f927f7e1fa1a59cd067f35d1c2"
|
||||
integrity sha512-hs4/tSABhcJx+J8pZhVoXHrOQD89WFmbs8QiDLNSA9zNrD46pityAuBWuwk1aMjPk9I3vC5ewkJroVRHgRIfdg==
|
||||
dependencies:
|
||||
"@types/react" "*"
|
||||
|
||||
"@types/react-transition-group@^4.2.0":
|
||||
version "4.4.0"
|
||||
resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.4.0.tgz#882839db465df1320e4753e6e9f70ca7e9b4d46d"
|
||||
|
@ -2251,6 +2291,16 @@
|
|||
resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e"
|
||||
integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==
|
||||
|
||||
"@types/styled-components@^5.1.0":
|
||||
version "5.1.0"
|
||||
resolved "https://registry.yarnpkg.com/@types/styled-components/-/styled-components-5.1.0.tgz#24d3412ba5395aa06e14fbc93c52f9454cebd0d6"
|
||||
integrity sha512-ZFlLCuwF5r+4Vb7JUmd+Yr2S0UBdBGmI7ctFTgJMypIp3xOHI4LCFVn2dKMvpk6xDB2hLRykrEWMBwJEpUAUIQ==
|
||||
dependencies:
|
||||
"@types/hoist-non-react-statics" "*"
|
||||
"@types/react" "*"
|
||||
"@types/react-native" "*"
|
||||
csstype "^2.2.0"
|
||||
|
||||
"@types/testing-library__jest-dom@^5.0.2":
|
||||
version "5.9.1"
|
||||
resolved "https://registry.yarnpkg.com/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.9.1.tgz#aba5ee062b7880f69c212ef769389f30752806e5"
|
||||
|
@ -16647,6 +16697,15 @@ web3-core-helpers@1.2.8:
|
|||
web3-eth-iban "1.2.8"
|
||||
web3-utils "1.2.8"
|
||||
|
||||
web3-core-helpers@1.2.9:
|
||||
version "1.2.9"
|
||||
resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.2.9.tgz#6381077c3e01c127018cb9e9e3d1422697123315"
|
||||
integrity sha512-t0WAG3orLCE3lqi77ZoSRNFok3VQWZXTniZigDQjyOJYMAX7BU3F3js8HKbjVnAxlX3tiKoDxI0KBk9F3AxYuw==
|
||||
dependencies:
|
||||
underscore "1.9.1"
|
||||
web3-eth-iban "1.2.9"
|
||||
web3-utils "1.2.9"
|
||||
|
||||
web3-core-method@1.2.1:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.2.1.tgz#9df1bafa2cd8be9d9937e01c6a47fc768d15d90a"
|
||||
|
@ -16669,6 +16728,18 @@ web3-core-method@1.2.8:
|
|||
web3-core-subscriptions "1.2.8"
|
||||
web3-utils "1.2.8"
|
||||
|
||||
web3-core-method@1.2.9:
|
||||
version "1.2.9"
|
||||
resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.2.9.tgz#3fb538751029bea570e4f86731e2fa5e4945e462"
|
||||
integrity sha512-bjsIoqP3gs7A/gP8+QeLUCyOKJ8bopteCSNbCX36Pxk6TYfYWNuC6hP+2GzUuqdP3xaZNe+XEElQFUNpR3oyAg==
|
||||
dependencies:
|
||||
"@ethersproject/transactions" "^5.0.0-beta.135"
|
||||
underscore "1.9.1"
|
||||
web3-core-helpers "1.2.9"
|
||||
web3-core-promievent "1.2.9"
|
||||
web3-core-subscriptions "1.2.9"
|
||||
web3-utils "1.2.9"
|
||||
|
||||
web3-core-promievent@1.2.1:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.2.1.tgz#003e8a3eb82fb27b6164a6d5b9cad04acf733838"
|
||||
|
@ -16684,6 +16755,13 @@ web3-core-promievent@1.2.8:
|
|||
dependencies:
|
||||
eventemitter3 "3.1.2"
|
||||
|
||||
web3-core-promievent@1.2.9:
|
||||
version "1.2.9"
|
||||
resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.2.9.tgz#bb1c56aa6fac2f4b3c598510f06554d25c11c553"
|
||||
integrity sha512-0eAUA2zjgXTleSrnc1wdoKQPPIHU6KHf4fAscu4W9kKrR+mqP1KsjYrxY9wUyjNnXxfQ+5M29ipvbiaK8OqdOw==
|
||||
dependencies:
|
||||
eventemitter3 "3.1.2"
|
||||
|
||||
web3-core-requestmanager@1.2.1:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.2.1.tgz#fa2e2206c3d738db38db7c8fe9c107006f5c6e3d"
|
||||
|
@ -16706,6 +16784,17 @@ web3-core-requestmanager@1.2.8:
|
|||
web3-providers-ipc "1.2.8"
|
||||
web3-providers-ws "1.2.8"
|
||||
|
||||
web3-core-requestmanager@1.2.9:
|
||||
version "1.2.9"
|
||||
resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.2.9.tgz#dd6d855256c4dd681434fe0867f8cd742fe10503"
|
||||
integrity sha512-1PwKV2m46ALUnIN5VPPgjOj8yMLJhhqZYvYJE34hTN5SErOkwhzx5zScvo5MN7v7KyQGFnpVCZKKGCiEnDmtFA==
|
||||
dependencies:
|
||||
underscore "1.9.1"
|
||||
web3-core-helpers "1.2.9"
|
||||
web3-providers-http "1.2.9"
|
||||
web3-providers-ipc "1.2.9"
|
||||
web3-providers-ws "1.2.9"
|
||||
|
||||
web3-core-subscriptions@1.2.1:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.2.1.tgz#8c2368a839d4eec1c01a4b5650bbeb82d0e4a099"
|
||||
|
@ -16724,6 +16813,15 @@ web3-core-subscriptions@1.2.8:
|
|||
underscore "1.9.1"
|
||||
web3-core-helpers "1.2.8"
|
||||
|
||||
web3-core-subscriptions@1.2.9:
|
||||
version "1.2.9"
|
||||
resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.2.9.tgz#335fd7d15dfce5d78b4b7bef05ce4b3d7237b0e4"
|
||||
integrity sha512-Y48TvXPSPxEM33OmXjGVDMzTd0j8X0t2+sDw66haeBS8eYnrEzasWuBZZXDq0zNUsqyxItgBGDn+cszkgEnFqg==
|
||||
dependencies:
|
||||
eventemitter3 "3.1.2"
|
||||
underscore "1.9.1"
|
||||
web3-core-helpers "1.2.9"
|
||||
|
||||
web3-core@1.2.1:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.2.1.tgz#7278b58fb6495065e73a77efbbce781a7fddf1a9"
|
||||
|
@ -16747,6 +16845,19 @@ web3-core@1.2.8:
|
|||
web3-core-requestmanager "1.2.8"
|
||||
web3-utils "1.2.8"
|
||||
|
||||
web3-core@1.2.9:
|
||||
version "1.2.9"
|
||||
resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.2.9.tgz#2cba57aa259b6409db532d21bdf57db8d504fd3e"
|
||||
integrity sha512-fSYv21IP658Ty2wAuU9iqmW7V+75DOYMVZsDH/c14jcF/1VXnedOcxzxSj3vArsCvXZNe6XC5/wAuGZyQwR9RA==
|
||||
dependencies:
|
||||
"@types/bn.js" "^4.11.4"
|
||||
"@types/node" "^12.6.1"
|
||||
bignumber.js "^9.0.0"
|
||||
web3-core-helpers "1.2.9"
|
||||
web3-core-method "1.2.9"
|
||||
web3-core-requestmanager "1.2.9"
|
||||
web3-utils "1.2.9"
|
||||
|
||||
web3-eth-abi@1.2.1:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.2.1.tgz#9b915b1c9ebf82f70cca631147035d5419064689"
|
||||
|
@ -16765,6 +16876,15 @@ web3-eth-abi@1.2.8:
|
|||
underscore "1.9.1"
|
||||
web3-utils "1.2.8"
|
||||
|
||||
web3-eth-abi@1.2.9:
|
||||
version "1.2.9"
|
||||
resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.2.9.tgz#14bedd7e4be04fcca35b2ac84af1400574cd8280"
|
||||
integrity sha512-3YwUYbh/DMfDbhMWEebAdjSd5bj3ZQieOjLzWFHU23CaLEqT34sUix1lba+hgUH/EN6A7bKAuKOhR3p0OvTn7Q==
|
||||
dependencies:
|
||||
"@ethersproject/abi" "5.0.0-beta.153"
|
||||
underscore "1.9.1"
|
||||
web3-utils "1.2.9"
|
||||
|
||||
web3-eth-accounts@1.2.1:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.2.1.tgz#2741a8ef337a7219d57959ac8bd118b9d68d63cf"
|
||||
|
@ -16828,6 +16948,21 @@ web3-eth-contract@1.2.8, web3-eth-contract@^1.2.7:
|
|||
web3-eth-abi "1.2.8"
|
||||
web3-utils "1.2.8"
|
||||
|
||||
web3-eth-contract@^1.2.9:
|
||||
version "1.2.9"
|
||||
resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.2.9.tgz#713d9c6d502d8c8f22b696b7ffd8e254444e6bfd"
|
||||
integrity sha512-PYMvJf7EG/HyssUZa+pXrc8IB06K/YFfWYyW4R7ed3sab+9wWUys1TlWxBCBuiBXOokSAyM6H6P6/cKEx8FT8Q==
|
||||
dependencies:
|
||||
"@types/bn.js" "^4.11.4"
|
||||
underscore "1.9.1"
|
||||
web3-core "1.2.9"
|
||||
web3-core-helpers "1.2.9"
|
||||
web3-core-method "1.2.9"
|
||||
web3-core-promievent "1.2.9"
|
||||
web3-core-subscriptions "1.2.9"
|
||||
web3-eth-abi "1.2.9"
|
||||
web3-utils "1.2.9"
|
||||
|
||||
web3-eth-ens@1.2.1:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.2.1.tgz#a0e52eee68c42a8b9865ceb04e5fb022c2d971d5"
|
||||
|
@ -16873,6 +17008,14 @@ web3-eth-iban@1.2.8:
|
|||
bn.js "4.11.8"
|
||||
web3-utils "1.2.8"
|
||||
|
||||
web3-eth-iban@1.2.9:
|
||||
version "1.2.9"
|
||||
resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.2.9.tgz#4ebf3d8783f34d04c4740dc18938556466399f7a"
|
||||
integrity sha512-RtdVvJE0pyg9dHLy0GzDiqgnLnssSzfz/JYguhC1wsj9+Gnq1M6Diy3NixACWUAp6ty/zafyOaZnNQ+JuH9TjQ==
|
||||
dependencies:
|
||||
bn.js "4.11.8"
|
||||
web3-utils "1.2.9"
|
||||
|
||||
web3-eth-personal@1.2.1:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.2.1.tgz#244e9911b7b482dc17c02f23a061a627c6e47faf"
|
||||
|
@ -17049,6 +17192,14 @@ web3-providers-http@1.2.8:
|
|||
web3-core-helpers "1.2.8"
|
||||
xhr2-cookies "1.1.0"
|
||||
|
||||
web3-providers-http@1.2.9:
|
||||
version "1.2.9"
|
||||
resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.2.9.tgz#e698aa5377e2019c24c5a1e6efa0f51018728934"
|
||||
integrity sha512-F956tCIj60Ttr0UvEHWFIhx+be3He8msoPzyA44/kfzzYoMAsCFRn5cf0zQG6al0znE75g6HlWVSN6s3yAh51A==
|
||||
dependencies:
|
||||
web3-core-helpers "1.2.9"
|
||||
xhr2-cookies "1.1.0"
|
||||
|
||||
web3-providers-ipc@1.2.1:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.2.1.tgz#017bfc687a8fc5398df2241eb98f135e3edd672c"
|
||||
|
@ -17067,6 +17218,15 @@ web3-providers-ipc@1.2.8:
|
|||
underscore "1.9.1"
|
||||
web3-core-helpers "1.2.8"
|
||||
|
||||
web3-providers-ipc@1.2.9:
|
||||
version "1.2.9"
|
||||
resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.2.9.tgz#6159eacfcd7ac31edc470d93ef10814fe874763b"
|
||||
integrity sha512-NQ8QnBleoHA2qTJlqoWu7EJAD/FR5uimf7Ielzk4Z2z+m+6UAuJdJMSuQNj+Umhz9L/Ys6vpS1vHx9NizFl+aQ==
|
||||
dependencies:
|
||||
oboe "2.1.4"
|
||||
underscore "1.9.1"
|
||||
web3-core-helpers "1.2.9"
|
||||
|
||||
web3-providers-ws@1.2.1:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.2.1.tgz#2d941eaf3d5a8caa3214eff8dc16d96252b842cb"
|
||||
|
@ -17086,6 +17246,16 @@ web3-providers-ws@1.2.8:
|
|||
underscore "1.9.1"
|
||||
web3-core-helpers "1.2.8"
|
||||
|
||||
web3-providers-ws@1.2.9:
|
||||
version "1.2.9"
|
||||
resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.2.9.tgz#22c2006655ec44b4ad2b41acae62741a6ae7a88c"
|
||||
integrity sha512-6+UpvINeI//dglZoAKStUXqxDOXJy6Iitv2z3dbgInG4zb8tkYl/VBDL80UjUg3ZvzWG0g7EKY2nRPEpON2TFA==
|
||||
dependencies:
|
||||
eventemitter3 "^4.0.0"
|
||||
underscore "1.9.1"
|
||||
web3-core-helpers "1.2.9"
|
||||
websocket "^1.0.31"
|
||||
|
||||
web3-shh@1.2.1:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.2.1.tgz#4460e3c1e07faf73ddec24ccd00da46f89152b0c"
|
||||
|
@ -17133,6 +17303,20 @@ web3-utils@1.2.8, web3-utils@^1.2.7, web3-utils@^1.2.8:
|
|||
underscore "1.9.1"
|
||||
utf8 "3.0.0"
|
||||
|
||||
web3-utils@1.2.9:
|
||||
version "1.2.9"
|
||||
resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.2.9.tgz#abe11735221627da943971ef1a630868fb9c61f3"
|
||||
integrity sha512-9hcpuis3n/LxFzEVjwnVgvJzTirS2S9/MiNAa7l4WOEoywY+BSNwnRX4MuHnjkh9NY25B6QOjuNG6FNnSjTw1w==
|
||||
dependencies:
|
||||
bn.js "4.11.8"
|
||||
eth-lib "0.2.7"
|
||||
ethereum-bloom-filters "^1.0.6"
|
||||
ethjs-unit "0.1.6"
|
||||
number-to-bn "1.7.0"
|
||||
randombytes "^2.1.0"
|
||||
underscore "1.9.1"
|
||||
utf8 "3.0.0"
|
||||
|
||||
web3@1.2.1:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/web3/-/web3-1.2.1.tgz#5d8158bcca47838ab8c2b784a2dee4c3ceb4179b"
|
||||
|
@ -17312,6 +17496,17 @@ websocket-extensions@>=0.1.1:
|
|||
resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42"
|
||||
integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==
|
||||
|
||||
websocket@^1.0.31:
|
||||
version "1.0.31"
|
||||
resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.31.tgz#e5d0f16c3340ed87670e489ecae6144c79358730"
|
||||
integrity sha512-VAouplvGKPiKFDTeCCO65vYHsyay8DqoBSlzIO3fayrfOgU94lQN5a1uWVnFrMLceTJw/+fQXR5PGbUVRaHshQ==
|
||||
dependencies:
|
||||
debug "^2.2.0"
|
||||
es5-ext "^0.10.50"
|
||||
nan "^2.14.0"
|
||||
typedarray-to-buffer "^3.1.5"
|
||||
yaeti "^0.0.6"
|
||||
|
||||
"websocket@github:web3-js/WebSocket-Node#polyfill/globalThis":
|
||||
version "1.0.29"
|
||||
resolved "https://codeload.github.com/web3-js/WebSocket-Node/tar.gz/ef5ea2f41daf4a2113b80c9223df884b4d56c400"
|
||||
|
|
Loading…
Reference in New Issue