diff --git a/.eslintignore b/.eslintignore index 0695b3a7c17..8231691c915 100644 --- a/.eslintignore +++ b/.eslintignore @@ -3,6 +3,7 @@ scripts postcss.config.js webpack.* src/graphql/generated.ts +src/constants/abis.ts # amplify diff --git a/.gitignore b/.gitignore index c2f6e984622..1ad30c9e9f7 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,7 @@ cypress/screenshots /playwright-report/ /blob-report/ /playwright/.cache/ +/network-files .vscode .DS_Store diff --git a/amplify/backend/api/colonycdapp/schema/proxyColonies.graphql b/amplify/backend/api/colonycdapp/schema/proxyColonies.graphql new file mode 100644 index 00000000000..f09d2d8a9ce --- /dev/null +++ b/amplify/backend/api/colonycdapp/schema/proxyColonies.graphql @@ -0,0 +1,36 @@ +""" +Table representing a deployed proxy colony +""" +type ProxyColony @model { + """ + id in the format of colonyAddress_chainId + """ + id: ID! + """ + Address of the colony on the blockchain + """ + colonyAddress: ID! + @index( + name: "byColonyAddress" + queryField: "getProxyColoniesByColonyAddress" + ) + """ + The chainId it's deployed on + """ + chainId: String! + """ + A flag that tells us if the proxy is active or not + """ + isActive: Boolean! +} + +type SupportedChain @model { + """ + The chainId of the supported chain + """ + id: ID! + """ + A flag that tells us if the supported chain is active or not + """ + isActive: Boolean +} diff --git a/amplify/backend/api/colonycdapp/schema/schema.graphql b/amplify/backend/api/colonycdapp/schema/schema.graphql index 1a8ab3871e9..ef8868ad0d7 100644 --- a/amplify/backend/api/colonycdapp/schema/schema.graphql +++ b/amplify/backend/api/colonycdapp/schema/schema.graphql @@ -898,6 +898,18 @@ enum ColonyActionType { MANAGE_TOKENS MANAGE_TOKENS_MOTION MANAGE_TOKENS_MULTISIG + """ + An action related to creating a proxy colony + """ + ADD_PROXY_COLONY + ADD_PROXY_COLONY_MOTION + ADD_PROXY_COLONY_MULTISIG + """ + An action related to disabling a proxy colony + """ + REMOVE_PROXY_COLONY + REMOVE_PROXY_COLONY_MOTION + REMOVE_PROXY_COLONY_MULTISIG } """ @@ -1529,6 +1541,17 @@ type ColonyContributor @model @searchable { @hasMany(indexName: "byTargetAddress", fields: ["contributorAddress"]) } +type ColonyCreateEvent { + """ + The block number the colony was created at + """ + blockNumber: Int! + """ + The salt used during creation + """ + creationSalt: String! +} + """ Represents a Colony within the Colony Network """ @@ -1542,6 +1565,10 @@ type Colony @model { """ name: String! @index(name: "byName", queryField: "getColonyByName") """ + Colony creation data + """ + colonyCreateEvent: ColonyCreateEvent + """ The unique address of the native token of the Colony """ nativeTokenId: ID! @@ -1575,7 +1602,7 @@ type Colony @model { Native chain token claim (e.g., Token 0x0000...0000: ETH, xDAI, etc.) This is not an array since only a single token type can be returned """ - chainFundsClaim: ColonyChainFundsClaim + chainFundsClaim: [ColonyChainFundsClaim] @function(name: "fetchColonyNativeFundsClaim-${env}") """ Type of the Colony (Regular or Metacolony) @@ -1649,6 +1676,10 @@ type Colony @model { """ colonyMemberInvite: ColonyMemberInvite @hasOne(fields: ["colonyMemberInviteCode"]) + """ + List of proxy colonies related to this colony + """ + proxyColonies: [ProxyColony] @hasMany(indexName: "byColonyAddress", fields: ["id"]) } input ValidateUserInviteInput { @@ -2875,6 +2906,18 @@ type ColonyMultiSig @model { """ expenditureId: ID @index(name: "byExpenditureId", queryField: "getMultiSigByExpenditureId") + """ + The action txHash that was triggered upon motion finalization + """ + finalizationActionId: ID + @index( + name: "byFinalizationActionId" + queryField: "getColonyMultiSigByFinalizationActionId" + ) + """ + Expanded `ColonyAction` + """ + finalizationActionData: ColonyAction @hasOne(fields: ["finalizationActionId"]) } """ Represents a Motion within a Colony @@ -3010,6 +3053,18 @@ type ColonyMotion @model { the details of tokens and amounts to be funded """ expenditureFunding: [ExpenditureFundingItem!] + """ + The action txHash that was triggered upon motion finalization + """ + finalizationActionId: ID + @index( + name: "byFinalizationActionId" + queryField: "getColonyMotionByFinalizationActionId" + ) + """ + Expanded `ColonyAction` + """ + finalizationActionData: ColonyAction @hasOne(fields: ["finalizationActionId"]) } type ExpenditureFundingItem { @@ -3523,8 +3578,43 @@ type ColonyAction @model @searchable { Ids of the staged payment slots released by the action, if any """ expenditureSlotIds: [Int!] - arbitraryTransactions: [ColonyActionArbitraryTransaction!] + """ + The id of the multichain info entry + """ + multiChainInfoId: ID + """ + Multichain info if the action is bridged + """ + multiChainInfo: MultiChainInfo @hasOne(fields: ["multiChainInfoId"]) + """ + Target chain id if the action is on a proxy colony chain + """ + targetChainId: Int + """ + The motion action txHash that this action finalized + """ + finalizedActionId: ID + """ + Expanded `ColonyAction` + """ + finalizedActionData: ColonyAction @hasOne(fields: ["finalizedActionId"]) +} + +type MultiChainInfo @model { + """ + The format is txHash_chainId + """ + id: ID! + completedOnMainChain: Boolean! + completedOnProxyChain: Boolean! + wormholeInfo: ActionWormholeInfo +} + +type ActionWormholeInfo { + emitterChainId: Int + emitterAddress: String! + sequence: String! } """ @@ -3819,6 +3909,11 @@ type IngestorStats @model { """ id: ID! """ + The chain id the stats are generated on + """ + chainId: String! + @index(name: "byChainId", queryField: "getIngestorStatsByChainId") + """ JSON string to pass custom, dynamic values """ value: String! diff --git a/amplify/backend/function/cacheDomainBalance/src/package-lock.json b/amplify/backend/function/cacheDomainBalance/src/package-lock.json index 3c4e7082635..9fd67790339 100644 --- a/amplify/backend/function/cacheDomainBalance/src/package-lock.json +++ b/amplify/backend/function/cacheDomainBalance/src/package-lock.json @@ -9,7 +9,7 @@ "version": "2.0.0", "license": "Apache-2.0", "dependencies": { - "@colony/colony-js": "^8.0.0-next.0", + "@colony/colony-js": "^8.1.0", "@colony/events": "^0.0.0-snapshot-20240329154314", "cross-fetch": "^4.0.0", "date-fns": "^3.6.0" @@ -19,49 +19,49 @@ } }, "node_modules/@colony/colony-js": { - "version": "8.0.0-next.0", - "resolved": "https://registry.npmjs.org/@colony/colony-js/-/colony-js-8.0.0-next.0.tgz", - "integrity": "sha512-F46ElOrzhD/ktfYCQDf1ieNeBbIyWiDPd6cuHBjQ9yEU1iEo4pJfNt3J/57hZkwU+dY6wYqnU3NT7WCeu45u0A==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@colony/colony-js/-/colony-js-8.1.0.tgz", + "integrity": "sha512-GYMVTS4GtS4w8IAKWhjMn8k3yjAvFmwndMk6Q9lFGiUJclB+YtMPpwfXs9D+U1vVwMG2ybf9LCF0K2JVLFZqtQ==", "license": "GPL-3.0-only", "dependencies": { - "@colony/core": "^3.0.0-next.0", - "@colony/events": "^4.0.0-next.0", - "@colony/tokens": "^1.0.0-next.0" + "@colony/core": "3.1.0", + "@colony/events": "4.1.0", + "@colony/tokens": "1.1.0" }, "engines": { - "node": "^16 || ^18 || ^20", - "pnpm": "^8" + "node": "^18 || ^20 || ^22", + "pnpm": "^10" }, "peerDependencies": { "ethers": "^5.1.3" } }, "node_modules/@colony/colony-js/node_modules/@colony/core": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@colony/core/-/core-3.0.0.tgz", - "integrity": "sha512-NtjA4HtMl1uA9jrjcRpMItJVotJsFqgOngZ7Z7l/8S/kRWA1yMY17VsjkohEkRvnyAeoBgD0mdtTEZwGeqXvng==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@colony/core/-/core-3.1.0.tgz", + "integrity": "sha512-VcoXSFd6FGeL4yNAAnBS3gPmVhV4uiiJp5gKIMGAQf0Wt1iqM0k+1m/BWc+ydP58Rx7A2eOCaE8TghtJYiXsFQ==", "license": "GPL-3.0-only", "engines": { - "node": "^16 || ^18 || ^20", - "pnpm": "^8" + "node": "^18 || ^20 || ^22", + "pnpm": "^10" }, "peerDependencies": { "ethers": "^5.1.3" } }, "node_modules/@colony/colony-js/node_modules/@colony/events": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@colony/events/-/events-4.0.0.tgz", - "integrity": "sha512-sPjL+1ayeyXC7qr++tmNBWdaxVmsNPnt4R4tL8ch/dz8Ni65f4cE95wiWSmh0Sefoa9J4gZwYeXFvvYqyMLCEA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@colony/events/-/events-4.1.0.tgz", + "integrity": "sha512-9bIQUSIo/7o817ZpQ0H86Ar3Fxwdj05vfW0Jc3sUU6bhDC7c9MT7DHTRv1uN+kEcZVtJz4KabWcIUARZrq0AOA==", "license": "GPL-3.0-only", "dependencies": { - "@colony/core": "^3.0.0", + "@colony/core": "3.1.0", "fetch-retry": "^5.0.4", "typia": "^3.8.3" }, "engines": { - "node": "^16 || ^18 || ^20", - "pnpm": "^8" + "node": "^18 || ^20 || ^22", + "pnpm": "^10" }, "peerDependencies": { "ethers": "^5.1.3" @@ -95,13 +95,13 @@ } }, "node_modules/@colony/tokens": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@colony/tokens/-/tokens-1.0.0.tgz", - "integrity": "sha512-veyUSixcToWGzPgcOb907QbnnJdyCixZTkz6q9U1YAtrUwpUNp7xyajF7ef+HuNbUDMA+owa4P2PLpJBaBoiMg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@colony/tokens/-/tokens-1.1.0.tgz", + "integrity": "sha512-gIEX0fMbJv3HXWucqaS+beIPJf9YGz5GY0npy3+mTdCCxNkoQM1m9LT0gjP6T8NyaDxDvju3URDtB083qPLNaA==", "license": "GPL-3.0-only", "engines": { - "node": "^16 || ^18 || ^20", - "pnpm": "^8" + "node": "^18 || ^20 || ^22", + "pnpm": "^10" }, "peerDependencies": { "ethers": "^5.1.3" diff --git a/amplify/backend/function/cacheDomainBalance/src/package.json b/amplify/backend/function/cacheDomainBalance/src/package.json index 128939dfde4..2c48ce5c982 100644 --- a/amplify/backend/function/cacheDomainBalance/src/package.json +++ b/amplify/backend/function/cacheDomainBalance/src/package.json @@ -8,7 +8,7 @@ "@types/aws-lambda": "^8.10.92" }, "dependencies": { - "@colony/colony-js": "^8.0.0-next.0", + "@colony/colony-js": "^8.1.0", "@colony/events": "^0.0.0-snapshot-20240329154314", "cross-fetch": "^4.0.0", "date-fns": "^3.6.0" diff --git a/amplify/backend/function/fetchColonyBalances/src/basicColonyAbi.json b/amplify/backend/function/fetchColonyBalances/src/basicColonyAbi.json new file mode 100644 index 00000000000..60971dd59a5 --- /dev/null +++ b/amplify/backend/function/fetchColonyBalances/src/basicColonyAbi.json @@ -0,0 +1,26 @@ +[ + { + "inputs": [ + { + "internalType": "uint256", + "name": "_potId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_token", + "type": "address" + } + ], + "name": "getFundingPotBalance", + "outputs": [ + { + "internalType": "uint256", + "name": "balance", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } +] diff --git a/amplify/backend/function/fetchColonyBalances/src/basicUpdatedColonyAbi.json b/amplify/backend/function/fetchColonyBalances/src/basicUpdatedColonyAbi.json new file mode 100644 index 00000000000..8c5b971528e --- /dev/null +++ b/amplify/backend/function/fetchColonyBalances/src/basicUpdatedColonyAbi.json @@ -0,0 +1,31 @@ +[ + { + "inputs": [ + { + "internalType": "uint256", + "name": "_potId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_chainId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_token", + "type": "address" + } + ], + "name": "getFundingPotBalance", + "outputs": [ + { + "internalType": "uint256", + "name": "balance", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } +] diff --git a/amplify/backend/function/fetchColonyBalances/src/index.js b/amplify/backend/function/fetchColonyBalances/src/index.js index 4a303e40c5d..09964cab604 100644 --- a/amplify/backend/function/fetchColonyBalances/src/index.js +++ b/amplify/backend/function/fetchColonyBalances/src/index.js @@ -1,38 +1,33 @@ require('cross-fetch/polyfill'); -const { getColonyNetworkClient, Network } = require('@colony/colony-js'); const { providers, utils: { Logger }, constants: { AddressZero }, + Contract, } = require('ethers'); const { graphqlRequest } = require('./utils'); -const { getColony } = require('./queries'); +const { getColony, getProxyColonies } = require('./queries'); +const basicColonyAbi = require('./basicColonyAbi.json'); +const basicUpdatedColonyAbi = require('./basicUpdatedColonyAbi.json'); + +const FIRST_COLONY_VERSION_WITH_PROXY_COLONIES = 18; Logger.setLogLevel(Logger.levels.ERROR); let apiKey = 'da2-fakeApiId123456'; let graphqlURL = 'http://localhost:20002/graphql'; -let rpcURL = 'http://network-contracts:8545'; // this needs to be extended to all supported networks -let network = Network.Custom; -let networkAddress; +let rpcURL = 'http://network-contracts:8545'; const setEnvVariables = async () => { const ENV = process.env.ENV; if (ENV === 'qa' || ENV === 'prod') { const { getParams } = require('/opt/nodejs/getParams'); - [networkAddress, apiKey, graphqlURL, rpcURL, network] = await getParams([ - 'networkContractAddress', + [apiKey, graphqlURL, rpcURL] = await getParams([ 'appsyncApiKey', 'graphqlUrl', 'chainRpcEndpoint', - 'chainNetwork', ]); - } else { - const { - etherRouterAddress, - } = require('../../../../mock-data/colonyNetworkArtifacts/etherrouter-address.json'); - networkAddress = etherRouterAddress; } }; @@ -54,13 +49,40 @@ exports.handler = async ({ source: { id: colonyAddress } }) => { return { items: [] }; } + // Fetch proxy colony details + const getProxyColoniesResponse = await graphqlRequest( + getProxyColonies, + { colonyAddress }, + graphqlURL, + apiKey, + ); + + if (getProxyColoniesResponse.errors || !getProxyColoniesResponse.data) { + const [error] = getProxyColoniesResponse.errors; + throw new Error( + error?.message || 'Could not fetch proxy colony data from DynamoDB', + ); + } + + const { items: proxyColonies } = + getProxyColoniesResponse?.data?.getProxyColoniesByColonyAddress; + + const activeProxyColonies = proxyColonies.filter( + (proxyColony) => proxyColony.isActive, + ); + const provider = new providers.StaticJsonRpcProvider(rpcURL); - const networkClient = getColonyNetworkClient(network, provider, { - networkAddress, - disableVersionCheck: true, - }); - const colonyClient = await networkClient.getColonyClient(colonyAddress); + const { version: colonyVersion } = colony; + + const colonyVersionSupportsProxies = + colonyVersion >= FIRST_COLONY_VERSION_WITH_PROXY_COLONIES; + + const lightColonyClient = new Contract( + colonyAddress, + colonyVersionSupportsProxies ? basicUpdatedColonyAbi : basicColonyAbi, + provider, + ); const { chainId } = colony?.chainMetadata || {}; const { items: domains = [] } = colony.domains || {}; @@ -71,10 +93,19 @@ exports.handler = async ({ source: { id: colonyAddress } }) => { // Native chain token. Ie: address 0x0000...0000 balances.push(async () => { - const rewardsPotTotal = await colonyClient.getFundingPotBalance( - nativeFundingPotId, - AddressZero, - ); + let rewardsPotTotal; + if (colonyVersionSupportsProxies) { + rewardsPotTotal = await lightColonyClient.getFundingPotBalance( + nativeFundingPotId, + chainId, + AddressZero, + ); + } else { + rewardsPotTotal = await lightColonyClient.getFundingPotBalance( + nativeFundingPotId, + AddressZero, + ); + } /* * We're using this patters so that we could parallelize all calls at once * since this is in essence a multi dimensional array (of async data) @@ -89,6 +120,9 @@ exports.handler = async ({ source: { id: colonyAddress } }) => { symbol: '', decimals: 18, type: 'CHAIN_NATIVE', + chainMetadata: { + chainId, + }, }, balance: rewardsPotTotal.toString(), }; @@ -98,10 +132,19 @@ exports.handler = async ({ source: { id: colonyAddress } }) => { const { id: tokenAddress } = token; balances.push(async () => { - const rewardsPotTotal = await colonyClient.getFundingPotBalance( - nativeFundingPotId, - tokenAddress, - ); + let rewardsPotTotal; + if (colonyVersionSupportsProxies) { + rewardsPotTotal = await lightColonyClient.getFundingPotBalance( + nativeFundingPotId, + chainId, + tokenAddress, + ); + } else { + rewardsPotTotal = await lightColonyClient.getFundingPotBalance( + nativeFundingPotId, + tokenAddress, + ); + } /* * We're using this patters so that we could parallelize all calls at once * since this is in essence a multi dimensional array (of async data) @@ -116,6 +159,74 @@ exports.handler = async ({ source: { id: colonyAddress } }) => { }); }); + if (!colonyVersionSupportsProxies) { + return { + items: await Promise.all(balances.map(async (resolve) => resolve())), + }; + } + + activeProxyColonies.map(async (proxyColony) => { + const proxyChainId = proxyColony.chainId; + + domains.map(async (domain) => { + const { nativeId, nativeFundingPotId } = domain; + + // Native chain token. Ie: address 0x0000...0000 + balances.push(async () => { + const rewardsPotTotal = await lightColonyClient.getFundingPotBalance( + nativeFundingPotId, + proxyChainId, + AddressZero, + ); + + /* + * We're using this patters so that we could parallelize all calls at once + * since this is in essence a multi dimensional array (of async data) + */ + return { + id: `${proxyChainId}_${colonyAddress}_${nativeId}_${AddressZero}_balance`, + domain, + token: { + ...tokens[0].token, + id: AddressZero, + name: '', + symbol: '', + decimals: 18, + type: 'CHAIN_NATIVE', + chainMetadata: { + chainId: proxyChainId, + }, + }, + balance: rewardsPotTotal.toString(), + }; + }); + + tokens.map(async ({ token }) => { + const { id: tokenAddress } = token; + + balances.push(async () => { + const rewardsPotTotal = + await lightColonyClient.getFundingPotBalance( + nativeFundingPotId, + proxyChainId, + tokenAddress, + ); + + /* + * We're using this patters so that we could parallelize all calls at once + * since this is in essence a multi dimensional array (of async data) + */ + return { + id: `${proxyChainId}_${colonyAddress}_${nativeId}_${tokenAddress}_balance`, + domain, + token, + balance: rewardsPotTotal.toString(), + }; + }); + }); + }); + }); + return { items: await Promise.all(balances.map(async (resolve) => resolve())), }; diff --git a/amplify/backend/function/fetchColonyBalances/src/package-lock.json b/amplify/backend/function/fetchColonyBalances/src/package-lock.json index 338c4f5e39c..86f6b62fe23 100644 --- a/amplify/backend/function/fetchColonyBalances/src/package-lock.json +++ b/amplify/backend/function/fetchColonyBalances/src/package-lock.json @@ -9,7 +9,7 @@ "version": "2.0.0", "license": "Apache-2.0", "dependencies": { - "@colony/colony-js": "^8.0.0-next.0", + "@colony/colony-js": "^8.1.0", "@colony/events": "3.0.0", "cross-fetch": "^4.0.0", "ethers": "^5.7.2" @@ -19,49 +19,49 @@ } }, "node_modules/@colony/colony-js": { - "version": "8.0.0-next.0", - "resolved": "https://registry.npmjs.org/@colony/colony-js/-/colony-js-8.0.0-next.0.tgz", - "integrity": "sha512-F46ElOrzhD/ktfYCQDf1ieNeBbIyWiDPd6cuHBjQ9yEU1iEo4pJfNt3J/57hZkwU+dY6wYqnU3NT7WCeu45u0A==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@colony/colony-js/-/colony-js-8.1.0.tgz", + "integrity": "sha512-GYMVTS4GtS4w8IAKWhjMn8k3yjAvFmwndMk6Q9lFGiUJclB+YtMPpwfXs9D+U1vVwMG2ybf9LCF0K2JVLFZqtQ==", "license": "GPL-3.0-only", "dependencies": { - "@colony/core": "^3.0.0-next.0", - "@colony/events": "^4.0.0-next.0", - "@colony/tokens": "^1.0.0-next.0" + "@colony/core": "3.1.0", + "@colony/events": "4.1.0", + "@colony/tokens": "1.1.0" }, "engines": { - "node": "^16 || ^18 || ^20", - "pnpm": "^8" + "node": "^18 || ^20 || ^22", + "pnpm": "^10" }, "peerDependencies": { "ethers": "^5.1.3" } }, "node_modules/@colony/colony-js/node_modules/@colony/core": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@colony/core/-/core-3.0.0.tgz", - "integrity": "sha512-NtjA4HtMl1uA9jrjcRpMItJVotJsFqgOngZ7Z7l/8S/kRWA1yMY17VsjkohEkRvnyAeoBgD0mdtTEZwGeqXvng==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@colony/core/-/core-3.1.0.tgz", + "integrity": "sha512-VcoXSFd6FGeL4yNAAnBS3gPmVhV4uiiJp5gKIMGAQf0Wt1iqM0k+1m/BWc+ydP58Rx7A2eOCaE8TghtJYiXsFQ==", "license": "GPL-3.0-only", "engines": { - "node": "^16 || ^18 || ^20", - "pnpm": "^8" + "node": "^18 || ^20 || ^22", + "pnpm": "^10" }, "peerDependencies": { "ethers": "^5.1.3" } }, "node_modules/@colony/colony-js/node_modules/@colony/events": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@colony/events/-/events-4.0.0.tgz", - "integrity": "sha512-sPjL+1ayeyXC7qr++tmNBWdaxVmsNPnt4R4tL8ch/dz8Ni65f4cE95wiWSmh0Sefoa9J4gZwYeXFvvYqyMLCEA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@colony/events/-/events-4.1.0.tgz", + "integrity": "sha512-9bIQUSIo/7o817ZpQ0H86Ar3Fxwdj05vfW0Jc3sUU6bhDC7c9MT7DHTRv1uN+kEcZVtJz4KabWcIUARZrq0AOA==", "license": "GPL-3.0-only", "dependencies": { - "@colony/core": "^3.0.0", + "@colony/core": "3.1.0", "fetch-retry": "^5.0.4", "typia": "^3.8.3" }, "engines": { - "node": "^16 || ^18 || ^20", - "pnpm": "^8" + "node": "^18 || ^20 || ^22", + "pnpm": "^10" }, "peerDependencies": { "ethers": "^5.1.3" @@ -99,13 +99,13 @@ } }, "node_modules/@colony/tokens": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@colony/tokens/-/tokens-1.0.0.tgz", - "integrity": "sha512-veyUSixcToWGzPgcOb907QbnnJdyCixZTkz6q9U1YAtrUwpUNp7xyajF7ef+HuNbUDMA+owa4P2PLpJBaBoiMg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@colony/tokens/-/tokens-1.1.0.tgz", + "integrity": "sha512-gIEX0fMbJv3HXWucqaS+beIPJf9YGz5GY0npy3+mTdCCxNkoQM1m9LT0gjP6T8NyaDxDvju3URDtB083qPLNaA==", "license": "GPL-3.0-only", "engines": { - "node": "^16 || ^18 || ^20", - "pnpm": "^8" + "node": "^18 || ^20 || ^22", + "pnpm": "^10" }, "peerDependencies": { "ethers": "^5.1.3" diff --git a/amplify/backend/function/fetchColonyBalances/src/package.json b/amplify/backend/function/fetchColonyBalances/src/package.json index a3009aef6e5..4762bf1a9f3 100644 --- a/amplify/backend/function/fetchColonyBalances/src/package.json +++ b/amplify/backend/function/fetchColonyBalances/src/package.json @@ -8,7 +8,7 @@ "@types/aws-lambda": "^8.10.92" }, "dependencies": { - "@colony/colony-js": "^8.0.0-next.0", + "@colony/colony-js": "^8.1.0", "@colony/events": "3.0.0", "cross-fetch": "^4.0.0", "ethers": "^5.7.2" diff --git a/amplify/backend/function/fetchColonyBalances/src/queries.js b/amplify/backend/function/fetchColonyBalances/src/queries.js index 557a28b1bc3..9229cc4ba11 100644 --- a/amplify/backend/function/fetchColonyBalances/src/queries.js +++ b/amplify/backend/function/fetchColonyBalances/src/queries.js @@ -57,6 +57,7 @@ module.exports = { ${domainFragment} query GetColony($address: ID!) { getColony(id: $address) { + version chainMetadata { chainId network @@ -76,4 +77,14 @@ module.exports = { } } `, + getProxyColonies: /* GraphQL */ ` + query GetProxyColonies($colonyAddress: ID!) { + getProxyColoniesByColonyAddress(colonyAddress: $colonyAddress) { + items { + chainId + isActive + } + } + } + `, }; diff --git a/amplify/backend/function/fetchColonyNativeFundsClaim/src/basicUpdatedColonyAbi.json b/amplify/backend/function/fetchColonyNativeFundsClaim/src/basicUpdatedColonyAbi.json new file mode 100644 index 00000000000..4227d4d87e5 --- /dev/null +++ b/amplify/backend/function/fetchColonyNativeFundsClaim/src/basicUpdatedColonyAbi.json @@ -0,0 +1,55 @@ +[ + { + "inputs": [ + { + "internalType": "uint256", + "name": "_chainId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_token", + "type": "address" + } + ], + "name": "getNonRewardPotsTotal", + "outputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_potId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_chainId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_token", + "type": "address" + } + ], + "name": "getFundingPotBalance", + "outputs": [ + { + "internalType": "uint256", + "name": "balance", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } +] diff --git a/amplify/backend/function/fetchColonyNativeFundsClaim/src/graphql.js b/amplify/backend/function/fetchColonyNativeFundsClaim/src/graphql.js new file mode 100644 index 00000000000..9f94b62dc00 --- /dev/null +++ b/amplify/backend/function/fetchColonyNativeFundsClaim/src/graphql.js @@ -0,0 +1,12 @@ +module.exports = { + getProxyColonies: /* GraphQL */ ` + query GetProxyColonies($colonyAddress: ID!) { + getProxyColoniesByColonyAddress(colonyAddress: $colonyAddress) { + items { + chainId + isActive + } + } + } + `, +}; diff --git a/amplify/backend/function/fetchColonyNativeFundsClaim/src/index.js b/amplify/backend/function/fetchColonyNativeFundsClaim/src/index.js index af276bee3ef..1398e1a5a53 100644 --- a/amplify/backend/function/fetchColonyNativeFundsClaim/src/index.js +++ b/amplify/backend/function/fetchColonyNativeFundsClaim/src/index.js @@ -1,13 +1,25 @@ const { constants, providers, Contract, BigNumber } = require('ethers'); +const { graphqlRequest, getRpcUrlByChainId } = require('./utils'); +const { getColony, getProxyColonies } = require('./queries'); const basicColonyAbi = require('./basicColonyAbi.json'); +const basicUpdatedColonyAbi = require('./basicUpdatedColonyAbi.json'); -let rpcURL = 'http://network-contracts:8545'; // this needs to be extended to all supported networks +const FIRST_COLONY_VERSION_WITH_PROXY_COLONIES = 18; + +let apiKey = 'da2-fakeApiId123456'; +let graphqlURL = 'http://localhost:20002/graphql'; + +let mainRpcURL = 'http://network-contracts:8545'; const setEnvVariables = async () => { const ENV = process.env.ENV; if (ENV === 'qa' || ENV === 'prod') { const { getParams } = require('/opt/nodejs/getParams'); - [rpcURL] = await getParams(['chainRpcEndpoint']); + [apiKey, graphqlURL, mainRpcURL] = await getParams([ + 'appsyncApiKey', + 'graphqlUrl', + 'chainRpcEndpoint', + ]); } }; @@ -18,20 +30,60 @@ exports.handler = async ({ source: { id: colonyAddress } }) => { throw new Error('Unable to set environment variables. Reason:', e); } - const provider = new providers.StaticJsonRpcProvider(rpcURL); + const response = await graphqlRequest( + getColony, + { address: colonyAddress }, + graphqlURL, + apiKey, + ); + const { getColony: colony } = response?.data || {}; + + if (!colony) { + return { items: [] }; + } + + // Fetch proxy colony details + const getProxyColoniesResponse = await graphqlRequest( + getProxyColonies, + { colonyAddress }, + graphqlURL, + apiKey, + ); + + if (getProxyColoniesResponse.errors || !getProxyColoniesResponse.data) { + const [error] = getProxyColoniesResponse.errors; + throw new Error( + error?.message || 'Could not fetch proxy colony data from DynamoDB', + ); + } + + const { items: proxyColonies } = + getProxyColoniesResponse?.data?.getProxyColoniesByColonyAddress; + + const activeProxyColonies = proxyColonies.filter( + (proxyColony) => proxyColony.isActive, + ); + + // Handle main chain + const provider = new providers.StaticJsonRpcProvider(mainRpcURL); const providerNetwork = await provider.getNetwork(); const chainId = String(providerNetwork.chainId); const block = await provider.getBlockNumber(); const now = new Date(); + const { version: colonyVersion } = colony; + + const colonyVersionSupportsProxies = + colonyVersion >= FIRST_COLONY_VERSION_WITH_PROXY_COLONIES; + const lightColonyClient = new Contract( colonyAddress, - basicColonyAbi, + colonyVersionSupportsProxies ? basicUpdatedColonyAbi : basicColonyAbi, provider, ); - const colonyFundsClaim = { + let colonyFundsClaim = { __typeName: 'ColonyFundsClaim', amount: BigNumber.from(0).toString(), id: `${chainId}_${constants.AddressZero}_0`, @@ -40,35 +92,113 @@ exports.handler = async ({ source: { id: colonyAddress } }) => { createdAtBlock: block, }; - const balance = await provider.getBalance(colonyAddress); + const balanceOnMainChain = await provider.getBalance(colonyAddress); /* * Short circuit early, before making more expensive calls * If balance is 0, then no incoming transfers have been made */ - if (balance.gt(0)) { - const colonyNonRewardsPotsTotal = - await lightColonyClient.getNonRewardPotsTotal(constants.AddressZero); - const colonyRewardsPotTotal = await lightColonyClient.getFundingPotBalance( - /* - * Root domain, since all initial transfers go in there - */ - 0, - constants.AddressZero, - ); - const unclaimedBalance = balance + if (balanceOnMainChain.gt(0)) { + let colonyNonRewardsPotsTotal; + if (colonyVersionSupportsProxies) { + colonyNonRewardsPotsTotal = await lightColonyClient.getNonRewardPotsTotal( + chainId, + constants.AddressZero, + ); + } else { + colonyNonRewardsPotsTotal = await lightColonyClient.getNonRewardPotsTotal( + constants.AddressZero, + ); + } + + let colonyRewardsPotTotal; + if (colonyVersionSupportsProxies) { + colonyRewardsPotTotal = await lightColonyClient.getFundingPotBalance( + /* + * Root domain, since all initial transfers go in there + */ + 0, + chainId, + constants.AddressZero, + ); + } else { + colonyRewardsPotTotal = await lightColonyClient.getFundingPotBalance( + /* + * Root domain, since all initial transfers go in there + */ + 0, + constants.AddressZero, + ); + } + + const unclaimedBalance = balanceOnMainChain .sub(colonyNonRewardsPotsTotal) .sub(colonyRewardsPotTotal); if (unclaimedBalance.gt(0)) { - return { + colonyFundsClaim = { ...colonyFundsClaim, amount: unclaimedBalance.toString(), }; } } - // If the balance is 0, or unclaimed balance is 0, still return a claim with amount zero. - // This is because we want to always show native chain tokens in the incoming funds table. - return colonyFundsClaim; + // Return early if no proxy colonies + if (!colonyVersionSupportsProxies || activeProxyColonies.length < 1) { + // If the balance is 0, or unclaimed balance is 0, still return a claim with amount zero. + // This is because we want to always show native chain tokens in the incoming funds table. + return [colonyFundsClaim]; + } + + const proxyColonyClaims = await Promise.all( + activeProxyColonies.map(async (proxyColony) => { + const proxyChainId = proxyColony.chainId; + const proxyRpcURL = getRpcUrlByChainId(proxyChainId); + const proxyProvider = new providers.StaticJsonRpcProvider(proxyRpcURL); + const proxyBlock = await proxyProvider.getBlockNumber(); + const proxyBalance = await proxyProvider.getBalance(colonyAddress); + + const proxyColonyFundsClaim = { + __typeName: 'ColonyFundsClaim', + amount: BigNumber.from(0).toString(), + id: `${proxyChainId}_${constants.AddressZero}_0`, + createdAt: now, + updatedAt: now, + createdAtBlock: proxyBlock, + }; + + if (proxyBalance.gt(0)) { + const proxyColonyNonRewardsPotsTotal = + await lightColonyClient.getNonRewardPotsTotal( + proxyChainId, + constants.AddressZero, + ); + const proxyColonyRewardsPotTotal = + await lightColonyClient.getFundingPotBalance( + /* + * Root domain, since all initial transfers go in there + */ + 0, + proxyChainId, + constants.AddressZero, + ); + const unclaimedBalance = proxyBalance + .sub(proxyColonyNonRewardsPotsTotal) + .sub(proxyColonyRewardsPotTotal); + + if (unclaimedBalance.gt(0)) { + return { + ...proxyColonyFundsClaim, + amount: unclaimedBalance.toString(), + }; + } + } + + // If the balance is 0, or unclaimed balance is 0, still return a claim with amount zero. + // This is because we want to always show native chain tokens in the incoming funds table. + return proxyColonyFundsClaim; + }), + ); + + return [colonyFundsClaim].concat(proxyColonyClaims); }; diff --git a/amplify/backend/function/fetchColonyNativeFundsClaim/src/queries.js b/amplify/backend/function/fetchColonyNativeFundsClaim/src/queries.js index e69de29bb2d..7ecd500eabd 100644 --- a/amplify/backend/function/fetchColonyNativeFundsClaim/src/queries.js +++ b/amplify/backend/function/fetchColonyNativeFundsClaim/src/queries.js @@ -0,0 +1,19 @@ +module.exports = { + getColony: /* GraphQL */ ` + query GetColony($address: ID!) { + getColony(id: $address) { + version + } + } + `, + getProxyColonies: /* GraphQL */ ` + query GetProxyColonies($colonyAddress: ID!) { + getProxyColoniesByColonyAddress(colonyAddress: $colonyAddress) { + items { + chainId + isActive + } + } + } + `, +}; diff --git a/amplify/backend/function/fetchColonyNativeFundsClaim/src/utils.js b/amplify/backend/function/fetchColonyNativeFundsClaim/src/utils.js new file mode 100644 index 00000000000..2fead2170fa --- /dev/null +++ b/amplify/backend/function/fetchColonyNativeFundsClaim/src/utils.js @@ -0,0 +1,64 @@ +const fetch = require('cross-fetch'); + +const graphqlRequest = async (queryOrMutation, variables, url, authKey) => { + const options = { + method: 'POST', + headers: { + 'x-api-key': authKey, + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + query: queryOrMutation, + variables, + }), + }; + + let body; + let response; + + try { + response = await fetch(url, options); + body = await response.json(); + return body; + } catch (error) { + /* + * Something went wrong... obviously + */ + console.error(error); + return null; + } +}; + +const GANACHE_NETWORK_1 = { + chainId: '265669101', + rpcUrl: 'http://network-contracts-remote:8545', +}; + +const GANACHE_NETWORK_2 = { + chainId: '265669102', + rpcUrl: 'http://network-contracts-remote-2:8545', +}; + +// @TODO: Add the other supported networks +// const SUPPORTED_NETWORK = { +// chainId: '1', +// rpcUrl: '#', +// }; + +const SUPPORTED_NETWORKS = [GANACHE_NETWORK_1, GANACHE_NETWORK_2]; + +const getRpcUrlByChainId = (chainId) => { + const network = SUPPORTED_NETWORKS.find((net) => net.chainId === chainId); + + if (!network) { + console.error(`RPC URL not found for chain ID: ${chainId}`); + return null; + } + + return network.rpcUrl; +}; + +module.exports = { + graphqlRequest, + getRpcUrlByChainId, +}; diff --git a/amplify/backend/function/fetchDomainBalance/src/api/graphql/operations.js b/amplify/backend/function/fetchDomainBalance/src/api/graphql/operations.js index f6eb64b25f9..e85753ee9fb 100644 --- a/amplify/backend/function/fetchDomainBalance/src/api/graphql/operations.js +++ b/amplify/backend/function/fetchDomainBalance/src/api/graphql/operations.js @@ -5,11 +5,13 @@ const { saveTokenExchangeRate, getColonyActions, getColonyDomains, + getColony, getDomainExpenditures, getColonyExpenditures, getColonyFundsClaims, getColonyTokens, getToken, + getProxyColonies, } = require('./schemas.js'); const EnvVarsConfig = require('../../config/envVars.js'); @@ -236,6 +238,32 @@ const getExchangeRate = async ({ tokenId, date }) => { return result.data?.tokenExhangeRateByTokenId?.items?.[0]; }; +const getProxyColoniesData = async ({ colonyAddress, limit, nextToken }) => { + const result = await graphqlRequest(getProxyColonies, { + colonyAddress, + limit, + nextToken, + }); + + if (!result) { + console.warn('Could not find any proxy colonies in db.'); + } + + return result.data?.getProxyColoniesByColonyAddress; +}; + +const getAllProxyColonies = async (colonyAddress) => { + return getAllPages(getProxyColoniesData, { colonyAddress }); +}; + +const getColonyVersion = async (colonyAddress) => { + const result = await graphqlRequest(getColony, { + colonyAddress, + }); + + return result.data?.getColony?.version; +}; + module.exports = { getAllIncomingFunds, getAllExpenditures, @@ -245,4 +273,6 @@ module.exports = { getExchangeRate, getTokensDecimalsFor, getAllColonyTokens, + getAllProxyColonies, + getColonyVersion, }; diff --git a/amplify/backend/function/fetchDomainBalance/src/api/graphql/schemas.js b/amplify/backend/function/fetchDomainBalance/src/api/graphql/schemas.js index 35362862749..e436e53e334 100644 --- a/amplify/backend/function/fetchDomainBalance/src/api/graphql/schemas.js +++ b/amplify/backend/function/fetchDomainBalance/src/api/graphql/schemas.js @@ -242,9 +242,29 @@ module.exports = { token { decimals id + chainMetadata { + chainId + } } } } } `, + getColony: /* GraphQL */ ` + query GetColonyVersion($colonyAddress: ID!) { + getColony(id: $colonyAddress) { + version + } + } + `, + getProxyColonies: /* GraphQL */ ` + query GetProxyColonies($colonyAddress: ID!) { + getProxyColoniesByColonyAddress(colonyAddress: $colonyAddress) { + items { + chainId + isActive + } + } + } + `, }; diff --git a/amplify/backend/function/fetchDomainBalance/src/config/basicColonyAbi.json b/amplify/backend/function/fetchDomainBalance/src/config/basicColonyAbi.json new file mode 100644 index 00000000000..60971dd59a5 --- /dev/null +++ b/amplify/backend/function/fetchDomainBalance/src/config/basicColonyAbi.json @@ -0,0 +1,26 @@ +[ + { + "inputs": [ + { + "internalType": "uint256", + "name": "_potId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_token", + "type": "address" + } + ], + "name": "getFundingPotBalance", + "outputs": [ + { + "internalType": "uint256", + "name": "balance", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } +] diff --git a/amplify/backend/function/fetchDomainBalance/src/config/basicUpdatedColonyAbi.json b/amplify/backend/function/fetchDomainBalance/src/config/basicUpdatedColonyAbi.json new file mode 100644 index 00000000000..8c5b971528e --- /dev/null +++ b/amplify/backend/function/fetchDomainBalance/src/config/basicUpdatedColonyAbi.json @@ -0,0 +1,31 @@ +[ + { + "inputs": [ + { + "internalType": "uint256", + "name": "_potId", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_chainId", + "type": "uint256" + }, + { + "internalType": "address", + "name": "_token", + "type": "address" + } + ], + "name": "getFundingPotBalance", + "outputs": [ + { + "internalType": "uint256", + "name": "balance", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } +] diff --git a/amplify/backend/function/fetchDomainBalance/src/config/networkConfig.js b/amplify/backend/function/fetchDomainBalance/src/config/networkConfig.js index 01b3c660bba..870ff0cddeb 100644 --- a/amplify/backend/function/fetchDomainBalance/src/config/networkConfig.js +++ b/amplify/backend/function/fetchDomainBalance/src/config/networkConfig.js @@ -7,10 +7,25 @@ const { NETWORK_DATA, } = require('../consts'); +const basicColonyAbi = require('./basicColonyAbi.json'); +const basicUpdatedColonyAbi = require('./basicUpdatedColonyAbi.json'); + const DEFAULT_NETWORK = SupportedNetwork.ArbitrumOne; const NetworkConfig = (() => { return { + getNetworkConfigByChainId: (chainId) => { + const network = Object.values(NETWORK_DATA).find( + (network) => network.chainId === chainId, + ); + + if (!network) { + console.error(`Network config not found for chain ID: ${chainId}`); + return null; + } + + return network; + }, getConfig: async () => { const { network } = await EnvVarsConfig.getEnvVars(); const resolvedNetwork = ColonyJSNetworkMapping[network] || network; @@ -24,6 +39,8 @@ const NetworkConfig = (() => { DEFAULT_NETWORK_TOKEN, DEFAULT_NETWORK_INFO, supportedNetwork: resolvedNetwork || DEFAULT_NETWORK, + basicColonyAbi, + basicUpdatedColonyAbi, }; }, }; diff --git a/amplify/backend/function/fetchDomainBalance/src/consts.js b/amplify/backend/function/fetchDomainBalance/src/consts.js index bf5a592cd25..f340800674e 100644 --- a/amplify/backend/function/fetchDomainBalance/src/consts.js +++ b/amplify/backend/function/fetchDomainBalance/src/consts.js @@ -28,6 +28,8 @@ const SupportedNetwork = { Gnosis: 'gnosis', GnosisFork: 'gnosisFork', Ganache: 'ganache', + GanacheProxy1: 'ganache-proxy-1', + GanacheProxy2: 'ganache-proxy-2', Polygon: 'polygon', Amoy: 'amoy', ArbitrumOne: 'arbitrumOne', @@ -88,16 +90,11 @@ const POLYGON_TOKEN = { decimals: 18, }; -const TOKEN_DATA = { - [SupportedNetwork.Ganache]: ETHER_TOKEN, - [SupportedNetwork.Gnosis]: XDAI_TOKEN, - [SupportedNetwork.GnosisFork]: XDAI_TOKEN, - [SupportedNetwork.Goerli]: GOERLI_TOKEN, - [SupportedNetwork.Mainnet]: ETHER_TOKEN, - [SupportedNetwork.Polygon]: POLYGON_TOKEN, - [SupportedNetwork.Amoy]: POLYGON_TOKEN, - [SupportedNetwork.ArbitrumOne]: ETHER_TOKEN, - [SupportedNetwork.ArbitrumSepolia]: ETHER_TOKEN, +const Tokens = { + ETHER: ETHER_TOKEN, + XDAI: XDAI_TOKEN, + GOERLI: GOERLI_TOKEN, + POLYGON: POLYGON_TOKEN, }; const GNOSIS_NETWORK = { @@ -109,6 +106,7 @@ const GNOSIS_NETWORK = { blockExplorerUrl: 'https://gnosis.blockscout.com', tokenExplorerLink: 'https://gnosis.blockscout.com/tokens', contractAddressLink: 'https://gnosis.blockscout.com/address', + nativeToken: Tokens.XDAI, blockTime: 5, }; @@ -124,7 +122,7 @@ const ETHEREUM_NETWORK = { safeTxService: 'https://safe-transaction-mainnet.safe.global/api', rpcUrl: 'https://mainnet.infura.io/v3/9aa3d95b3bc440fa88ea12eaa4456161', apiUri: 'https://api.etherscan.io/api', - nativeToken: ETHER_TOKEN, + nativeToken: Tokens.ETHER, blockTime: 12, }; @@ -137,7 +135,7 @@ const GOERLI_NETWORK = { displayENSDomain: 'joincolony.eth', tokenExplorerLink: 'https://goerli.etherscan.io/tokens', contractAddressLink: 'https://goerli.etherscan.io/address', - nativeToken: GOERLI_TOKEN, + nativeToken: Tokens.GOERLI, blockTime: 5, }; @@ -150,7 +148,37 @@ const GANACHE_NETWORK = { displayENSDomain: 'joincolony.eth', tokenExplorerLink: 'http://localhost', contractAddressLink: 'http://localhost', - nativeToken: ETHER_TOKEN, + nativeToken: Tokens.ETHER, + blockTime: 5, +}; + +const GANACHE_NETWORK_1 = { + name: 'Local Proxy Chain 1', + chainId: '265669101', + shortName: 'Local Proxy Chain 1', + blockExplorerName: 'Noexplorer', + blockExplorerUrl: 'http://localhost', + displayENSDomain: 'joincolony.eth', + tokenExplorerLink: 'http://localhost', + contractAddressLink: 'http://localhost', + apiUri: 'https://api-sepolia.arbiscan.io/api', + rpcUrl: 'http://network-contracts-remote:8545', + nativeToken: Tokens.ETHER, + blockTime: 5, +}; + +const GANACHE_NETWORK_2 = { + name: 'Local Proxy Chain 2', + chainId: '265669102', + shortName: 'Local Proxy Chain 2', + blockExplorerName: 'Noexplorer', + blockExplorerUrl: 'http://localhost', + displayENSDomain: 'joincolony.eth', + tokenExplorerLink: 'http://localhost', + contractAddressLink: 'http://localhost', + apiUri: 'https://api-sepolia.arbiscan.io/api', + rpcUrl: 'http://network-contracts-remote-2:8545', + nativeToken: Tokens.ETHER, blockTime: 5, }; @@ -163,6 +191,7 @@ const POLYGON_NETWORK = { tokenExplorerLink: 'https://polygonscan.com/tokens', contractAddressLink: 'https://polygonscan.com/address', displayENSDomain: 'joincolony.matic', + nativeToken: Tokens.POLYGON, blockTime: 3, }; @@ -175,6 +204,7 @@ const AMOY_NETWORK = { tokenExplorerLink: 'https://www.oklink.com/amoy/address', contractAddressLink: 'https://www.oklink.com/amoy/address', displayENSDomain: 'joincolony.matic', + nativeToken: Tokens.POLYGON, blockTime: 3, }; @@ -187,6 +217,7 @@ const ARBITRUM_NETWORK = { tokenExplorerLink: 'https://arbiscan.io/tokens', contractAddressLink: 'https://arbiscan.io/address', displayENSDomain: 'joincolony.arbitrum', + nativeToken: Tokens.ETHER, blockTime: 4, }; @@ -199,11 +230,14 @@ const ARBITRUM_SEPOLIA_NETWORK = { tokenExplorerLink: 'https://sepolia.arbiscan.io/tokens', contractAddressLink: 'https://sepolia.arbiscan.io/address', displayENSDomain: 'joincolony.arbitrumsepolia', + nativeToken: Tokens.ETHER, blockTime: 4, }; const NETWORK_DATA = { [SupportedNetwork.Ganache]: GANACHE_NETWORK, + [SupportedNetwork.GanacheProxy1]: GANACHE_NETWORK_1, + [SupportedNetwork.GanacheProxy2]: GANACHE_NETWORK_2, [SupportedNetwork.Gnosis]: GNOSIS_NETWORK, [SupportedNetwork.GnosisFork]: GNOSIS_NETWORK, [SupportedNetwork.Goerli]: GOERLI_NETWORK, @@ -214,6 +248,20 @@ const NETWORK_DATA = { [SupportedNetwork.ArbitrumSepolia]: ARBITRUM_SEPOLIA_NETWORK, }; +const TOKEN_DATA = Object.fromEntries( + Object.entries(NETWORK_DATA).map(([network, config]) => [ + network, + config.nativeToken, + ]), +); + +const CHAIN_ID_TO_SUPPORTED_NETWORK = Object.fromEntries( + Object.entries(NETWORK_DATA).map(([network, config]) => [ + parseInt(config.chainId, 10), + network, + ]), +); + const coinGeckoMappings = { // This is a map between our internal reference to a supported currency, and the reference the api uses. // For full list: https://api.coingecko.com/api/v3/simple/supported_vs_currencies @@ -233,6 +281,8 @@ const coinGeckoMappings = { [SupportedNetwork.ArbitrumOne]: 'arbitrum-one', [SupportedNetwork.ArbitrumSepolia]: 'arbitrum-one', [SupportedNetwork.Ganache]: 'arbitrum-one', + [SupportedNetwork.GanacheProxy1]: 'arbitrum-one', + [SupportedNetwork.GanacheProxy2]: 'arbitrum-one', [SupportedNetwork.Gnosis]: 'xdai', [SupportedNetwork.GnosisFork]: 'xdai', [SupportedNetwork.Goerli]: 'ethereum', @@ -254,6 +304,7 @@ module.exports = { ColonyJSNetworkMapping, SupportedNetwork, SupportedCurrencies, + CHAIN_ID_TO_SUPPORTED_NETWORK, NETWORK_DATA, TOKEN_DATA, coinGeckoMappings, diff --git a/amplify/backend/function/fetchDomainBalance/src/package-lock.json b/amplify/backend/function/fetchDomainBalance/src/package-lock.json index 790805cce03..efc594506ad 100644 --- a/amplify/backend/function/fetchDomainBalance/src/package-lock.json +++ b/amplify/backend/function/fetchDomainBalance/src/package-lock.json @@ -9,7 +9,7 @@ "version": "2.0.0", "license": "Apache-2.0", "dependencies": { - "@colony/colony-js": "^8.0.0-next.0", + "@colony/colony-js": "^8.1.0", "@colony/events": "3.0.0", "cross-fetch": "^4.0.0", "date-fns": "^3.6.0", @@ -20,49 +20,49 @@ } }, "node_modules/@colony/colony-js": { - "version": "8.0.0-next.0", - "resolved": "https://registry.npmjs.org/@colony/colony-js/-/colony-js-8.0.0-next.0.tgz", - "integrity": "sha512-F46ElOrzhD/ktfYCQDf1ieNeBbIyWiDPd6cuHBjQ9yEU1iEo4pJfNt3J/57hZkwU+dY6wYqnU3NT7WCeu45u0A==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@colony/colony-js/-/colony-js-8.1.0.tgz", + "integrity": "sha512-GYMVTS4GtS4w8IAKWhjMn8k3yjAvFmwndMk6Q9lFGiUJclB+YtMPpwfXs9D+U1vVwMG2ybf9LCF0K2JVLFZqtQ==", "license": "GPL-3.0-only", "dependencies": { - "@colony/core": "^3.0.0-next.0", - "@colony/events": "^4.0.0-next.0", - "@colony/tokens": "^1.0.0-next.0" + "@colony/core": "3.1.0", + "@colony/events": "4.1.0", + "@colony/tokens": "1.1.0" }, "engines": { - "node": "^16 || ^18 || ^20", - "pnpm": "^8" + "node": "^18 || ^20 || ^22", + "pnpm": "^10" }, "peerDependencies": { "ethers": "^5.1.3" } }, "node_modules/@colony/colony-js/node_modules/@colony/core": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@colony/core/-/core-3.0.0.tgz", - "integrity": "sha512-NtjA4HtMl1uA9jrjcRpMItJVotJsFqgOngZ7Z7l/8S/kRWA1yMY17VsjkohEkRvnyAeoBgD0mdtTEZwGeqXvng==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@colony/core/-/core-3.1.0.tgz", + "integrity": "sha512-VcoXSFd6FGeL4yNAAnBS3gPmVhV4uiiJp5gKIMGAQf0Wt1iqM0k+1m/BWc+ydP58Rx7A2eOCaE8TghtJYiXsFQ==", "license": "GPL-3.0-only", "engines": { - "node": "^16 || ^18 || ^20", - "pnpm": "^8" + "node": "^18 || ^20 || ^22", + "pnpm": "^10" }, "peerDependencies": { "ethers": "^5.1.3" } }, "node_modules/@colony/colony-js/node_modules/@colony/events": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@colony/events/-/events-4.0.0.tgz", - "integrity": "sha512-sPjL+1ayeyXC7qr++tmNBWdaxVmsNPnt4R4tL8ch/dz8Ni65f4cE95wiWSmh0Sefoa9J4gZwYeXFvvYqyMLCEA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@colony/events/-/events-4.1.0.tgz", + "integrity": "sha512-9bIQUSIo/7o817ZpQ0H86Ar3Fxwdj05vfW0Jc3sUU6bhDC7c9MT7DHTRv1uN+kEcZVtJz4KabWcIUARZrq0AOA==", "license": "GPL-3.0-only", "dependencies": { - "@colony/core": "^3.0.0", + "@colony/core": "3.1.0", "fetch-retry": "^5.0.4", "typia": "^3.8.3" }, "engines": { - "node": "^16 || ^18 || ^20", - "pnpm": "^8" + "node": "^18 || ^20 || ^22", + "pnpm": "^10" }, "peerDependencies": { "ethers": "^5.1.3" @@ -98,13 +98,13 @@ } }, "node_modules/@colony/tokens": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@colony/tokens/-/tokens-1.0.0.tgz", - "integrity": "sha512-veyUSixcToWGzPgcOb907QbnnJdyCixZTkz6q9U1YAtrUwpUNp7xyajF7ef+HuNbUDMA+owa4P2PLpJBaBoiMg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@colony/tokens/-/tokens-1.1.0.tgz", + "integrity": "sha512-gIEX0fMbJv3HXWucqaS+beIPJf9YGz5GY0npy3+mTdCCxNkoQM1m9LT0gjP6T8NyaDxDvju3URDtB083qPLNaA==", "license": "GPL-3.0-only", "engines": { - "node": "^16 || ^18 || ^20", - "pnpm": "^8" + "node": "^18 || ^20 || ^22", + "pnpm": "^10" }, "peerDependencies": { "ethers": "^5.1.3" diff --git a/amplify/backend/function/fetchDomainBalance/src/package.json b/amplify/backend/function/fetchDomainBalance/src/package.json index 0fb76647277..7ff3cd19da3 100644 --- a/amplify/backend/function/fetchDomainBalance/src/package.json +++ b/amplify/backend/function/fetchDomainBalance/src/package.json @@ -8,7 +8,7 @@ "@types/aws-lambda": "^8.10.92" }, "dependencies": { - "@colony/colony-js": "^8.0.0-next.0", + "@colony/colony-js": "^8.1.0", "@colony/events": "3.0.0", "cross-fetch": "^4.0.0", "date-fns": "^3.6.0", diff --git a/amplify/backend/function/fetchDomainBalance/src/services/actions.js b/amplify/backend/function/fetchDomainBalance/src/services/actions.js index d227ae7b8ac..b38878bff79 100644 --- a/amplify/backend/function/fetchDomainBalance/src/services/actions.js +++ b/amplify/backend/function/fetchDomainBalance/src/services/actions.js @@ -50,16 +50,19 @@ const getTokensDatesMap = (actions) => { actions.forEach((action) => { const tokenAddress = action.token?.id; + const tokenChainId = action.token?.chainMetadata?.chainId; if (!tokenAddress) { return; } - if (!tokens[tokenAddress]) { - tokens[tokenAddress] = []; + const tokenAddressChainId = `${tokenChainId}_${tokenAddress}`; + + if (!tokens[tokenAddressChainId]) { + tokens[tokenAddressChainId] = []; } - tokens[tokenAddress].push(action.finalizedDate); + tokens[tokenAddressChainId].push(action.finalizedDate); }); return tokens; }; diff --git a/amplify/backend/function/fetchDomainBalance/src/services/exchangeRates.js b/amplify/backend/function/fetchDomainBalance/src/services/exchangeRates.js index 00219bfc945..9ebb566ced3 100644 --- a/amplify/backend/function/fetchDomainBalance/src/services/exchangeRates.js +++ b/amplify/backend/function/fetchDomainBalance/src/services/exchangeRates.js @@ -7,7 +7,10 @@ const { saveExchangeRate, } = require('../api/graphql/operations'); const { getStartOfDayFor } = require('../utils'); -const { SupportedCurrencies, SupportedNetwork } = require('../consts'); +const { + SupportedCurrencies, + CHAIN_ID_TO_SUPPORTED_NETWORK, +} = require('../consts'); const { constants: ethersConstants, utils: ethersUtils } = require('ethers'); @@ -185,19 +188,28 @@ const ExchangeRatesService = (() => { return { getExchangeRates: async (tokens, currency) => { - const { supportedNetwork } = await NetworkConfig.getConfig(); + const { supportedNetwork: defaultSupportedNetwork } = + await NetworkConfig.getConfig(); const tokensExchangeRate = await Promise.all( - Object.entries(tokens).map(async ([tokenAddress, dates]) => { + Object.entries(tokens).map(async ([tokenAddressChainId, dates]) => { + const [chainId, tokenAddress] = tokenAddressChainId.split('_'); let checksummedTokenAddress = tokenAddress; if (ethersUtils.isAddress(tokenAddress)) { checksummedTokenAddress = ethersUtils.getAddress(tokenAddress); } + let supportedNetworkFromChainId; + if (chainId) { + supportedNetworkFromChainId = + CHAIN_ID_TO_SUPPORTED_NETWORK[chainId]; + } + return getExchangeRatesForToken({ tokenAddress: checksummedTokenAddress, currency: currency ?? SupportedCurrencies.USD, - supportedNetwork, + supportedNetwork: + supportedNetworkFromChainId ?? defaultSupportedNetwork, dates, }); }), diff --git a/amplify/backend/function/fetchDomainBalance/src/services/networkBalance.js b/amplify/backend/function/fetchDomainBalance/src/services/networkBalance.js index 3a3724ad4bc..b9faf506347 100644 --- a/amplify/backend/function/fetchDomainBalance/src/services/networkBalance.js +++ b/amplify/backend/function/fetchDomainBalance/src/services/networkBalance.js @@ -1,17 +1,27 @@ -const { getColonyNetworkClient, Network } = require('@colony/colony-js'); const { providers, constants: { AddressZero }, + Contract, } = require('ethers'); const EnvVarsConfig = require('../config/envVars'); const { getStartOfDayFor } = require('../utils'); const { DEFAULT_TOKEN_DECIMALS } = require('../consts'); -const { getDomains, getAllColonyTokens } = require('../api/graphql/operations'); +const { + getColonyVersion, + getDomains, + getAllColonyTokens, + getAllProxyColonies, +} = require('../api/graphql/operations'); const ExchangeRatesService = require('./exchangeRates'); const { getTotalFiatAmountFor } = require('./tokens'); const { getTokensDatesMap } = require('./actions'); const NetworkConfig = require('../config/networkConfig'); +const FIRST_COLONY_VERSION_WITH_PROXY_COLONIES = 18; + +const hasProxyChainSupport = (version) => + version >= FIRST_COLONY_VERSION_WITH_PROXY_COLONIES; + // Helper function to fetch block timestamp in milliseconds const getBlockTimestamp = async (provider, blockNumber) => { const block = await provider.getBlock(blockNumber); @@ -115,29 +125,60 @@ const findClosestPastBlock = async ({ }); }; -const getTokensWithDefaults = async (colonyAddress) => { +const getColonyTokens = async (colonyAddress) => { const tokensData = await getAllColonyTokens(colonyAddress); + return [...tokensData.map(({ token }) => token)]; +}; + +const getFilteredTokensWithDefaults = (tokens, chainId) => { return [ - { id: AddressZero, decimals: DEFAULT_TOKEN_DECIMALS }, - ...tokensData.map(({ token }) => token), + { + id: AddressZero, + decimals: DEFAULT_TOKEN_DECIMALS, + chainMetadata: { chainId }, + }, + ...tokens.filter((token) => token.chainMetadata?.chainId === chainId), ]; }; +const getClosestBlock = async (provider, averageBlockTime, targetDate) => { + const currentBlockNumber = await provider.getBlockNumber(); + const closestBlockNumber = await findClosestPastBlock({ + targetDate, + averageBlockTime, + currentBlockNumber, + provider, + }); + + console.log('Closest block to target date:', closestBlockNumber); + return provider.getBlock(closestBlockNumber); +}; + const fetchBalances = async ({ tokens, colonyClient, nativeFundingPotId, closestBlock, + colonyVersionSupportsProxies, }) => { return Promise.all( tokens.map(async (token) => { let rewardsPotTotal; try { - rewardsPotTotal = await colonyClient.getFundingPotBalance( - nativeFundingPotId, - token.id, - { blockTag: closestBlock.number }, - ); + if (colonyVersionSupportsProxies) { + rewardsPotTotal = await colonyClient.getFundingPotBalance( + nativeFundingPotId, + token.chainMetadata?.chainId, + token.id, + { blockTag: closestBlock.number }, + ); + } else { + rewardsPotTotal = await colonyClient.getFundingPotBalance( + nativeFundingPotId, + token.id, + { blockTag: closestBlock.number }, + ); + } return { amount: rewardsPotTotal, networkFee: 0, @@ -164,61 +205,134 @@ const fetchBalances = async ({ ); }; +const getDomainBalances = async ({ + tokens, + domains, + domainId, + colonyClient, + closestBlock, + colonyVersionSupportsProxies, +}) => { + if (domainId) { + const domain = domains.find((d) => d.id === domainId); + return fetchBalances({ + tokens, + colonyClient, + nativeFundingPotId: domain?.nativeFundingPotId, + closestBlock, + colonyVersionSupportsProxies, + }); + } + + const allDomainBalances = await Promise.all( + domains.map((domain) => + fetchBalances({ + tokens, + colonyClient, + nativeFundingPotId: domain?.nativeFundingPotId, + closestBlock, + colonyVersionSupportsProxies, + }), + ), + ); + return allDomainBalances.flat(); +}; + +const getProxyColonyBalances = async ({ + colonyAddress, + colonyTokens, + domains, + domainId, + closestBlock, + colonyClient, + colonyVersionSupportsProxies, +}) => { + const proxyColonies = await getAllProxyColonies(colonyAddress); + const activeProxyColonies = proxyColonies.filter( + (proxyColony) => proxyColony.isActive, + ); + + const proxyBalances = await Promise.all( + activeProxyColonies.map(async (proxyColony) => { + const proxyChainId = proxyColony.chainId; + + const proxyTokens = getFilteredTokensWithDefaults( + colonyTokens, + proxyChainId, + ); + return getDomainBalances({ + tokens: proxyTokens, + domainId, + domains, + colonyClient: colonyClient, + closestBlock, + colonyVersionSupportsProxies, + }); + }), + ); + + return proxyBalances.flat(); +}; + const getNetworkTotalBalance = async ({ colonyAddress, domainId, timeframePeriodEndDate, selectedCurrency, }) => { - const { DEFAULT_NETWORK_INFO } = await NetworkConfig.getConfig(); + const { DEFAULT_NETWORK_INFO, basicColonyAbi, basicUpdatedColonyAbi } = + await NetworkConfig.getConfig(); const averageBlockTime = DEFAULT_NETWORK_INFO.blockTime; - const { network, networkAddress, rpcURL } = await EnvVarsConfig.getEnvVars(); - const provider = new providers.StaticJsonRpcProvider(rpcURL); - const networkClient = getColonyNetworkClient(network, provider, { - networkAddress, - disableVersionCheck: true, - }); + const { rpcURL } = await EnvVarsConfig.getEnvVars(); - const currentBlockNumber = await provider.getBlockNumber(); - const closestBlockNumber = await findClosestPastBlock({ - targetDate: timeframePeriodEndDate, - averageBlockTime, - currentBlockNumber, - provider, - }); - console.log('Closest block to target date:', closestBlockNumber); - const closestBlock = await provider.getBlock(closestBlockNumber); + const colonyVersion = await getColonyVersion(colonyAddress); + const colonyVersionSupportsProxies = hasProxyChainSupport(colonyVersion); - const colonyClient = await networkClient.getColonyClient(colonyAddress); - const tokens = await getTokensWithDefaults(colonyAddress); + const provider = new providers.StaticJsonRpcProvider(rpcURL); + const lightColonyClient = new Contract( + colonyAddress, + colonyVersionSupportsProxies ? basicUpdatedColonyAbi : basicColonyAbi, + provider, + ); + const colonyTokens = await getColonyTokens(colonyAddress); const domains = await getDomains(colonyAddress); - let balances = []; - // If the "All teams" filter is selected, then domain will be undefined - if (domainId) { - const domain = domains.find((d) => d.id === domainId); - balances = await fetchBalances({ - tokens, - colonyClient, - nativeFundingPotId: domain?.nativeFundingPotId, + const mainChainTokens = getFilteredTokensWithDefaults( + colonyTokens, + DEFAULT_NETWORK_INFO.chainId, + ); + + const closestBlock = await getClosestBlock( + provider, + averageBlockTime, + timeframePeriodEndDate, + ); + + const mainBalances = await getDomainBalances({ + domains, + domainId, + tokens: mainChainTokens, + colonyClient: lightColonyClient, + closestBlock, + colonyVersionSupportsProxies, + }); + + let proxyBalances = []; + if (colonyVersionSupportsProxies) { + proxyBalances = await getProxyColonyBalances({ + colonyAddress, + colonyTokens, + domains, + domainId, + colonyClient: lightColonyClient, closestBlock, + colonyVersionSupportsProxies, }); - } else { - const allDomainsBalances = await Promise.all( - domains.map(async (domain) => - fetchBalances({ - tokens, - colonyClient, - nativeFundingPotId: domain?.nativeFundingPotId, - closestBlock, - }), - ), - ); - - balances = allDomainsBalances.flat(); } + const balances = [...mainBalances, ...proxyBalances]; + const exchangeRates = await ExchangeRatesService.getExchangeRates( getTokensDatesMap(balances), selectedCurrency, diff --git a/amplify/backend/function/fetchMotionState/src/package-lock.json b/amplify/backend/function/fetchMotionState/src/package-lock.json index 9f5c51b2aa8..cfbba1b743f 100644 --- a/amplify/backend/function/fetchMotionState/src/package-lock.json +++ b/amplify/backend/function/fetchMotionState/src/package-lock.json @@ -9,7 +9,7 @@ "version": "2.0.0", "license": "Apache-2.0", "dependencies": { - "@colony/colony-js": "^8.0.0-next.0", + "@colony/colony-js": "^8.1.0", "@colony/events": "3.0.0", "cross-fetch": "^4.0.0", "ethers": "^5.1.3" @@ -19,49 +19,49 @@ } }, "node_modules/@colony/colony-js": { - "version": "8.0.0-next.0", - "resolved": "https://registry.npmjs.org/@colony/colony-js/-/colony-js-8.0.0-next.0.tgz", - "integrity": "sha512-F46ElOrzhD/ktfYCQDf1ieNeBbIyWiDPd6cuHBjQ9yEU1iEo4pJfNt3J/57hZkwU+dY6wYqnU3NT7WCeu45u0A==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@colony/colony-js/-/colony-js-8.1.0.tgz", + "integrity": "sha512-GYMVTS4GtS4w8IAKWhjMn8k3yjAvFmwndMk6Q9lFGiUJclB+YtMPpwfXs9D+U1vVwMG2ybf9LCF0K2JVLFZqtQ==", "license": "GPL-3.0-only", "dependencies": { - "@colony/core": "^3.0.0-next.0", - "@colony/events": "^4.0.0-next.0", - "@colony/tokens": "^1.0.0-next.0" + "@colony/core": "3.1.0", + "@colony/events": "4.1.0", + "@colony/tokens": "1.1.0" }, "engines": { - "node": "^16 || ^18 || ^20", - "pnpm": "^8" + "node": "^18 || ^20 || ^22", + "pnpm": "^10" }, "peerDependencies": { "ethers": "^5.1.3" } }, "node_modules/@colony/colony-js/node_modules/@colony/core": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@colony/core/-/core-3.0.0.tgz", - "integrity": "sha512-NtjA4HtMl1uA9jrjcRpMItJVotJsFqgOngZ7Z7l/8S/kRWA1yMY17VsjkohEkRvnyAeoBgD0mdtTEZwGeqXvng==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@colony/core/-/core-3.1.0.tgz", + "integrity": "sha512-VcoXSFd6FGeL4yNAAnBS3gPmVhV4uiiJp5gKIMGAQf0Wt1iqM0k+1m/BWc+ydP58Rx7A2eOCaE8TghtJYiXsFQ==", "license": "GPL-3.0-only", "engines": { - "node": "^16 || ^18 || ^20", - "pnpm": "^8" + "node": "^18 || ^20 || ^22", + "pnpm": "^10" }, "peerDependencies": { "ethers": "^5.1.3" } }, "node_modules/@colony/colony-js/node_modules/@colony/events": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@colony/events/-/events-4.0.0.tgz", - "integrity": "sha512-sPjL+1ayeyXC7qr++tmNBWdaxVmsNPnt4R4tL8ch/dz8Ni65f4cE95wiWSmh0Sefoa9J4gZwYeXFvvYqyMLCEA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@colony/events/-/events-4.1.0.tgz", + "integrity": "sha512-9bIQUSIo/7o817ZpQ0H86Ar3Fxwdj05vfW0Jc3sUU6bhDC7c9MT7DHTRv1uN+kEcZVtJz4KabWcIUARZrq0AOA==", "license": "GPL-3.0-only", "dependencies": { - "@colony/core": "^3.0.0", + "@colony/core": "3.1.0", "fetch-retry": "^5.0.4", "typia": "^3.8.3" }, "engines": { - "node": "^16 || ^18 || ^20", - "pnpm": "^8" + "node": "^18 || ^20 || ^22", + "pnpm": "^10" }, "peerDependencies": { "ethers": "^5.1.3" @@ -99,13 +99,13 @@ } }, "node_modules/@colony/tokens": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@colony/tokens/-/tokens-1.0.0.tgz", - "integrity": "sha512-veyUSixcToWGzPgcOb907QbnnJdyCixZTkz6q9U1YAtrUwpUNp7xyajF7ef+HuNbUDMA+owa4P2PLpJBaBoiMg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@colony/tokens/-/tokens-1.1.0.tgz", + "integrity": "sha512-gIEX0fMbJv3HXWucqaS+beIPJf9YGz5GY0npy3+mTdCCxNkoQM1m9LT0gjP6T8NyaDxDvju3URDtB083qPLNaA==", "license": "GPL-3.0-only", "engines": { - "node": "^16 || ^18 || ^20", - "pnpm": "^8" + "node": "^18 || ^20 || ^22", + "pnpm": "^10" }, "peerDependencies": { "ethers": "^5.1.3" diff --git a/amplify/backend/function/fetchMotionState/src/package.json b/amplify/backend/function/fetchMotionState/src/package.json index 13cbb0d76ee..2cb5cb45d28 100644 --- a/amplify/backend/function/fetchMotionState/src/package.json +++ b/amplify/backend/function/fetchMotionState/src/package.json @@ -8,7 +8,7 @@ "@types/aws-lambda": "^8.10.92" }, "dependencies": { - "@colony/colony-js": "^8.0.0-next.0", + "@colony/colony-js": "^8.1.0", "@colony/events": "3.0.0", "cross-fetch": "^4.0.0", "ethers": "^5.1.3" diff --git a/amplify/backend/function/fetchMotionTimeoutPeriods/src/package-lock.json b/amplify/backend/function/fetchMotionTimeoutPeriods/src/package-lock.json index 490a22003db..a3eb379d15c 100644 --- a/amplify/backend/function/fetchMotionTimeoutPeriods/src/package-lock.json +++ b/amplify/backend/function/fetchMotionTimeoutPeriods/src/package-lock.json @@ -9,7 +9,7 @@ "version": "2.0.0", "license": "Apache-2.0", "dependencies": { - "@colony/colony-js": "^8.0.0-next.0", + "@colony/colony-js": "^8.1.0", "@colony/events": "3.0.0", "cross-fetch": "^4.0.0", "ethers": "^5.7.2" @@ -19,49 +19,49 @@ } }, "node_modules/@colony/colony-js": { - "version": "8.0.0-next.0", - "resolved": "https://registry.npmjs.org/@colony/colony-js/-/colony-js-8.0.0-next.0.tgz", - "integrity": "sha512-F46ElOrzhD/ktfYCQDf1ieNeBbIyWiDPd6cuHBjQ9yEU1iEo4pJfNt3J/57hZkwU+dY6wYqnU3NT7WCeu45u0A==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@colony/colony-js/-/colony-js-8.1.0.tgz", + "integrity": "sha512-GYMVTS4GtS4w8IAKWhjMn8k3yjAvFmwndMk6Q9lFGiUJclB+YtMPpwfXs9D+U1vVwMG2ybf9LCF0K2JVLFZqtQ==", "license": "GPL-3.0-only", "dependencies": { - "@colony/core": "^3.0.0-next.0", - "@colony/events": "^4.0.0-next.0", - "@colony/tokens": "^1.0.0-next.0" + "@colony/core": "3.1.0", + "@colony/events": "4.1.0", + "@colony/tokens": "1.1.0" }, "engines": { - "node": "^16 || ^18 || ^20", - "pnpm": "^8" + "node": "^18 || ^20 || ^22", + "pnpm": "^10" }, "peerDependencies": { "ethers": "^5.1.3" } }, "node_modules/@colony/colony-js/node_modules/@colony/core": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@colony/core/-/core-3.0.0.tgz", - "integrity": "sha512-NtjA4HtMl1uA9jrjcRpMItJVotJsFqgOngZ7Z7l/8S/kRWA1yMY17VsjkohEkRvnyAeoBgD0mdtTEZwGeqXvng==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@colony/core/-/core-3.1.0.tgz", + "integrity": "sha512-VcoXSFd6FGeL4yNAAnBS3gPmVhV4uiiJp5gKIMGAQf0Wt1iqM0k+1m/BWc+ydP58Rx7A2eOCaE8TghtJYiXsFQ==", "license": "GPL-3.0-only", "engines": { - "node": "^16 || ^18 || ^20", - "pnpm": "^8" + "node": "^18 || ^20 || ^22", + "pnpm": "^10" }, "peerDependencies": { "ethers": "^5.1.3" } }, "node_modules/@colony/colony-js/node_modules/@colony/events": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@colony/events/-/events-4.0.0.tgz", - "integrity": "sha512-sPjL+1ayeyXC7qr++tmNBWdaxVmsNPnt4R4tL8ch/dz8Ni65f4cE95wiWSmh0Sefoa9J4gZwYeXFvvYqyMLCEA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@colony/events/-/events-4.1.0.tgz", + "integrity": "sha512-9bIQUSIo/7o817ZpQ0H86Ar3Fxwdj05vfW0Jc3sUU6bhDC7c9MT7DHTRv1uN+kEcZVtJz4KabWcIUARZrq0AOA==", "license": "GPL-3.0-only", "dependencies": { - "@colony/core": "^3.0.0", + "@colony/core": "3.1.0", "fetch-retry": "^5.0.4", "typia": "^3.8.3" }, "engines": { - "node": "^16 || ^18 || ^20", - "pnpm": "^8" + "node": "^18 || ^20 || ^22", + "pnpm": "^10" }, "peerDependencies": { "ethers": "^5.1.3" @@ -99,13 +99,13 @@ } }, "node_modules/@colony/tokens": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@colony/tokens/-/tokens-1.0.0.tgz", - "integrity": "sha512-veyUSixcToWGzPgcOb907QbnnJdyCixZTkz6q9U1YAtrUwpUNp7xyajF7ef+HuNbUDMA+owa4P2PLpJBaBoiMg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@colony/tokens/-/tokens-1.1.0.tgz", + "integrity": "sha512-gIEX0fMbJv3HXWucqaS+beIPJf9YGz5GY0npy3+mTdCCxNkoQM1m9LT0gjP6T8NyaDxDvju3URDtB083qPLNaA==", "license": "GPL-3.0-only", "engines": { - "node": "^16 || ^18 || ^20", - "pnpm": "^8" + "node": "^18 || ^20 || ^22", + "pnpm": "^10" }, "peerDependencies": { "ethers": "^5.1.3" diff --git a/amplify/backend/function/fetchMotionTimeoutPeriods/src/package.json b/amplify/backend/function/fetchMotionTimeoutPeriods/src/package.json index a56082cf3cf..0921ad9a1ae 100644 --- a/amplify/backend/function/fetchMotionTimeoutPeriods/src/package.json +++ b/amplify/backend/function/fetchMotionTimeoutPeriods/src/package.json @@ -8,7 +8,7 @@ "@types/aws-lambda": "^8.10.92" }, "dependencies": { - "@colony/colony-js": "^8.0.0-next.0", + "@colony/colony-js": "^8.1.0", "@colony/events": "3.0.0", "cross-fetch": "^4.0.0", "ethers": "^5.7.2" diff --git a/amplify/backend/function/fetchVoterRewards/src/package-lock.json b/amplify/backend/function/fetchVoterRewards/src/package-lock.json index e805d5b9541..e69871c5358 100644 --- a/amplify/backend/function/fetchVoterRewards/src/package-lock.json +++ b/amplify/backend/function/fetchVoterRewards/src/package-lock.json @@ -9,7 +9,7 @@ "version": "2.0.0", "license": "Apache-2.0", "dependencies": { - "@colony/colony-js": "^8.0.0-next.0", + "@colony/colony-js": "^8.1.0", "@colony/events": "3.0.0", "cross-fetch": "^4.0.0", "ethers": "^5.1.3" @@ -19,49 +19,49 @@ } }, "node_modules/@colony/colony-js": { - "version": "8.0.0-next.0", - "resolved": "https://registry.npmjs.org/@colony/colony-js/-/colony-js-8.0.0-next.0.tgz", - "integrity": "sha512-F46ElOrzhD/ktfYCQDf1ieNeBbIyWiDPd6cuHBjQ9yEU1iEo4pJfNt3J/57hZkwU+dY6wYqnU3NT7WCeu45u0A==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@colony/colony-js/-/colony-js-8.1.0.tgz", + "integrity": "sha512-GYMVTS4GtS4w8IAKWhjMn8k3yjAvFmwndMk6Q9lFGiUJclB+YtMPpwfXs9D+U1vVwMG2ybf9LCF0K2JVLFZqtQ==", "license": "GPL-3.0-only", "dependencies": { - "@colony/core": "^3.0.0-next.0", - "@colony/events": "^4.0.0-next.0", - "@colony/tokens": "^1.0.0-next.0" + "@colony/core": "3.1.0", + "@colony/events": "4.1.0", + "@colony/tokens": "1.1.0" }, "engines": { - "node": "^16 || ^18 || ^20", - "pnpm": "^8" + "node": "^18 || ^20 || ^22", + "pnpm": "^10" }, "peerDependencies": { "ethers": "^5.1.3" } }, "node_modules/@colony/colony-js/node_modules/@colony/core": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@colony/core/-/core-3.0.0.tgz", - "integrity": "sha512-NtjA4HtMl1uA9jrjcRpMItJVotJsFqgOngZ7Z7l/8S/kRWA1yMY17VsjkohEkRvnyAeoBgD0mdtTEZwGeqXvng==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@colony/core/-/core-3.1.0.tgz", + "integrity": "sha512-VcoXSFd6FGeL4yNAAnBS3gPmVhV4uiiJp5gKIMGAQf0Wt1iqM0k+1m/BWc+ydP58Rx7A2eOCaE8TghtJYiXsFQ==", "license": "GPL-3.0-only", "engines": { - "node": "^16 || ^18 || ^20", - "pnpm": "^8" + "node": "^18 || ^20 || ^22", + "pnpm": "^10" }, "peerDependencies": { "ethers": "^5.1.3" } }, "node_modules/@colony/colony-js/node_modules/@colony/events": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@colony/events/-/events-4.0.0.tgz", - "integrity": "sha512-sPjL+1ayeyXC7qr++tmNBWdaxVmsNPnt4R4tL8ch/dz8Ni65f4cE95wiWSmh0Sefoa9J4gZwYeXFvvYqyMLCEA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@colony/events/-/events-4.1.0.tgz", + "integrity": "sha512-9bIQUSIo/7o817ZpQ0H86Ar3Fxwdj05vfW0Jc3sUU6bhDC7c9MT7DHTRv1uN+kEcZVtJz4KabWcIUARZrq0AOA==", "license": "GPL-3.0-only", "dependencies": { - "@colony/core": "^3.0.0", + "@colony/core": "3.1.0", "fetch-retry": "^5.0.4", "typia": "^3.8.3" }, "engines": { - "node": "^16 || ^18 || ^20", - "pnpm": "^8" + "node": "^18 || ^20 || ^22", + "pnpm": "^10" }, "peerDependencies": { "ethers": "^5.1.3" @@ -99,13 +99,13 @@ } }, "node_modules/@colony/tokens": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@colony/tokens/-/tokens-1.0.0.tgz", - "integrity": "sha512-veyUSixcToWGzPgcOb907QbnnJdyCixZTkz6q9U1YAtrUwpUNp7xyajF7ef+HuNbUDMA+owa4P2PLpJBaBoiMg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@colony/tokens/-/tokens-1.1.0.tgz", + "integrity": "sha512-gIEX0fMbJv3HXWucqaS+beIPJf9YGz5GY0npy3+mTdCCxNkoQM1m9LT0gjP6T8NyaDxDvju3URDtB083qPLNaA==", "license": "GPL-3.0-only", "engines": { - "node": "^16 || ^18 || ^20", - "pnpm": "^8" + "node": "^18 || ^20 || ^22", + "pnpm": "^10" }, "peerDependencies": { "ethers": "^5.1.3" diff --git a/amplify/backend/function/fetchVoterRewards/src/package.json b/amplify/backend/function/fetchVoterRewards/src/package.json index 9b893a67880..92be8c7da28 100644 --- a/amplify/backend/function/fetchVoterRewards/src/package.json +++ b/amplify/backend/function/fetchVoterRewards/src/package.json @@ -8,7 +8,7 @@ "@types/aws-lambda": "^8.10.92" }, "dependencies": { - "@colony/colony-js": "^8.0.0-next.0", + "@colony/colony-js": "^8.1.0", "@colony/events": "3.0.0", "cross-fetch": "^4.0.0", "ethers": "^5.1.3" diff --git a/amplify/backend/function/getUserReputation/src/package-lock.json b/amplify/backend/function/getUserReputation/src/package-lock.json index 0a36ec6b812..96fe259c817 100644 --- a/amplify/backend/function/getUserReputation/src/package-lock.json +++ b/amplify/backend/function/getUserReputation/src/package-lock.json @@ -9,7 +9,7 @@ "version": "2.0.0", "license": "Apache-2.0", "dependencies": { - "@colony/colony-js": "^8.0.0-next.0", + "@colony/colony-js": "^8.1.0", "@colony/events": "3.0.0", "cross-fetch": "^4.0.0", "ethers": "^5.7.2" @@ -19,49 +19,49 @@ } }, "node_modules/@colony/colony-js": { - "version": "8.0.0-next.0", - "resolved": "https://registry.npmjs.org/@colony/colony-js/-/colony-js-8.0.0-next.0.tgz", - "integrity": "sha512-F46ElOrzhD/ktfYCQDf1ieNeBbIyWiDPd6cuHBjQ9yEU1iEo4pJfNt3J/57hZkwU+dY6wYqnU3NT7WCeu45u0A==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@colony/colony-js/-/colony-js-8.1.0.tgz", + "integrity": "sha512-GYMVTS4GtS4w8IAKWhjMn8k3yjAvFmwndMk6Q9lFGiUJclB+YtMPpwfXs9D+U1vVwMG2ybf9LCF0K2JVLFZqtQ==", "license": "GPL-3.0-only", "dependencies": { - "@colony/core": "^3.0.0-next.0", - "@colony/events": "^4.0.0-next.0", - "@colony/tokens": "^1.0.0-next.0" + "@colony/core": "3.1.0", + "@colony/events": "4.1.0", + "@colony/tokens": "1.1.0" }, "engines": { - "node": "^16 || ^18 || ^20", - "pnpm": "^8" + "node": "^18 || ^20 || ^22", + "pnpm": "^10" }, "peerDependencies": { "ethers": "^5.1.3" } }, "node_modules/@colony/colony-js/node_modules/@colony/core": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@colony/core/-/core-3.0.0.tgz", - "integrity": "sha512-NtjA4HtMl1uA9jrjcRpMItJVotJsFqgOngZ7Z7l/8S/kRWA1yMY17VsjkohEkRvnyAeoBgD0mdtTEZwGeqXvng==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@colony/core/-/core-3.1.0.tgz", + "integrity": "sha512-VcoXSFd6FGeL4yNAAnBS3gPmVhV4uiiJp5gKIMGAQf0Wt1iqM0k+1m/BWc+ydP58Rx7A2eOCaE8TghtJYiXsFQ==", "license": "GPL-3.0-only", "engines": { - "node": "^16 || ^18 || ^20", - "pnpm": "^8" + "node": "^18 || ^20 || ^22", + "pnpm": "^10" }, "peerDependencies": { "ethers": "^5.1.3" } }, "node_modules/@colony/colony-js/node_modules/@colony/events": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@colony/events/-/events-4.0.0.tgz", - "integrity": "sha512-sPjL+1ayeyXC7qr++tmNBWdaxVmsNPnt4R4tL8ch/dz8Ni65f4cE95wiWSmh0Sefoa9J4gZwYeXFvvYqyMLCEA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@colony/events/-/events-4.1.0.tgz", + "integrity": "sha512-9bIQUSIo/7o817ZpQ0H86Ar3Fxwdj05vfW0Jc3sUU6bhDC7c9MT7DHTRv1uN+kEcZVtJz4KabWcIUARZrq0AOA==", "license": "GPL-3.0-only", "dependencies": { - "@colony/core": "^3.0.0", + "@colony/core": "3.1.0", "fetch-retry": "^5.0.4", "typia": "^3.8.3" }, "engines": { - "node": "^16 || ^18 || ^20", - "pnpm": "^8" + "node": "^18 || ^20 || ^22", + "pnpm": "^10" }, "peerDependencies": { "ethers": "^5.1.3" @@ -99,13 +99,13 @@ } }, "node_modules/@colony/tokens": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@colony/tokens/-/tokens-1.0.0.tgz", - "integrity": "sha512-veyUSixcToWGzPgcOb907QbnnJdyCixZTkz6q9U1YAtrUwpUNp7xyajF7ef+HuNbUDMA+owa4P2PLpJBaBoiMg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@colony/tokens/-/tokens-1.1.0.tgz", + "integrity": "sha512-gIEX0fMbJv3HXWucqaS+beIPJf9YGz5GY0npy3+mTdCCxNkoQM1m9LT0gjP6T8NyaDxDvju3URDtB083qPLNaA==", "license": "GPL-3.0-only", "engines": { - "node": "^16 || ^18 || ^20", - "pnpm": "^8" + "node": "^18 || ^20 || ^22", + "pnpm": "^10" }, "peerDependencies": { "ethers": "^5.1.3" diff --git a/amplify/backend/function/getUserReputation/src/package.json b/amplify/backend/function/getUserReputation/src/package.json index 49d41f503ea..1f99c00e01a 100644 --- a/amplify/backend/function/getUserReputation/src/package.json +++ b/amplify/backend/function/getUserReputation/src/package.json @@ -8,7 +8,7 @@ "@types/aws-lambda": "^8.10.92" }, "dependencies": { - "@colony/colony-js": "^8.0.0-next.0", + "@colony/colony-js": "^8.1.0", "@colony/events": "3.0.0", "cross-fetch": "^4.0.0", "ethers": "^5.7.2" diff --git a/amplify/backend/function/getUserTokenBalance/src/package-lock.json b/amplify/backend/function/getUserTokenBalance/src/package-lock.json index 313176f6861..a2caa3f55d2 100644 --- a/amplify/backend/function/getUserTokenBalance/src/package-lock.json +++ b/amplify/backend/function/getUserTokenBalance/src/package-lock.json @@ -9,7 +9,7 @@ "version": "2.0.0", "license": "Apache-2.0", "dependencies": { - "@colony/colony-js": "^8.0.0-next.0", + "@colony/colony-js": "^8.1.0", "@colony/events": "3.0.0", "cross-fetch": "^4.0.0", "ethers": "^5.7.2" @@ -19,49 +19,49 @@ } }, "node_modules/@colony/colony-js": { - "version": "8.0.0-next.0", - "resolved": "https://registry.npmjs.org/@colony/colony-js/-/colony-js-8.0.0-next.0.tgz", - "integrity": "sha512-F46ElOrzhD/ktfYCQDf1ieNeBbIyWiDPd6cuHBjQ9yEU1iEo4pJfNt3J/57hZkwU+dY6wYqnU3NT7WCeu45u0A==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@colony/colony-js/-/colony-js-8.1.0.tgz", + "integrity": "sha512-GYMVTS4GtS4w8IAKWhjMn8k3yjAvFmwndMk6Q9lFGiUJclB+YtMPpwfXs9D+U1vVwMG2ybf9LCF0K2JVLFZqtQ==", "license": "GPL-3.0-only", "dependencies": { - "@colony/core": "^3.0.0-next.0", - "@colony/events": "^4.0.0-next.0", - "@colony/tokens": "^1.0.0-next.0" + "@colony/core": "3.1.0", + "@colony/events": "4.1.0", + "@colony/tokens": "1.1.0" }, "engines": { - "node": "^16 || ^18 || ^20", - "pnpm": "^8" + "node": "^18 || ^20 || ^22", + "pnpm": "^10" }, "peerDependencies": { "ethers": "^5.1.3" } }, "node_modules/@colony/colony-js/node_modules/@colony/core": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@colony/core/-/core-3.0.0.tgz", - "integrity": "sha512-NtjA4HtMl1uA9jrjcRpMItJVotJsFqgOngZ7Z7l/8S/kRWA1yMY17VsjkohEkRvnyAeoBgD0mdtTEZwGeqXvng==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@colony/core/-/core-3.1.0.tgz", + "integrity": "sha512-VcoXSFd6FGeL4yNAAnBS3gPmVhV4uiiJp5gKIMGAQf0Wt1iqM0k+1m/BWc+ydP58Rx7A2eOCaE8TghtJYiXsFQ==", "license": "GPL-3.0-only", "engines": { - "node": "^16 || ^18 || ^20", - "pnpm": "^8" + "node": "^18 || ^20 || ^22", + "pnpm": "^10" }, "peerDependencies": { "ethers": "^5.1.3" } }, "node_modules/@colony/colony-js/node_modules/@colony/events": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@colony/events/-/events-4.0.0.tgz", - "integrity": "sha512-sPjL+1ayeyXC7qr++tmNBWdaxVmsNPnt4R4tL8ch/dz8Ni65f4cE95wiWSmh0Sefoa9J4gZwYeXFvvYqyMLCEA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@colony/events/-/events-4.1.0.tgz", + "integrity": "sha512-9bIQUSIo/7o817ZpQ0H86Ar3Fxwdj05vfW0Jc3sUU6bhDC7c9MT7DHTRv1uN+kEcZVtJz4KabWcIUARZrq0AOA==", "license": "GPL-3.0-only", "dependencies": { - "@colony/core": "^3.0.0", + "@colony/core": "3.1.0", "fetch-retry": "^5.0.4", "typia": "^3.8.3" }, "engines": { - "node": "^16 || ^18 || ^20", - "pnpm": "^8" + "node": "^18 || ^20 || ^22", + "pnpm": "^10" }, "peerDependencies": { "ethers": "^5.1.3" @@ -99,13 +99,13 @@ } }, "node_modules/@colony/tokens": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@colony/tokens/-/tokens-1.0.0.tgz", - "integrity": "sha512-veyUSixcToWGzPgcOb907QbnnJdyCixZTkz6q9U1YAtrUwpUNp7xyajF7ef+HuNbUDMA+owa4P2PLpJBaBoiMg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@colony/tokens/-/tokens-1.1.0.tgz", + "integrity": "sha512-gIEX0fMbJv3HXWucqaS+beIPJf9YGz5GY0npy3+mTdCCxNkoQM1m9LT0gjP6T8NyaDxDvju3URDtB083qPLNaA==", "license": "GPL-3.0-only", "engines": { - "node": "^16 || ^18 || ^20", - "pnpm": "^8" + "node": "^18 || ^20 || ^22", + "pnpm": "^10" }, "peerDependencies": { "ethers": "^5.1.3" diff --git a/amplify/backend/function/getUserTokenBalance/src/package.json b/amplify/backend/function/getUserTokenBalance/src/package.json index 5bb96f0237b..3424619985e 100644 --- a/amplify/backend/function/getUserTokenBalance/src/package.json +++ b/amplify/backend/function/getUserTokenBalance/src/package.json @@ -8,7 +8,7 @@ "@types/aws-lambda": "^8.10.92" }, "dependencies": { - "@colony/colony-js": "^8.0.0-next.0", + "@colony/colony-js": "^8.1.0", "@colony/events": "3.0.0", "cross-fetch": "^4.0.0", "ethers": "^5.7.2" diff --git a/amplify/backend/function/qaSSMtest/src/package-lock.json b/amplify/backend/function/qaSSMtest/src/package-lock.json index e3a0b7c2ab6..bd60fa831fc 100644 --- a/amplify/backend/function/qaSSMtest/src/package-lock.json +++ b/amplify/backend/function/qaSSMtest/src/package-lock.json @@ -9,7 +9,7 @@ "version": "2.0.0", "license": "Apache-2.0", "dependencies": { - "@colony/colony-js": "^8.0.0-next.0", + "@colony/colony-js": "^8.1.0", "@colony/events": "3.0.0", "cross-fetch": "^4.0.0", "ethers": "^5.7.2" @@ -19,49 +19,49 @@ } }, "node_modules/@colony/colony-js": { - "version": "8.0.0-next.0", - "resolved": "https://registry.npmjs.org/@colony/colony-js/-/colony-js-8.0.0-next.0.tgz", - "integrity": "sha512-F46ElOrzhD/ktfYCQDf1ieNeBbIyWiDPd6cuHBjQ9yEU1iEo4pJfNt3J/57hZkwU+dY6wYqnU3NT7WCeu45u0A==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@colony/colony-js/-/colony-js-8.1.0.tgz", + "integrity": "sha512-GYMVTS4GtS4w8IAKWhjMn8k3yjAvFmwndMk6Q9lFGiUJclB+YtMPpwfXs9D+U1vVwMG2ybf9LCF0K2JVLFZqtQ==", "license": "GPL-3.0-only", "dependencies": { - "@colony/core": "^3.0.0-next.0", - "@colony/events": "^4.0.0-next.0", - "@colony/tokens": "^1.0.0-next.0" + "@colony/core": "3.1.0", + "@colony/events": "4.1.0", + "@colony/tokens": "1.1.0" }, "engines": { - "node": "^16 || ^18 || ^20", - "pnpm": "^8" + "node": "^18 || ^20 || ^22", + "pnpm": "^10" }, "peerDependencies": { "ethers": "^5.1.3" } }, "node_modules/@colony/colony-js/node_modules/@colony/core": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@colony/core/-/core-3.0.0.tgz", - "integrity": "sha512-NtjA4HtMl1uA9jrjcRpMItJVotJsFqgOngZ7Z7l/8S/kRWA1yMY17VsjkohEkRvnyAeoBgD0mdtTEZwGeqXvng==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@colony/core/-/core-3.1.0.tgz", + "integrity": "sha512-VcoXSFd6FGeL4yNAAnBS3gPmVhV4uiiJp5gKIMGAQf0Wt1iqM0k+1m/BWc+ydP58Rx7A2eOCaE8TghtJYiXsFQ==", "license": "GPL-3.0-only", "engines": { - "node": "^16 || ^18 || ^20", - "pnpm": "^8" + "node": "^18 || ^20 || ^22", + "pnpm": "^10" }, "peerDependencies": { "ethers": "^5.1.3" } }, "node_modules/@colony/colony-js/node_modules/@colony/events": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@colony/events/-/events-4.0.0.tgz", - "integrity": "sha512-sPjL+1ayeyXC7qr++tmNBWdaxVmsNPnt4R4tL8ch/dz8Ni65f4cE95wiWSmh0Sefoa9J4gZwYeXFvvYqyMLCEA==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@colony/events/-/events-4.1.0.tgz", + "integrity": "sha512-9bIQUSIo/7o817ZpQ0H86Ar3Fxwdj05vfW0Jc3sUU6bhDC7c9MT7DHTRv1uN+kEcZVtJz4KabWcIUARZrq0AOA==", "license": "GPL-3.0-only", "dependencies": { - "@colony/core": "^3.0.0", + "@colony/core": "3.1.0", "fetch-retry": "^5.0.4", "typia": "^3.8.3" }, "engines": { - "node": "^16 || ^18 || ^20", - "pnpm": "^8" + "node": "^18 || ^20 || ^22", + "pnpm": "^10" }, "peerDependencies": { "ethers": "^5.1.3" @@ -99,13 +99,13 @@ } }, "node_modules/@colony/tokens": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@colony/tokens/-/tokens-1.0.0.tgz", - "integrity": "sha512-veyUSixcToWGzPgcOb907QbnnJdyCixZTkz6q9U1YAtrUwpUNp7xyajF7ef+HuNbUDMA+owa4P2PLpJBaBoiMg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@colony/tokens/-/tokens-1.1.0.tgz", + "integrity": "sha512-gIEX0fMbJv3HXWucqaS+beIPJf9YGz5GY0npy3+mTdCCxNkoQM1m9LT0gjP6T8NyaDxDvju3URDtB083qPLNaA==", "license": "GPL-3.0-only", "engines": { - "node": "^16 || ^18 || ^20", - "pnpm": "^8" + "node": "^18 || ^20 || ^22", + "pnpm": "^10" }, "peerDependencies": { "ethers": "^5.1.3" diff --git a/amplify/backend/function/qaSSMtest/src/package.json b/amplify/backend/function/qaSSMtest/src/package.json index 8a48c8ed77d..ec243142599 100644 --- a/amplify/backend/function/qaSSMtest/src/package.json +++ b/amplify/backend/function/qaSSMtest/src/package.json @@ -5,7 +5,7 @@ "main": "index.js", "license": "Apache-2.0", "dependencies": { - "@colony/colony-js": "^8.0.0-next.0", + "@colony/colony-js": "^8.1.0", "@colony/events": "3.0.0", "cross-fetch": "^4.0.0", "ethers": "^5.7.2" diff --git a/amplify/backend/function/updateContributorsWithReputation/src/package-lock.json b/amplify/backend/function/updateContributorsWithReputation/src/package-lock.json index 9efa7d01e58..11feb22dfa8 100644 --- a/amplify/backend/function/updateContributorsWithReputation/src/package-lock.json +++ b/amplify/backend/function/updateContributorsWithReputation/src/package-lock.json @@ -9,7 +9,7 @@ "version": "2.0.0", "license": "Apache-2.0", "dependencies": { - "@colony/colony-js": "^8.0.0-next.0", + "@colony/colony-js": "^8.1.0", "cross-fetch": "^4.0.0", "decimal.js": "^10.2.1", "ethers": "^5.7.2" @@ -19,62 +19,62 @@ } }, "node_modules/@colony/colony-js": { - "version": "8.0.0-next.0", - "resolved": "https://registry.npmjs.org/@colony/colony-js/-/colony-js-8.0.0-next.0.tgz", - "integrity": "sha512-F46ElOrzhD/ktfYCQDf1ieNeBbIyWiDPd6cuHBjQ9yEU1iEo4pJfNt3J/57hZkwU+dY6wYqnU3NT7WCeu45u0A==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@colony/colony-js/-/colony-js-8.1.0.tgz", + "integrity": "sha512-GYMVTS4GtS4w8IAKWhjMn8k3yjAvFmwndMk6Q9lFGiUJclB+YtMPpwfXs9D+U1vVwMG2ybf9LCF0K2JVLFZqtQ==", "license": "GPL-3.0-only", "dependencies": { - "@colony/core": "^3.0.0-next.0", - "@colony/events": "^4.0.0-next.0", - "@colony/tokens": "^1.0.0-next.0" + "@colony/core": "3.1.0", + "@colony/events": "4.1.0", + "@colony/tokens": "1.1.0" }, "engines": { - "node": "^16 || ^18 || ^20", - "pnpm": "^8" + "node": "^18 || ^20 || ^22", + "pnpm": "^10" }, "peerDependencies": { "ethers": "^5.1.3" } }, - "node_modules/@colony/colony-js/node_modules/@colony/core": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@colony/core/-/core-3.0.0.tgz", - "integrity": "sha512-NtjA4HtMl1uA9jrjcRpMItJVotJsFqgOngZ7Z7l/8S/kRWA1yMY17VsjkohEkRvnyAeoBgD0mdtTEZwGeqXvng==", + "node_modules/@colony/core": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@colony/core/-/core-3.1.0.tgz", + "integrity": "sha512-VcoXSFd6FGeL4yNAAnBS3gPmVhV4uiiJp5gKIMGAQf0Wt1iqM0k+1m/BWc+ydP58Rx7A2eOCaE8TghtJYiXsFQ==", "license": "GPL-3.0-only", "engines": { - "node": "^16 || ^18 || ^20", - "pnpm": "^8" + "node": "^18 || ^20 || ^22", + "pnpm": "^10" }, "peerDependencies": { "ethers": "^5.1.3" } }, - "node_modules/@colony/colony-js/node_modules/@colony/events": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@colony/events/-/events-4.0.0.tgz", - "integrity": "sha512-sPjL+1ayeyXC7qr++tmNBWdaxVmsNPnt4R4tL8ch/dz8Ni65f4cE95wiWSmh0Sefoa9J4gZwYeXFvvYqyMLCEA==", + "node_modules/@colony/events": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@colony/events/-/events-4.1.0.tgz", + "integrity": "sha512-9bIQUSIo/7o817ZpQ0H86Ar3Fxwdj05vfW0Jc3sUU6bhDC7c9MT7DHTRv1uN+kEcZVtJz4KabWcIUARZrq0AOA==", "license": "GPL-3.0-only", "dependencies": { - "@colony/core": "^3.0.0", + "@colony/core": "3.1.0", "fetch-retry": "^5.0.4", "typia": "^3.8.3" }, "engines": { - "node": "^16 || ^18 || ^20", - "pnpm": "^8" + "node": "^18 || ^20 || ^22", + "pnpm": "^10" }, "peerDependencies": { "ethers": "^5.1.3" } }, "node_modules/@colony/tokens": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@colony/tokens/-/tokens-1.0.0.tgz", - "integrity": "sha512-veyUSixcToWGzPgcOb907QbnnJdyCixZTkz6q9U1YAtrUwpUNp7xyajF7ef+HuNbUDMA+owa4P2PLpJBaBoiMg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@colony/tokens/-/tokens-1.1.0.tgz", + "integrity": "sha512-gIEX0fMbJv3HXWucqaS+beIPJf9YGz5GY0npy3+mTdCCxNkoQM1m9LT0gjP6T8NyaDxDvju3URDtB083qPLNaA==", "license": "GPL-3.0-only", "engines": { - "node": "^16 || ^18 || ^20", - "pnpm": "^8" + "node": "^18 || ^20 || ^22", + "pnpm": "^10" }, "peerDependencies": { "ethers": "^5.1.3" @@ -1655,37 +1655,35 @@ }, "dependencies": { "@colony/colony-js": { - "version": "8.0.0-next.0", - "resolved": "https://registry.npmjs.org/@colony/colony-js/-/colony-js-8.0.0-next.0.tgz", - "integrity": "sha512-F46ElOrzhD/ktfYCQDf1ieNeBbIyWiDPd6cuHBjQ9yEU1iEo4pJfNt3J/57hZkwU+dY6wYqnU3NT7WCeu45u0A==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@colony/colony-js/-/colony-js-8.1.0.tgz", + "integrity": "sha512-GYMVTS4GtS4w8IAKWhjMn8k3yjAvFmwndMk6Q9lFGiUJclB+YtMPpwfXs9D+U1vVwMG2ybf9LCF0K2JVLFZqtQ==", "requires": { - "@colony/core": "^3.0.0-next.0", - "@colony/events": "^4.0.0-next.0", - "@colony/tokens": "^1.0.0-next.0" - }, - "dependencies": { - "@colony/core": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@colony/core/-/core-3.0.0.tgz", - "integrity": "sha512-NtjA4HtMl1uA9jrjcRpMItJVotJsFqgOngZ7Z7l/8S/kRWA1yMY17VsjkohEkRvnyAeoBgD0mdtTEZwGeqXvng==", - "requires": {} - }, - "@colony/events": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@colony/events/-/events-4.0.0.tgz", - "integrity": "sha512-sPjL+1ayeyXC7qr++tmNBWdaxVmsNPnt4R4tL8ch/dz8Ni65f4cE95wiWSmh0Sefoa9J4gZwYeXFvvYqyMLCEA==", - "requires": { - "@colony/core": "^3.0.0", - "fetch-retry": "^5.0.4", - "typia": "^3.8.3" - } - } + "@colony/core": "3.1.0", + "@colony/events": "4.1.0", + "@colony/tokens": "1.1.0" + } + }, + "@colony/core": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@colony/core/-/core-3.1.0.tgz", + "integrity": "sha512-VcoXSFd6FGeL4yNAAnBS3gPmVhV4uiiJp5gKIMGAQf0Wt1iqM0k+1m/BWc+ydP58Rx7A2eOCaE8TghtJYiXsFQ==", + "requires": {} + }, + "@colony/events": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@colony/events/-/events-4.1.0.tgz", + "integrity": "sha512-9bIQUSIo/7o817ZpQ0H86Ar3Fxwdj05vfW0Jc3sUU6bhDC7c9MT7DHTRv1uN+kEcZVtJz4KabWcIUARZrq0AOA==", + "requires": { + "@colony/core": "3.1.0", + "fetch-retry": "^5.0.4", + "typia": "^3.8.3" } }, "@colony/tokens": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@colony/tokens/-/tokens-1.0.0.tgz", - "integrity": "sha512-veyUSixcToWGzPgcOb907QbnnJdyCixZTkz6q9U1YAtrUwpUNp7xyajF7ef+HuNbUDMA+owa4P2PLpJBaBoiMg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@colony/tokens/-/tokens-1.1.0.tgz", + "integrity": "sha512-gIEX0fMbJv3HXWucqaS+beIPJf9YGz5GY0npy3+mTdCCxNkoQM1m9LT0gjP6T8NyaDxDvju3URDtB083qPLNaA==", "requires": {} }, "@ethersproject/abi": { diff --git a/amplify/backend/function/updateContributorsWithReputation/src/package.json b/amplify/backend/function/updateContributorsWithReputation/src/package.json index b2ac264e4bd..a614d5c9b9a 100644 --- a/amplify/backend/function/updateContributorsWithReputation/src/package.json +++ b/amplify/backend/function/updateContributorsWithReputation/src/package.json @@ -8,7 +8,7 @@ "@types/aws-lambda": "^8.10.92" }, "dependencies": { - "@colony/colony-js": "^8.0.0-next.0", + "@colony/colony-js": "^8.1.0", "cross-fetch": "^4.0.0", "decimal.js": "^10.2.1", "ethers": "^5.7.2" diff --git a/docker/colony-cdapp-dev-env-block-ingestor b/docker/colony-cdapp-dev-env-block-ingestor index 46b6a144d9f..d8dd24b96c6 100644 --- a/docker/colony-cdapp-dev-env-block-ingestor +++ b/docker/colony-cdapp-dev-env-block-ingestor @@ -1,6 +1,6 @@ FROM colony-cdapp-dev-env/base:latest -ENV BLOCK_INGESTOR_HASH=87073303a0369e97cf439baf572809f238f923ed +ENV BLOCK_INGESTOR_HASH=74320716b5248fad31b1ad90ed79acf3f3d23789 # Declare volumes to set up metadata VOLUME [ "/colonyCDapp/amplify/mock-data" ] @@ -32,11 +32,13 @@ ADD docker/files/block-ingestor/env.base /colonyCDappBackend/block-ingestor/.env # to the block ingestor. You must ensure these env vars exist in your local env file for this to work properly. RUN --mount=type=bind,source=/.env,target=/tmpMount/.env grep -e MAGICBELL_API_KEY -e MAGICBELL_API_SECRET -e MAGICBELL_DEV_KEY /tmpMount/.env >> /colonyCDappBackend/block-ingestor/.env +RUN npm i -g pnpm@9.5.0 + # Install block ingestor dependencies -RUN npm ci +RUN pnpm install --frozen-lockfile # Compile JS files -RUN npm run build +RUN pnpm --filter @joincolony/main-chain run build WORKDIR /colonyCDappBackend diff --git a/docker/colony-cdapp-dev-env-network b/docker/colony-cdapp-dev-env-network index 682a3d1f053..558ee0a8321 100644 --- a/docker/colony-cdapp-dev-env-network +++ b/docker/colony-cdapp-dev-env-network @@ -1,6 +1,6 @@ FROM colony-cdapp-dev-env/base:latest -ENV NETWORK_HASH=3f8df23173f840226fb8da42547e12664f10c290 +ENV NETWORK_HASH=89015a77c6fba5ac4fbbdcb0c806c0b66807fc73 # Declare volumes to set up metadata VOLUME [ "/colonyCDapp/amplify/mock-data" ] @@ -33,6 +33,8 @@ RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | b # Install required network dependencies RUN pnpm i --frozen-lockfile +RUN npx hardhat compile + # Initialize the justification tree cache # To avoid the error spewed by the miner at startup RUN echo "{}" > ./packages/reputation-miner/justificationTreeCache.json diff --git a/docker/colony-cdapp-dev-env-network-remote b/docker/colony-cdapp-dev-env-network-remote new file mode 100644 index 00000000000..255ec87d630 --- /dev/null +++ b/docker/colony-cdapp-dev-env-network-remote @@ -0,0 +1,17 @@ +FROM colony-cdapp-dev-env/network:latest +# Add dependencies from the host +# Note: these are listed individually so that if they change, they won't affect +# the build of the other images +ADD docker/files/network-remote/run.sh.base /colonyCDappBackend/run.sh + +WORKDIR /colonyCDappBackend + +# Open up ports to the docker image +# Ganache +EXPOSE 8545 + +# Make the run script executable +RUN chmod +x ./run.sh + +# Battlecruiser Operational! +CMD [ "./run.sh" ] diff --git a/docker/colony-cdapp-dev-env-network-wormhole-relayer b/docker/colony-cdapp-dev-env-network-wormhole-relayer new file mode 100644 index 00000000000..3f880ebf52e --- /dev/null +++ b/docker/colony-cdapp-dev-env-network-wormhole-relayer @@ -0,0 +1,33 @@ +FROM colony-cdapp-dev-env/network:latest +# Add dependencies from the host +# Note: these are listed individually so that if they change, they won't affect +# the build of the other images +ADD docker/files/network-wormhole-relayer/run.sh.base /colonyCDappBackend/run.sh + +WORKDIR /colonyCDappBackend + +# Open up ports to the docker image +# Ganache +# EXPOSE 8545 + +RUN apt-get update +RUN apt-get install -y ca-certificates curl +RUN install -m 0755 -d /etc/apt/keyrings +RUN curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc +RUN chmod a+r /etc/apt/keyrings/docker.asc + +# Add the repository to Apt sources: +RUN echo \ + "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \ + $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ + tee /etc/apt/sources.list.d/docker.list > /dev/null +RUN apt-get update +RUN apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin + +RUN cd ./colonyNetwork/lib/wormhole/sdk/js-proto-node && npm i + +# Make the run script executable +RUN chmod +x ./run.sh + +# Battlecruiser Operational! +CMD [ "./run.sh" ] diff --git a/docker/colony-cdapp-dev-env-orchestration.yaml b/docker/colony-cdapp-dev-env-orchestration.yaml index d70736b51ca..54bda8baf9a 100644 --- a/docker/colony-cdapp-dev-env-orchestration.yaml +++ b/docker/colony-cdapp-dev-env-orchestration.yaml @@ -8,7 +8,6 @@ services: - 'amplify-mock-data:/mock-data' - '../amplify/backend/:/backend-repo' command: '/bin/bash -c "rm -rf /backend/* && rm -rf /mock-data/* && touch /backend/.initialized && touch /mock-data/.initialized && cp -r /backend-repo/* /backend/ && chown -R $(id -u node):$(id -g node) /backend && chown -R $(id -u node):$(id -g node) /mock-data"' - network-contracts: container_name: 'network' image: colony-cdapp-dev-env/network:latest @@ -26,6 +25,40 @@ services: amplify-setup: condition: service_completed_successfully + network-contracts-remote: + container_name: 'network-remote' + image: colony-cdapp-dev-env/network-remote:latest + volumes: + - 'amplify-mock-data:/colonyCDapp/amplify/mock-data' + ports: + - '8546:8545' + healthcheck: + test: ['CMD', 'curl', '-f', 'http://localhost:8545'] + interval: 5s + retries: 1000 + depends_on: + amplify-setup: + condition: service_completed_successfully + environment: + CHAIN_ID: 265669101 + + network-contracts-remote-2: + container_name: 'network-remote-2' + image: colony-cdapp-dev-env/network-remote:latest + volumes: + - 'amplify-mock-data:/colonyCDapp/amplify/mock-data' + ports: + - '8547:8545' + healthcheck: + test: ['CMD', 'curl', '-f', 'http://localhost:8545'] + interval: 5s + retries: 1000 + depends_on: + amplify-setup: + condition: service_completed_successfully + environment: + CHAIN_ID: 265669102 + reputation-monitor: container_name: 'monitor' image: colony-cdapp-dev-env/reputation-monitor:latest @@ -36,7 +69,6 @@ services: depends_on: network-contracts: condition: service_healthy - block-ingestor: container_name: 'ingestor' image: colony-cdapp-dev-env/block-ingestor:latest @@ -49,7 +81,22 @@ services: condition: service_healthy amplify: condition: service_healthy - + proxy-block-ingestor: + image: colony-cdapp-dev-env/proxy-block-ingestor:latest + volumes: + - 'amplify-mock-data:/colonyCDapp/amplify/mock-data' + - /var/run/docker.sock:/var/run/docker.sock # Mount Docker socket + deploy: + replicas: 2 + ports: + - '10002-10003' + depends_on: + network-contracts-remote: + condition: service_healthy + network-contracts-remote-2: + condition: service_healthy + amplify: + condition: service_healthy amplify: container_name: 'amplify' image: colony-cdapp-dev-env/amplify:latest @@ -73,7 +120,6 @@ services: test: ['CMD', 'curl', '-f', 'http://localhost:9200'] interval: 5s retries: 1000 - auth-proxy: container_name: 'auth' image: colony-cdapp-dev-env/auth-proxy:latest @@ -82,7 +128,6 @@ services: depends_on: amplify: condition: service_healthy - network-files: container_name: 'network-files' image: colony-cdapp-dev-env/base:latest @@ -95,6 +140,21 @@ services: network-contracts: condition: service_healthy + wormhole-relayer: + container_name: 'wormhole-relayer' + image: colony-cdapp-dev-env/network-wormhole-relayer:latest + volumes: + - '/var/run/docker.sock:/var/run/docker.sock' + ports: + - '3007:3001' + depends_on: + network-contracts: + condition: service_healthy + network-contracts-remote: + condition: service_healthy + network-contracts-remote-2: + condition: service_healthy + volumes: amplify-backend: amplify-mock-data: diff --git a/docker/colony-cdapp-dev-env-proxy-block-ingestor b/docker/colony-cdapp-dev-env-proxy-block-ingestor new file mode 100644 index 00000000000..c8a2e224de4 --- /dev/null +++ b/docker/colony-cdapp-dev-env-proxy-block-ingestor @@ -0,0 +1,57 @@ +FROM colony-cdapp-dev-env/base:latest + +# @TODO maybe add a PROXY_BLOCK_INGESTOR_HASH and fallback to BLOCK_INGESTOR_HASH +ENV BLOCK_INGESTOR_HASH=74320716b5248fad31b1ad90ed79acf3f3d23789 + +ENV CHAIN_RPC_ENDPOINTS='["http://network-contracts-remote:8545", "http://network-contracts-remote-2:8545"]' +ENV STATS_PORTS='["10002", "10003"]' + +# Declare volumes to set up metadata +VOLUME [ "/colonyCDapp/amplify/mock-data" ] + +# Add dependencies from the host +# Note: these are listed individually so that if they change, they won't affect +# the build of the other images +ADD docker/files/proxy-block-ingestor/run.sh.base /colonyCDappBackend/run.sh + +WORKDIR /colonyCDappBackend + +# Block Ingestor +# + +# Clone block ingestor repo +RUN git clone https://github.com/JoinColony/block-ingestor.git +WORKDIR /colonyCDappBackend/block-ingestor + +RUN echo $BLOCK_INGESTOR_HASH +# Fetch the correct network repo commit/branch/tag +RUN git fetch origin $BLOCK_INGESTOR_HASH +RUN git checkout $BLOCK_INGESTOR_HASH + +# Add env file here (as opposed to at the start of the script), since we +# need to add it after the repo has been cloned, otherwise cloning will fail +ADD docker/files/proxy-block-ingestor/env.base /colonyCDappBackend/block-ingestor/.env + +# Temporarily mount the .env file from the root of this repo to pass the required magicbell env vars +# to the block ingestor. You must ensure these env vars exist in your local env file for this to work properly. +RUN --mount=type=bind,source=/.env,target=/tmpMount/.env grep -e MAGICBELL_API_KEY -e MAGICBELL_API_SECRET -e MAGICBELL_DEV_KEY /tmpMount/.env >> /colonyCDappBackend/block-ingestor/.env + +RUN npm i -g pnpm@9.5.0 + +# Install block ingestor dependencies +RUN pnpm install --frozen-lockfile + +# Compile JS files +RUN pnpm --filter @joincolony/proxy-chain run build + +WORKDIR /colonyCDappBackend + +# Open up ports to the docker image +# Block Ingestor Stats +EXPOSE 10002 10003 + +# Make the run script executable +RUN chmod +x ./run.sh + +# Battlecruiser Operational! +CMD [ "./run.sh" ] diff --git a/docker/files/block-ingestor/env.base b/docker/files/block-ingestor/env.base index 31174ae9fb9..7ecf71f6e68 100644 --- a/docker/files/block-ingestor/env.base +++ b/docker/files/block-ingestor/env.base @@ -10,3 +10,5 @@ AWS_APPSYNC_ENDPOINT=http://amplify:20002/graphql AWS_APPSYNC_KEY=da2-fakeApiId123456 NODE_ENV=development + +MULTI_CHAIN_BRIDGE_ENDPOINT=http://wormhole-relayer:3001/api diff --git a/docker/files/block-ingestor/run.sh.base b/docker/files/block-ingestor/run.sh.base index 0dbb49d4211..f3a9eb53c22 100644 --- a/docker/files/block-ingestor/run.sh.base +++ b/docker/files/block-ingestor/run.sh.base @@ -8,6 +8,6 @@ cd block-ingestor wget http://network-files:3006/etherrouter-address.json # Write to env file... -echo "CHAIN_NETWORK_CONTRACT=`jq -r .etherRouterAddress etherrouter-address.json`" >> .env +echo "CHAIN_NETWORK_CONTRACT=`jq -r .etherRouterAddress etherrouter-address.json`" >> apps/main-chain/.env -npm run start +pnpm --filter @joincolony/main-chain run start diff --git a/docker/files/network-remote/run.sh.base b/docker/files/network-remote/run.sh.base new file mode 100644 index 00000000000..06beccf9be2 --- /dev/null +++ b/docker/files/network-remote/run.sh.base @@ -0,0 +1,17 @@ +#!/bin/bash + +cd colonyNetwork + +# Ganache + +# Uncomment the line below if you need ganache to run in verbose mode +# sed -i 's/100000000000000000000" >\/dev\/null 2>&1/100000000000000000000" --verbose/g' scripts/start-blockchain-client.sh +# sed -i 's/--db $DBPATH/--db $DBPATH --server.host "0.0.0.0"/g' scripts/start-blockchain-client.sh +pnpm run start:blockchain:client + +# Colony Network Contracts + +npx hardhat compile +npx hardhat deploy-proxy-network --network development + +sleep infinity \ No newline at end of file diff --git a/docker/files/network-wormhole-relayer/run.sh.base b/docker/files/network-wormhole-relayer/run.sh.base new file mode 100644 index 00000000000..9180a2189f9 --- /dev/null +++ b/docker/files/network-wormhole-relayer/run.sh.base @@ -0,0 +1,48 @@ +#!/bin/bash +cd ./colonyNetwork/lib/wormhole/ && DOCKER_BUILDKIT=1 docker build --target node-export -f Dockerfile.proto -o type=local,dest=. . +cd ../.. && npx tsc --esModuleInterop --downlevelIteration ./scripts/mockGuardianSpy.ts + +cd ./lib/safe-contracts + +# This is the private key for the first account we create on ganache, so has ether to pay for gas fees +rm -rf ./deployments/custom +PK="0x0355596cdb5e5242ad082c4fe3f8bbe48c9dba843fe1f99dd8272f487e70efae" NODE_URL=http://network:8545 npx hardhat deploy --network custom + +rm -rf ./deployments/custom +PK="0x0355596cdb5e5242ad082c4fe3f8bbe48c9dba843fe1f99dd8272f487e70efae" NODE_URL=http://network-remote:8545 npx hardhat deploy --network custom + +rm -rf ./deployments/custom +PK="0x0355596cdb5e5242ad082c4fe3f8bbe48c9dba843fe1f99dd8272f487e70efae" NODE_URL=http://network-remote-2:8545 npx hardhat deploy --network custom + +cd ../../ + +echo "const wormhole = require("@certusone/wormhole-sdk"); + +module.exports = { + chains: { + [wormhole.CHAIN_ID_ARBITRUM_SEPOLIA]: { + endpoints: ["http://localhost:8545"], + colonyBridgeAddress: "0x633899227A3BC1f79de097149E1E3C8097c07b1a", + payForGas: true, + evmChainId: 265669100, + }, + [wormhole.CHAIN_ID_SEPOLIA]: { + endpoints: ["http://localhost:8546"], + colonyBridgeAddress: "0x161944B5601a7d3004E20d4Ca823F710838Ea1be", + payForGas: true, + evmChainId: 265669101, + }, + [wormhole.CHAIN_ID_OPTIMISM_SEPOLIA]: { + endpoints: ["http://localhost:8547"], + colonyBridgeAddress: "0x161944B5601a7d3004E20d4Ca823F710838Ea1be", + payForGas: false, + evmChainId: 265669102, + }, + } + }, +}; +" > ./packages/wormhole-relayer/config.js + +node -e 'require("./scripts/setup-bridging-contracts.js").setupBridging("http://network:8545", ["http://network-remote:8545", "http://network-remote-2:8545"], false)' + +sleep infinity \ No newline at end of file diff --git a/docker/files/network/run.sh.base b/docker/files/network/run.sh.base index a831289454c..ea421a39166 100644 --- a/docker/files/network/run.sh.base +++ b/docker/files/network/run.sh.base @@ -7,7 +7,7 @@ cd colonyNetwork # Uncomment the line below if you need ganache to run in verbose mode # sed -i 's/100000000000000000000" >\/dev\/null 2>&1/100000000000000000000" --verbose/g' scripts/start-blockchain-client.sh # sed -i 's/--db $DBPATH/--db $DBPATH --server.host "0.0.0.0"/g' scripts/start-blockchain-client.sh -pnpm run start:blockchain:client & +pnpm run start:blockchain:client # Colony Network Contracts diff --git a/docker/files/proxy-block-ingestor/env.base b/docker/files/proxy-block-ingestor/env.base new file mode 100644 index 00000000000..b835488a021 --- /dev/null +++ b/docker/files/proxy-block-ingestor/env.base @@ -0,0 +1,13 @@ +VERBOSE_OUTPUT=false + +# This variable is used by the block ingestor, but for local dev it +# is automatically populated. +# CHAIN_NETWORK_CONTRACT= +# CHAIN_RPC_ENDPOINT= +# STATS_PORT= +AWS_APPSYNC_ENDPOINT=http://amplify:20002/graphql +AWS_APPSYNC_KEY=da2-fakeApiId123456 + +NODE_ENV=development + +MULTI_CHAIN_BRIDGE_ENDPOINT=http://wormhole-relayer:3001/api diff --git a/docker/files/proxy-block-ingestor/run.sh.base b/docker/files/proxy-block-ingestor/run.sh.base new file mode 100644 index 00000000000..13a79613296 --- /dev/null +++ b/docker/files/proxy-block-ingestor/run.sh.base @@ -0,0 +1,41 @@ +#!/bin/bash + +# Block Ingestor + +cd block-ingestor + +echo "DEBUG: Starting script" + +CONTAINER_REPLICA_NUMBER=$(curl --unix-socket /var/run/docker.sock -s "http://localhost/containers/$HOSTNAME/json" | jq -r '.Config.Labels["com.docker.compose.container-number"]') + +echo "Running proxy-block-ingestor replica $CONTAINER_REPLICA_NUMBER" + +# If the label is missing or empty, you can set a default value +if [ -z "$CONTAINER_REPLICA_NUMBER" ]; then + INDEX="0" +else + INDEX=$((CONTAINER_REPLICA_NUMBER - 1)) +fi + +echo "Used contract address: $CONTRACT_ADDRESS" + +CHAIN_RPC_ENDPOINTS_ARRAY=($(echo "$CHAIN_RPC_ENDPOINTS" | jq -r '.[]')) +CHAIN_RPC_ENDPOINT=${CHAIN_RPC_ENDPOINTS_ARRAY[$INDEX]} + +echo "Used chain RPC endpoint: $CHAIN_RPC_ENDPOINT" + +STATS_PORTS_ARRAY=($(echo "$STATS_PORTS" | jq -r '.[]')) +STATS_PORT=${STATS_PORTS_ARRAY[$INDEX]} + +echo "Used stats port: $STATS_PORT" + +# Get etherrouter-address +wget http://network-files:3006/etherrouter-address.json + +# Write to env file... +echo "CHAIN_NETWORK_CONTRACT=`jq -r .etherRouterAddress etherrouter-address.json`" >> apps/proxy-chain/.env +echo "CHAIN_RPC_ENDPOINT=$CHAIN_RPC_ENDPOINT" >> apps/proxy-chain/.env +echo "STATS_PORT=$STATS_PORT" >> apps/proxy-chain/.env + +# @TODO change to @joincolony/proxy-chain +pnpm --filter @joincolony/proxy-chain run start diff --git a/flake.nix b/flake.nix index 8523bf19df1..c82673a4742 100644 --- a/flake.nix +++ b/flake.nix @@ -8,16 +8,12 @@ outputs = { self, - nixpkgs_node + nixpkgs_node, }: { devShell.x86_64-linux = with nixpkgs_node.legacyPackages.x86_64-linux; mkShell { buildInputs = [nodejs_20 zsh]; - shellHook = '' - if [ -n "$SHELL" ]; then - exec $SHELL - fi - ''; + shellHook = "exec zsh"; }; }; } diff --git a/package-lock.json b/package-lock.json index b4d6a3b87d9..cb358fea6b3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,10 +11,10 @@ "dependencies": { "@apollo/client": "3.7.14", "@colony/abis": "^1.6.0", - "@colony/colony-js": "^8.0.0-next.0", - "@colony/events": "^4.0.0-next.0", + "@colony/colony-js": "^8.1.0", + "@colony/events": "^4.0.0-next.1", "@colony/redux-promise-listener": "^1.2.0", - "@colony/sdk": "^3.0.0-next.2", + "@colony/sdk": "^3.1.1", "@colony/unicode-confusables-noascii": "^0.1.2", "@hookform/resolvers": "^2.9.10", "@magicbell/react-headless": "^5.0.1", @@ -158,6 +158,7 @@ "@typescript-eslint/eslint-plugin": "^6.20.0", "@typescript-eslint/parser": "^6.20.0", "@vitejs/plugin-react-swc": "^3.6.0", + "@wagmi/cli": "^2.1.17", "autoprefixer": "^10.4.16", "compare-versions": "^6.1.0", "cross-fetch": "^4.0.0", @@ -226,6 +227,12 @@ "dev": true, "license": "MIT" }, + "node_modules/@adraffy/ens-normalize": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.11.0.tgz", + "integrity": "sha512-/3DDPKHqqIqxUULp8yP4zODUY1i+2xvVWsv8A79xGWdCAG+8sb0hRh0Rk2QyOJUnnbyPUAZYcpBuRe3nS2OIUg==", + "dev": true + }, "node_modules/@alloc/quick-lru": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", @@ -2746,31 +2753,31 @@ } }, "node_modules/@colony/colony-js": { - "version": "8.0.0-next.0", - "resolved": "https://registry.npmjs.org/@colony/colony-js/-/colony-js-8.0.0-next.0.tgz", - "integrity": "sha512-F46ElOrzhD/ktfYCQDf1ieNeBbIyWiDPd6cuHBjQ9yEU1iEo4pJfNt3J/57hZkwU+dY6wYqnU3NT7WCeu45u0A==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@colony/colony-js/-/colony-js-8.1.0.tgz", + "integrity": "sha512-GYMVTS4GtS4w8IAKWhjMn8k3yjAvFmwndMk6Q9lFGiUJclB+YtMPpwfXs9D+U1vVwMG2ybf9LCF0K2JVLFZqtQ==", "license": "GPL-3.0-only", "dependencies": { - "@colony/core": "^3.0.0-next.0", - "@colony/events": "^4.0.0-next.0", - "@colony/tokens": "^1.0.0-next.0" + "@colony/core": "3.1.0", + "@colony/events": "4.1.0", + "@colony/tokens": "1.1.0" }, "engines": { - "node": "^16 || ^18 || ^20", - "pnpm": "^8" + "node": "^18 || ^20 || ^22", + "pnpm": "^10" }, "peerDependencies": { "ethers": "^5.1.3" } }, "node_modules/@colony/core": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@colony/core/-/core-3.0.0.tgz", - "integrity": "sha512-NtjA4HtMl1uA9jrjcRpMItJVotJsFqgOngZ7Z7l/8S/kRWA1yMY17VsjkohEkRvnyAeoBgD0mdtTEZwGeqXvng==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@colony/core/-/core-3.1.0.tgz", + "integrity": "sha512-VcoXSFd6FGeL4yNAAnBS3gPmVhV4uiiJp5gKIMGAQf0Wt1iqM0k+1m/BWc+ydP58Rx7A2eOCaE8TghtJYiXsFQ==", "license": "GPL-3.0-only", "engines": { - "node": "^16 || ^18 || ^20", - "pnpm": "^8" + "node": "^18 || ^20 || ^22", + "pnpm": "^10" }, "peerDependencies": { "ethers": "^5.1.3" @@ -2793,18 +2800,18 @@ } }, "node_modules/@colony/events": { - "version": "4.0.0-next.0", - "resolved": "https://registry.npmjs.org/@colony/events/-/events-4.0.0-next.0.tgz", - "integrity": "sha512-u89fmH6RlQWW8IeejfkZITsdptCm8zGx1a9qJ6F/p4ILY+EBnWdYkSdTZXITACU1r6sNSm4GkochTIjAy0R0ag==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@colony/events/-/events-4.1.0.tgz", + "integrity": "sha512-9bIQUSIo/7o817ZpQ0H86Ar3Fxwdj05vfW0Jc3sUU6bhDC7c9MT7DHTRv1uN+kEcZVtJz4KabWcIUARZrq0AOA==", "license": "GPL-3.0-only", "dependencies": { - "@colony/core": "^3.0.0-next.0", + "@colony/core": "3.1.0", "fetch-retry": "^5.0.4", "typia": "^3.8.3" }, "engines": { - "node": "^16 || ^18 || ^20", - "pnpm": "^8" + "node": "^18 || ^20 || ^22", + "pnpm": "^10" }, "peerDependencies": { "ethers": "^5.1.3" @@ -2820,14 +2827,14 @@ } }, "node_modules/@colony/sdk": { - "version": "3.0.0-next.2", - "resolved": "https://registry.npmjs.org/@colony/sdk/-/sdk-3.0.0-next.2.tgz", - "integrity": "sha512-5FppWGsN/MVEns4waMvnMNriJD5wq0xh/u0ivyVs7EDMNVoUTIFdtIvph9cSXgvLgWgi8SzwRw2Nrm7D16q/Kw==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@colony/sdk/-/sdk-3.1.1.tgz", + "integrity": "sha512-vo2fzAaBe6yV4FVY+OuyBYvxlpSybVRBwL94WLqNv6gqLnvVQbk1irPJfBbc+y6uBqjUnOrLkKyrpKMAALgx2A==", "license": "GPL-3.0-only", "dependencies": { - "@colony/core": "^3.0.0-next.0", - "@colony/events": "^4.0.0-next.0", - "@colony/tokens": "^1.0.0-next.0", + "@colony/core": "^3.0.0", + "@colony/events": "^4.0.0", + "@colony/tokens": "^1.0.0", "@ethersproject/abstract-provider": "^5.7.0", "abitype": "^1.0.6" }, @@ -2840,13 +2847,13 @@ } }, "node_modules/@colony/tokens": { - "version": "1.0.0-next.0", - "resolved": "https://registry.npmjs.org/@colony/tokens/-/tokens-1.0.0-next.0.tgz", - "integrity": "sha512-j5YBk4nOXwDpYd1LnRyGOLVcRgfvkBgb85TI2aXKLwjRhB2V9f4Jdsy5ooqr7R9cQivYeCvfnEs5euPiHAhgqg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@colony/tokens/-/tokens-1.1.0.tgz", + "integrity": "sha512-gIEX0fMbJv3HXWucqaS+beIPJf9YGz5GY0npy3+mTdCCxNkoQM1m9LT0gjP6T8NyaDxDvju3URDtB083qPLNaA==", "license": "GPL-3.0-only", "engines": { - "node": "^16 || ^18 || ^20", - "pnpm": "^8" + "node": "^18 || ^20 || ^22", + "pnpm": "^10" }, "peerDependencies": { "ethers": "^5.1.3" @@ -7299,11 +7306,27 @@ "react": ">= 16.14.0 < 19.0.0" } }, + "node_modules/@noble/curves": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.6.0.tgz", + "integrity": "sha512-TlaHRXDehJuRNR9TfZDNQ45mMEd5dwUwmicsafcIX4SsNiqnCHKjE/1alYPd/lDRVhxdhUAlv8uEhMCI5zjIJQ==", + "dev": true, + "dependencies": { + "@noble/hashes": "1.5.0" + }, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/@noble/hashes": { - "version": "1.3.2", - "license": "MIT", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.5.0.tgz", + "integrity": "sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA==", "engines": { - "node": ">= 16" + "node": "^14.21.3 || >=16" }, "funding": { "url": "https://paulmillr.com/funding/" @@ -7926,6 +7949,42 @@ "win32" ] }, + "node_modules/@scure/base": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", + "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", + "dev": true, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.5.0.tgz", + "integrity": "sha512-8EnFYkqEQdnkuGBVpCzKxyIwDCBLDVj3oiX0EKUFre/tOjL/Hqba1D6n/8RcmaQy4f95qQFrO2A8Sr6ybh4NRw==", + "dev": true, + "dependencies": { + "@noble/curves": "~1.6.0", + "@noble/hashes": "~1.5.0", + "@scure/base": "~1.1.7" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip39": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.4.0.tgz", + "integrity": "sha512-BEEm6p8IueV/ZTfQLp/0vhw4NPnT9oWf5+28nvmeUICjP99f4vr2d+qc7AVGDDtwRep6ifR43Yed9ERVmiITzw==", + "dev": true, + "dependencies": { + "@noble/hashes": "~1.5.0", + "@scure/base": "~1.1.8" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/@sideway/address": { "version": "4.1.4", "license": "BSD-3-Clause", @@ -14431,6 +14490,507 @@ "dev": true, "license": "MIT" }, + "node_modules/@wagmi/cli": { + "version": "2.1.17", + "resolved": "https://registry.npmjs.org/@wagmi/cli/-/cli-2.1.17.tgz", + "integrity": "sha512-xnXxFwXkexUhkAevgUBiuYdKpwCpM+V5sdwSaHkjV3RG6pTKFBHywdxj+k6OTtDH9ygb7Xh+Rf4c6q6nJjxpbA==", + "dev": true, + "dependencies": { + "abitype": "^1.0.4", + "bundle-require": "^4.0.2", + "cac": "^6.7.14", + "change-case": "^5.4.4", + "chokidar": "4.0.1", + "dedent": "^0.7.0", + "dotenv": "^16.3.1", + "dotenv-expand": "^10.0.0", + "esbuild": "^0.19.0", + "execa": "^8.0.1", + "fdir": "^6.1.1", + "find-up": "^6.3.0", + "fs-extra": "^11.2.0", + "ora": "^6.3.1", + "pathe": "^1.1.2", + "picocolors": "^1.0.0", + "picomatch": "^3.0.0", + "prettier": "^3.0.3", + "viem": "2.x", + "zod": "^3.22.2" + }, + "bin": { + "wagmi": "dist/esm/cli.js" + }, + "funding": { + "url": "https://github.com/sponsors/wevm" + }, + "peerDependencies": { + "typescript": ">=5.0.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@wagmi/cli/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@wagmi/cli/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@wagmi/cli/node_modules/change-case": { + "version": "5.4.4", + "resolved": "https://registry.npmjs.org/change-case/-/change-case-5.4.4.tgz", + "integrity": "sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==", + "dev": true + }, + "node_modules/@wagmi/cli/node_modules/chokidar": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.1.tgz", + "integrity": "sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==", + "dev": true, + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@wagmi/cli/node_modules/cli-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", + "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", + "dev": true, + "dependencies": { + "restore-cursor": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@wagmi/cli/node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/@wagmi/cli/node_modules/fdir": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.2.tgz", + "integrity": "sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ==", + "dev": true, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/@wagmi/cli/node_modules/find-up": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", + "integrity": "sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==", + "dev": true, + "dependencies": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@wagmi/cli/node_modules/fs-extra": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/@wagmi/cli/node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "dev": true, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@wagmi/cli/node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "dev": true, + "engines": { + "node": ">=16.17.0" + } + }, + "node_modules/@wagmi/cli/node_modules/is-interactive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", + "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@wagmi/cli/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@wagmi/cli/node_modules/is-unicode-supported": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@wagmi/cli/node_modules/locate-path": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", + "integrity": "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==", + "dev": true, + "dependencies": { + "p-locate": "^6.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@wagmi/cli/node_modules/log-symbols": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz", + "integrity": "sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==", + "dev": true, + "dependencies": { + "chalk": "^5.0.0", + "is-unicode-supported": "^1.1.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@wagmi/cli/node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@wagmi/cli/node_modules/npm-run-path": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", + "dev": true, + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@wagmi/cli/node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@wagmi/cli/node_modules/ora": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-6.3.1.tgz", + "integrity": "sha512-ERAyNnZOfqM+Ao3RAvIXkYh5joP220yf59gVe2X/cI6SiCxIdi4c9HZKZD8R6q/RDXEje1THBju6iExiSsgJaQ==", + "dev": true, + "dependencies": { + "chalk": "^5.0.0", + "cli-cursor": "^4.0.0", + "cli-spinners": "^2.6.1", + "is-interactive": "^2.0.0", + "is-unicode-supported": "^1.1.0", + "log-symbols": "^5.1.0", + "stdin-discarder": "^0.1.0", + "strip-ansi": "^7.0.1", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@wagmi/cli/node_modules/p-limit": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", + "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@wagmi/cli/node_modules/p-locate": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz", + "integrity": "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==", + "dev": true, + "dependencies": { + "p-limit": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@wagmi/cli/node_modules/path-exists": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz", + "integrity": "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/@wagmi/cli/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@wagmi/cli/node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true + }, + "node_modules/@wagmi/cli/node_modules/picomatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-3.0.1.tgz", + "integrity": "sha512-I3EurrIQMlRc9IaAZnqRR044Phh2DXY+55o7uJ0V+hYZAcQYSuFWsc9q5PvyDHUSCe1Qxn/iBz+78s86zWnGag==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/@wagmi/cli/node_modules/readdirp": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.2.tgz", + "integrity": "sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==", + "dev": true, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@wagmi/cli/node_modules/restore-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", + "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@wagmi/cli/node_modules/restore-cursor/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@wagmi/cli/node_modules/restore-cursor/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@wagmi/cli/node_modules/restore-cursor/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/@wagmi/cli/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@wagmi/cli/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@wagmi/cli/node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@wagmi/cli/node_modules/yocto-queue": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz", + "integrity": "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==", + "dev": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@web3-onboard/common": { "version": "2.3.3", "license": "MIT", @@ -16581,8 +17141,7 @@ "node_modules/array-timsort": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/array-timsort/-/array-timsort-1.0.3.tgz", - "integrity": "sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==", - "license": "MIT" + "integrity": "sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==" }, "node_modules/array-union": { "version": "2.1.0", @@ -18242,6 +18801,21 @@ "dev": true, "license": "MIT" }, + "node_modules/bundle-require": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/bundle-require/-/bundle-require-4.2.1.tgz", + "integrity": "sha512-7Q/6vkyYAwOmQNRw75x+4yRtZCZJXUDmHHlFdkiV0wgv/reNjtJwpu1jPJ0w2kbEpIM0uoKI3S4/f39dU7AjSA==", + "dev": true, + "dependencies": { + "load-tsconfig": "^0.2.3" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "peerDependencies": { + "esbuild": ">=0.17" + } + }, "node_modules/busboy": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", @@ -18271,6 +18845,15 @@ "node": ">= 0.8" } }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/cache-base": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", @@ -19466,8 +20049,7 @@ "node_modules/comment-json/node_modules/core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "license": "MIT" + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, "node_modules/comment-parser": { "version": "1.4.1", @@ -21630,7 +22212,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/drange/-/drange-1.1.1.tgz", "integrity": "sha512-pYxfDYpued//QpnLIm4Avk7rsNtAtQkUES2cwAYSvD/wd2pKD71gN2Ebj3e7klzXwjocvE8c5vx/1fxwpqmSxA==", - "license": "MIT", "engines": { "node": ">=4" } @@ -22319,10 +22900,11 @@ } }, "node_modules/esbuild": { - "version": "0.18.20", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", + "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", "dev": true, "hasInstallScript": true, - "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, @@ -22330,28 +22912,29 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/android-arm": "0.18.20", - "@esbuild/android-arm64": "0.18.20", - "@esbuild/android-x64": "0.18.20", - "@esbuild/darwin-arm64": "0.18.20", - "@esbuild/darwin-x64": "0.18.20", - "@esbuild/freebsd-arm64": "0.18.20", - "@esbuild/freebsd-x64": "0.18.20", - "@esbuild/linux-arm": "0.18.20", - "@esbuild/linux-arm64": "0.18.20", - "@esbuild/linux-ia32": "0.18.20", - "@esbuild/linux-loong64": "0.18.20", - "@esbuild/linux-mips64el": "0.18.20", - "@esbuild/linux-ppc64": "0.18.20", - "@esbuild/linux-riscv64": "0.18.20", - "@esbuild/linux-s390x": "0.18.20", - "@esbuild/linux-x64": "0.18.20", - "@esbuild/netbsd-x64": "0.18.20", - "@esbuild/openbsd-x64": "0.18.20", - "@esbuild/sunos-x64": "0.18.20", - "@esbuild/win32-arm64": "0.18.20", - "@esbuild/win32-ia32": "0.18.20", - "@esbuild/win32-x64": "0.18.20" + "@esbuild/aix-ppc64": "0.19.12", + "@esbuild/android-arm": "0.19.12", + "@esbuild/android-arm64": "0.19.12", + "@esbuild/android-x64": "0.19.12", + "@esbuild/darwin-arm64": "0.19.12", + "@esbuild/darwin-x64": "0.19.12", + "@esbuild/freebsd-arm64": "0.19.12", + "@esbuild/freebsd-x64": "0.19.12", + "@esbuild/linux-arm": "0.19.12", + "@esbuild/linux-arm64": "0.19.12", + "@esbuild/linux-ia32": "0.19.12", + "@esbuild/linux-loong64": "0.19.12", + "@esbuild/linux-mips64el": "0.19.12", + "@esbuild/linux-ppc64": "0.19.12", + "@esbuild/linux-riscv64": "0.19.12", + "@esbuild/linux-s390x": "0.19.12", + "@esbuild/linux-x64": "0.19.12", + "@esbuild/netbsd-x64": "0.19.12", + "@esbuild/openbsd-x64": "0.19.12", + "@esbuild/sunos-x64": "0.19.12", + "@esbuild/win32-arm64": "0.19.12", + "@esbuild/win32-ia32": "0.19.12", + "@esbuild/win32-x64": "0.19.12" } }, "node_modules/esbuild-plugin-alias": { @@ -22374,15 +22957,30 @@ "esbuild": ">=0.12 <1" } }, + "node_modules/esbuild/node_modules/@esbuild/aix-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", + "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/esbuild/node_modules/@esbuild/android-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", - "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", + "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", "cpu": [ "arm" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "android" @@ -22392,14 +22990,13 @@ } }, "node_modules/esbuild/node_modules/@esbuild/android-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", - "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", + "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "android" @@ -22409,14 +23006,13 @@ } }, "node_modules/esbuild/node_modules/@esbuild/android-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", - "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", + "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "android" @@ -22426,14 +23022,13 @@ } }, "node_modules/esbuild/node_modules/@esbuild/darwin-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", - "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", + "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "darwin" @@ -22443,14 +23038,13 @@ } }, "node_modules/esbuild/node_modules/@esbuild/darwin-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", - "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", + "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "darwin" @@ -22460,14 +23054,13 @@ } }, "node_modules/esbuild/node_modules/@esbuild/freebsd-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", - "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", + "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "freebsd" @@ -22477,14 +23070,13 @@ } }, "node_modules/esbuild/node_modules/@esbuild/freebsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", - "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", + "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "freebsd" @@ -22494,14 +23086,13 @@ } }, "node_modules/esbuild/node_modules/@esbuild/linux-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", - "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", + "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", "cpu": [ "arm" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -22511,14 +23102,13 @@ } }, "node_modules/esbuild/node_modules/@esbuild/linux-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", - "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", + "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -22528,14 +23118,13 @@ } }, "node_modules/esbuild/node_modules/@esbuild/linux-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", - "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", + "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", "cpu": [ "ia32" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -22545,14 +23134,13 @@ } }, "node_modules/esbuild/node_modules/@esbuild/linux-loong64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", - "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", + "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", "cpu": [ "loong64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -22562,14 +23150,13 @@ } }, "node_modules/esbuild/node_modules/@esbuild/linux-mips64el": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", - "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", + "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", "cpu": [ "mips64el" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -22579,14 +23166,13 @@ } }, "node_modules/esbuild/node_modules/@esbuild/linux-ppc64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", - "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", + "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", "cpu": [ "ppc64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -22596,14 +23182,13 @@ } }, "node_modules/esbuild/node_modules/@esbuild/linux-riscv64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", - "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", + "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", "cpu": [ "riscv64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -22613,14 +23198,13 @@ } }, "node_modules/esbuild/node_modules/@esbuild/linux-s390x": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", - "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", + "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", "cpu": [ "s390x" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -22630,14 +23214,13 @@ } }, "node_modules/esbuild/node_modules/@esbuild/linux-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", - "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", + "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "linux" @@ -22647,14 +23230,13 @@ } }, "node_modules/esbuild/node_modules/@esbuild/netbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", - "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", + "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "netbsd" @@ -22664,14 +23246,13 @@ } }, "node_modules/esbuild/node_modules/@esbuild/openbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", - "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", + "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "openbsd" @@ -22681,14 +23262,13 @@ } }, "node_modules/esbuild/node_modules/@esbuild/sunos-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", - "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", + "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "sunos" @@ -22698,14 +23278,13 @@ } }, "node_modules/esbuild/node_modules/@esbuild/win32-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", - "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", + "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "win32" @@ -22715,14 +23294,13 @@ } }, "node_modules/esbuild/node_modules/@esbuild/win32-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", - "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", + "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", "cpu": [ "ia32" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "win32" @@ -22732,14 +23310,13 @@ } }, "node_modules/esbuild/node_modules/@esbuild/win32-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", - "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", + "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", "optional": true, "os": [ "win32" @@ -33046,7 +33623,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-own-prop/-/has-own-prop-2.0.0.tgz", "integrity": "sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==", - "license": "MIT", "engines": { "node": ">=8" } @@ -36989,6 +37565,21 @@ "ws": "*" } }, + "node_modules/isows": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/isows/-/isows-1.0.6.tgz", + "integrity": "sha512-lPHCayd40oW98/I0uvgaHKWCSvkzY27LjWLbtzOm64yQ+G3Q5npjjbdppU65iZXkK1Zt+kH9pfegli0AYfwYYw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/wevm" + } + ], + "peerDependencies": { + "ws": "*" + } + }, "node_modules/isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", @@ -41696,6 +42287,15 @@ "node": ">=4" } }, + "node_modules/load-tsconfig": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/load-tsconfig/-/load-tsconfig-0.2.5.tgz", + "integrity": "sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -50257,6 +50857,32 @@ "node": ">= 0.8" } }, + "node_modules/stdin-discarder": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.1.0.tgz", + "integrity": "sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==", + "dev": true, + "dependencies": { + "bl": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stdin-discarder/node_modules/bl": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", + "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", + "dev": true, + "dependencies": { + "buffer": "^6.0.3", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, "node_modules/stealthy-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", @@ -52756,7 +53382,6 @@ "version": "3.8.9", "resolved": "https://registry.npmjs.org/typia/-/typia-3.8.9.tgz", "integrity": "sha512-yvQ67nhtzme+rnEUZfSOIgxBOHYrrQ3WBU1J4SrAhI3ntBhSelYwGiJkeaCvqchzK6O1RoIs3kCBS4XHIlp2NA==", - "license": "MIT", "dependencies": { "commander": "^10.0.0", "comment-json": "^4.2.3", @@ -52774,7 +53399,6 @@ "version": "10.0.1", "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", - "license": "MIT", "engines": { "node": ">=14" } @@ -52783,7 +53407,6 @@ "version": "0.5.3", "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.5.3.tgz", "integrity": "sha512-U+5l2KrcMNOUPYvazA3h5ekF80FHTUG+87SEAmHZmolh1M+i/WyTCxVzmi+tidIa1tM4BSe8g2Y/D3loWDjj+w==", - "license": "MIT", "dependencies": { "drange": "^1.0.2", "ret": "^0.2.0" @@ -52796,7 +53419,6 @@ "version": "0.2.2", "resolved": "https://registry.npmjs.org/ret/-/ret-0.2.2.tgz", "integrity": "sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ==", - "license": "MIT", "engines": { "node": ">=4" } @@ -53843,6 +54465,79 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/viem": { + "version": "2.21.42", + "resolved": "https://registry.npmjs.org/viem/-/viem-2.21.42.tgz", + "integrity": "sha512-PWBb3iaVFAzLWUaNrYLweOGwHPTQid5J4HfERh/WjJgixbAFwb4ZEc1leRfygvgJPtqUGdYNapvw9b2k2FoCAg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/wevm" + } + ], + "dependencies": { + "@adraffy/ens-normalize": "1.11.0", + "@noble/curves": "1.6.0", + "@noble/hashes": "1.5.0", + "@scure/bip32": "1.5.0", + "@scure/bip39": "1.4.0", + "abitype": "1.0.6", + "isows": "1.0.6", + "webauthn-p256": "0.0.10", + "ws": "8.18.0" + }, + "peerDependencies": { + "typescript": ">=5.0.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/viem/node_modules/abitype": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/abitype/-/abitype-1.0.6.tgz", + "integrity": "sha512-MMSqYh4+C/aVqI2RQaWqbvI4Kxo5cQV40WQ4QFtDnNzCkqChm8MuENhElmynZlO0qUy/ObkEUaXtKqYnx1Kp3A==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/wevm" + }, + "peerDependencies": { + "typescript": ">=5.0.4", + "zod": "^3 >=3.22.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + }, + "zod": { + "optional": true + } + } + }, + "node_modules/viem/node_modules/ws": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/vite": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.1.tgz", @@ -54342,6 +55037,22 @@ "resolved": "https://registry.npmjs.org/web-vitals/-/web-vitals-4.2.0.tgz", "integrity": "sha512-ohj72kbtVWCpKYMxcbJ+xaOBV3En76hW47j52dG+tEGG36LZQgfFw5yHl9xyjmosy3XUMn8d/GBUAy4YPM839w==" }, + "node_modules/webauthn-p256": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/webauthn-p256/-/webauthn-p256-0.0.10.tgz", + "integrity": "sha512-EeYD+gmIT80YkSIDb2iWq0lq2zbHo1CxHlQTeJ+KkCILWpVy3zASH3ByD4bopzfk0uCwXxLqKGLqp2W4O28VFA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/wevm" + } + ], + "dependencies": { + "@noble/curves": "^1.4.0", + "@noble/hashes": "^1.4.0" + } + }, "node_modules/webcrypto": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/webcrypto/-/webcrypto-0.1.1.tgz", @@ -54888,6 +55599,15 @@ "zen-observable": "0.8.15" } }, + "node_modules/zod": { + "version": "3.23.8", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz", + "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==", + "devOptional": true, + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, "node_modules/zustand": { "version": "4.5.5", "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.5.5.tgz", diff --git a/package.json b/package.json index 0e1ac7f8486..11e436583ce 100644 --- a/package.json +++ b/package.json @@ -6,15 +6,18 @@ "scripts": { "docker:build:base": "DOCKER_BUILDKIT=1 docker build --build-arg AMAZON_ARCH_FLAG=$(bash scripts/amazon-arch-flag.sh) --tag colony-cdapp-dev-env/base --file ./docker/colony-cdapp-dev-env-base .", "docker:build:network": "DOCKER_BUILDKIT=1 docker build --tag colony-cdapp-dev-env/network --file ./docker/colony-cdapp-dev-env-network .", + "docker:build:network-remote": "DOCKER_BUILDKIT=1 docker build --tag colony-cdapp-dev-env/network-remote --file ./docker/colony-cdapp-dev-env-network-remote .", + "docker:build:network-wormhole-relayer": "DOCKER_BUILDKIT=1 docker build --tag colony-cdapp-dev-env/network-wormhole-relayer --file ./docker/colony-cdapp-dev-env-network-wormhole-relayer .", "docker:build:monitor": "DOCKER_BUILDKIT=1 docker build --tag colony-cdapp-dev-env/reputation-monitor --file ./docker/colony-cdapp-dev-env-reputation-monitor .", "docker:build:mocking": "DOCKER_BUILDKIT=1 docker build --tag colony-cdapp-dev-env/mocking --file ./docker/colony-cdapp-dev-env-mocking .", "docker:build:ingestor": "DOCKER_BUILDKIT=1 docker build --ulimit nofile=5000:5000 --tag colony-cdapp-dev-env/block-ingestor --file ./docker/colony-cdapp-dev-env-block-ingestor .", + "docker:build:proxy-ingestor": "DOCKER_BUILDKIT=1 docker build --ulimit nofile=5000:5000 --tag colony-cdapp-dev-env/proxy-block-ingestor --file ./docker/colony-cdapp-dev-env-proxy-block-ingestor .", "docker:build:amplify": "DOCKER_BUILDKIT=1 docker build --tag colony-cdapp-dev-env/amplify --file ./docker/colony-cdapp-dev-env-amplify .", "docker:build:safe": "DOCKER_BUILDKIT=1 docker build --tag colony-cdapp-dev-env/safe --file ./docker/colony-cdapp-dev-env-safe .", "docker:build:auth": "DOCKER_BUILDKIT=1 docker build --tag colony-cdapp-dev-env/auth-proxy --file ./docker/colony-cdapp-dev-env-auth-proxy .", "docker:build:bridge": "DOCKER_BUILDKIT=1 docker build --tag colony-cdapp-dev-env/mocking --file ./docker/colony-cdapp-dev-env-mocking .", - "docker:build:core": "npm run docker:build:base && npm run docker:build:network && npm run docker:build:monitor && npm run docker:build:ingestor && npm run docker:build:amplify && npm run docker:build:auth", - "docker:build:all": "npm run docker:build:base && npm run docker:build:network && npm run docker:build:monitor && npm run docker:build:ingestor && npm run docker:build:amplify && npm run docker:build:auth && npm run docker:build:mocking", + "docker:build:core": "npm run docker:build:base && npm run docker:build:network && npm run docker:build:network-remote && npm run docker:build:network-wormhole-relayer && npm run docker:build:monitor && npm run docker:build:mocking && npm run docker:build:ingestor && npm run docker:build:proxy-ingestor && npm run docker:build:amplify && npm run docker:build:auth", + "docker:build:all": "npm run docker:build:base && npm run docker:build:network && npm run docker:build:network-remote && && npm run docker:build:network-wormhole-relayer && npm run docker:build:monitor && npm run docker:build:mocking && npm run docker:build:ingestor && npm run docker:build:proxy-ingestor && npm run docker:build:amplify && npm run docker:build:safe && npm run docker:build:auth", "docker:compose:core": "docker compose --file docker/colony-cdapp-dev-env-orchestration.yaml", "docker:compose:all": "docker compose --file docker/colony-cdapp-dev-env-orchestration-all.yaml", "dev": "npm run watch-amplify & npm run generate-notifications-dev-key && npm run docker:build:core && npm run docker:compose:core up -- --force-recreate -V", @@ -43,7 +46,8 @@ "e2e:install": "npx playwright install --with-deps", "e2e": "playwright test --project=chromium", "e2e:ui": "playwright test --ui", - "generate-notifications-dev-key": "node scripts/generate-local-notifications-key" + "generate-notifications-dev-key": "node scripts/generate-local-notifications-key", + "wagmi-generate": "wagmi generate" }, "repository": { "type": "git", @@ -97,6 +101,7 @@ "@typescript-eslint/eslint-plugin": "^6.20.0", "@typescript-eslint/parser": "^6.20.0", "@vitejs/plugin-react-swc": "^3.6.0", + "@wagmi/cli": "^2.1.17", "autoprefixer": "^10.4.16", "compare-versions": "^6.1.0", "cross-fetch": "^4.0.0", @@ -154,10 +159,10 @@ "dependencies": { "@apollo/client": "3.7.14", "@colony/abis": "^1.6.0", - "@colony/colony-js": "^8.0.0-next.0", - "@colony/events": "^4.0.0-next.0", + "@colony/colony-js": "^8.1.0", + "@colony/events": "^4.0.0-next.1", "@colony/redux-promise-listener": "^1.2.0", - "@colony/sdk": "^3.0.0-next.2", + "@colony/sdk": "^3.1.1", "@colony/unicode-confusables-noascii": "^0.1.2", "@hookform/resolvers": "^2.9.10", "@magicbell/react-headless": "^5.0.1", diff --git a/scripts/deploy-token-to-chain.js b/scripts/deploy-token-to-chain.js new file mode 100644 index 00000000000..77ec4ef703d --- /dev/null +++ b/scripts/deploy-token-to-chain.js @@ -0,0 +1,237 @@ +const { + abi: metaTxAbi, + bytecode: metaTxBytecode, +} = require('@colony/abis/versions/hmwss/MetaTxToken'); +const { providers, ContractFactory } = require('ethers'); +const readline = require('readline'); +const { graphqlRequest } = require('./utils/graphqlRequest'); + +const API_KEY = 'da2-fakeApiId123456'; +const GRAPHQL_URI = + process.env.AWS_APPSYNC_GRAPHQL_URL || 'http://localhost:20002/graphql'; + +const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout, +}); + +// Function to prompt for any input +function promptQuestion(question) { + return new Promise((resolve) => { + rl.question(`${question}: `, (answer) => { + resolve(answer.trim()); + }); + }); +} + +/* + * Queries + */ + +const getColony = /* GraphQL */ ` + query GetColony($id: ID!) { + getColony(id: $id) { + colonyAddress: id + nativeToken { + tokenAddress: id + name + symbol + decimals + avatar + thumbnail + type + } + } + } +`; + +const getProxyColony = /* GraphQL */ ` + query GetProxyColony($id: ID!) { + getProxyColony(id: $id) { + id + } + } +`; + +/* + * Mutations + */ +const createForeignToken = /* GraphQL */ ` + mutation CreateToken($input: CreateTokenInput!) { + createToken(input: $input) { + id + } + } +`; + +const graphqlRequestPreconfigured = async (queryOrMutation, variables) => + graphqlRequest(queryOrMutation, variables, GRAPHQL_URI, API_KEY); + +const TokenFactoryConfig = (() => { + let tokenFactory = null; + + const createTokenFactory = (abi, bytecode, rpcUrl) => { + // Initialize the foreign provider using the provided RPC URL + const foreignProvider = new providers.JsonRpcProvider(rpcUrl); + + // Get the signer from the provider + const foreignSigner = foreignProvider.getSigner(); + + // Create the contract factory using the signer and bytecode + return new ContractFactory(abi, bytecode, foreignSigner); + }; + + return { + getTokenFactory: (rpcUrl) => { + if (!tokenFactory) { + tokenFactory = createTokenFactory(metaTxAbi, metaTxBytecode, rpcUrl); + } + + return tokenFactory; + }, + }; +})(); + +const getDeployedColonyToChain = async (chainId, colonyAddress) => { + const colonyQuery = await graphqlRequestPreconfigured(getColony, { + id: colonyAddress, + }); + + if (colonyQuery?.errors) { + throw Error(JSON.stringify(colonyQuery?.errors)); + } + + const colony = colonyQuery?.data?.getColony; + + const proxyColonyQuery = await graphqlRequestPreconfigured(getProxyColony, { + id: `${colony.colonyAddress}_${chainId}`, + }); + + const hasErrors = !!proxyColonyQuery?.errors; + const isProxyColonyExisting = !!proxyColonyQuery?.data?.getProxyColony?.id; + + if (!hasErrors && isProxyColonyExisting) { + return colony; + } +}; + +const deployNativeTokenToChain = async ( + tokenFactory, + chainId, + colonyNativeToken, + colonyAddress, +) => { + try { + if (!colonyNativeToken) { + throw new Error( + `No native token setup for colony with address ${colonyAddress}.`, + ); + } + + const foreignToken = await tokenFactory.deploy( + colonyNativeToken.name, + colonyNativeToken.symbol, + colonyNativeToken.decimals, + ); + + await foreignToken.deployTransaction.wait(); + + const createForeignTokenMutationResult = await graphqlRequestPreconfigured( + createForeignToken, + { + input: { + id: foreignToken.address, + name: `${colonyNativeToken.name} ${chainId}`, + symbol: colonyNativeToken.symbol, + decimals: colonyNativeToken.decimals, + avatar: colonyNativeToken.avatar, + thumbnail: colonyNativeToken.thumbnail, + type: colonyNativeToken.type, + chainMetadata: { + chainId, + }, + }, + }, + ); + + if (createForeignTokenMutationResult.errors) { + throw new Error( + `Error creating token for ${chainId} and ${colonyAddress}: ${JSON.stringify(createForeignTokenMutationResult.errors)}`, + ); + } + + console.log( + `Proxy token with address ${foreignToken.address} successfully deployed for colony with address ${colonyAddress}.`, + ); + } catch (error) { + console.error( + `Error deploying proxy token for ${colonyAddress}: ${error.message}`, + ); + } +}; + +const getArgumentsFromConsole = async () => { + const foreignChainId = await promptQuestion( + 'Please provide the foreignChainId', + ); + + if (isNaN(foreignChainId) || Number.isInteger(foreignChainId)) { + console.error( + 'Error: The foreignChainId cannot be empty and must be a number.', + ); + process.exit(1); + } + + const foreignChainRpcUrl = await promptQuestion( + 'Please provide the foreignChainRpcUrl', + ); + + if (!foreignChainRpcUrl) { + console.error('Error: The foreignChainRpcUrl cannot be empty.'); + process.exit(1); + } + + const colonyAddress = await promptQuestion( + 'Please provide the colonyAddress', + ); + + if (!colonyAddress) { + console.error('Error: The colonyAddress cannot be empty.'); + process.exit(1); + } + + return { + colonyAddress, + foreignChainId, + foreignChainRpcUrl, + }; +}; + +const start = async () => { + try { + const { foreignChainId, foreignChainRpcUrl, colonyAddress } = + await getArgumentsFromConsole(); + + const tokenFactory = TokenFactoryConfig.getTokenFactory(foreignChainRpcUrl); + const deployedColony = await getDeployedColonyToChain( + foreignChainId, + colonyAddress, + ); + + const { nativeToken: colonyNativeToken } = deployedColony; + await deployNativeTokenToChain( + tokenFactory, + foreignChainId, + colonyNativeToken, + colonyAddress, + ); + } catch (error) { + console.error( + `There was an error executing the deploy-token-to-chain script. Error: ${error.message}`, + ); + } finally { + rl.close(); + } +}; + +start(); diff --git a/scripts/hardhat-cmd.js b/scripts/hardhat-cmd.js index 5c230676861..8f88693c9c5 100755 --- a/scripts/hardhat-cmd.js +++ b/scripts/hardhat-cmd.js @@ -3,7 +3,7 @@ const { exec } = require('node:child_process'); const parseArgs = require('minimist') -strings = ['hash', 'data', 'from', 'to']; +strings = ['hash', 'data', 'from', 'to', 'network']; const argv = parseArgs(process.argv.slice(2), { string: strings }); const action = argv._[0]; @@ -11,11 +11,16 @@ delete argv._; let cmdFlags = ''; for (const [k, v] of Object.entries(argv)) { - cmdFlags += `--${k} ${v} `; + if (k !== 'network') { // network is an argument for docker, not hardhat + cmdFlags += `--${k} ${v} `; + } }; +let network = argv.network || 'network'; + + const hardhatCmd = `npx hardhat ${action} ${cmdFlags.trim()}`; -const fullCmd = `docker exec -t network bash -c \"cd colonyNetwork && ${hardhatCmd}\"`; +const fullCmd = `docker exec -t ${network} bash -c \"cd colonyNetwork && ${hardhatCmd}\"`; exec(fullCmd, (error, stdout, stderr) => { if (error) { diff --git a/scripts/unlock-mint-tokens-on-chain.js b/scripts/unlock-mint-tokens-on-chain.js new file mode 100644 index 00000000000..6df4ca0347f --- /dev/null +++ b/scripts/unlock-mint-tokens-on-chain.js @@ -0,0 +1,123 @@ +const { abi: metaTxAbi } = require('@colony/abis/versions/hmwss/MetaTxToken'); +const { utils, providers, Contract } = require('ethers'); +const readline = require('readline'); + +const { unlockToken, mintTokens } = require('./utils/unlockMintTokens'); + +const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout, +}); + +// Function to prompt for any input +function promptQuestion(question) { + return new Promise((resolve) => { + rl.question(`${question}: `, (answer) => { + resolve(answer.trim()); + }); + }); +} + +const TokenConfig = (() => { + let token = null; + + const getTokenContract = (tokenAddress, abi, rpcUrl) => { + // Initialize the foreign provider using the provided RPC URL + const foreignProvider = new providers.JsonRpcProvider(rpcUrl); + + // Get the signer from the provider + const foreignSigner = foreignProvider.getSigner(); + + const checksummedAddress = utils.getAddress(tokenAddress); + + // Create the contract factory using the signer and bytecode + return new Contract(checksummedAddress, abi, foreignSigner); + }; + + return { + getToken: (tokenAddress, rpcUrl) => { + if (!token) { + token = getTokenContract(tokenAddress, metaTxAbi, rpcUrl); + } + + return token; + }, + }; +})(); + +const getArgumentsFromConsole = async () => { + const foreignChainRpcUrl = await promptQuestion( + 'Please provide the foreignChainRpcUrl', + ); + + if (!foreignChainRpcUrl) { + console.error('Error: The foreignChainRpcUrl cannot be empty.'); + process.exit(1); + } + + const colonyAddress = await promptQuestion( + 'Please provide the colonyAddress', + ); + + if (!colonyAddress) { + console.error('Error: The colonyAddress cannot be empty.'); + process.exit(1); + } + + const tokenAddress = await promptQuestion('Please provide the tokenAddress'); + + if (!tokenAddress) { + console.error('Error: The tokenAddress cannot be empty.'); + process.exit(1); + } + + const tokenAmount = await promptQuestion( + 'Please provide a tokenAmount >= 0. Press enter to default to 100', + ); + + if (tokenAmount && (isNaN(tokenAmount) || Number(tokenAmount) <= 0)) { + console.error('Error: Entered value is not a valid number greater than 0.'); + process.exit(1); + } + + const unlockTokenAction = await promptQuestion( + 'Do you want to unlock the token? Y/N', + ); + + return { + foreignChainRpcUrl, + colonyAddress, + tokenAddress, + tokenAmount: !tokenAmount ? 100 : Number(tokenAmount), + shouldUnlockToken: unlockTokenAction.toUpperCase() === 'Y', + }; +}; + +async function start() { + try { + const { + foreignChainRpcUrl, + colonyAddress, + tokenAddress, + tokenAmount, + shouldUnlockToken, + } = await getArgumentsFromConsole(); + + const token = TokenConfig.getToken(tokenAddress, foreignChainRpcUrl); + + if (shouldUnlockToken) { + await unlockToken(token); + } + + // The proxy colony address is the same as the main colony address + await mintTokens(colonyAddress, token, tokenAmount); + } catch (error) { + console.error( + `There was an error executing the deploy-token-to-chain script. Error: ${error.message}`, + ); + } finally { + rl.close(); + } +} + +start(); diff --git a/scripts/utils/unlockMintTokens.js b/scripts/utils/unlockMintTokens.js new file mode 100644 index 00000000000..00f8206027a --- /dev/null +++ b/scripts/utils/unlockMintTokens.js @@ -0,0 +1,49 @@ +/** + * Unlocks a token. + * + * @async + * @function unlockToken + * @param {Object} token - The token contract representing the token to be unlocked. + * @param {number|string|BigNumber} tokenAmount - The amount of tokens to mint. + * @returns {Promise} A promise that resolves when the token has been successfully unlocked. + * @throws Will log an error message if unlocking the token fails. + */ +const unlockToken = async (token) => { + const tokenAddress = token.address; + try { + await token.unlock(); + console.log(`Token with address ${tokenAddress} successfully unlocked.`); + } catch { + console.error(`Error while unlocking token with address ${tokenAddress}.`); + } +}; + +/** + * Mints a specified amount of tokens to the colony address. + * + * @async + * @function mintTokens + * @param {string} colonyAddress - The address of the colony where the tokens will be minted. + * @param {Object} token - The token contract representing the token to be minted. + * @param {number|string|BigNumber} tokenAmount - The amount of tokens to mint. + * @returns {Promise} A promise that resolves when the token has been successfully minted. + * @throws Will log an error message if minting the token fails. + */ +const mintTokens = async (colonyAddress, token, tokenAmount) => { + const tokenAddress = token.address; + try { + await token['mint(address,uint256)'](colonyAddress, tokenAmount); + console.log( + `Successfully minted ${tokenAmount} tokens for token with address ${tokenAddress} to colony with address ${colonyAddress}.`, + ); + } catch { + console.error( + `Error while unlocking and minting foreign token with address ${tokenAddress}.`, + ); + } +}; + +module.exports = { + unlockToken, + mintTokens, +}; diff --git a/src/apollo/cache/colony/balances.ts b/src/apollo/cache/colony/balances.ts index ed1c9ec9869..50bb3c30642 100644 --- a/src/apollo/cache/colony/balances.ts +++ b/src/apollo/cache/colony/balances.ts @@ -71,18 +71,22 @@ const getAllDomainBalancesFromRefs = ( const getTotalTokenBalances = (allDomainBalances) => allDomainBalances.reduce((totals, balance) => { const { - token: { id: currentToken }, + token: { + id: tokenAddress, + chainMetadata: { chainId: tokenChainId }, + }, balance: currentBalance, } = balance; - if (totals[currentToken]) { + if (totals[`${tokenChainId}_${tokenAddress}`]) { return { ...totals, - [currentToken]: totals[currentToken].add(currentBalance), + [`${tokenChainId}_${tokenAddress}`]: + totals[`${tokenChainId}_${tokenAddress}`].add(currentBalance), }; } return { ...totals, - [currentToken]: BigNumber.from(currentBalance), + [`${tokenChainId}_${tokenAddress}`]: BigNumber.from(currentBalance), }; }, {}); @@ -116,7 +120,10 @@ const balancesFieldCache = { domain: null, id: `${colonyChainId}_${colonyAddress}_${COLONY_TOTAL_BALANCE_DOMAIN_ID}_${token.id}_balance`, token, - balance: totalTokenBalances[token.id]?.toString(), + balance: + totalTokenBalances[ + `${token.chainMetadata.chainId}_${token.id}` + ]?.toString(), }), ), ], diff --git a/src/apollo/cache/colony/tokens.ts b/src/apollo/cache/colony/tokens.ts index 3662c8fc745..4cf34985a02 100644 --- a/src/apollo/cache/colony/tokens.ts +++ b/src/apollo/cache/colony/tokens.ts @@ -1,17 +1,24 @@ /* eslint-disable no-underscore-dangle */ -import { DEFAULT_NETWORK_TOKEN, ADDRESS_ZERO } from '~constants/index.ts'; +import { + DEFAULT_NETWORK_TOKEN, + ADDRESS_ZERO, + DEFAULT_NETWORK_INFO, +} from '~constants/index.ts'; import { TokenType } from '~gql'; import { type UnaliasedColonyTokensItem } from '~types/graphql.ts'; +import { getNetworkByChainId } from '~utils/web3/index.ts'; const tokensFieldCache = { /* * @NOTE Add the local chain's native token to the colony's tokens list */ tokens: { - read: (baseTokens, { cache }) => { + read: (baseTokens, { readField, cache }) => { if (baseTokens === undefined) return null; const cacheRepresentation = cache.extract(); + const proxyColonies = readField('proxyColonies'); + const updatedTokens: UnaliasedColonyTokensItem[] = [ { __typename: 'ColonyTokens', @@ -23,10 +30,50 @@ const tokensFieldCache = { avatar: null, thumbnail: null, type: TokenType.Colony, + chainMetadata: { + chainId: DEFAULT_NETWORK_INFO.chainId, + }, }, }, ]; + proxyColonies?.items?.forEach((proxyColony) => { + if (!proxyColony.isActive) { + return; + } + const { chainId } = proxyColony; + + const network = getNetworkByChainId(chainId); + + if (!network || !network.nativeToken) { + return; + } + + const token: UnaliasedColonyTokensItem = { + __typename: 'ColonyTokens', + id: `${chainId}_NATIVE_TOKEN_ID`, + token: { + __typename: 'Token', + ...network.nativeToken, + /* + * This is aliased as "colonyTokensId" in the "ColonyTokensConnection" fragment, + * but the cache only considers canonical field names. Therefore, to ensure type safety + * when manually modifying the cache, we must use this custom type. + */ + // @ts-ignore + id: ADDRESS_ZERO, + avatar: null, + thumbnail: null, + type: TokenType.Colony, + chainMetadata: { + chainId, + }, + }, + }; + + updatedTokens.push(token); + }); + const colonyTokensResolved = baseTokens.items.map((colonyToken) => { // If it's a reference object, we need to look it up in the cache, same for the token nested object if (colonyToken.__ref) { diff --git a/src/components/common/ColonyActions/helpers/getActionTitleValues.ts b/src/components/common/ColonyActions/helpers/getActionTitleValues.ts index bb46c179452..0d5b0fd8859 100644 --- a/src/components/common/ColonyActions/helpers/getActionTitleValues.ts +++ b/src/components/common/ColonyActions/helpers/getActionTitleValues.ts @@ -41,6 +41,7 @@ export enum ActionTitleMessageKeys { MilestonesCount = 'milestonesCount', Milestones = 'milestones', StagedAmount = 'stagedAmount', + Chain = 'chain', } /* Maps actionTypes to message values as found in en-actions.ts */ @@ -133,6 +134,9 @@ const getMessageDescriptorKeys = (actionType: AnyActionType) => { return [ActionTitleMessageKeys.ChainName]; case actionType.includes(ColonyActionType.CreateDecisionMotion): return [ActionTitleMessageKeys.Initiator]; + case actionType.includes(ColonyActionType.AddProxyColony): + case actionType.includes(ColonyActionType.RemoveProxyColony): + return [ActionTitleMessageKeys.Chain, ActionTitleMessageKeys.Initiator]; /** * @deprecated * This is still needed to allow users to view existing Colony Objectives Actions diff --git a/src/components/common/ColonyActions/helpers/mapItemToMessageFormat.tsx b/src/components/common/ColonyActions/helpers/mapItemToMessageFormat.tsx index efe4f3f7cf5..bc3372b8bb1 100644 --- a/src/components/common/ColonyActions/helpers/mapItemToMessageFormat.tsx +++ b/src/components/common/ColonyActions/helpers/mapItemToMessageFormat.tsx @@ -27,6 +27,7 @@ import { formatRolesTitle } from '~utils/colonyActions.ts'; import { getRecipientsNumber, getTokensNumber } from '~utils/expenditures.ts'; import { getAmountLessFee } from '~utils/getAmountLessFee.ts'; import { formatText, intl } from '~utils/intl.ts'; +import { findSupportedChain } from '~utils/proxyColonies.ts'; import { formatReputationChange } from '~utils/reputation.ts'; import { getAddedSafeChainName } from '~utils/safes/index.ts'; import { @@ -207,6 +208,12 @@ const getExpenditureStagesData = ( }; }; +const getProxyColonyDeployedChain = (actionData: ColonyAction) => { + const chainInfo = findSupportedChain(actionData?.targetChainId); + + return chainInfo?.shortName; +}; + export const useMapColonyActionToExpectedFormat = ({ actionData, colony, @@ -432,5 +439,6 @@ export const useMapColonyActionToExpectedFormat = ({ ActionTitleMessageKeys.SplitAmount, !!expenditureData?.slots, ), + [ActionTitleMessageKeys.Chain]: getProxyColonyDeployedChain(actionData), }; }; diff --git a/src/components/common/ColonyActionsTable/utils.ts b/src/components/common/ColonyActionsTable/utils.ts index ec43d457268..e88e21f6e05 100644 --- a/src/components/common/ColonyActionsTable/utils.ts +++ b/src/components/common/ColonyActionsTable/utils.ts @@ -2,6 +2,7 @@ import sub from 'date-fns/sub'; import { ADDRESS_ZERO, + DEFAULT_NETWORK_INFO, DEFAULT_NETWORK_TOKEN, DEFAULT_TOKEN_DECIMALS, } from '~constants/index.ts'; @@ -29,6 +30,9 @@ export const makeLoadingRows = (pageSize: number): ActivityFeedColonyAction[] => nativeTokenDecimals: DEFAULT_TOKEN_DECIMALS, nativeTokenSymbol: DEFAULT_NETWORK_TOKEN.symbol, name: '', + chainMetadata: { + chainId: DEFAULT_NETWORK_INFO.chainId, + }, }, }, colonyAddress: ADDRESS_ZERO, diff --git a/src/components/common/Extensions/UserHub/partials/StakesTab/partials/StakeItem.tsx b/src/components/common/Extensions/UserHub/partials/StakesTab/partials/StakeItem.tsx index a4c6dfd39b4..dd4148b042e 100644 --- a/src/components/common/Extensions/UserHub/partials/StakesTab/partials/StakeItem.tsx +++ b/src/components/common/Extensions/UserHub/partials/StakesTab/partials/StakeItem.tsx @@ -44,6 +44,7 @@ const StakeItem: FC = ({ stake }) => { symbol: nativeToken.nativeTokenSymbol, tokenAddress: nativeToken.tokenAddress, name: nativeToken.name, + chainMetadata: nativeToken.chainMetadata, }, metadata, }; diff --git a/src/components/frame/v5/pages/BalancePage/partials/BalanceTable/BalanceTable.tsx b/src/components/frame/v5/pages/BalancePage/partials/BalanceTable/BalanceTable.tsx index efef3e8967c..1b9659b5116 100644 --- a/src/components/frame/v5/pages/BalancePage/partials/BalanceTable/BalanceTable.tsx +++ b/src/components/frame/v5/pages/BalancePage/partials/BalanceTable/BalanceTable.tsx @@ -188,7 +188,10 @@ const BalanceTable: FC = () => { overrides={{ - getRowId: ({ token }) => (token ? token.tokenAddress : uniqueId()), + getRowId: ({ token }) => + token + ? `${token.chainMetadata.chainId}_${token.tokenAddress}` + : uniqueId(), state: { sorting, rowSelection, diff --git a/src/components/frame/v5/pages/BalancePage/partials/BalanceTable/hooks.tsx b/src/components/frame/v5/pages/BalancePage/partials/BalanceTable/hooks.tsx index 25e63ed47c2..702802c0906 100644 --- a/src/components/frame/v5/pages/BalancePage/partials/BalanceTable/hooks.tsx +++ b/src/components/frame/v5/pages/BalancePage/partials/BalanceTable/hooks.tsx @@ -44,11 +44,14 @@ export const useBalancesData = (): BalanceTableFieldModel[] => { const tokensData = useMemo( () => colonyTokens?.items.filter(notNull).map((item) => { - const colonyTokenBalance = getBalanceForTokenAndDomain( + const colonyTokenBalance = getBalanceForTokenAndDomain({ balances, - item.token.tokenAddress, - selectedDomain ? Number(selectedDomain.nativeId) : undefined, - ); + tokenAddress: item.token.tokenAddress, + tokenChainId: item.token.chainMetadata.chainId, + domainId: selectedDomain + ? Number(selectedDomain.nativeId) + : undefined, + }); let totalBalance = colonyTokenBalance; if (!selectedDomain || selectedDomain.nativeId === Id.RootDomain) { diff --git a/src/components/frame/v5/pages/FundsPage/context/IncomingFundsLoadingContext.ts b/src/components/frame/v5/pages/FundsPage/context/IncomingFundsLoadingContext.ts index 6be7c4debe8..2c27c813bb6 100644 --- a/src/components/frame/v5/pages/FundsPage/context/IncomingFundsLoadingContext.ts +++ b/src/components/frame/v5/pages/FundsPage/context/IncomingFundsLoadingContext.ts @@ -2,10 +2,14 @@ import { createContext, useContext } from 'react'; import noop from '~utils/noop.ts'; +import { type PendingFundsChainTokens } from './types.ts'; + interface IncomingFundsLoadingContextValues { isAcceptLoading: boolean; enableAcceptLoading: VoidFunction; - setPendingFundsTokenAddresses: (tokenAddresses: string[]) => void; + setPendingFundsChainTokens: ( + tokenAddressesGroupedByChain: PendingFundsChainTokens, + ) => void; /** * Resets the loading state (`isAcceptLoading`) and the list of token addresses awaiting fund claims to their initial values. */ @@ -16,7 +20,7 @@ export const IncomingFundsLoadingContext = createContext({ isAcceptLoading: false, enableAcceptLoading: noop, - setPendingFundsTokenAddresses: noop, + setPendingFundsChainTokens: noop, reset: noop, }); diff --git a/src/components/frame/v5/pages/FundsPage/context/IncomingFundsLoadingContextProvider.tsx b/src/components/frame/v5/pages/FundsPage/context/IncomingFundsLoadingContextProvider.tsx index be07bf7caf9..d107715ca10 100644 --- a/src/components/frame/v5/pages/FundsPage/context/IncomingFundsLoadingContextProvider.tsx +++ b/src/components/frame/v5/pages/FundsPage/context/IncomingFundsLoadingContextProvider.tsx @@ -8,25 +8,25 @@ import React, { import { useRefetchColonyData, useFundsStateUpdater } from './hooks.ts'; import { IncomingFundsLoadingContext } from './IncomingFundsLoadingContext.ts'; +import { type PendingFundsChainTokens } from './types.ts'; export const IncomingFundsLoadingContextProvider: FC = ({ children, }) => { const [isAcceptLoading, setIsAcceptLoading] = useState(false); - const [pendingFundsTokenAddresses, setPendingFundsTokenAddresses] = useState< - string[] - >([]); + const [pendingFundsChainTokens, setPendingFundsChainTokens] = + useState([]); const enableAcceptLoading = useCallback(() => setIsAcceptLoading(true), []); const reset = useCallback(() => { - setPendingFundsTokenAddresses([]); + setPendingFundsChainTokens([]); setIsAcceptLoading(false); }, []); - useFundsStateUpdater(pendingFundsTokenAddresses, reset); + useFundsStateUpdater(pendingFundsChainTokens, reset); useRefetchColonyData( - isAcceptLoading && !!pendingFundsTokenAddresses.length, + isAcceptLoading && !!pendingFundsChainTokens.length, reset, ); @@ -34,15 +34,10 @@ export const IncomingFundsLoadingContextProvider: FC = ({ () => ({ isAcceptLoading, enableAcceptLoading, - setPendingFundsTokenAddresses, + setPendingFundsChainTokens, reset, }), - [ - isAcceptLoading, - enableAcceptLoading, - setPendingFundsTokenAddresses, - reset, - ], + [isAcceptLoading, enableAcceptLoading, setPendingFundsChainTokens, reset], ); return ( diff --git a/src/components/frame/v5/pages/FundsPage/context/hooks.ts b/src/components/frame/v5/pages/FundsPage/context/hooks.ts index 406f22b1a88..55b3d0ab2ad 100644 --- a/src/components/frame/v5/pages/FundsPage/context/hooks.ts +++ b/src/components/frame/v5/pages/FundsPage/context/hooks.ts @@ -4,6 +4,8 @@ import { useColonyContext } from '~context/ColonyContext/ColonyContext.ts'; import useColonyFundsClaims from '~hooks/useColonyFundsClaims.ts'; import usePrevious from '~hooks/usePrevious.ts'; +import { type PendingFundsChainTokens } from './types.ts'; + export const useRefetchColonyData = ( shouldRefetchColonyData: boolean, reset: () => void, @@ -40,16 +42,25 @@ export const useRefetchColonyData = ( }; export const useFundsStateUpdater = ( - pendingFundsTokenAddresses: string[], + pendingFundsTokenAddresses: PendingFundsChainTokens, reset: () => void, ) => { const fundsClaims = useColonyFundsClaims(); const unclaimedFundsClaims = fundsClaims.filter( - (claim) => - claim.amount !== '0' && - !claim.isClaimed && - claim.token?.tokenAddress && - pendingFundsTokenAddresses.includes(claim.token?.tokenAddress), + ({ amount, isClaimed, token }) => { + const { tokenAddress, chainMetadata } = token || {}; + + return ( + amount !== '0' && + !isClaimed && + tokenAddress && + pendingFundsTokenAddresses.some( + ({ chainId, tokenAddresses }) => + chainId === chainMetadata?.chainId && + tokenAddresses.includes(tokenAddress), + ) + ); + }, ); const previousUnclaimedFundsClaims = usePrevious(unclaimedFundsClaims); diff --git a/src/components/frame/v5/pages/FundsPage/context/types.ts b/src/components/frame/v5/pages/FundsPage/context/types.ts new file mode 100644 index 00000000000..1f5610e2d41 --- /dev/null +++ b/src/components/frame/v5/pages/FundsPage/context/types.ts @@ -0,0 +1,4 @@ +export type PendingFundsChainTokens = { + chainId?: string; + tokenAddresses: string[]; +}[]; diff --git a/src/components/frame/v5/pages/FundsPage/partials/AcceptButton/AcceptButton.tsx b/src/components/frame/v5/pages/FundsPage/partials/AcceptButton/AcceptButton.tsx index ad2acde6e31..f27c1bcbc3b 100644 --- a/src/components/frame/v5/pages/FundsPage/partials/AcceptButton/AcceptButton.tsx +++ b/src/components/frame/v5/pages/FundsPage/partials/AcceptButton/AcceptButton.tsx @@ -1,19 +1,24 @@ -import React, { type FC, useState } from 'react'; +import React, { type FC, type PropsWithChildren, useState } from 'react'; import { useColonyContext } from '~context/ColonyContext/ColonyContext.ts'; import { useIncomingFundsLoadingContext } from '~frame/v5/pages/FundsPage/context/IncomingFundsLoadingContext.ts'; import { ActionTypes } from '~redux/index.ts'; import ActionButton from '~v5/shared/Button/ActionButton.tsx'; - -import { type AcceptButtonProps } from './types.ts'; +import { type ButtonProps } from '~v5/shared/Button/types.ts'; const displayName = 'pages.FundsPage.partials.AcceptButton'; -const AcceptButton: FC = ({ - tokenAddresses, +interface AcceptButtonProps extends Pick { + tokenAddressesGroupedByChain: { + chainId?: string; + tokenAddresses: string[]; + }[]; +} + +const AcceptButton: FC = ({ + tokenAddressesGroupedByChain, children, disabled, - ...rest }) => { const { colony, canInteractWithColony } = useColonyContext(); const [isClaimed, setIsClaimed] = useState(false); @@ -21,7 +26,7 @@ const AcceptButton: FC = ({ const { isAcceptLoading, enableAcceptLoading, - setPendingFundsTokenAddresses, + setPendingFundsChainTokens, reset, } = useIncomingFundsLoadingContext(); @@ -31,21 +36,21 @@ const AcceptButton: FC = ({ return { colonyAddress: colony?.colonyAddress, - tokenAddresses, + tokenAddressesGroupedByChain, }; }; const handleClaimSuccess = () => { setIsClaimed(true); - setPendingFundsTokenAddresses(tokenAddresses); + setPendingFundsChainTokens(tokenAddressesGroupedByChain); }; const isBtnDisabled = disabled || !canInteractWithColony || isClaimed || isAcceptLoading; + return ( ({ searchInputPlaceholder, filtersHeader = 'filters', buttonText, - unclaimedClaims, + tokenAddressesGroupedByChain, isButtonDisabled, shouldShowButton, }: ExtendedFilterProps) { @@ -100,7 +100,7 @@ function Filter({ )} {shouldShowButton && ( {formatText({ id: 'incomingFundsPage.table.claimAllFunds' })} diff --git a/src/components/frame/v5/pages/FundsPage/partials/Filter/types.ts b/src/components/frame/v5/pages/FundsPage/partials/Filter/types.ts index 32f96a4fa06..39e5dae12c1 100644 --- a/src/components/frame/v5/pages/FundsPage/partials/Filter/types.ts +++ b/src/components/frame/v5/pages/FundsPage/partials/Filter/types.ts @@ -38,7 +38,10 @@ export interface FilterProps { export interface ExtendedFilterProps extends FilterProps { - unclaimedClaims: string[]; + tokenAddressesGroupedByChain: { + chainId: string; + tokenAddresses: string[]; + }[]; isButtonDisabled?: boolean; shouldShowButton?: boolean; } diff --git a/src/components/frame/v5/pages/FundsPage/partials/FundsTable/FundsTable.tsx b/src/components/frame/v5/pages/FundsPage/partials/FundsTable/FundsTable.tsx index 21984997f85..5754d5b606b 100644 --- a/src/components/frame/v5/pages/FundsPage/partials/FundsTable/FundsTable.tsx +++ b/src/components/frame/v5/pages/FundsPage/partials/FundsTable/FundsTable.tsx @@ -9,6 +9,7 @@ import React, { type FC } from 'react'; import { IncomingFundsLoadingContextProvider } from '~frame/v5/pages/FundsPage/context/IncomingFundsLoadingContextProvider.tsx'; import { useMobile } from '~hooks'; import useColonyFundsClaims from '~hooks/useColonyFundsClaims.ts'; +import { getGroupedUnclaimedClaimsByChain } from '~utils/claims.ts'; import { formatText } from '~utils/intl.ts'; import EmptyContent from '~v5/common/EmptyContent/index.ts'; import { Table } from '~v5/common/Table/Table.tsx'; @@ -28,9 +29,9 @@ const FundsTable: FC = () => { const { filters, searchedTokens, activeFilters } = useFundsTable(); const claims = useColonyFundsClaims(); const unclaimedClaims = claims.filter((claim) => !claim.isClaimed); - const allUnclaimedClaims = Array.from( - new Set(unclaimedClaims.map((claim) => claim.token?.tokenAddress || '')), - ); + + const tokenAddressesGroupedByChain = + getGroupedUnclaimedClaimsByChain(unclaimedClaims); return ( @@ -75,7 +76,7 @@ const FundsTable: FC = () => { )} 0} /> diff --git a/src/components/frame/v5/pages/FundsPage/partials/FundsTable/types.ts b/src/components/frame/v5/pages/FundsPage/partials/FundsTable/types.ts index be6e89c3166..64aa5b89dea 100644 --- a/src/components/frame/v5/pages/FundsPage/partials/FundsTable/types.ts +++ b/src/components/frame/v5/pages/FundsPage/partials/FundsTable/types.ts @@ -6,6 +6,9 @@ export interface FundsTableModel { symbol: string; name: string; decimals: number; + chainMetadata: { + chainId: string; + }; }; } @@ -36,6 +39,9 @@ export interface UseFundsTableProps { symbol: string; name: string; decimals: number; + chainMetadata: { + chainId: string; + }; }; }[]; } diff --git a/src/components/frame/v5/pages/FundsPage/partials/TokenTable/TokenTable.tsx b/src/components/frame/v5/pages/FundsPage/partials/TokenTable/TokenTable.tsx index 73928ad3b82..fd8e14654d0 100644 --- a/src/components/frame/v5/pages/FundsPage/partials/TokenTable/TokenTable.tsx +++ b/src/components/frame/v5/pages/FundsPage/partials/TokenTable/TokenTable.tsx @@ -45,7 +45,9 @@ const TokenTable: FC = ({ token }) => { } = useColonyContext(); const claims = useColonyFundsClaims(); const currentClaims = claims.filter( - ({ token: currentClaimToken }) => currentClaimToken?.name === token?.name, + ({ token: currentClaimToken }) => + currentClaimToken?.name === token?.name && + currentClaimToken?.chainMetadata.chainId === token?.chainMetadata.chainId, ); const claimsAmount = currentClaims.reduce((acc, { amount, isClaimed }) => { @@ -113,7 +115,8 @@ const TokenTable: FC = ({ token }) => { 'text-blue-400': isTokenInfoShown, })} > - {token.name} + {/* @TODO: Temporary UI: Show chainId next to token name */} + {`${token.name} - ${token.chainMetadata.chainId}`}
diff --git a/src/components/frame/v5/pages/FundsPage/partials/TokenTable/hooks.tsx b/src/components/frame/v5/pages/FundsPage/partials/TokenTable/hooks.tsx index 98ca9c4df49..963003b083a 100644 --- a/src/components/frame/v5/pages/FundsPage/partials/TokenTable/hooks.tsx +++ b/src/components/frame/v5/pages/FundsPage/partials/TokenTable/hooks.tsx @@ -22,7 +22,14 @@ export const useTokenTableColumns = (): ColumnDef[] => { if (!BigNumber.from(claim.amount).isZero()) { return ( - + {formatText({ id: 'button.accept' })} ); diff --git a/src/components/frame/v5/pages/TeamsPage/hooks.tsx b/src/components/frame/v5/pages/TeamsPage/hooks.tsx index 33cc8ef0c88..8f9cd674569 100644 --- a/src/components/frame/v5/pages/TeamsPage/hooks.tsx +++ b/src/components/frame/v5/pages/TeamsPage/hooks.tsx @@ -113,21 +113,23 @@ export const useTeams = () => { isMembersListLoading: membersLoading, reputation: reputationPercentage ? Number(reputationPercentage) : 0, balanceValue: convertToDecimal( - getBalanceForTokenAndDomain( + getBalanceForTokenAndDomain({ balances, - nativeToken?.tokenAddress || '', - nativeId, - ) || 0, + tokenAddress: nativeToken?.tokenAddress || '', + tokenChainId: nativeToken?.chainMetadata.chainId, + domainId: nativeId, + }) || 0, nativeToken?.decimals || 0, )?.toNumber(), balance: ( + + + + +); + +const weights = new Map([['regular', SVG]]); + +const AvalancheIcon: Icon = forwardRef((props, ref) => ( + +)); + +AvalancheIcon.displayName = 'AvalancheIcon'; + +export default AvalancheIcon; diff --git a/src/components/icons/BaseIcon.tsx b/src/components/icons/BaseIcon.tsx new file mode 100644 index 00000000000..f49bf24c260 --- /dev/null +++ b/src/components/icons/BaseIcon.tsx @@ -0,0 +1,22 @@ +import { type Icon, IconBase, type IconWeight } from '@phosphor-icons/react'; +import React, { forwardRef, type ReactElement } from 'react'; + +const SVG = ( + <> + + + +); + +const weights = new Map([['regular', SVG]]); + +const BaseIcon: Icon = forwardRef((props, ref) => ( + +)); + +BaseIcon.displayName = 'BaseIcon'; + +export default BaseIcon; diff --git a/src/components/icons/BinanceIcon.tsx b/src/components/icons/BinanceIcon.tsx new file mode 100644 index 00000000000..d726e8973f2 --- /dev/null +++ b/src/components/icons/BinanceIcon.tsx @@ -0,0 +1,26 @@ +import { type Icon, IconBase, type IconWeight } from '@phosphor-icons/react'; +import React, { forwardRef, type ReactElement } from 'react'; + +const SVG = ( + <> + + + + +); + +const weights = new Map([['regular', SVG]]); + +const BinanceIcon: Icon = forwardRef((props, ref) => ( + +)); + +BinanceIcon.displayName = 'BinanceIcon'; + +export default BinanceIcon; diff --git a/src/components/icons/OptimismIcon.tsx b/src/components/icons/OptimismIcon.tsx new file mode 100644 index 00000000000..da3a3aac358 --- /dev/null +++ b/src/components/icons/OptimismIcon.tsx @@ -0,0 +1,30 @@ +import { type Icon, IconBase, type IconWeight } from '@phosphor-icons/react'; +import React, { forwardRef, type ReactElement } from 'react'; + +const SVG = ( + <> + + + + + +); + +const weights = new Map([['regular', SVG]]); + +const OptimismIcon: Icon = forwardRef((props, ref) => ( + +)); + +OptimismIcon.displayName = 'OptimismIcon'; + +export default OptimismIcon; diff --git a/src/components/v5/common/ActionSidebar/ActionTypeSelect.tsx b/src/components/v5/common/ActionSidebar/ActionTypeSelect.tsx index acc5e5e5b6e..b88cacb67db 100644 --- a/src/components/v5/common/ActionSidebar/ActionTypeSelect.tsx +++ b/src/components/v5/common/ActionSidebar/ActionTypeSelect.tsx @@ -9,7 +9,8 @@ import useRelativePortalElement from '~hooks/useRelativePortalElement.ts'; import useToggle from '~hooks/useToggle/index.ts'; import { formatText } from '~utils/intl.ts'; import Modal from '~v5/shared/Modal/index.ts'; -import SearchSelect from '~v5/shared/SearchSelect/index.ts'; +import { renderWithBadgesOption } from '~v5/shared/SearchSelect/partials/OptionRenderer/WithBadgesOptionRenderer.tsx'; +import SearchSelect from '~v5/shared/SearchSelect/SearchSelect.tsx'; import ActionFormRow from '../ActionFormRow/index.ts'; @@ -107,6 +108,7 @@ const ActionTypeSelect: FC = ({ className }) => { registerContainerRef(ref); portalElementRef.current = ref; }} + renderOption={renderWithBadgesOption} items={actionsList} onSelect={(action) => { toggleSelectOff(); diff --git a/src/components/v5/common/ActionSidebar/consts.ts b/src/components/v5/common/ActionSidebar/consts.ts index 26d1a08c6cf..9c0b553c42f 100644 --- a/src/components/v5/common/ActionSidebar/consts.ts +++ b/src/components/v5/common/ActionSidebar/consts.ts @@ -19,6 +19,8 @@ export const AMOUNT_FIELD_NAME = 'amount'; export const TOKEN_FIELD_NAME = 'tokenAddress'; export const DESCRIPTION_FIELD_NAME = 'description'; export const CREATED_IN_FIELD_NAME = 'createdIn'; +export const MANAGE_SUPPORTED_CHAINS_FIELD_NAME = 'manageSupportedChains'; +export const CHAIN_FIELD_NAME = 'chain'; export const MODIFICATION_FIELD_NAME = 'modification'; export const TEAM_FIELD_NAME = 'team'; export const MEMBER_FIELD_NAME = 'member'; @@ -33,6 +35,11 @@ export const COLONY_OBJECTIVE_DESCRIPTION_FIELD_NAME = export const NON_RESETTABLE_FIELDS = [TITLE_FIELD_NAME, ACTION_TYPE_FIELD_NAME]; +export enum ManageEntityOperation { + Add = 'Add', + Remove = 'Remove', +} + export const actionSidebarAnimation: Variants = { hidden: { x: '100%', diff --git a/src/components/v5/common/ActionSidebar/hooks/permissions/helpers.ts b/src/components/v5/common/ActionSidebar/hooks/permissions/helpers.ts index aecab9d9511..e4ea30c32dd 100644 --- a/src/components/v5/common/ActionSidebar/hooks/permissions/helpers.ts +++ b/src/components/v5/common/ActionSidebar/hooks/permissions/helpers.ts @@ -109,6 +109,9 @@ export const getPermissionsNeededForAction = ( case Action.ArbitraryTxs: { return PERMISSIONS_NEEDED_FOR_ACTION.ArbitraryTxs; } + case Action.ManageSupportedChains: { + return PERMISSIONS_NEEDED_FOR_ACTION.ManageSupportedChains; + } default: return undefined; diff --git a/src/components/v5/common/ActionSidebar/hooks/useActionsList.ts b/src/components/v5/common/ActionSidebar/hooks/useActionsList.ts index a5c77e75d6e..bde5c9d0989 100644 --- a/src/components/v5/common/ActionSidebar/hooks/useActionsList.ts +++ b/src/components/v5/common/ActionSidebar/hooks/useActionsList.ts @@ -4,7 +4,10 @@ import { Action } from '~constants/actions.ts'; import { useColonyContext } from '~context/ColonyContext/ColonyContext.ts'; import { useFeatureFlagsContext } from '~context/FeatureFlagsContext/FeatureFlagsContext.ts'; import useEnabledExtensions from '~hooks/useEnabledExtensions.ts'; -import { type SearchSelectOptionProps } from '~v5/shared/SearchSelect/types.ts'; +import { + type SearchSelectOptionProps, + type WithBadgesOption, +} from '~v5/shared/SearchSelect/types.ts'; const useActionsList = () => { const { colony } = useColonyContext(); @@ -15,8 +18,12 @@ const useActionsList = () => { featureFlags.ARBITRARY_TXS_ACTION?.isLoading || featureFlags.ARBITRARY_TXS_ACTION?.isEnabled; - return useMemo((): SearchSelectOptionProps[] => { - const actionsListOptions: SearchSelectOptionProps[] = [ + const isFeatureFlagSupportedChainsEnabled = + featureFlags.SUPPORTED_CHAINS_ACTION?.isLoading || + featureFlags.SUPPORTED_CHAINS_ACTION?.isEnabled; + + return useMemo((): SearchSelectOptionProps[] => { + const actionsListOptions: SearchSelectOptionProps[] = [ { key: '1', title: { id: 'actions.payments' }, @@ -124,6 +131,11 @@ const useActionsList = () => { label: { id: 'actions.editColonyDetails' }, value: Action.EditColonyDetails, }, + { + label: { id: 'actions.manageSupportedChains' }, + value: Action.ManageSupportedChains, + isNew: true, + }, { label: { id: 'actions.upgradeColonyVersion' }, value: Action.UpgradeColonyVersion, @@ -152,6 +164,15 @@ const useActionsList = () => { actionsListOptions[4].options.splice(arbitraryTxsIndex, 1); } + + if (!isFeatureFlagSupportedChainsEnabled) { + const manageSupportedChainsIndex = + actionsListOptions[4].options.findIndex( + ({ value }) => value === Action.ManageSupportedChains, + ); + actionsListOptions[4].options.splice(manageSupportedChainsIndex, 1); + } + if (!isStagedExpenditureEnabled) { const stagedPaymentIndex = actionsListOptions[0].options.findIndex( ({ value }) => value === Action.StagedPayment, @@ -166,7 +187,12 @@ const useActionsList = () => { actionsListOptions[2].options[2].isDisabled = true; } return actionsListOptions; - }, [colony, isStagedExpenditureEnabled, isFeatureFlagArbitraryTxsEnabled]); + }, [ + colony, + isStagedExpenditureEnabled, + isFeatureFlagArbitraryTxsEnabled, + isFeatureFlagSupportedChainsEnabled, + ]); }; export default useActionsList; diff --git a/src/components/v5/common/ActionSidebar/hooks/useCheckOperationType.ts b/src/components/v5/common/ActionSidebar/hooks/useCheckOperationType.ts new file mode 100644 index 00000000000..1df58381d8b --- /dev/null +++ b/src/components/v5/common/ActionSidebar/hooks/useCheckOperationType.ts @@ -0,0 +1,18 @@ +import { useWatch } from 'react-hook-form'; + +import { isNil } from '~utils/lodash.ts'; + +import { type ManageEntityOperation } from '../consts.ts'; + +export const useCheckOperationType = ( + name: string, + operationType: ManageEntityOperation, +): boolean | null => { + const operation = useWatch({ name }); + + if (isNil(operation)) { + return null; + } + + return operation === operationType; +}; diff --git a/src/components/v5/common/ActionSidebar/hooks/useFilterChainSelectField.ts b/src/components/v5/common/ActionSidebar/hooks/useFilterChainSelectField.ts new file mode 100644 index 00000000000..2e93bfba787 --- /dev/null +++ b/src/components/v5/common/ActionSidebar/hooks/useFilterChainSelectField.ts @@ -0,0 +1,29 @@ +import { useDeployedChainIds } from '~hooks/proxyColonies/useDeployedChainIds.ts'; +import { + type SearchSelectOption, + type IconOption, +} from '~v5/shared/SearchSelect/types.ts'; + +import { + MANAGE_SUPPORTED_CHAINS_FIELD_NAME, + ManageEntityOperation, +} from '../consts.ts'; + +import { useCheckOperationType } from './useCheckOperationType.ts'; + +export const useFilterChainSelectField = () => { + const isRemoveOperation = useCheckOperationType( + MANAGE_SUPPORTED_CHAINS_FIELD_NAME, + ManageEntityOperation.Remove, + ); + + const activeProxyColoniesChainIds = useDeployedChainIds({ + filterFn: (deployedProxyColony) => deployedProxyColony?.isActive, + }); + + const filterFn = ({ value: chainId }: SearchSelectOption) => + isRemoveOperation + ? activeProxyColoniesChainIds.includes(chainId.toString()) + : !activeProxyColoniesChainIds.includes(chainId.toString()); + return filterFn; +}; diff --git a/src/components/v5/common/ActionSidebar/hooks/useFilterCreatedInField.ts b/src/components/v5/common/ActionSidebar/hooks/useFilterCreatedInField.ts index e615775134b..8c567148d95 100644 --- a/src/components/v5/common/ActionSidebar/hooks/useFilterCreatedInField.ts +++ b/src/components/v5/common/ActionSidebar/hooks/useFilterCreatedInField.ts @@ -3,7 +3,10 @@ import { useEffect } from 'react'; import { useFormContext } from 'react-hook-form'; import { DecisionMethod } from '~types/actions.ts'; -import { type SearchSelectOption } from '~v5/shared/SearchSelect/types.ts'; +import { + type SearchSelectOption, + type TeamOption, +} from '~v5/shared/SearchSelect/types.ts'; import { CREATED_IN_FIELD_NAME, @@ -45,7 +48,7 @@ const useFilterCreatedInField = ( } }, [onlyAllowRoot, decisionMethod, selectedTeam, setValue]); - const createdInFilterFn = (team: SearchSelectOption): boolean => { + const createdInFilterFn = (team: SearchSelectOption): boolean => { if (onlyAllowRoot) return !!team.isRoot; if (!selectedTeam) return true; diff --git a/src/components/v5/common/ActionSidebar/hooks/useSidebarActionForm.ts b/src/components/v5/common/ActionSidebar/hooks/useSidebarActionForm.ts index dd3bd96583a..6664278d090 100644 --- a/src/components/v5/common/ActionSidebar/hooks/useSidebarActionForm.ts +++ b/src/components/v5/common/ActionSidebar/hooks/useSidebarActionForm.ts @@ -13,6 +13,7 @@ import EditTeamForm from '../partials/forms/EditTeamForm/index.ts'; import EnterRecoveryModeForm from '../partials/forms/EnterRecoveryModeForm/index.ts'; import ManagePermissionsForm from '../partials/forms/ManagePermissionsForm/index.ts'; import ManageReputationForm from '../partials/forms/ManageReputationForm/index.ts'; +import ManageSupportedChainsForm from '../partials/forms/ManageSupportedChainsForm/ManageSupportedChainsForm.tsx'; import ManageTokensForm from '../partials/forms/ManageTokensForm/ManageTokensForm.tsx'; import ManageVerifiedMembersForm from '../partials/forms/ManageVerifiedMembersForm/index.ts'; import MintTokenForm from '../partials/forms/MintTokenForm/index.ts'; @@ -49,6 +50,7 @@ const useSidebarActionForm = () => { [Action.ManageVerifiedMembers]: ManageVerifiedMembersForm, [Action.ManageReputation]: ManageReputationForm, [Action.ArbitraryTxs]: ArbitraryTxsForm, + [Action.ManageSupportedChains]: ManageSupportedChainsForm, }), [], ); diff --git a/src/components/v5/common/ActionSidebar/partials/ActionSidebarDescription/ActionSidebarDescription.tsx b/src/components/v5/common/ActionSidebar/partials/ActionSidebarDescription/ActionSidebarDescription.tsx index 3a9fce5b269..33bbee76261 100644 --- a/src/components/v5/common/ActionSidebar/partials/ActionSidebarDescription/ActionSidebarDescription.tsx +++ b/src/components/v5/common/ActionSidebar/partials/ActionSidebarDescription/ActionSidebarDescription.tsx @@ -11,6 +11,7 @@ import EditDomainDescription from './partials/EditDomainDescription.tsx'; import EnterRecoveryModeDescription from './partials/EnterRecoveryModeDescription.tsx'; import ManagePermissionsDescription from './partials/ManagePermissionsDescription.tsx'; import ManageReputationDescription from './partials/ManageReputationDescription.tsx'; +import { ManageSupportedChainsDescription } from './partials/ManageSupportedChainsDescription.tsx'; import ManageTokensDescription from './partials/ManageTokensDescription.tsx'; import ManageVerifiedMembersDescription from './partials/ManageVerifiedMembersDescription.tsx'; import MintTokensDescription from './partials/MintTokensDescription.tsx'; @@ -55,6 +56,8 @@ const ActionSidebarDescription = () => { return ; case Action.ManageVerifiedMembers: return ; + case Action.ManageSupportedChains: + return ; case Action.ManageReputation: return ; case Action.PaymentBuilder: diff --git a/src/components/v5/common/ActionSidebar/partials/ActionSidebarDescription/partials/ManageSupportedChainsDescription.tsx b/src/components/v5/common/ActionSidebar/partials/ActionSidebarDescription/partials/ManageSupportedChainsDescription.tsx new file mode 100644 index 00000000000..09f9bb4ddf3 --- /dev/null +++ b/src/components/v5/common/ActionSidebar/partials/ActionSidebarDescription/partials/ManageSupportedChainsDescription.tsx @@ -0,0 +1,52 @@ +import React from 'react'; +import { useFormContext } from 'react-hook-form'; +import { defineMessages, FormattedMessage } from 'react-intl'; + +import { ColonyActionType } from '~types/graphql.ts'; +import { findSupportedChain } from '~utils/proxyColonies.ts'; +import { ManageEntityOperation } from '~v5/common/ActionSidebar/consts.ts'; +import { type ManageSupportedChainsFormValues } from '~v5/common/ActionSidebar/partials/forms/ManageSupportedChainsForm/consts.ts'; + +import CurrentUser from './CurrentUser.tsx'; + +const displayName = + 'v5.common.ActionsSidebar.partials.ActionSidebarDescription.partials.ManageSupportedChainsDescription'; + +const MSG = defineMessages({ + manageSupportedChainsTitle: { + id: `${displayName}.manageSupportedChainsTitle`, + defaultMessage: 'Manage supported chains by {initiator}', + }, +}); + +export const ManageSupportedChainsDescription = () => { + const formValues = + useFormContext().getValues(); + const { manageSupportedChains, chain } = formValues; + const chainInfo = chain ? findSupportedChain(Number(chain)) : null; + + if (manageSupportedChains === undefined || !chainInfo) { + return ( + , + }} + /> + ); + } + + return ( + , + }} + /> + ); +}; diff --git a/src/components/v5/common/ActionSidebar/partials/AmountField/partials/TokenList.tsx b/src/components/v5/common/ActionSidebar/partials/AmountField/partials/TokenList.tsx index 3e84855baf6..804b2194b48 100644 --- a/src/components/v5/common/ActionSidebar/partials/AmountField/partials/TokenList.tsx +++ b/src/components/v5/common/ActionSidebar/partials/AmountField/partials/TokenList.tsx @@ -24,15 +24,16 @@ export const TokenList: FC = ({ return (
    {colonyTokens.map((colonyToken) => { - const tokenBalance = getBalanceForTokenAndDomain( - colonyBalances, - colonyToken.tokenAddress, - domainId ?? Id.RootDomain, - ); + const tokenBalance = getBalanceForTokenAndDomain({ + balances: colonyBalances, + tokenAddress: colonyToken.tokenAddress, + tokenChainId: colonyToken.chainMetadata.chainId, + domainId: domainId ?? Id.RootDomain, + }); return (
  • diff --git a/src/components/v5/common/ActionSidebar/partials/ChainSelect/ChainSelect.tsx b/src/components/v5/common/ActionSidebar/partials/ChainSelect/ChainSelect.tsx new file mode 100644 index 00000000000..ee30ece4043 --- /dev/null +++ b/src/components/v5/common/ActionSidebar/partials/ChainSelect/ChainSelect.tsx @@ -0,0 +1,136 @@ +import clsx from 'clsx'; +import React, { type FC } from 'react'; +import { useController } from 'react-hook-form'; + +import { useAdditionalFormOptionsContext } from '~context/AdditionalFormOptionsContext/AdditionalFormOptionsContext.ts'; +import useRelativePortalElement from '~hooks/useRelativePortalElement.ts'; +import useToggle from '~hooks/useToggle/index.ts'; +import { formatText } from '~utils/intl.ts'; +import ChainBadge from '~v5/common/Pills/ChainBadge/ChainBadge.tsx'; +import { renderIconOption } from '~v5/shared/SearchSelect/partials/OptionRenderer/IconOptionRenderer.tsx'; +import SearchSelect from '~v5/shared/SearchSelect/SearchSelect.tsx'; +import { + type SearchSelectOption, + type IconOption, +} from '~v5/shared/SearchSelect/types.ts'; + +import { useChainOptions } from './hooks.ts'; + +const displayName = 'v5.common.ActionsContent.partials.ChainSelect'; + +interface ChainSelectProps { + name: string; + disabled?: boolean; + readOnly?: boolean; + filterOptionsFn?: (option: SearchSelectOption) => boolean; +} + +const ChainSelect: FC = ({ + name, + disabled = false, + readOnly: readOnlyProp, + filterOptionsFn, +}) => { + const { + field, + fieldState: { error }, + } = useController({ + name, + }); + const fieldValue = field.value; + const isError = !!error; + const chainOptions = useChainOptions(filterOptionsFn); + + const { readonly } = useAdditionalFormOptionsContext(); + const isReadOnly = readonly || readOnlyProp; + + const [ + isChainSelectVisible, + { + toggle: toggleChainSelect, + toggleOff: toggleChainSelectOff, + registerContainerRef, + }, + ] = useToggle(); + const { portalElementRef, relativeElementRef } = useRelativePortalElement< + HTMLButtonElement, + HTMLDivElement + >([isChainSelectVisible], { + top: 8, + }); + + const renderButtonContent = () => { + const selectedChain = fieldValue + ? chainOptions.find( + (availableChain) => availableChain.value === fieldValue, + ) + : null; + + if (!selectedChain) { + return formatText({ id: 'actionSidebar.chain.placeholder' }); + } + + return ; + }; + + return ( +
    + {isReadOnly ? ( +
    + {renderButtonContent()} +
    + ) : ( + <> + + {isChainSelectVisible && ( + { + registerContainerRef(ref); + portalElementRef.current = ref; + }} + items={[ + { + key: 'chains', + title: { id: 'actionSidebar.chain.title' }, + isAccordion: false, + options: chainOptions, + }, + ]} + onSelect={(value) => { + field.onChange(value); + + toggleChainSelectOff(); + }} + renderOption={renderIconOption} + className="z-sidebar" + /> + )} + + )} +
    + ); +}; + +ChainSelect.displayName = displayName; + +export default ChainSelect; diff --git a/src/components/v5/common/ActionSidebar/partials/ChainSelect/hooks.ts b/src/components/v5/common/ActionSidebar/partials/ChainSelect/hooks.ts new file mode 100644 index 00000000000..7cdbcb696b7 --- /dev/null +++ b/src/components/v5/common/ActionSidebar/partials/ChainSelect/hooks.ts @@ -0,0 +1,33 @@ +import { useMemo } from 'react'; + +import { SUPPORTED_CHAINS } from '~constants/proxyColonies.ts'; +import { useGetSupportedChainsQuery } from '~gql'; +import GanacheIcon from '~icons/GanacheIcon.tsx'; +import { notNull } from '~utils/arrays/index.ts'; + +export const useChainOptions = (filterOptionsFn) => { + const { data } = useGetSupportedChainsQuery(); + + const chainOptions = useMemo(() => { + return (data?.listSupportedChains?.items ?? []) + .map((chain) => { + const chainConfig = SUPPORTED_CHAINS.find( + (supportedChain) => supportedChain.chainId === chain?.id, + ); + if (!chainConfig) { + return null; + } + + return { + icon: chainConfig.icon ?? GanacheIcon, + isDisabled: !chain?.isActive, + value: chainConfig.chainId, + label: chainConfig.shortName, + }; + }) + .filter(notNull) + .filter((option) => filterOptionsFn && filterOptionsFn(option)); + }, [data, filterOptionsFn]); + + return chainOptions; +}; diff --git a/src/components/v5/common/ActionSidebar/partials/GroupedAction/GroupedActionItem.tsx b/src/components/v5/common/ActionSidebar/partials/GroupedAction/GroupedActionItem.tsx index a0c23b32369..741aba05588 100644 --- a/src/components/v5/common/ActionSidebar/partials/GroupedAction/GroupedActionItem.tsx +++ b/src/components/v5/common/ActionSidebar/partials/GroupedAction/GroupedActionItem.tsx @@ -8,7 +8,7 @@ import { formatText } from '~utils/intl.ts'; import { ACTION_TYPE_FIELD_NAME } from '~v5/common/ActionSidebar/consts.ts'; import PillsBase from '~v5/common/Pills/PillsBase.tsx'; -type ThemeColor = 'blue' | 'success' | 'purple' | 'warning'; +import { type ThemeColor } from './types.ts'; const getIconClassesByColor = (color: ThemeColor) => { let iconColorClass = ''; diff --git a/src/components/v5/common/ActionSidebar/partials/GroupedAction/types.ts b/src/components/v5/common/ActionSidebar/partials/GroupedAction/types.ts new file mode 100644 index 00000000000..a970fabec53 --- /dev/null +++ b/src/components/v5/common/ActionSidebar/partials/GroupedAction/types.ts @@ -0,0 +1,14 @@ +import { type Icon } from '@phosphor-icons/react'; + +import { type Action } from '~constants/actions.ts'; + +export type ThemeColor = 'blue' | 'success' | 'purple' | 'warning'; + +export type GroupListItem = { + title: string; + description: string; + Icon: Icon; + action: Action; + isNew?: boolean; + isHidden?: boolean; +}; diff --git a/src/components/v5/common/ActionSidebar/partials/ManageColonyGroup/GroupList.ts b/src/components/v5/common/ActionSidebar/partials/ManageColonyGroup/GroupList.ts index bb16b635146..24cb3816094 100644 --- a/src/components/v5/common/ActionSidebar/partials/ManageColonyGroup/GroupList.ts +++ b/src/components/v5/common/ActionSidebar/partials/ManageColonyGroup/GroupList.ts @@ -11,13 +11,14 @@ import { Upload, UserCircleCheck, Usb, + Link, // TrafficCone, } from '@phosphor-icons/react'; import { Action } from '~constants/actions.ts'; import { formatText } from '~utils/intl.ts'; -import { type GroupListItem } from '../PaymentGroup/GroupList.ts'; +import { type GroupListItem } from '../GroupedAction/types.ts'; export const GROUP_FUNDS_LIST: GroupListItem[] = [ { @@ -107,6 +108,15 @@ export const GROUP_ADMIN_LIST: GroupListItem[] = [ Icon: HouseLine, action: Action.EditColonyDetails, }, + { + title: formatText({ id: 'actions.manageSupportedChains' }), + description: formatText({ + id: 'actions.description.manageSupportedChains', + }), + Icon: Link, + action: Action.ManageSupportedChains, + isNew: true, + }, { title: formatText({ id: 'actions.upgradeColonyVersion' }), description: formatText({ diff --git a/src/components/v5/common/ActionSidebar/partials/ManageColonyGroup/ManageColonyGroup.tsx b/src/components/v5/common/ActionSidebar/partials/ManageColonyGroup/ManageColonyGroup.tsx index 030cc2a5b98..58fc8614720 100644 --- a/src/components/v5/common/ActionSidebar/partials/ManageColonyGroup/ManageColonyGroup.tsx +++ b/src/components/v5/common/ActionSidebar/partials/ManageColonyGroup/ManageColonyGroup.tsx @@ -3,6 +3,7 @@ import React from 'react'; import { formatText } from '~utils/intl.ts'; import GroupedAction from '../GroupedAction/index.ts'; +import { type GroupListItem, type ThemeColor } from '../GroupedAction/types.ts'; import GroupedActionWrapper from '../GroupedActionWrapper/index.ts'; import { @@ -16,61 +17,37 @@ const ManageColonyGroup = () => { const groupTeamsList = useGetGroupTeamsList(); const groupAdminList = useGetGroupAdminList(); + const renderActionItems = (items: GroupListItem[], color: ThemeColor) => { + return items.map( + ({ Icon, title, description, action, isNew, isHidden }) => { + return !isHidden ? ( + + ) : null; + }, + ); + }; + return ( - {groupFundsList.map( - ({ Icon, title, description, action, isNew, isHidden }) => { - return !isHidden ? ( - - ) : null; - }, - )} + {renderActionItems(groupFundsList, 'purple')} - {groupTeamsList.map( - ({ Icon, title, description, action, isNew, isHidden }) => { - return !isHidden ? ( - - ) : null; - }, - )} + {renderActionItems(groupTeamsList, 'success')} - {groupAdminList.map( - ({ Icon, title, description, action, isNew, isHidden }) => { - return !isHidden ? ( - - ) : null; - }, - )} + {renderActionItems(groupAdminList, 'warning')} ); diff --git a/src/components/v5/common/ActionSidebar/partials/ManageColonyGroup/useGetGroupList.ts b/src/components/v5/common/ActionSidebar/partials/ManageColonyGroup/useGetGroupList.ts new file mode 100644 index 00000000000..8906b5e7bcf --- /dev/null +++ b/src/components/v5/common/ActionSidebar/partials/ManageColonyGroup/useGetGroupList.ts @@ -0,0 +1,34 @@ +import { Action } from '~constants/actions.ts'; +import { useFeatureFlagsContext } from '~context/FeatureFlagsContext/FeatureFlagsContext.ts'; + +import { + GROUP_ADMIN_LIST, + GROUP_FUNDS_LIST, + GROUP_TEAMS_LIST, +} from './GroupList.ts'; + +export const useGetGroupAdminList = () => { + const featureFlags = useFeatureFlagsContext(); + const isFeatureFlagSupportedChainsEnabled = + featureFlags.SUPPORTED_CHAINS_ACTION?.isLoading || + featureFlags.SUPPORTED_CHAINS_ACTION?.isEnabled; + let groupListTransformed = [...GROUP_ADMIN_LIST]; + if (!isFeatureFlagSupportedChainsEnabled) { + groupListTransformed = groupListTransformed.map(({ action, ...rest }) => { + return { + ...rest, + action, + isHidden: action === Action.ManageSupportedChains, + }; + }); + } + return groupListTransformed; +}; +export const useGetGroupFundsList = () => { + // Add logic here to show / hide actions where necessary + return GROUP_FUNDS_LIST; +}; +export const useGetGroupTeamsList = () => { + // Add logic here to show / hide actions where necessary + return GROUP_TEAMS_LIST; +}; diff --git a/src/components/v5/common/ActionSidebar/partials/Motions/steps/FinalizeStep/hooks.tsx b/src/components/v5/common/ActionSidebar/partials/Motions/steps/FinalizeStep/hooks.tsx index 6ea74b4fec1..9de9a069ff8 100644 --- a/src/components/v5/common/ActionSidebar/partials/Motions/steps/FinalizeStep/hooks.tsx +++ b/src/components/v5/common/ActionSidebar/partials/Motions/steps/FinalizeStep/hooks.tsx @@ -2,7 +2,7 @@ import { Extension, Id } from '@colony/colony-js'; import { BigNumber } from 'ethers'; import React, { useEffect, useMemo, useState } from 'react'; -import { ADDRESS_ZERO } from '~constants/index.ts'; +import { ADDRESS_ZERO, DEFAULT_NETWORK_INFO } from '~constants/index.ts'; import { useAppContext } from '~context/AppContext/AppContext.ts'; import { useColonyContext } from '~context/ColonyContext/ColonyContext.ts'; import { useUserTokenBalanceContext } from '~context/UserTokenBalanceContext/UserTokenBalanceContext.ts'; @@ -31,6 +31,7 @@ export const useFinalizeStep = (actionData: MotionAction) => { amount, fromDomain, tokenAddress, + targetChainId, } = actionData; const { colony: { colonyAddress, balances }, @@ -42,11 +43,14 @@ export const useFinalizeStep = (actionData: MotionAction) => { ? getIsMotionOlderThanAWeek(actionData.createdAt, currentBlockTime * 1000) : false; - const domainBalance = getBalanceForTokenAndDomain( + const domainBalance = getBalanceForTokenAndDomain({ balances, - tokenAddress ?? '', - fromDomain?.nativeId || Id.RootDomain, - ); + tokenAddress: tokenAddress ?? '', + // eslint-disable-next-line no-warning-comments + // TODO: Check if targetChainId should be passed in here + tokenChainId: String(targetChainId) ?? DEFAULT_NETWORK_INFO.chainId, + domainId: fromDomain?.nativeId || Id.RootDomain, + }); const requiresDomainFunds: boolean = !!fromDomain && diff --git a/src/components/v5/common/ActionSidebar/partials/NonVerifiedMembersSelect/NonVerifiedMembersSelect.tsx b/src/components/v5/common/ActionSidebar/partials/NonVerifiedMembersSelect/NonVerifiedMembersSelect.tsx index 6bfd0591c21..d8083582d32 100644 --- a/src/components/v5/common/ActionSidebar/partials/NonVerifiedMembersSelect/NonVerifiedMembersSelect.tsx +++ b/src/components/v5/common/ActionSidebar/partials/NonVerifiedMembersSelect/NonVerifiedMembersSelect.tsx @@ -9,7 +9,8 @@ import useRelativePortalElement from '~hooks/useRelativePortalElement.ts'; import useToggle from '~hooks/useToggle/index.ts'; import { formatText } from '~utils/intl.ts'; import Button from '~v5/shared/Button/Button.tsx'; -import SearchSelect from '~v5/shared/SearchSelect/index.ts'; +import { renderUserOption } from '~v5/shared/SearchSelect/partials/OptionRenderer/UserOptionRenderer.tsx'; +import SearchSelect from '~v5/shared/SearchSelect/SearchSelect.tsx'; import UserAvatar from '~v5/shared/UserAvatar/index.ts'; import { useNonVerifiedMembersSelect } from './hooks.ts'; @@ -143,6 +144,7 @@ const NonVerifiedMembersSelect: FC = ({ {isUserSelectVisible && ( = ({ 'left-6 right-[1.9rem] w-auto': isMobile, })} showEmptyContent - shouldReturnAddresses + showSearchValueAsOption additionalButtons={ isMobile && (
    diff --git a/src/components/v5/common/ActionSidebar/partials/PaymentGroup/GroupList.ts b/src/components/v5/common/ActionSidebar/partials/PaymentGroup/GroupList.ts index 6548b7f078e..4c2b614f8f3 100644 --- a/src/components/v5/common/ActionSidebar/partials/PaymentGroup/GroupList.ts +++ b/src/components/v5/common/ActionSidebar/partials/PaymentGroup/GroupList.ts @@ -7,20 +7,12 @@ import { ArrowsOutLineHorizontal, // @TODO: uncomment when staged payment is ready Steps, - type Icon, } from '@phosphor-icons/react'; import { Action } from '~constants/actions.ts'; import { formatText } from '~utils/intl.ts'; -export type GroupListItem = { - title: string; - description: string; - Icon: Icon; - action: Action; - isNew?: boolean; - isHidden?: boolean; -}; +import { type GroupListItem } from '../GroupedAction/types.ts'; export const GROUP_LIST: GroupListItem[] = [ { diff --git a/src/components/v5/common/ActionSidebar/partials/TeamColorField/TeamColorField.tsx b/src/components/v5/common/ActionSidebar/partials/TeamColorField/TeamColorField.tsx index d65cf71f89e..37266c11338 100644 --- a/src/components/v5/common/ActionSidebar/partials/TeamColorField/TeamColorField.tsx +++ b/src/components/v5/common/ActionSidebar/partials/TeamColorField/TeamColorField.tsx @@ -10,6 +10,7 @@ import { formatText } from '~utils/intl.ts'; import TeamColorBadge from '~v5/common/TeamColorBadge.tsx'; import MenuContainer from '~v5/shared/MenuContainer/index.ts'; import Portal from '~v5/shared/Portal/index.ts'; +import { renderTeamOption } from '~v5/shared/SearchSelect/partials/OptionRenderer/TeamOptionRenderer.tsx'; import SearchItem from '~v5/shared/SearchSelect/partials/SearchItem/SearchItem.tsx'; import { type TeamColourFieldProps } from './types.ts'; @@ -93,6 +94,7 @@ const TeamColorField: FC = ({ name, disabled }) => { toggleOffDecisionSelect(); }} isLabelVisible={false} + renderOption={renderTeamOption} /> diff --git a/src/components/v5/common/ActionSidebar/partials/TeamsSelect/TeamsSelect.tsx b/src/components/v5/common/ActionSidebar/partials/TeamsSelect/TeamsSelect.tsx index c48791deefb..dc4ec22cdf8 100644 --- a/src/components/v5/common/ActionSidebar/partials/TeamsSelect/TeamsSelect.tsx +++ b/src/components/v5/common/ActionSidebar/partials/TeamsSelect/TeamsSelect.tsx @@ -8,7 +8,8 @@ import useRelativePortalElement from '~hooks/useRelativePortalElement.ts'; import useTeamsOptions from '~hooks/useTeamsOptions.ts'; import useToggle from '~hooks/useToggle/index.ts'; import TeamBadge from '~v5/common/Pills/TeamBadge/index.ts'; -import SearchSelect from '~v5/shared/SearchSelect/index.ts'; +import { renderTeamOption } from '~v5/shared/SearchSelect/partials/OptionRenderer/TeamOptionRenderer.tsx'; +import SearchSelect from '~v5/shared/SearchSelect/SearchSelect.tsx'; import { type TeamSelectProps } from './types.ts'; @@ -98,6 +99,7 @@ const TeamsSelect: FC = ({ {isTeamSelectVisible && ( { registerContainerRef(ref); portalElementRef.current = ref; diff --git a/src/components/v5/common/ActionSidebar/partials/TeamsSelect/types.ts b/src/components/v5/common/ActionSidebar/partials/TeamsSelect/types.ts index 4f882145e6a..ce60eab133f 100644 --- a/src/components/v5/common/ActionSidebar/partials/TeamsSelect/types.ts +++ b/src/components/v5/common/ActionSidebar/partials/TeamsSelect/types.ts @@ -1,8 +1,11 @@ -import { type SearchSelectOption } from '~v5/shared/SearchSelect/types.ts'; +import { + type SearchSelectOption, + type TeamOption, +} from '~v5/shared/SearchSelect/types.ts'; export interface TeamSelectProps { name: string; readonly?: boolean; - filterOptionsFn?: (option: SearchSelectOption) => boolean; + filterOptionsFn?: (option: SearchSelectOption) => boolean; disabled?: boolean; } diff --git a/src/components/v5/common/ActionSidebar/partials/TokenSelect/partials/TokenSearchItem/TokenSearchItem.tsx b/src/components/v5/common/ActionSidebar/partials/TokenSelect/partials/TokenSearchItem/TokenSearchItem.tsx deleted file mode 100644 index 2e5938453b2..00000000000 --- a/src/components/v5/common/ActionSidebar/partials/TokenSelect/partials/TokenSearchItem/TokenSearchItem.tsx +++ /dev/null @@ -1,54 +0,0 @@ -import clsx from 'clsx'; -import React, { type FC } from 'react'; - -import { TokenAvatar } from '~v5/shared/TokenAvatar/TokenAvatar.tsx'; - -import { type TokenSearchItemProps } from './types.ts'; -import { sortDisabled } from './utils.ts'; - -const displayName = - 'v5.common.ActionsContent.partials.TokenSelect.partials.TokenSearchItem'; - -const TokenSearchItem: FC = ({ - options, - onOptionClick, -}) => ( -
      - {sortDisabled(options).map(({ label, value, isDisabled, token }) => ( -
    • - -
    • - ))} -
    -); - -TokenSearchItem.displayName = displayName; - -export default TokenSearchItem; diff --git a/src/components/v5/common/ActionSidebar/partials/TokenSelect/partials/TokenSearchItem/types.ts b/src/components/v5/common/ActionSidebar/partials/TokenSelect/partials/TokenSearchItem/types.ts deleted file mode 100644 index cd25a13ae0b..00000000000 --- a/src/components/v5/common/ActionSidebar/partials/TokenSelect/partials/TokenSearchItem/types.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { type TokenFragment } from '~gql'; - -export interface TokenSearchItemOption { - label: string; - value: string | number; - isDisabled?: boolean; - token?: TokenFragment; -} - -export interface TokenSearchItemProps { - options: TokenSearchItemOption[]; - onOptionClick?: (value: string | number) => void; -} diff --git a/src/components/v5/common/ActionSidebar/partials/TokenSelect/partials/TokenSearchItem/utils.ts b/src/components/v5/common/ActionSidebar/partials/TokenSelect/partials/TokenSearchItem/utils.ts deleted file mode 100644 index d2d1286e493..00000000000 --- a/src/components/v5/common/ActionSidebar/partials/TokenSelect/partials/TokenSearchItem/utils.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { type TokenSearchItemOption } from './types.ts'; - -export const sortDisabled = (options: TokenSearchItemOption[]) => { - const enabled = options.filter((option) => !option.isDisabled); - const disabled = options.filter((option) => option.isDisabled); - - return [...enabled, ...disabled]; -}; diff --git a/src/components/v5/common/ActionSidebar/partials/TokenSelect/partials/TokenSearchSelect/TokenSearchSelect.tsx b/src/components/v5/common/ActionSidebar/partials/TokenSelect/partials/TokenSearchSelect/TokenSearchSelect.tsx index 8766a6ecc21..783f3b5fa06 100644 --- a/src/components/v5/common/ActionSidebar/partials/TokenSelect/partials/TokenSearchSelect/TokenSearchSelect.tsx +++ b/src/components/v5/common/ActionSidebar/partials/TokenSelect/partials/TokenSearchSelect/TokenSearchSelect.tsx @@ -1,25 +1,12 @@ import { Binoculars, Coin } from '@phosphor-icons/react'; -import clsx from 'clsx'; import debounce from 'lodash/debounce'; -import React, { - type FC, - useCallback, - useEffect, - useMemo, - useState, -} from 'react'; +import React, { type FC, useCallback, useState } from 'react'; import { useTokenSelectContext } from '~context/TokenSelectContext/TokenSelectContext.ts'; -import { useMobile } from '~hooks/index.ts'; -import { SpinnerLoader } from '~shared/Preloaders/index.ts'; -import { formatText } from '~utils/intl.ts'; import EmptyContent from '~v5/common/EmptyContent/index.ts'; import { FieldState } from '~v5/common/Fields/consts.ts'; -import MenuContainer from '~v5/shared/MenuContainer/MenuContainer.tsx'; -import Portal from '~v5/shared/Portal/index.ts'; -import SearchInput from '~v5/shared/SearchSelect/partials/SearchInput/SearchInput.tsx'; - -import TokenSearchItem from '../TokenSearchItem/TokenSearchItem.tsx'; +import { renderTokenOption } from '~v5/shared/SearchSelect/partials/OptionRenderer/TokenOptionRenderer.tsx'; +import SearchSelect from '~v5/shared/SearchSelect/SearchSelect.tsx'; import { useSearchSelect } from './hooks.ts'; import { type TokenSearchSelectProps } from './types.ts'; @@ -45,135 +32,62 @@ const TokenSearchSelect = React.forwardRef< }, ref, ) => { - const { isLoading: isTokensListDataLoading } = useTokenSelectContext(); - - const [searchValue, setSearchValue] = useState(''); const [debouncedSearchValue, setDebouncedSearchValue] = useState(''); - const isMobile = useMobile(); - const { - filteredOptions, - loading: loadingTokenData, - suggestedOptions, - } = useSearchSelect(debouncedSearchValue, filterOptionsFn); - const hasError = state && state === FieldState.Error; + const { isLoading: isTokensListDataLoading } = useTokenSelectContext(); + const { items, loading: loadingTokenData } = useSearchSelect( + debouncedSearchValue, + filterOptionsFn, + ); - useEffect(() => { - const debounceTimeout = setTimeout(() => { - setDebouncedSearchValue(searchValue); - }, 500); - - return () => clearTimeout(debounceTimeout); - }, [searchValue]); - - const handleSearch = useMemo( - () => debounce(setDebouncedSearchValue, 500), - [setDebouncedSearchValue], + // eslint-disable-next-line react-hooks/exhaustive-deps + const handleSetDebouncedSearchValue = useCallback( + debounce((value: string) => { + setDebouncedSearchValue(value); + }, 500), + [], ); - const onChange = useCallback( + const handleSearch = useCallback( (value: string) => { onSearch?.(value); - setSearchValue(value); - if (value) { - handleSearch(value); - } else { - setDebouncedSearchValue(''); - } + handleSetDebouncedSearchValue(value); }, - [handleSearch, onSearch], + [onSearch, handleSetDebouncedSearchValue], ); return ( - - -
    - {isMobile && hideSearchOnMobile ? ( -

    - {formatText({ id: 'actions.selectActionType' })} -

    - ) : ( - - )} -
    -
    - {isLoading || isTokensListDataLoading || loadingTokenData ? ( - - ) : ( - <> - {(debouncedSearchValue && !!filteredOptions.length) || - (!debouncedSearchValue && !!suggestedOptions.length) ? ( -
    - {!debouncedSearchValue && ( -
    - {formatText({ - id: 'manageTokensTable.suggestedTokens', - })} -
    - )} - -
    - ) : ( - <> - {!hasError && ( - - )} - - )} - - )} -
    - {additionalButtons} -
    -
    + + } + /> ); }, ); diff --git a/src/components/v5/common/ActionSidebar/partials/TokenSelect/partials/TokenSearchSelect/hooks.ts b/src/components/v5/common/ActionSidebar/partials/TokenSelect/partials/TokenSearchSelect/hooks.ts index 50a370437a0..efbcd383333 100644 --- a/src/components/v5/common/ActionSidebar/partials/TokenSelect/partials/TokenSearchSelect/hooks.ts +++ b/src/components/v5/common/ActionSidebar/partials/TokenSelect/partials/TokenSearchSelect/hooks.ts @@ -3,13 +3,14 @@ import { useEffect, useMemo } from 'react'; import { useTokenSelectContext } from '~context/TokenSelectContext/TokenSelectContext.ts'; import { useGetTokenFromEverywhereQuery } from '~gql'; -import { formatText } from '~utils/intl.ts'; - -import { type TokenSearchItemOption } from '../TokenSearchItem/types.ts'; +import { + type TokenOption, + type SearchSelectOption, +} from '~v5/shared/SearchSelect/types.ts'; export const useSearchSelect = ( searchValue: string, - filterOptionsFn?: (option: TokenSearchItemOption) => boolean, + filterOptionsFn?: (option: SearchSelectOption) => boolean, ) => { const { setOptions, options, suggestedOptions } = useTokenSelectContext(); @@ -55,43 +56,27 @@ export const useSearchSelect = ( } }, [setOptions, tokenData?.getTokenFromEverywhere?.items]); - const searchedOptions: TokenSearchItemOption[] = useMemo( - () => - options.filter((option) => { - const searchQuery = searchValue.toLowerCase(); - const optionValue = - typeof option.value === 'string' - ? option.value.replace('-', ' ').toLowerCase() - : option.value; - const optionUserName = formatText(option.label).toLowerCase(); - - return [optionValue, optionUserName].some((value) => - value.toString().includes(searchQuery), - ); - }), - - [options, searchValue], - ); - - const filteredOptions = useMemo( - () => - filterOptionsFn - ? searchedOptions.filter(filterOptionsFn) - : searchedOptions, - [filterOptionsFn, searchedOptions], - ); + const items = useMemo(() => { + const sourceOptions = searchValue ? options : suggestedOptions; + const filteredOptions = filterOptionsFn + ? sourceOptions.filter(filterOptionsFn) + : sourceOptions; - const filteredSuggestedOptions = useMemo( - () => - filterOptionsFn - ? suggestedOptions.filter(filterOptionsFn) - : suggestedOptions, - [filterOptionsFn, suggestedOptions], - ); + return [ + { + key: 'tokens', + title: !searchValue + ? { + id: 'manageTokensTable.suggestedTokens', + } + : undefined, + options: filteredOptions, + }, + ]; + }, [searchValue, options, suggestedOptions, filterOptionsFn]); return { - filteredOptions, loading, - suggestedOptions: filteredSuggestedOptions, + items, }; }; diff --git a/src/components/v5/common/ActionSidebar/partials/TokenSelect/partials/TokenSearchSelect/types.ts b/src/components/v5/common/ActionSidebar/partials/TokenSelect/partials/TokenSearchSelect/types.ts index 7ae51b39ad5..7f282f592e0 100644 --- a/src/components/v5/common/ActionSidebar/partials/TokenSelect/partials/TokenSearchSelect/types.ts +++ b/src/components/v5/common/ActionSidebar/partials/TokenSelect/partials/TokenSearchSelect/types.ts @@ -1,11 +1,13 @@ import { type BaseFieldProps } from '~v5/common/Fields/types.ts'; - -import { type TokenSearchItemOption } from '../TokenSearchItem/types.ts'; +import { + type TokenOption, + type SearchSelectOption, +} from '~v5/shared/SearchSelect/types.ts'; export interface TokenSearchSelectOptionProps { key: string; title: string; - options: TokenSearchItemOption[]; + options: SearchSelectOption[]; } export interface TokenSearchSelectProps extends BaseFieldProps { @@ -16,5 +18,5 @@ export interface TokenSearchSelectProps extends BaseFieldProps { onSearch?: (value: string) => void; readonly?: boolean; additionalButtons?: React.ReactNode; - filterOptionsFn?: (option: TokenSearchItemOption) => boolean; + filterOptionsFn?: (option: SearchSelectOption) => boolean; } diff --git a/src/components/v5/common/ActionSidebar/partials/TokenSelect/types.ts b/src/components/v5/common/ActionSidebar/partials/TokenSelect/types.ts index 8b9f0c4fea9..e61b296d790 100644 --- a/src/components/v5/common/ActionSidebar/partials/TokenSelect/types.ts +++ b/src/components/v5/common/ActionSidebar/partials/TokenSelect/types.ts @@ -1,8 +1,11 @@ -import { type TokenSearchItemOption } from './partials/TokenSearchItem/types.ts'; +import { + type TokenOption, + type SearchSelectOption, +} from '~v5/shared/SearchSelect/types.ts'; export interface TokenSelectProps { name: string; disabled?: boolean; readOnly?: boolean; - filterOptionsFn?: (option: TokenSearchItemOption) => boolean; + filterOptionsFn?: (option: SearchSelectOption) => boolean; } diff --git a/src/components/v5/common/ActionSidebar/partials/UserSelect/UserSelect.tsx b/src/components/v5/common/ActionSidebar/partials/UserSelect/UserSelect.tsx index 5467f3b7e50..a58ed941cb6 100644 --- a/src/components/v5/common/ActionSidebar/partials/UserSelect/UserSelect.tsx +++ b/src/components/v5/common/ActionSidebar/partials/UserSelect/UserSelect.tsx @@ -13,6 +13,7 @@ import Tooltip from '~shared/Extensions/Tooltip/Tooltip.tsx'; import { type User } from '~types/graphql.ts'; import { formatText } from '~utils/intl.ts'; import { splitWalletAddress } from '~utils/splitWalletAddress.ts'; +import { renderUserOption } from '~v5/shared/SearchSelect/partials/OptionRenderer/UserOptionRenderer.tsx'; import SearchSelect from '~v5/shared/SearchSelect/SearchSelect.tsx'; import UserAvatar from '~v5/shared/UserAvatar/index.ts'; import UserInfoPopover from '~v5/shared/UserInfoPopover/UserInfoPopover.tsx'; @@ -218,6 +219,7 @@ const UserSelect: FC = ({ {selectedUserContent} {isUserSelectVisible && ( = ({ }} isLoading={usersOptions.isLoading} className="z-sidebar" - shouldReturnAddresses + showEmptyContent={false} + showSearchValueAsOption /> )} diff --git a/src/components/v5/common/ActionSidebar/partials/UserSelect/types.ts b/src/components/v5/common/ActionSidebar/partials/UserSelect/types.ts index 24c0af8d143..61579132435 100644 --- a/src/components/v5/common/ActionSidebar/partials/UserSelect/types.ts +++ b/src/components/v5/common/ActionSidebar/partials/UserSelect/types.ts @@ -1,20 +1,21 @@ import { type SearchSelectOptionProps, type SearchSelectOption, + type UserOption, } from '~v5/shared/SearchSelect/types.ts'; export interface UserSelectProps { name: string; disabled?: boolean; domainId?: number; - filterOptionsFn?: (option: SearchSelectOption) => boolean; + filterOptionsFn?: (option: SearchSelectOption) => boolean; tooltipContent?: React.ReactNode; - options?: SearchSelectOptionProps & { + options?: SearchSelectOptionProps & { isLoading?: boolean; }; } // @TODO this is a temporary workaround, need to fix SearchSelect types -export interface UserSearchSelectOption extends SearchSelectOption { +export interface UserSearchSelectOption extends SearchSelectOption { label: string; } diff --git a/src/components/v5/common/ActionSidebar/partials/VerifiedMembersSelect/VerifiedMembersSelect.tsx b/src/components/v5/common/ActionSidebar/partials/VerifiedMembersSelect/VerifiedMembersSelect.tsx index 1f1dbdd0546..b43a4a5faad 100644 --- a/src/components/v5/common/ActionSidebar/partials/VerifiedMembersSelect/VerifiedMembersSelect.tsx +++ b/src/components/v5/common/ActionSidebar/partials/VerifiedMembersSelect/VerifiedMembersSelect.tsx @@ -10,7 +10,8 @@ import useRelativePortalElement from '~hooks/useRelativePortalElement.ts'; import useToggle from '~hooks/useToggle/index.ts'; import { formatText } from '~utils/intl.ts'; import Button from '~v5/shared/Button/Button.tsx'; -import SearchSelect from '~v5/shared/SearchSelect/index.ts'; +import { renderUserOption } from '~v5/shared/SearchSelect/partials/OptionRenderer/UserOptionRenderer.tsx'; +import SearchSelect from '~v5/shared/SearchSelect/SearchSelect.tsx'; import UserAvatar from '~v5/shared/UserAvatar/index.ts'; import { useVerifiedMembersSelect } from './hooks.ts'; @@ -149,6 +150,7 @@ const VerifiedMembersSelect: FC = ({ {isUserSelectVisible && ( = ({ 'left-6 right-[1.9rem] w-auto': isMobile, })} showEmptyContent - shouldReturnAddresses + showSearchValueAsOption additionalButtons={ isMobile && (
    diff --git a/src/components/v5/common/ActionSidebar/partials/forms/ManageSupportedChainsForm/ManageSupportedChainsForm.tsx b/src/components/v5/common/ActionSidebar/partials/forms/ManageSupportedChainsForm/ManageSupportedChainsForm.tsx new file mode 100644 index 00000000000..b08535c3268 --- /dev/null +++ b/src/components/v5/common/ActionSidebar/partials/forms/ManageSupportedChainsForm/ManageSupportedChainsForm.tsx @@ -0,0 +1,108 @@ +import { Link, PlusMinus } from '@phosphor-icons/react'; +import React, { type FC } from 'react'; +import { useFormContext } from 'react-hook-form'; + +import { formatText } from '~utils/intl.ts'; +import ActionFormRow from '~v5/common/ActionFormRow/ActionFormRow.tsx'; +import { + CHAIN_FIELD_NAME, + FROM_FIELD_NAME, + MANAGE_SUPPORTED_CHAINS_FIELD_NAME, + ManageEntityOperation, +} from '~v5/common/ActionSidebar/consts.ts'; +import useHasNoDecisionMethods from '~v5/common/ActionSidebar/hooks/permissions/useHasNoDecisionMethods.ts'; +import { useCheckOperationType } from '~v5/common/ActionSidebar/hooks/useCheckOperationType.ts'; +import { useFilterChainSelectField } from '~v5/common/ActionSidebar/hooks/useFilterChainSelectField.ts'; +import useFilterCreatedInField from '~v5/common/ActionSidebar/hooks/useFilterCreatedInField.ts'; +import ChainSelect from '~v5/common/ActionSidebar/partials/ChainSelect/ChainSelect.tsx'; +import CreatedIn from '~v5/common/ActionSidebar/partials/CreatedIn/index.ts'; +import DecisionMethodField from '~v5/common/ActionSidebar/partials/DecisionMethodField/DecisionMethodField.tsx'; +import Description from '~v5/common/ActionSidebar/partials/Description/Description.tsx'; +import { type ActionFormBaseProps } from '~v5/common/ActionSidebar/types.ts'; +import { FormCardSelect } from '~v5/common/Fields/CardSelect/index.ts'; + +import { getManageSupportedChainsOptions } from './consts.ts'; +import { useManageSupportedChainsForm } from './hooks.ts'; + +const displayName = + 'v5.common.ActionSidebar.partials.ManageSupportedChainsForm'; + +const ManageSupportedChainsForm: FC = ({ + getFormOptions, +}) => { + useManageSupportedChainsForm(getFormOptions); + const { manageSupportedChainsOptions } = getManageSupportedChainsOptions(); + const { resetField } = useFormContext(); + const hasNoDecisionMethods = useHasNoDecisionMethods(); + const chainSelectFilterFn = useFilterChainSelectField(); + const createdInFilterFn = useFilterCreatedInField(FROM_FIELD_NAME); + const isRemoveOperation = useCheckOperationType( + MANAGE_SUPPORTED_CHAINS_FIELD_NAME, + ManageEntityOperation.Remove, + ); + let chainTooltipId = 'actionSidebar.tooltip.chain.notSelected'; + + if (typeof isRemoveOperation === 'boolean') { + chainTooltipId = isRemoveOperation + ? 'actionSidebar.tooltip.chain.remove' + : 'actionSidebar.tooltip.chain.add'; + } + + return ( + <> + + { + resetField(CHAIN_FIELD_NAME); + }} + placeholder={formatText({ + id: 'actionSidebar.manageSupportedChains.placeholder', + })} + title={formatText({ + id: 'actionSidebar.manageSupportedChains.title', + })} + disabled={hasNoDecisionMethods} + /> + + + + + + + + + ); +}; + +ManageSupportedChainsForm.displayName = displayName; + +export default ManageSupportedChainsForm; diff --git a/src/components/v5/common/ActionSidebar/partials/forms/ManageSupportedChainsForm/consts.ts b/src/components/v5/common/ActionSidebar/partials/forms/ManageSupportedChainsForm/consts.ts new file mode 100644 index 00000000000..27b14d82cc9 --- /dev/null +++ b/src/components/v5/common/ActionSidebar/partials/forms/ManageSupportedChainsForm/consts.ts @@ -0,0 +1,50 @@ +import { object, number, string, type InferType } from 'yup'; + +import { MAX_ANNOTATION_LENGTH } from '~constants'; +import { formatText } from '~utils/intl.ts'; +import { + ACTION_BASE_VALIDATION_SCHEMA, + CHAIN_FIELD_NAME, + CREATED_IN_FIELD_NAME, + DECISION_METHOD_FIELD_NAME, + DESCRIPTION_FIELD_NAME, + MANAGE_SUPPORTED_CHAINS_FIELD_NAME, + ManageEntityOperation, +} from '~v5/common/ActionSidebar/consts.ts'; +import { type CardSelectOption } from '~v5/common/Fields/CardSelect/types.ts'; + +export const getManageSupportedChainsOptions = (): { + manageSupportedChainsOptions: CardSelectOption[]; +} => { + return { + manageSupportedChainsOptions: [ + { + label: formatText({ id: 'actionSidebar.option.addSupportedChain' }), + value: ManageEntityOperation.Add, + }, + { + label: formatText({ id: 'actionSidebar.option.removeSupportedChain' }), + value: ManageEntityOperation.Remove, + }, + ], + }; +}; + +export const validationSchema = object() + .shape({ + [CREATED_IN_FIELD_NAME]: number().defined(), + [DECISION_METHOD_FIELD_NAME]: string().defined(), + [DESCRIPTION_FIELD_NAME]: string().max(MAX_ANNOTATION_LENGTH).notRequired(), + [CHAIN_FIELD_NAME]: string().required( + formatText({ id: 'errors.chain.required' }), + ), + [MANAGE_SUPPORTED_CHAINS_FIELD_NAME]: string() + .oneOf(Object.values(ManageEntityOperation)) + .required(formatText({ id: 'errors.manageSupportedChain.required' })), + }) + .defined() + .concat(ACTION_BASE_VALIDATION_SCHEMA); + +export type ManageSupportedChainsFormValues = InferType< + typeof validationSchema +>; diff --git a/src/components/v5/common/ActionSidebar/partials/forms/ManageSupportedChainsForm/hooks.ts b/src/components/v5/common/ActionSidebar/partials/forms/ManageSupportedChainsForm/hooks.ts new file mode 100644 index 00000000000..f7443f3a47d --- /dev/null +++ b/src/components/v5/common/ActionSidebar/partials/forms/ManageSupportedChainsForm/hooks.ts @@ -0,0 +1,101 @@ +import { Id } from '@colony/sdk'; +import { useCallback, useMemo } from 'react'; +import { useWatch } from 'react-hook-form'; +import { type DeepPartial } from 'redux'; + +import { useColonyContext } from '~context/ColonyContext/ColonyContext.ts'; +import { useDeployedChainIds } from '~hooks/proxyColonies/useDeployedChainIds.ts'; +import { ActionTypes } from '~redux'; +import { DecisionMethod } from '~types/actions.ts'; +import { mapPayload } from '~utils/actions.ts'; +import { + CHAIN_FIELD_NAME, + DECISION_METHOD_FIELD_NAME, + MANAGE_SUPPORTED_CHAINS_FIELD_NAME, + ManageEntityOperation, +} from '~v5/common/ActionSidebar/consts.ts'; +import useActionFormBaseHook from '~v5/common/ActionSidebar/hooks/useActionFormBaseHook.ts'; +import { useCheckOperationType } from '~v5/common/ActionSidebar/hooks/useCheckOperationType.ts'; +import { type ActionFormBaseProps } from '~v5/common/ActionSidebar/types.ts'; + +import { + type ManageSupportedChainsFormValues, + validationSchema, +} from './consts.ts'; +import { getManageSupportedChainsPayload } from './utils.ts'; + +const useActionType = () => { + const decisionMethod: DecisionMethod | undefined = useWatch({ + name: DECISION_METHOD_FIELD_NAME, + }); + const isRemoveOperation = useCheckOperationType( + MANAGE_SUPPORTED_CHAINS_FIELD_NAME, + ManageEntityOperation.Remove, + ); + + const chainId = useWatch({ name: CHAIN_FIELD_NAME }); + const disabledProxyColoniesChainIds = useDeployedChainIds({ + filterFn: (deployedProxyColony) => !deployedProxyColony?.isActive, + }); + const isChainDisabled = disabledProxyColoniesChainIds.includes( + chainId?.toString(), + ); + + /** + * This assumes that we only have Permissions, Reputation & Multi-Sig + * Update this once we start to support more decision methods + */ + if ( + (isRemoveOperation || isChainDisabled) && + decisionMethod !== DecisionMethod.Permissions + ) { + return ActionTypes.MOTION_PROXY_COLONY_ENABLE_DISABLE; + } + + /** + * @TODO Consider unifying the permissions saga for enabling & disabling as well + */ + if (isRemoveOperation) { + return ActionTypes.PROXY_COLONY_REMOVE; + } + + if (isChainDisabled) { + return ActionTypes.PROXY_COLONY_ENABLE; + } + + if ( + decisionMethod === DecisionMethod.Reputation || + decisionMethod === DecisionMethod.MultiSig + ) { + return ActionTypes.MOTION_PROXY_COLONY_CREATE; + } + + return ActionTypes.PROXY_COLONY_CREATE; +}; + +export const useManageSupportedChainsForm = ( + getFormOptions: ActionFormBaseProps['getFormOptions'], +) => { + const { colony } = useColonyContext(); + const actionType = useActionType(); + + useActionFormBaseHook({ + getFormOptions, + validationSchema, + actionType, + // eslint-disable-next-line react-hooks/exhaustive-deps + transform: useCallback( + mapPayload((values: ManageSupportedChainsFormValues) => + getManageSupportedChainsPayload(colony, values), + ), + [], + ), + defaultValues: useMemo>( + () => ({ + createdIn: Id.RootDomain, + chain: '', + }), + [], + ), + }); +}; diff --git a/src/components/v5/common/ActionSidebar/partials/forms/ManageSupportedChainsForm/utils.ts b/src/components/v5/common/ActionSidebar/partials/forms/ManageSupportedChainsForm/utils.ts new file mode 100644 index 00000000000..2ac2ab4b98f --- /dev/null +++ b/src/components/v5/common/ActionSidebar/partials/forms/ManageSupportedChainsForm/utils.ts @@ -0,0 +1,36 @@ +import { DecisionMethod } from '~types/actions.ts'; +import { type Colony } from '~types/graphql.ts'; +import { extractColonyRoles } from '~utils/colonyRoles.ts'; +import { extractColonyDomains } from '~utils/domains.ts'; +import { ManageEntityOperation } from '~v5/common/ActionSidebar/consts.ts'; + +import { type ManageSupportedChainsFormValues } from './consts.ts'; + +export const getManageSupportedChainsPayload = ( + colony: Colony, + values: ManageSupportedChainsFormValues, +) => { + const baseDomainPayload = { + operation: + values.manageSupportedChains === ManageEntityOperation.Add + ? ManageEntityOperation.Add + : ManageEntityOperation.Remove, + colonyAddress: colony.colonyAddress, + colonyName: colony.name, + customActionTitle: values.title, + annotationMessage: values.description, + creationSalt: colony.colonyCreateEvent?.creationSalt, + foreignChainId: Number(values.chain), + }; + + if (values.decisionMethod === DecisionMethod.Permissions) { + return baseDomainPayload; + } + + return { + ...baseDomainPayload, + colonyRoles: extractColonyRoles(colony.roles), + colonyDomains: extractColonyDomains(colony.domains), + isMultiSig: values.decisionMethod === DecisionMethod.MultiSig, + }; +}; diff --git a/src/components/v5/common/ActionSidebar/partials/forms/PaymentBuilderForm/utils.ts b/src/components/v5/common/ActionSidebar/partials/forms/PaymentBuilderForm/utils.ts index b37de03501a..7638956b25f 100644 --- a/src/components/v5/common/ActionSidebar/partials/forms/PaymentBuilderForm/utils.ts +++ b/src/components/v5/common/ActionSidebar/partials/forms/PaymentBuilderForm/utils.ts @@ -2,7 +2,7 @@ import { Id } from '@colony/colony-js'; import { unformatNumeral } from 'cleave-zen'; import { type TestContext } from 'yup'; -import { DEFAULT_TOKEN_DECIMALS } from '~constants'; +import { DEFAULT_NETWORK_INFO, DEFAULT_TOKEN_DECIMALS } from '~constants'; import { type CreateExpenditurePayload } from '~redux/sagas/expenditures/createExpenditure.ts'; import { type CreateStakedExpenditurePayload } from '~redux/sagas/expenditures/createStakedExpenditure.ts'; import { DecisionMethod } from '~types/actions.ts'; @@ -72,7 +72,9 @@ export const allTokensAmountValidation = ({ } = context; const { formValues } = formContext || {}; const { from, _tokenSums } = formValues || {}; - const { tokenAddress: fieldTokenAddress } = parent || {}; + // @TODO: Implement token chain id + const { tokenAddress: fieldTokenAddress, chainId: fieldChainId } = + parent || {}; if (!fieldTokenAddress || !from || !_tokenSums) { return false; @@ -111,11 +113,13 @@ export const allTokensAmountValidation = ({ const tokenAmountSum = _tokenSums[fieldTokenAddress]; - const tokenBalance = getBalanceForTokenAndDomain( - colony.balances, - fieldTokenAddress, - from || Id.RootDomain, - ); + const tokenBalance = getBalanceForTokenAndDomain({ + balances: colony.balances, + tokenAddress: fieldTokenAddress, + // @TODO: Implement token chain id + tokenChainId: fieldChainId ?? DEFAULT_NETWORK_INFO.chainId, + domainId: from || Id.RootDomain, + }); if (!tokenAmountSum?.lte(tokenBalance)) { return context.createError({ diff --git a/src/components/v5/common/ActionSidebar/partials/hooks.ts b/src/components/v5/common/ActionSidebar/partials/hooks.ts index 997c8d8bf09..bf0864ebd03 100644 --- a/src/components/v5/common/ActionSidebar/partials/hooks.ts +++ b/src/components/v5/common/ActionSidebar/partials/hooks.ts @@ -8,15 +8,19 @@ import useAsyncFunction from '~hooks/useAsyncFunction.ts'; import useColonyContractVersion from '~hooks/useColonyContractVersion.ts'; import useExtensionData from '~hooks/useExtensionData.ts'; import { ActionTypes } from '~redux/actionTypes.ts'; +import { type ClaimTokensOnChainsPayload } from '~redux/types/actions/colony.ts'; +import { notNull } from '~utils/arrays/index.ts'; import { canColonyBeUpgraded } from '~utils/checks/index.ts'; import { isInstalledExtensionData } from '~utils/extensions.ts'; import { formatText } from '~utils/intl.ts'; -import { useActiveActionType } from '../hooks/useActiveActionType.ts'; import { - type ClaimMintTokensActionParams, - type FinalizeSuccessCallback, -} from '../types.ts'; + MANAGE_SUPPORTED_CHAINS_FIELD_NAME, + ManageEntityOperation, +} from '../consts.ts'; +import { useActiveActionType } from '../hooks/useActiveActionType.ts'; +import { useCheckOperationType } from '../hooks/useCheckOperationType.ts'; +import { type FinalizeSuccessCallback } from '../types.ts'; const SUBMIT_BUTTON_TEXT_MAP: Partial> = { [Action.PaymentBuilder]: 'button.createPayment', @@ -42,10 +46,29 @@ const SUBMIT_BUTTON_TEXT_MAP: Partial> = { [Action.ArbitraryTxs]: 'button.createTransaction', }; +const useManageSupportedChainsSubmitButtonText = () => { + const isRemoveOperation = useCheckOperationType( + MANAGE_SUPPORTED_CHAINS_FIELD_NAME, + ManageEntityOperation.Remove, + ); + + if (isRemoveOperation === null) { + return 'button.manageChains'; + } + + return isRemoveOperation ? 'button.removeChain' : 'button.addChain'; +}; + export const useSubmitButtonText = () => { const selectedAction = useActiveActionType(); - const selectedActionText = - selectedAction && SUBMIT_BUTTON_TEXT_MAP[selectedAction]; + const manageSupportedChainsText = useManageSupportedChainsSubmitButtonText(); + + const selectedActionText = useMemo(() => { + if (selectedAction === Action.ManageSupportedChains) { + return manageSupportedChainsText; + } + return selectedAction && SUBMIT_BUTTON_TEXT_MAP[selectedAction]; + }, [selectedAction, manageSupportedChainsText]); return useMemo( () => @@ -117,10 +140,17 @@ export const useIsFieldDisabled = () => { }; export const useFinalizeSuccessCallback = (): FinalizeSuccessCallback => { - const claimMintTokens = useAsyncFunction({ - submit: ActionTypes.CLAIM_TOKEN, - error: ActionTypes.CLAIM_TOKEN_ERROR, - success: ActionTypes.CLAIM_TOKEN_SUCCESS, + const { colony } = useColonyContext(); + const colonyTokens = useMemo( + () => + colony.tokens?.items.filter(notNull).map((token) => token.token) || [], + [colony.tokens?.items], + ); + + const claimMintTokens = useAsyncFunction({ + submit: ActionTypes.CLAIM_TOKENS_ON_CHAINS, + error: ActionTypes.CLAIM_TOKENS_ON_CHAINS_ERROR, + success: ActionTypes.CLAIM_TOKENS_ON_CHAINS_SUCCESS, }); // We want to trigger this callback only when the Finalize button is pressed @@ -129,9 +159,18 @@ export const useFinalizeSuccessCallback = (): FinalizeSuccessCallback => { case ColonyActionType.MintTokensMotion: case ColonyActionType.MintTokensMultisig: { if (action.tokenAddress) { + const token = colonyTokens.find( + (colonyToken) => colonyToken.tokenAddress === action.tokenAddress, + ); + const tokenAddressesGroupedByChain = [ + { + chainId: token?.chainMetadata?.chainId, + tokenAddresses: [action.tokenAddress], + }, + ]; claimMintTokens({ - tokenAddresses: [action.tokenAddress], colonyAddress: action.colonyAddress, + tokenAddressesGroupedByChain, }).catch(() => { console.error(`An error occured while claiming tokens`); }); diff --git a/src/components/v5/common/ActionSidebar/types.ts b/src/components/v5/common/ActionSidebar/types.ts index 24c54416116..73f0481b3ab 100644 --- a/src/components/v5/common/ActionSidebar/types.ts +++ b/src/components/v5/common/ActionSidebar/types.ts @@ -1,7 +1,6 @@ import { type UseFormReturn } from 'react-hook-form'; import { type ActionFormProps } from '~shared/Fields/Form/ActionForm.tsx'; -import { type Address } from '~types'; import { type ColonyAction } from '~types/graphql.ts'; export interface ActionButtonsProps @@ -45,11 +44,6 @@ export interface ActionSidebarProps { className?: string; } -export type ClaimMintTokensActionParams = { - colonyAddress: Address; - tokenAddresses: Address[]; -}; - export type FinalizeSuccessCallback = { onFinalizeSuccessCallback: (action: ColonyAction) => void; }; diff --git a/src/components/v5/common/ActionSidebar/utils.ts b/src/components/v5/common/ActionSidebar/utils.ts index 2f9a1e5e409..8a18316483a 100644 --- a/src/components/v5/common/ActionSidebar/utils.ts +++ b/src/components/v5/common/ActionSidebar/utils.ts @@ -13,15 +13,14 @@ import { removeCacheEntry, CacheQueryKeys } from '~utils/queries.ts'; import { splitAddress } from '~utils/strings.ts'; import { type SearchSelectOption } from '~v5/shared/SearchSelect/types.ts'; +import { type GroupListItem } from './partials/GroupedAction/types.ts'; import { GROUP_FUNDS_LIST, GROUP_TEAMS_LIST, GROUP_ADMIN_LIST, } from './partials/ManageColonyGroup/GroupList.ts'; -import { - GROUP_LIST, - type GroupListItem, -} from './partials/PaymentGroup/GroupList.ts'; +import { GROUP_LIST } from './partials/PaymentGroup/GroupList.ts'; +import { type UserSearchSelectOption } from './partials/UserSelect/types.ts'; export const translateAction = (action?: Action) => { const actionName = action @@ -202,7 +201,7 @@ export const getActionGroup = (actionType: Action) => { export const formatMembersSelectOptions = ( members: ColonyContributorFragment[], isVerified = true, -): SearchSelectOption[] => { +): SearchSelectOption[] => { return members.map((member, index) => { const { walletAddress, profile } = member.user || {}; diff --git a/src/components/v5/common/CompletedAction/CompletedAction.tsx b/src/components/v5/common/CompletedAction/CompletedAction.tsx index 5901a4e742b..a6513de8577 100644 --- a/src/components/v5/common/CompletedAction/CompletedAction.tsx +++ b/src/components/v5/common/CompletedAction/CompletedAction.tsx @@ -16,6 +16,7 @@ import ArbitraryTransaction from './partials/ArbitraryTransaction/index.ts'; import CreateDecision from './partials/CreateDecision/index.ts'; import EditColonyDetails from './partials/EditColonyDetails/index.ts'; import ManageReputation from './partials/ManageReputation/index.ts'; +import ManageSupportedChain from './partials/ManageSupportedChain/ManageSupportedChain.tsx'; import ManageTeam from './partials/ManageTeam/index.ts'; import ManageTokens from './partials/ManageTokens/ManageTokens.tsx'; import MintTokens from './partials/MintTokens/index.ts'; @@ -84,6 +85,13 @@ const CompletedAction = ({ action }: CompletedActionProps) => { case ColonyActionType.RemoveVerifiedMembersMotion: case ColonyActionType.RemoveVerifiedMembersMultisig: return ; + case ColonyActionType.AddProxyColony: + case ColonyActionType.AddProxyColonyMotion: + case ColonyActionType.AddProxyColonyMultisig: + case ColonyActionType.RemoveProxyColony: + case ColonyActionType.RemoveProxyColonyMotion: + case ColonyActionType.RemoveProxyColonyMultisig: + return ; case ColonyActionType.EmitDomainReputationReward: case ColonyActionType.EmitDomainReputationRewardMotion: case ColonyActionType.EmitDomainReputationRewardMultisig: @@ -152,6 +160,8 @@ const CompletedAction = ({ action }: CompletedActionProps) => { case ColonyActionType.MakeArbitraryTransactionsMotion: case ColonyActionType.EditExpenditureMotion: case ColonyActionType.FundExpenditureMotion: + case ColonyActionType.AddProxyColonyMotion: + case ColonyActionType.RemoveProxyColonyMotion: // @NOTE: Enabling expenditure-related motions above temporarily (action UI will be missing) return ; // @todo: reorganize folder structure after all of the advanced payments will be ready diff --git a/src/components/v5/common/CompletedAction/partials/ManageSupportedChain/ManageSupportedChain.tsx b/src/components/v5/common/CompletedAction/partials/ManageSupportedChain/ManageSupportedChain.tsx new file mode 100644 index 00000000000..5573317769f --- /dev/null +++ b/src/components/v5/common/CompletedAction/partials/ManageSupportedChain/ManageSupportedChain.tsx @@ -0,0 +1,139 @@ +import { Link, PlusMinus } from '@phosphor-icons/react'; +import { type FC } from 'react'; +import React from 'react'; +import { defineMessages } from 'react-intl'; + +import { Action } from '~constants/actions.ts'; +import { ColonyActionType, type ColonyAction } from '~types/graphql.ts'; +import { formatText } from '~utils/intl.ts'; +import { findSupportedChain } from '~utils/proxyColonies.ts'; +import { + TITLE_FIELD_NAME, + ACTION_TYPE_FIELD_NAME, + MANAGE_SUPPORTED_CHAINS_FIELD_NAME, + ManageEntityOperation, + DECISION_METHOD_FIELD_NAME, + DESCRIPTION_FIELD_NAME, +} from '~v5/common/ActionSidebar/consts.ts'; +import { useDecisionMethod } from '~v5/common/CompletedAction/hooks.ts'; +import ChainBadge from '~v5/common/Pills/ChainBadge/ChainBadge.tsx'; +import UserInfoPopover from '~v5/shared/UserInfoPopover/UserInfoPopover.tsx'; + +import { + ActionDataGrid, + ActionSubtitle, + ActionTitle, +} from '../Blocks/index.ts'; +import MeatballMenu from '../MeatballMenu/MeatballMenu.tsx'; +import ActionData from '../rows/ActionData.tsx'; +import ActionTypeRow from '../rows/ActionType.tsx'; +import DecisionMethodRow from '../rows/DecisionMethod.tsx'; +import DescriptionRow from '../rows/Description.tsx'; + +const displayName = 'v5.common.CompletedAction.partials.ManageSupportedChain'; + +interface ManageSupportedChainProps { + action: ColonyAction; +} + +const MSG = defineMessages({ + unknownChain: { + id: `${displayName}.unknownChain`, + defaultMessage: 'Unknown', + }, +}); + +const ManageSupportedChain: FC = ({ action }) => { + const { + initiatorUser, + initiatorAddress, + annotation, + transactionHash, + metadata, + targetChainId, + } = action; + const decisionMethod = useDecisionMethod(action); + const chainInfo = findSupportedChain(targetChainId); + const isAddOperation = action.type.startsWith( + ColonyActionType.AddProxyColony, + ); + + const { + customTitle = formatText( + { + id: 'action.type', + }, + { + actionType: action.type, + }, + ), + } = metadata || {}; + + const subTitle = formatText( + { + id: 'action.title', + }, + { + actionType: action.type, + chain: chainInfo?.shortName, + initiator: + initiatorUser || initiatorAddress ? ( + + {initiatorUser?.profile?.displayName || initiatorAddress} + + ) : null, + }, + ); + + return ( + <> +
    + {customTitle} + +
    + {subTitle} + + + + + } + RowIcon={Link} + /> + + + {annotation?.message && ( + + )} + + ); +}; + +ManageSupportedChain.displayName = displayName; +export default ManageSupportedChain; diff --git a/src/components/v5/common/Pills/ChainBadge/ChainBadge.tsx b/src/components/v5/common/Pills/ChainBadge/ChainBadge.tsx new file mode 100644 index 00000000000..8cf605d9f04 --- /dev/null +++ b/src/components/v5/common/Pills/ChainBadge/ChainBadge.tsx @@ -0,0 +1,21 @@ +import clsx from 'clsx'; +import React, { type FC } from 'react'; + +import PillsBase from '../PillsBase.tsx'; +import { type PillsProps } from '../types.ts'; + +const displayName = 'v5.common.Pills.ChainBadge'; + +const ChainBadge: FC = ({ text, icon, className, ...rest }) => ( + + {text} + +); + +ChainBadge.displayName = displayName; + +export default ChainBadge; diff --git a/src/components/v5/frame/ColonyHome/partials/FundsCards/partials/FundsCardsTotalDescription.tsx b/src/components/v5/frame/ColonyHome/partials/FundsCards/partials/FundsCardsTotalDescription.tsx index 9eb5b6fcd9c..cc0266f6d76 100644 --- a/src/components/v5/frame/ColonyHome/partials/FundsCards/partials/FundsCardsTotalDescription.tsx +++ b/src/components/v5/frame/ColonyHome/partials/FundsCards/partials/FundsCardsTotalDescription.tsx @@ -33,11 +33,12 @@ export const FundsCardsTotalDescription: React.FC< const { colony: { balances, nativeToken }, } = useColonyContext(); - const tokenBalance = getBalanceForTokenAndDomain( + const tokenBalance = getBalanceForTokenAndDomain({ balances, - nativeToken.tokenAddress, - selectedDomain ? Number(selectedDomain.nativeId) : undefined, - ); + tokenAddress: nativeToken.tokenAddress, + tokenChainId: nativeToken.chainMetadata.chainId, + domainId: selectedDomain ? Number(selectedDomain.nativeId) : undefined, + }); return (
    diff --git a/src/components/v5/frame/ColonyHome/partials/TotalInOutBalance/partials/ClaimFundsButton.tsx b/src/components/v5/frame/ColonyHome/partials/TotalInOutBalance/partials/ClaimFundsButton.tsx index 520849ce048..5b72b34b17e 100644 --- a/src/components/v5/frame/ColonyHome/partials/TotalInOutBalance/partials/ClaimFundsButton.tsx +++ b/src/components/v5/frame/ColonyHome/partials/TotalInOutBalance/partials/ClaimFundsButton.tsx @@ -8,6 +8,7 @@ import useColonyFundsClaims from '~hooks/useColonyFundsClaims.ts'; import { useTimeout } from '~hooks/useTimeout.ts'; import { ActionTypes } from '~redux/actionTypes.ts'; import Tooltip from '~shared/Extensions/Tooltip/Tooltip.tsx'; +import { getGroupedUnclaimedClaimsByChain } from '~utils/claims.ts'; import { formatText } from '~utils/intl.ts'; import Button from '~v5/shared/Button/Button.tsx'; @@ -26,9 +27,9 @@ export const ClaimFundsButton = () => { (claim) => !claim.isClaimed && claim.amount !== '0', ); const hasUnclaimedClaims = !!unclaimedClaims.length; - const allClaimableTokenAddresses = Array.from( - new Set(unclaimedClaims.map((claim) => claim.token?.tokenAddress || '')), - ); + + const tokenAddressesGroupedByChain = + getGroupedUnclaimedClaimsByChain(unclaimedClaims); const [isClaimed, setIsClaimed] = useState(false); const [isClaiming, setIsClaiming] = useState(false); @@ -61,10 +62,10 @@ export const ClaimFundsButton = () => { }, }); - const claimToken = useAsyncFunction({ - submit: ActionTypes.CLAIM_TOKEN, - error: ActionTypes.CLAIM_TOKEN_ERROR, - success: ActionTypes.CLAIM_TOKEN_SUCCESS, + const claimTokensOnChains = useAsyncFunction({ + submit: ActionTypes.CLAIM_TOKENS_ON_CHAINS, + error: ActionTypes.CLAIM_TOKENS_ON_CHAINS_ERROR, + success: ActionTypes.CLAIM_TOKENS_ON_CHAINS_SUCCESS, }); if (!isVisible) { @@ -74,9 +75,9 @@ export const ClaimFundsButton = () => { const handleClick = async () => { setIsClaiming(true); try { - await claimToken({ + await claimTokensOnChains({ colonyAddress: colony?.colonyAddress, - tokenAddresses: allClaimableTokenAddresses, + tokenAddressesGroupedByChain, }); setIsClaimed(true); startPollingColonyData(1_000); diff --git a/src/components/v5/shared/SearchSelect/SearchSelect.tsx b/src/components/v5/shared/SearchSelect/SearchSelect.tsx index 37759746b98..52440a6a607 100644 --- a/src/components/v5/shared/SearchSelect/SearchSelect.tsx +++ b/src/components/v5/shared/SearchSelect/SearchSelect.tsx @@ -1,243 +1,135 @@ -import { Binoculars, CaretDown, CaretUp } from '@phosphor-icons/react'; +import { Binoculars } from '@phosphor-icons/react'; import clsx from 'clsx'; -import { AnimatePresence, motion } from 'framer-motion'; -import debounce from 'lodash/debounce'; -import React, { - type FC, - useCallback, - useEffect, - useMemo, - useState, -} from 'react'; +import React, { type FC } from 'react'; -import { accordionAnimation } from '~constants/accordionAnimation.ts'; import { useMobile } from '~hooks/index.ts'; import { SpinnerLoader } from '~shared/Preloaders/index.ts'; import { formatText } from '~utils/intl.ts'; import EmptyContent from '~v5/common/EmptyContent/index.ts'; +import MenuContainer from '~v5/shared/MenuContainer/index.ts'; import Portal from '~v5/shared/Portal/index.ts'; -import MenuContainer from '../MenuContainer/index.ts'; - -import { useSearchSelect } from './hooks.ts'; -import CheckboxSearchItem from './partials/CheckboxSearchItem/index.ts'; +import { useAccordion, useFilterItems, useSearch } from './hooks.ts'; +import { SearchGroup } from './partials/SearchGroup/SearchGroup.tsx'; import SearchInput from './partials/SearchInput/index.ts'; -import SearchItem from './partials/SearchItem/index.ts'; import { type SearchSelectProps } from './types.ts'; const displayName = 'v5.SearchSelect'; -const SearchSelect = React.forwardRef( - ( - { - items, - onSelect, - isLoading, - hideSearchOnMobile, - onSearch, - showEmptyContent = true, - state, - message, - checkboxesList, - additionalButtons, - className, - placeholder, - shouldReturnAddresses = false, - }, - ref, - ) => { - const [searchValue, setSearchValue] = useState(''); - const [debouncedSearchValue, setDebouncedSearchValue] = useState(''); - const isMobile = useMobile(); - const filteredList = useSearchSelect( - items, - debouncedSearchValue, - shouldReturnAddresses, - ); - - useEffect(() => { - const debounceTimeout = setTimeout(() => { - setDebouncedSearchValue(searchValue); - }, 500); - - return () => clearTimeout(debounceTimeout); - }, [searchValue]); - - const defaultOpenedAccordions = useMemo( - () => - items.filter(({ isAccordion }) => isAccordion).map(({ key }) => key), - [items], - ); - - const [openedAccordions, setOpenedAccordions] = useState( - defaultOpenedAccordions, - ); - - const handleSearch = useMemo( - () => debounce(setDebouncedSearchValue, 500), - [setDebouncedSearchValue], - ); - - const onChange = useCallback( - (value: string) => { - onSearch?.(value); - setSearchValue(value); - if (value) { - handleSearch(value); - } else { - setDebouncedSearchValue(''); - } - }, - [handleSearch, onSearch], - ); - - const handleAccordionClick = useCallback((key: string) => { - setOpenedAccordions((prev) => { - if (prev.includes(key)) { - return prev.filter((item) => item !== key); - } - - return [...prev, key]; - }); - }, []); - - const content = ( - <> -
    0 || showEmptyContent, - })} - > - {isMobile && hideSearchOnMobile ? ( -

    - {formatText({ id: 'actions.selectActionType' })} -

    - ) : ( - - )} -
    - {isLoading && ( -
    - -
    +const SearchSelectInner = ( + { + items, + onSelect, + isLoading, + hideSearchOnMobile, + onSearch, + showEmptyContent = true, + showSearchValueAsOption = false, + emptyContent, + state, + message, + checkboxesList, + additionalButtons, + className, + placeholder, + renderOption, + }: SearchSelectProps, + ref: React.ForwardedRef, +) => { + const isMobile = useMobile(); + + const { openedAccordions, onAccordionClick } = useAccordion(items); + const { searchValue, debouncedSearchValue, onChange } = useSearch(onSearch); + const filteredList = useFilterItems( + items, + debouncedSearchValue, + showSearchValueAsOption, + ); + + const contentFallback = + showEmptyContent && + (emptyContent || ( + + )); + + const content = ( + <> +
    0 || showEmptyContent, + })} + > + {isMobile && hideSearchOnMobile ? ( +

    + {formatText({ id: 'actions.selectActionType' })} +

    + ) : ( + )} - {!isLoading && ( -
    -
    - {filteredList.length > 0 - ? filteredList.map(({ options, title, isAccordion, key }) => - isAccordion ? ( -
    -
    -
    - {formatText(title)} -
    - -
    - - {openedAccordions.includes(key) && ( - - {checkboxesList ? ( - - ) : ( - - )} - - )} - -
    - ) : ( -
    -
    - {formatText(title)} -
    - {checkboxesList ? ( - - ) : ( - - )} -
    - ), - ) - : showEmptyContent && ( - - )} -
    +
    + {isLoading && ( +
    + +
    + )} + {!isLoading && ( +
    +
    + {filteredList.length > 0 + ? filteredList.map(({ key, ...rest }) => ( + onAccordionClick(key)} + onSelect={onSelect} + isOpen={openedAccordions.includes(key)} + renderOption={renderOption} + checkboxesList={checkboxesList} + /> + )) + : contentFallback}
    +
    + )} + + ); + + return ( + + - ); - - return ( - - - {content} - {additionalButtons} - - - ); - }, -); + hasShadow + rounded="s" + ref={ref} + > + {content} + {additionalButtons} + + + ); +}; + +const SearchSelect = React.forwardRef(SearchSelectInner) as ( + props: SearchSelectProps & { ref?: React.ForwardedRef }, +) => ReturnType; (SearchSelect as FC).displayName = displayName; diff --git a/src/components/v5/shared/SearchSelect/hooks.ts b/src/components/v5/shared/SearchSelect/hooks.ts index 4f2f0e3fcb8..9dac886120c 100644 --- a/src/components/v5/shared/SearchSelect/hooks.ts +++ b/src/components/v5/shared/SearchSelect/hooks.ts @@ -1,63 +1,64 @@ import { utils } from 'ethers'; -import { useMemo } from 'react'; +import debounce from 'lodash/debounce'; +import { useMemo, useState, useEffect, useCallback } from 'react'; import { formatText } from '~utils/intl.ts'; -import { type SearchSelectOptionProps } from './types.ts'; +import { + isUserSearchSelectOption, + type SearchSelectOptionProps, +} from './types.ts'; -export const useSearchSelect = ( - items: SearchSelectOptionProps[], +export const useFilterItems = ( + items: SearchSelectOptionProps[], searchValue: string, - shouldReturnAddresses: boolean, + showSearchValueAsOption?: boolean, ) => { - const searchedOptions = useMemo( - () => - items.map((item) => { - const filteredOptions = item.options.filter((option) => { - const searchQuery = searchValue.toLowerCase(); - const optionValue = - typeof option.value === 'string' - ? option.value.replace('-', ' ').toLowerCase() - : option.value; - const optionUserName = formatText(option.label).toLowerCase(); - - return [optionValue, optionUserName].some((value) => - value.toString().includes(searchQuery), - ); - }); - - const options = (() => { - if (filteredOptions.length > 0) { - return filteredOptions; - } - - if ( - shouldReturnAddresses && - searchValue && - utils.isHexString(searchValue) - ) { - // Return search value as an option - return [ - { - ...item.options[0], - avatar: item.options[0]?.showAvatar ? '' : undefined, - value: searchValue, - label: searchValue, - walletAddress: searchValue, - }, - ]; - } - - return []; - })(); - - return { - ...item, - options, - }; - }), - [items, searchValue, shouldReturnAddresses], - ); + const searchedOptions = useMemo(() => { + const normalizeOptionValue = (value) => + typeof value === 'string' + ? value.toLowerCase().replace('-', ' ') + : value.toString(); + + const normalizeOptionLabel = (label) => formatText(label).toLowerCase(); + + const matchesSearch = (value, searchQuery) => value.includes(searchQuery); + + const getFallbackOption = (item) => ({ + ...item.options[0], + avatar: + isUserSearchSelectOption(item.options[0]) && item.options[0].showAvatar + ? '' + : undefined, + value: searchValue, + label: searchValue, + walletAddress: searchValue, + }); + + const searchQuery = searchValue.toLowerCase(); + + return items.map((item) => { + const filteredOptions = item.options.filter((option) => + [ + normalizeOptionValue(option.value), + normalizeOptionLabel(option.label), + ].some((value) => matchesSearch(value, searchQuery)), + ); + const shouldShowFallback = + searchValue && + !filteredOptions.length && + showSearchValueAsOption && + utils.isHexString(searchValue) && + item.options[0]; + + return { + ...item, + options: shouldShowFallback + ? [getFallbackOption(item)] + : filteredOptions, + }; + }); + }, [items, searchValue, showSearchValueAsOption]); const filteredOptions = useMemo( () => searchedOptions.filter((item) => item.options.length > 0), @@ -66,3 +67,59 @@ export const useSearchSelect = ( return filteredOptions; }; + +export const useAccordion = (items: SearchSelectOptionProps[]) => { + const defaultOpenedAccordions = useMemo( + () => items.filter(({ isAccordion }) => isAccordion).map(({ key }) => key), + [items], + ); + + const [openedAccordions, setOpenedAccordions] = useState( + defaultOpenedAccordions, + ); + + const onAccordionClick = useCallback((key: string) => { + setOpenedAccordions((prev) => { + if (prev.includes(key)) { + return prev.filter((item) => item !== key); + } + + return [...prev, key]; + }); + }, []); + + return { openedAccordions, onAccordionClick }; +}; + +export const useSearch = (onSearch?: (value: string) => void) => { + const [searchValue, setSearchValue] = useState(''); + const [debouncedSearchValue, setDebouncedSearchValue] = useState(''); + + useEffect(() => { + const debounceTimeout = setTimeout(() => { + setDebouncedSearchValue(searchValue); + }, 500); + + return () => clearTimeout(debounceTimeout); + }, [searchValue]); + + const handleSearch = useMemo( + () => debounce((value: string) => setDebouncedSearchValue(value), 500), + [], + ); + + const onChange = useCallback( + (value: string) => { + onSearch?.(value); + setSearchValue(value); + if (value) { + handleSearch(value); + } else { + setDebouncedSearchValue(''); + } + }, + [handleSearch, onSearch], + ); + + return { searchValue, debouncedSearchValue, onChange }; +}; diff --git a/src/components/v5/shared/SearchSelect/partials/AccordionWrapper/AccordionWrapper.tsx b/src/components/v5/shared/SearchSelect/partials/AccordionWrapper/AccordionWrapper.tsx new file mode 100644 index 00000000000..f4ff53d9eab --- /dev/null +++ b/src/components/v5/shared/SearchSelect/partials/AccordionWrapper/AccordionWrapper.tsx @@ -0,0 +1,50 @@ +import { CaretUp, CaretDown } from '@phosphor-icons/react'; +import { AnimatePresence, motion } from 'framer-motion'; +import React from 'react'; +import { type FC, type PropsWithChildren } from 'react'; + +import { accordionAnimation } from '~constants/accordionAnimation.ts'; + +interface AccordionWrapperProps extends PropsWithChildren { + title: React.ReactNode; + onClick: () => void; + isOpen?: boolean; +} + +export const AccordionWrapper: FC = ({ + title, + children, + onClick, + isOpen, +}) => { + return ( +
    +
    + {title} + +
    + + {isOpen && ( + + {children} + + )} + +
    + ); +}; diff --git a/src/components/v5/shared/SearchSelect/partials/CheckboxSearchItem/CheckboxSearchItem.tsx b/src/components/v5/shared/SearchSelect/partials/CheckboxSearchItem/CheckboxSearchItem.tsx index 973b2bbc2bf..0a6f6e4ad7a 100644 --- a/src/components/v5/shared/SearchSelect/partials/CheckboxSearchItem/CheckboxSearchItem.tsx +++ b/src/components/v5/shared/SearchSelect/partials/CheckboxSearchItem/CheckboxSearchItem.tsx @@ -1,28 +1,26 @@ -import { SealCheck } from '@phosphor-icons/react'; import clsx from 'clsx'; -import React, { type FC } from 'react'; +import React from 'react'; -import { DomainColor } from '~gql'; import { useMobile } from '~hooks/index.ts'; -import { getEnumValueFromKey } from '~utils/getEnumValueFromKey.ts'; import { formatText } from '~utils/intl.ts'; -import { getTeamColor } from '~utils/teams.ts'; import Checkbox from '~v5/common/Checkbox/Checkbox.tsx'; import ExtensionsStatusBadge from '~v5/common/Pills/ExtensionStatusBadge/index.ts'; -import { sortDisabled } from '~v5/shared/SearchSelect/utils.ts'; -import { TokenAvatar } from '~v5/shared/TokenAvatar/TokenAvatar.tsx'; -import UserAvatar from '~v5/shared/UserAvatar/index.ts'; +import { + hasOptionVisualElement, + sortDisabled, +} from '~v5/shared/SearchSelect/utils.ts'; import { type CheckboxSearchItemProps } from './types.ts'; const displayName = 'v5.SearchSelect.partials.CheckboxSearchItem'; -const CheckboxSearchItem: FC = ({ +const CheckboxSearchItem = ({ options, onChange, checkboxesList, isLabelVisible = true, -}) => { + renderOption, +}: CheckboxSearchItemProps) => { const isMobile = useMobile(); return ( @@ -34,116 +32,59 @@ const CheckboxSearchItem: FC = ({ 'sm:w-[12.75rem]': !isLabelVisible && isMobile, })} > - {sortDisabled(options).map( - ({ - label, - value, - isDisabled, - avatar, - showAvatar, - color, - walletAddress = '', - token, - isVerified, - }) => { - const firstDisabledOption = options.filter( - (option) => option.isDisabled, - )[0]; - const labelText = formatText(label || ''); + {sortDisabled(options).map((option) => { + const { value, isDisabled } = option; + const firstDisabledOption = options.filter((o) => o.isDisabled)[0]; - const hasAvatar = showAvatar || !!color || !!token; - const teamColor = getTeamColor( - color ? getEnumValueFromKey(DomainColor, color) : undefined, - ); + const hasVisual = hasOptionVisualElement(option); - return ( -
  • -
  • - ); - }, - )} +
+ )} + + + + ); + })} ); }; diff --git a/src/components/v5/shared/SearchSelect/partials/CheckboxSearchItem/types.ts b/src/components/v5/shared/SearchSelect/partials/CheckboxSearchItem/types.ts index c5d204b118f..705e40773c2 100644 --- a/src/components/v5/shared/SearchSelect/partials/CheckboxSearchItem/types.ts +++ b/src/components/v5/shared/SearchSelect/partials/CheckboxSearchItem/types.ts @@ -1,8 +1,12 @@ -import { type SearchSelectOption } from '~v5/shared/SearchSelect/types.ts'; +import { + type SearchSelectOption, + type SearchSelectProps, +} from '~v5/shared/SearchSelect/types.ts'; -export interface CheckboxSearchItemProps { +export interface CheckboxSearchItemProps + extends Pick, 'renderOption'> { checkboxesList?: string[]; - options: SearchSelectOption[]; + options: SearchSelectOption[]; onChange?: (value: string | number) => void; isLabelVisible?: boolean; } diff --git a/src/components/v5/shared/SearchSelect/partials/OptionRenderer/IconOptionRenderer.tsx b/src/components/v5/shared/SearchSelect/partials/OptionRenderer/IconOptionRenderer.tsx new file mode 100644 index 00000000000..6c90937e291 --- /dev/null +++ b/src/components/v5/shared/SearchSelect/partials/OptionRenderer/IconOptionRenderer.tsx @@ -0,0 +1,19 @@ +import React from 'react'; + +import { formatText } from '~utils/intl.ts'; +import { type IconOptionRendererProps } from '~v5/shared/SearchSelect/types.ts'; + +export const renderIconOption: IconOptionRendererProps = ( + option, + isLabelVisible, +) => { + const { icon: Icon, label } = option; + const labelText = formatText(label || ''); + + return ( + <> + {Icon && } + {isLabelVisible && labelText} + + ); +}; diff --git a/src/components/v5/shared/SearchSelect/partials/OptionRenderer/TeamOptionRenderer.tsx b/src/components/v5/shared/SearchSelect/partials/OptionRenderer/TeamOptionRenderer.tsx new file mode 100644 index 00000000000..d6f3eb56668 --- /dev/null +++ b/src/components/v5/shared/SearchSelect/partials/OptionRenderer/TeamOptionRenderer.tsx @@ -0,0 +1,37 @@ +import clsx from 'clsx'; +import React from 'react'; + +import { DomainColor } from '~gql'; +import { getEnumValueFromKey } from '~utils/getEnumValueFromKey.ts'; +import { formatText } from '~utils/intl.ts'; +import { getTeamColor } from '~utils/teams.ts'; +import { type TeamOptionRendererProps } from '~v5/shared/SearchSelect/types.ts'; + +export const renderTeamOption: TeamOptionRendererProps = ( + option, + isLabelVisible, + isMobile, +) => { + const { color, label } = option; + const labelText = formatText(label || ''); + const teamColor = getTeamColor( + color ? getEnumValueFromKey(DomainColor, color) : undefined, + ); + + return ( + <> + {color && !isLabelVisible && ( +
+ )} + {color && isLabelVisible && ( + + )} + {isLabelVisible && labelText} + + ); +}; diff --git a/src/components/v5/shared/SearchSelect/partials/OptionRenderer/TokenOptionRenderer.tsx b/src/components/v5/shared/SearchSelect/partials/OptionRenderer/TokenOptionRenderer.tsx new file mode 100644 index 00000000000..2f15a962a35 --- /dev/null +++ b/src/components/v5/shared/SearchSelect/partials/OptionRenderer/TokenOptionRenderer.tsx @@ -0,0 +1,29 @@ +import React from 'react'; + +import { formatText } from '~utils/intl.ts'; +import { type TokenOptionRendererProps } from '~v5/shared/SearchSelect/types.ts'; +import { TokenAvatar } from '~v5/shared/TokenAvatar/TokenAvatar.tsx'; + +export const renderTokenOption: TokenOptionRendererProps = ( + option, + isLabelVisible, +) => { + const { token, label } = option; + const labelText = formatText(label || ''); + + return ( + <> + {!!token && ( +
+ +
+ )} + {isLabelVisible && labelText} + + ); +}; diff --git a/src/components/v5/shared/SearchSelect/partials/OptionRenderer/UserOptionRenderer.tsx b/src/components/v5/shared/SearchSelect/partials/OptionRenderer/UserOptionRenderer.tsx new file mode 100644 index 00000000000..7395b0f5b8b --- /dev/null +++ b/src/components/v5/shared/SearchSelect/partials/OptionRenderer/UserOptionRenderer.tsx @@ -0,0 +1,32 @@ +import { SealCheck } from '@phosphor-icons/react'; +import React from 'react'; + +import { formatText } from '~utils/intl.ts'; +import { type UserOptionRendererProps } from '~v5/shared/SearchSelect/types.ts'; +import UserAvatar from '~v5/shared/UserAvatar/UserAvatar.tsx'; + +export const renderUserOption: UserOptionRendererProps = ( + option, + isLabelVisible, +) => { + const { showAvatar, avatar, walletAddress = '', label, isVerified } = option; + const labelText = formatText(label || ''); + + return ( + <> + {showAvatar && ( + 0 ? avatar : undefined} + userAddress={walletAddress} + size={20} + /> + )} + {isLabelVisible && labelText} + {!label && {walletAddress}} + {isVerified && ( + + )} + + ); +}; diff --git a/src/components/v5/shared/SearchSelect/partials/OptionRenderer/WithBadgesOptionRenderer.tsx b/src/components/v5/shared/SearchSelect/partials/OptionRenderer/WithBadgesOptionRenderer.tsx new file mode 100644 index 00000000000..880fdf5ec62 --- /dev/null +++ b/src/components/v5/shared/SearchSelect/partials/OptionRenderer/WithBadgesOptionRenderer.tsx @@ -0,0 +1,35 @@ +import React from 'react'; + +import { formatText } from '~utils/intl.ts'; +import ExtensionsStatusBadge from '~v5/common/Pills/ExtensionStatusBadge/index.ts'; +import { type WithBadgesOptionRendererProps } from '~v5/shared/SearchSelect/types.ts'; + +export const renderWithBadgesOption: WithBadgesOptionRendererProps = ( + option, + isLabelVisible, +) => { + const { label, isComingSoon, isNew } = option; + const labelText = formatText(label || ''); + + return ( + <> + {isLabelVisible && labelText} + {isComingSoon && ( +
+ +
+ )} + {isNew && ( +
+ +
+ )} + + ); +}; diff --git a/src/components/v5/shared/SearchSelect/partials/SearchGroup/SearchGroup.tsx b/src/components/v5/shared/SearchSelect/partials/SearchGroup/SearchGroup.tsx new file mode 100644 index 00000000000..bd105284518 --- /dev/null +++ b/src/components/v5/shared/SearchSelect/partials/SearchGroup/SearchGroup.tsx @@ -0,0 +1,63 @@ +import React from 'react'; + +import { formatText } from '~utils/intl.ts'; +import { + type SearchSelectOptionProps, + type SearchSelectProps, +} from '~v5/shared/SearchSelect/types.ts'; + +import { AccordionWrapper } from '../AccordionWrapper/AccordionWrapper.tsx'; +import CheckboxSearchItem from '../CheckboxSearchItem/CheckboxSearchItem.tsx'; +import SearchItem from '../SearchItem/SearchItem.tsx'; + +type SearchGroupProps = SearchSelectOptionProps & + Pick, 'checkboxesList' | 'onSelect' | 'renderOption'> & { + onClick: () => void; + isOpen?: boolean; + }; + +export const SearchGroup = ({ + isAccordion, + options, + title: titleDescriptor, + checkboxesList, + onClick, + onSelect, + renderOption, + isOpen, +}: SearchGroupProps) => { + const title = titleDescriptor ? ( +
+ {formatText(titleDescriptor)} +
+ ) : null; + const content = checkboxesList ? ( + + ) : ( + + ); + + if (isAccordion) { + return ( + + {content} + + ); + } + + return ( +
+ {title} + {content} +
+ ); +}; diff --git a/src/components/v5/shared/SearchSelect/partials/SearchItem/SearchItem.tsx b/src/components/v5/shared/SearchSelect/partials/SearchItem/SearchItem.tsx index 630fb4738ec..bc4883f3741 100644 --- a/src/components/v5/shared/SearchSelect/partials/SearchItem/SearchItem.tsx +++ b/src/components/v5/shared/SearchSelect/partials/SearchItem/SearchItem.tsx @@ -1,26 +1,22 @@ -import { CircleWavyCheck } from '@phosphor-icons/react'; import clsx from 'clsx'; -import React, { type FC } from 'react'; +import React from 'react'; -import { DomainColor } from '~gql'; import { useMobile } from '~hooks/index.ts'; -import { getEnumValueFromKey } from '~utils/getEnumValueFromKey.ts'; -import { formatText } from '~utils/intl.ts'; -import { getTeamColor } from '~utils/teams.ts'; -import ExtensionsStatusBadge from '~v5/common/Pills/ExtensionStatusBadge/index.ts'; -import { sortDisabled } from '~v5/shared/SearchSelect/utils.ts'; -import { TokenAvatar } from '~v5/shared/TokenAvatar/TokenAvatar.tsx'; -import { UserAvatar } from '~v5/shared/UserAvatar/UserAvatar.tsx'; +import { + hasOptionVisualElement, + sortDisabled, +} from '~v5/shared/SearchSelect/utils.ts'; import { type SearchItemProps } from './types.ts'; const displayName = 'v5.SearchSelect.partials.SearchItem'; -const SearchItem: FC = ({ +const SearchItem = ({ options, onChange, isLabelVisible = true, -}) => { + renderOption, +}: SearchItemProps) => { const isMobile = useMobile(); return ( @@ -32,116 +28,43 @@ const SearchItem: FC = ({ 'sm:w-[12.75rem]': !isLabelVisible && isMobile, })} > - {sortDisabled(options).map( - ({ - label, - value, - isDisabled, - isComingSoon, - isNew, - avatar, - showAvatar, - color, - walletAddress = '', - token, - isVerified, - }) => { - const labelText = formatText(label || ''); + {sortDisabled(options).map((option) => { + const { value, isDisabled } = option; - const hasAvatar = showAvatar || !!color || !!token; - const teamColor = getTeamColor( - color ? getEnumValueFromKey(DomainColor, color) : undefined, - ); + const hasVisual = hasOptionVisualElement(option); - return ( -
  • + -
  • - ); - }, - )} +
    + {renderOption(option, isLabelVisible, isMobile)} +
    + + + ); + })} ); }; diff --git a/src/components/v5/shared/SearchSelect/partials/SearchItem/types.ts b/src/components/v5/shared/SearchSelect/partials/SearchItem/types.ts index 6cba842a1af..80f4dd990f9 100644 --- a/src/components/v5/shared/SearchSelect/partials/SearchItem/types.ts +++ b/src/components/v5/shared/SearchSelect/partials/SearchItem/types.ts @@ -1,7 +1,11 @@ -import { type SearchSelectOption } from '~v5/shared/SearchSelect/types.ts'; +import { + type SearchSelectProps, + type SearchSelectOption, +} from '~v5/shared/SearchSelect/types.ts'; -export interface SearchItemProps { - options: SearchSelectOption[]; +export interface SearchItemProps + extends Pick, 'renderOption'> { + options: SearchSelectOption[]; onChange?: (value: string | number) => void; isLabelVisible?: boolean; } diff --git a/src/components/v5/shared/SearchSelect/types.ts b/src/components/v5/shared/SearchSelect/types.ts index 0b165547e33..26944f212df 100644 --- a/src/components/v5/shared/SearchSelect/types.ts +++ b/src/components/v5/shared/SearchSelect/types.ts @@ -1,44 +1,96 @@ +import { type Icon } from '@phosphor-icons/react'; import { type MessageDescriptor } from 'react-intl'; import { type TokenFragment } from '~gql'; import { type BaseFieldProps } from '~v5/common/Fields/types.ts'; -export interface SearchSelectProps extends BaseFieldProps { - items: SearchSelectOptionProps[]; +export type OptionRenderer = ( + option: SearchSelectOption, + isLabelVisible?: boolean, + isMobile?: boolean, +) => React.ReactNode; + +export interface SearchSelectProps extends BaseFieldProps { + items: SearchSelectOptionProps[]; onSelect?: (value: string) => void; isLoading?: boolean; className?: string; hideSearchOnMobile?: boolean; onSearch?: (value: string) => void; showEmptyContent?: boolean; + showSearchValueAsOption?: boolean; + emptyContent?: React.ReactNode; readonly?: boolean; checkboxesList?: string[]; additionalButtons?: React.ReactNode; placeholder?: string; shouldReturnAddresses?: boolean; + renderOption: OptionRenderer; } -export interface SearchSelectOptionProps { +export interface SearchSelectOptionProps { key: string; - title: MessageDescriptor; + title?: MessageDescriptor; isAccordion?: boolean; - options: SearchSelectOption[]; + options: SearchSelectOption[]; } -export interface SearchSelectOption { - label: MessageDescriptor | string; +export type SearchSelectOption = T & { value: string | number; + label: MessageDescriptor | string; isDisabled?: boolean; +}; + +export interface WithBadgesOption { isComingSoon?: boolean; isNew?: boolean; +} + +export type WithBadgesOptionRendererProps = OptionRenderer; + +export interface UserOption { avatar?: string; - thumbnail?: string; showAvatar?: boolean; - color?: string; walletAddress?: string; - nativeId?: number; - token?: TokenFragment; - isRoot?: boolean; isVerified?: boolean; userReputation?: string; + thumbnail?: string; +} + +export type UserOptionRendererProps = OptionRenderer; + +export interface TokenOption { + token?: TokenFragment; +} + +export type TokenOptionRendererProps = OptionRenderer; + +export interface TeamOption { + color?: string; + isRoot?: boolean; } + +export type TeamOptionRendererProps = OptionRenderer; + +export interface IconOption { + icon: Icon; +} + +export type IconOptionRendererProps = OptionRenderer; + +export type AllSearchSelectOptions = + | UserOption + | TeamOption + | TokenOption + | IconOption + | WithBadgesOption; + +export const isUserSearchSelectOption = ( + option: SearchSelectOption, +): option is SearchSelectOption => { + if ('walletAddress' in option && option.walletAddress) { + return true; + } + + return false; +}; diff --git a/src/components/v5/shared/SearchSelect/utils.ts b/src/components/v5/shared/SearchSelect/utils.ts index df0b0d66235..aefc40d7546 100644 --- a/src/components/v5/shared/SearchSelect/utils.ts +++ b/src/components/v5/shared/SearchSelect/utils.ts @@ -1,8 +1,31 @@ -import { type SearchSelectOption } from './types.ts'; +import { + type IconOption, + type TeamOption, + type TokenOption, + type UserOption, + type SearchSelectOption, +} from './types.ts'; -export const sortDisabled = (options: SearchSelectOption[]) => { +export const sortDisabled = (options: SearchSelectOption[]) => { const enabled = options.filter((option) => !option.isDisabled); const disabled = options.filter((option) => option.isDisabled); return [...enabled, ...disabled]; }; + +type OptionWithVisual = UserOption | TeamOption | TokenOption | IconOption; + +export const hasOptionVisualElement = ( + option: SearchSelectOption, +): boolean => { + if ( + ('showAvatar' in option && option.showAvatar) || + ('color' in option && option.color) || + ('token' in option && !!option.token) || + ('icon' in option && !option.icon) + ) { + return true; + } + + return false; +}; diff --git a/src/constants/abis.ts b/src/constants/abis.ts new file mode 100644 index 00000000000..95ebe9094c8 --- /dev/null +++ b/src/constants/abis.ts @@ -0,0 +1,4992 @@ +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Colony +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +export const colonyAbi = [ + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'txHash', + internalType: 'bytes32', + type: 'bytes32', + indexed: true, + }, + { + name: 'metadata', + internalType: 'string', + type: 'string', + indexed: false, + }, + ], + name: 'Annotation', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'user', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'skillId', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + { + name: 'amount', + internalType: 'int256', + type: 'int256', + indexed: false, + }, + ], + name: 'ArbitraryReputationUpdate', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'target', + internalType: 'address', + type: 'address', + indexed: false, + }, + { name: 'data', internalType: 'bytes', type: 'bytes', indexed: false }, + { name: 'success', internalType: 'bool', type: 'bool', indexed: false }, + ], + name: 'ArbitraryTransaction', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'users', + internalType: 'address[]', + type: 'address[]', + indexed: false, + }, + { + name: 'amounts', + internalType: 'int256[]', + type: 'int256[]', + indexed: false, + }, + ], + name: 'ColonyBootstrapped', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'token', + internalType: 'address', + type: 'address', + indexed: false, + }, + { name: 'fee', internalType: 'uint256', type: 'uint256', indexed: false }, + { + name: 'payoutRemainder', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'ColonyFundsClaimed', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'fromPot', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'toPot', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'amount', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + { + name: 'token', + internalType: 'address', + type: 'address', + indexed: false, + }, + ], + name: 'ColonyFundsMovedBetweenFundingPots', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'colonyNetwork', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'token', + internalType: 'address', + type: 'address', + indexed: false, + }, + ], + name: 'ColonyInitialised', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'metadata', + internalType: 'string', + type: 'string', + indexed: false, + }, + ], + name: 'ColonyMetadata', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'metadata', + internalType: 'string', + type: 'string', + indexed: false, + }, + ], + name: 'ColonyMetadataDelta', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'rewardInverse', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'ColonyRewardInverseSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { name: 'user', internalType: 'address', type: 'address', indexed: true }, + { + name: 'domainId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { name: 'role', internalType: 'uint8', type: 'uint8', indexed: true }, + { name: 'setTo', internalType: 'bool', type: 'bool', indexed: false }, + ], + name: 'ColonyRoleSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'oldVersion', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + { + name: 'newVersion', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'ColonyUpgraded', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'domainId', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'DomainAdded', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'domainId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'deprecated', + internalType: 'bool', + type: 'bool', + indexed: false, + }, + ], + name: 'DomainDeprecated', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'token', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'domainId', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + { name: 'fee', internalType: 'uint256', type: 'uint256', indexed: false }, + { + name: 'payoutRemainder', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'DomainFundsClaimed', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'domainId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'metadata', + internalType: 'string', + type: 'string', + indexed: false, + }, + ], + name: 'DomainMetadata', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'expenditureId', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'ExpenditureAdded', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'expenditureId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + ], + name: 'ExpenditureCancelled', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'expenditureId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { name: 'slot', internalType: 'uint256', type: 'uint256', indexed: true }, + { + name: 'claimDelay', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'ExpenditureClaimDelaySet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'expenditureId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + ], + name: 'ExpenditureFinalized', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'globalClaimDelay', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'ExpenditureGlobalClaimDelaySet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'expenditureId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + ], + name: 'ExpenditureLocked', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'expenditureId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'metadata', + internalType: 'string', + type: 'string', + indexed: false, + }, + ], + name: 'ExpenditureMetadataSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'expenditureId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { name: 'slot', internalType: 'uint256', type: 'uint256', indexed: true }, + { + name: 'payoutModifier', + internalType: 'int256', + type: 'int256', + indexed: false, + }, + ], + name: 'ExpenditurePayoutModifierSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'expenditureId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { name: 'slot', internalType: 'uint256', type: 'uint256', indexed: true }, + { + name: 'token', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'amount', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'ExpenditurePayoutSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'expenditureId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { name: 'slot', internalType: 'uint256', type: 'uint256', indexed: true }, + { + name: 'recipient', + internalType: 'address', + type: 'address', + indexed: true, + }, + ], + name: 'ExpenditureRecipientSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'expenditureId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { name: 'slot', internalType: 'uint256', type: 'uint256', indexed: true }, + { + name: 'skillId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + ], + name: 'ExpenditureSkillSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'expenditureId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'storageSlot', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { name: 'mask', internalType: 'bool[]', type: 'bool[]', indexed: false }, + { + name: 'keys', + internalType: 'bytes32[]', + type: 'bytes32[]', + indexed: false, + }, + { + name: 'value', + internalType: 'bytes32', + type: 'bytes32', + indexed: false, + }, + ], + name: 'ExpenditureStateChanged', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'expenditureId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'owner', + internalType: 'address', + type: 'address', + indexed: true, + }, + ], + name: 'ExpenditureTransferred', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'fundingPotId', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'FundingPotAdded', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'localSkillId', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'LocalSkillAdded', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'localSkillId', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + { + name: 'deprecated', + internalType: 'bool', + type: 'bool', + indexed: false, + }, + ], + name: 'LocalSkillDeprecated', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'authority', + internalType: 'address', + type: 'address', + indexed: true, + }, + ], + name: 'LogSetAuthority', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'owner', + internalType: 'address', + type: 'address', + indexed: true, + }, + ], + name: 'LogSetOwner', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'userAddress', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'relayerAddress', + internalType: 'address payable', + type: 'address', + indexed: false, + }, + { name: 'payload', internalType: 'bytes', type: 'bytes', indexed: false }, + ], + name: 'MetaTransactionExecuted', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'paymentId', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'PaymentAdded', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'paymentId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + ], + name: 'PaymentFinalized', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'paymentId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'token', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'amount', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'PaymentPayoutSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'paymentId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'recipient', + internalType: 'address', + type: 'address', + indexed: false, + }, + ], + name: 'PaymentRecipientSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'paymentId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'skillId', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'PaymentSkillSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'fundingPotId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'token', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'amount', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'PayoutClaimed', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { name: 'id', internalType: 'uint256', type: 'uint256', indexed: false }, + { + name: 'slot', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + { + name: 'token', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'tokenPayout', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'PayoutClaimed', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: '_chainId', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + { + name: '_token', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: '_amount', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'ProxyColonyFundsClaimed', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'destinationChainId', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + { + name: 'salt', + internalType: 'bytes32', + type: 'bytes32', + indexed: false, + }, + ], + name: 'ProxyColonyRequested', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'rewardPayoutId', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + { + name: 'user', + internalType: 'address', + type: 'address', + indexed: false, + }, + { name: 'fee', internalType: 'uint256', type: 'uint256', indexed: false }, + { + name: 'rewardRemainder', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'RewardPayoutClaimed', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'rewardPayoutId', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'RewardPayoutCycleEnded', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'rewardPayoutId', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'RewardPayoutCycleStarted', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'taskId', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'TaskAdded', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'taskId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'specificationHash', + internalType: 'bytes32', + type: 'bytes32', + indexed: false, + }, + ], + name: 'TaskBriefSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'taskId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + ], + name: 'TaskCanceled', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'reviewerAddresses', + internalType: 'address[]', + type: 'address[]', + indexed: false, + }, + ], + name: 'TaskChangedViaSignatures', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'taskId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + ], + name: 'TaskCompleted', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'taskId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'deliverableHash', + internalType: 'bytes32', + type: 'bytes32', + indexed: false, + }, + ], + name: 'TaskDeliverableSubmitted', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'taskId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'dueDate', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'TaskDueDateSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'taskId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + ], + name: 'TaskFinalized', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'taskId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'role', + internalType: 'enum ColonyDataTypes.TaskRole', + type: 'uint8', + indexed: false, + }, + { + name: 'token', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'amount', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'TaskPayoutSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'taskId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'role', + internalType: 'enum ColonyDataTypes.TaskRole', + type: 'uint8', + indexed: false, + }, + { name: 'user', internalType: 'address', type: 'address', indexed: true }, + ], + name: 'TaskRoleUserSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'taskId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'skillId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + ], + name: 'TaskSkillSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'taskId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'role', + internalType: 'enum ColonyDataTypes.TaskRole', + type: 'uint8', + indexed: false, + }, + { name: 'rating', internalType: 'uint8', type: 'uint8', indexed: false }, + ], + name: 'TaskWorkRatingRevealed', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + ], + name: 'TokenUnlocked', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'token', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'amount', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'TokensBurned', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { name: 'who', internalType: 'address', type: 'address', indexed: false }, + { + name: 'amount', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'TokensMinted', + }, + { + type: 'function', + inputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + name: 'DEPRECATED_taskWorkRatings', + outputs: [ + { name: 'count', internalType: 'uint256', type: 'uint256' }, + { name: 'timestamp', internalType: 'uint256', type: 'uint256' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: '_extensionId', internalType: 'bytes32', type: 'bytes32' }, + { name: '_resolver', internalType: 'address', type: 'address' }, + ], + name: 'addExtensionToNetwork', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'addLocalSkill', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_version', internalType: 'uint256', type: 'uint256' }, + { name: '_resolver', internalType: 'address', type: 'address' }, + ], + name: 'addNetworkColonyVersion', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_txHash', internalType: 'bytes32', type: 'bytes32' }, + { name: '_metadata', internalType: 'string', type: 'string' }, + ], + name: 'annotateTransaction', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_approvee', internalType: 'address', type: 'address' }, + { name: '_domainId', internalType: 'uint256', type: 'uint256' }, + { name: '_amount', internalType: 'uint256', type: 'uint256' }, + ], + name: 'approveStake', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'authority', + outputs: [ + { name: '', internalType: 'contract DSAuthority', type: 'address' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: '_users', internalType: 'address[]', type: 'address[]' }, + { name: '_amounts', internalType: 'int256[]', type: 'int256[]' }, + ], + name: 'bootstrapColony', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_token', internalType: 'address', type: 'address' }, + { name: '_amount', internalType: 'uint256', type: 'uint256' }, + ], + name: 'burnTokens', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: '_slot', internalType: 'uint256', type: 'uint256' }], + name: 'checkNotAdditionalProtectedVariable', + outputs: [], + stateMutability: 'pure', + }, + { + type: 'function', + inputs: [ + { name: '_destinationChainId', internalType: 'uint256', type: 'uint256' }, + { name: '_salt', internalType: 'bytes32', type: 'bytes32' }, + ], + name: 'createProxyColony', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_user', internalType: 'address', type: 'address' }, + { name: '_domainId', internalType: 'uint256', type: 'uint256' }, + { name: '_amount', internalType: 'uint256', type: 'uint256' }, + ], + name: 'deobligateStake', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_extensionId', internalType: 'bytes32', type: 'bytes32' }, + { name: '_deprecated', internalType: 'bool', type: 'bool' }, + ], + name: 'deprecateExtension', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_localSkillId', internalType: 'uint256', type: 'uint256' }, + { name: '_deprecated', internalType: 'bool', type: 'bool' }, + ], + name: 'deprecateLocalSkill', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + name: 'domains', + outputs: [ + { name: 'skillId', internalType: 'uint256', type: 'uint256' }, + { name: 'fundingPotId', internalType: 'uint256', type: 'uint256' }, + { name: 'deprecated', internalType: 'bool', type: 'bool' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: '_metadata', internalType: 'string', type: 'string' }], + name: 'editColony', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_metadataDelta', internalType: 'string', type: 'string' }, + ], + name: 'editColonyByDelta', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_permissionDomainId', internalType: 'uint256', type: 'uint256' }, + { name: '_childSkillIndex', internalType: 'uint256', type: 'uint256' }, + { name: '_domainId', internalType: 'uint256', type: 'uint256' }, + { name: '_user', internalType: 'address', type: 'address' }, + { name: '_amount', internalType: 'int256', type: 'int256' }, + ], + name: 'emitDomainReputationPenalty', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_domainId', internalType: 'uint256', type: 'uint256' }, + { name: '_user', internalType: 'address', type: 'address' }, + { name: '_amount', internalType: 'int256', type: 'int256' }, + ], + name: 'emitDomainReputationReward', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_skillId', internalType: 'uint256', type: 'uint256' }, + { name: '_user', internalType: 'address', type: 'address' }, + { name: '_amount', internalType: 'int256', type: 'int256' }, + ], + name: 'emitSkillReputationPenalty', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_skillId', internalType: 'uint256', type: 'uint256' }, + { name: '_user', internalType: 'address', type: 'address' }, + { name: '_amount', internalType: 'int256', type: 'int256' }, + ], + name: 'emitSkillReputationReward', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_user', internalType: 'address', type: 'address' }, + { name: '_payload', internalType: 'bytes', type: 'bytes' }, + { name: '_sigR', internalType: 'bytes32', type: 'bytes32' }, + { name: '_sigS', internalType: 'bytes32', type: 'bytes32' }, + { name: '_sigV', internalType: 'uint8', type: 'uint8' }, + ], + name: 'executeMetaTransaction', + outputs: [{ name: 'returnData', internalType: 'bytes', type: 'bytes' }], + stateMutability: 'payable', + }, + { + type: 'function', + inputs: [], + name: 'finishUpgrade', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_user', internalType: 'address', type: 'address' }, + { name: '_obligator', internalType: 'address', type: 'address' }, + { name: '_domainId', internalType: 'uint256', type: 'uint256' }, + ], + name: 'getApproval', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'getColonyNetwork', + outputs: [{ name: '', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: '_localSkillId', internalType: 'uint256', type: 'uint256' }, + ], + name: 'getLocalSkill', + outputs: [ + { + name: 'localSkill', + internalType: 'struct ColonyDataTypes.LocalSkill', + type: 'tuple', + components: [ + { name: 'exists', internalType: 'bool', type: 'bool' }, + { name: 'deprecated', internalType: 'bool', type: 'bool' }, + ], + }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: '_user', internalType: 'address', type: 'address' }], + name: 'getMetatransactionNonce', + outputs: [{ name: 'nonce', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: '_user', internalType: 'address', type: 'address' }, + { name: '_obligator', internalType: 'address', type: 'address' }, + { name: '_domainId', internalType: 'uint256', type: 'uint256' }, + ], + name: 'getObligation', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: '_id', internalType: 'uint256', type: 'uint256' }], + name: 'getPayment', + outputs: [ + { + name: '', + internalType: 'struct ColonyDataTypes.Payment', + type: 'tuple', + components: [ + { + name: 'recipient', + internalType: 'address payable', + type: 'address', + }, + { name: 'finalized', internalType: 'bool', type: 'bool' }, + { name: 'fundingPotId', internalType: 'uint256', type: 'uint256' }, + { name: 'domainId', internalType: 'uint256', type: 'uint256' }, + { name: 'skills', internalType: 'uint256[]', type: 'uint256[]' }, + ], + }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'getPaymentCount', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'getRootLocalSkill', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: '_id', internalType: 'uint256', type: 'uint256' }], + name: 'getTask', + outputs: [ + { name: '', internalType: 'bytes32', type: 'bytes32' }, + { name: '', internalType: 'bytes32', type: 'bytes32' }, + { + name: '', + internalType: 'enum ColonyDataTypes.TaskStatus', + type: 'uint8', + }, + { name: '', internalType: 'uint256', type: 'uint256' }, + { name: '', internalType: 'uint256', type: 'uint256' }, + { name: '', internalType: 'uint256', type: 'uint256' }, + { name: '', internalType: 'uint256', type: 'uint256' }, + { name: '', internalType: 'uint256[]', type: 'uint256[]' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: '_id', internalType: 'uint256', type: 'uint256' }], + name: 'getTaskChangeNonce', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'getTaskCount', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: '_id', internalType: 'uint256', type: 'uint256' }, + { name: '_role', internalType: 'uint8', type: 'uint8' }, + ], + name: 'getTaskRole', + outputs: [ + { + name: 'role', + internalType: 'struct ColonyDataTypes.Role', + type: 'tuple', + components: [ + { name: 'user', internalType: 'address payable', type: 'address' }, + { name: 'rateFail', internalType: 'bool', type: 'bool' }, + { + name: 'rating', + internalType: 'enum ColonyDataTypes.TaskRatings', + type: 'uint8', + }, + ], + }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: '_id', internalType: 'uint256', type: 'uint256' }, + { name: '_role', internalType: 'uint8', type: 'uint8' }, + ], + name: 'getTaskWorkRatingSecret', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: '_id', internalType: 'uint256', type: 'uint256' }], + name: 'getTaskWorkRatingSecretsInfo', + outputs: [ + { name: '', internalType: 'uint256', type: 'uint256' }, + { name: '', internalType: 'uint256', type: 'uint256' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'getToken', + outputs: [{ name: '', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: '_token', internalType: 'address', type: 'address' }, + { name: '_spender', internalType: 'address', type: 'address' }, + ], + name: 'getTokenApproval', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: '_token', internalType: 'address', type: 'address' }], + name: 'getTotalTokenApproval', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'miningChainId', internalType: 'uint256', type: 'uint256' }, + { name: 'newHash', internalType: 'bytes32', type: 'bytes32' }, + { name: 'newNLeaves', internalType: 'uint256', type: 'uint256' }, + ], + name: 'initialiseReputationMining', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_extensionId', internalType: 'bytes32', type: 'bytes32' }, + { name: '_version', internalType: 'uint256', type: 'uint256' }, + ], + name: 'installExtension', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: '_wad', internalType: 'uint256', type: 'uint256' }], + name: 'mintTokens', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_guy', internalType: 'address', type: 'address' }, + { name: '_wad', internalType: 'uint256', type: 'uint256' }, + ], + name: 'mintTokensFor', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: 'data', internalType: 'bytes[]', type: 'bytes[]' }], + name: 'multicall', + outputs: [{ name: 'results', internalType: 'bytes[]', type: 'bytes[]' }], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_user', internalType: 'address', type: 'address' }, + { name: '_domainId', internalType: 'uint256', type: 'uint256' }, + { name: '_amount', internalType: 'uint256', type: 'uint256' }, + ], + name: 'obligateStake', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'owner', + outputs: [{ name: '', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'colonyName', internalType: 'string', type: 'string' }, + { name: 'orbitdb', internalType: 'string', type: 'string' }, + ], + name: 'registerColonyLabel', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { + name: 'authority_', + internalType: 'contract DSAuthority', + type: 'address', + }, + ], + name: 'setAuthority', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_bridgeAddress', internalType: 'address', type: 'address' }, + ], + name: 'setColonyBridgeAddress', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: '_feeInverse', internalType: 'uint256', type: 'uint256' }], + name: 'setNetworkFeeInverse', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: 'owner_', internalType: 'address', type: 'address' }], + name: 'setOwner', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_token', internalType: 'address', type: 'address' }, + { name: '_status', internalType: 'bool', type: 'bool' }, + ], + name: 'setPayoutWhitelist', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: '_amount', internalType: 'uint256', type: 'uint256' }], + name: 'setReputationMiningCycleReward', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_permissionDomainId', internalType: 'uint256', type: 'uint256' }, + { name: '_childSkillIndex', internalType: 'uint256', type: 'uint256' }, + { name: '_obligator', internalType: 'address', type: 'address' }, + { name: '_user', internalType: 'address', type: 'address' }, + { name: '_domainId', internalType: 'uint256', type: 'uint256' }, + { name: '_amount', internalType: 'uint256', type: 'uint256' }, + { name: '_beneficiary', internalType: 'address', type: 'address' }, + ], + name: 'transferStake', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_extensionId', internalType: 'bytes32', type: 'bytes32' }, + ], + name: 'uninstallExtension', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'unlockToken', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: 'orbitdb', internalType: 'string', type: 'string' }], + name: 'updateColonyOrbitDB', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: '_newVersion', internalType: 'uint256', type: 'uint256' }], + name: 'upgrade', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_extensionId', internalType: 'bytes32', type: 'bytes32' }, + { name: '_newVersion', internalType: 'uint256', type: 'uint256' }, + ], + name: 'upgradeExtension', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'permissionDomainId', internalType: 'uint256', type: 'uint256' }, + { name: 'childSkillIndex', internalType: 'uint256', type: 'uint256' }, + { name: 'childDomainId', internalType: 'uint256', type: 'uint256' }, + ], + name: 'validateDomainInheritance', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: '_user', internalType: 'address', type: 'address' }, + { name: '_nonce', internalType: 'uint256', type: 'uint256' }, + { name: '_chainId', internalType: 'uint256', type: 'uint256' }, + { name: '_payload', internalType: 'bytes', type: 'bytes' }, + { name: '_sigR', internalType: 'bytes32', type: 'bytes32' }, + { name: '_sigS', internalType: 'bytes32', type: 'bytes32' }, + { name: '_sigV', internalType: 'uint8', type: 'uint8' }, + ], + name: 'verify', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: 'key', internalType: 'bytes', type: 'bytes' }, + { name: 'value', internalType: 'bytes', type: 'bytes' }, + { name: 'branchMask', internalType: 'uint256', type: 'uint256' }, + { name: 'siblings', internalType: 'bytes32[]', type: 'bytes32[]' }, + ], + name: 'verifyReputationProof', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'version', + outputs: [ + { name: 'colonyVersion', internalType: 'uint256', type: 'uint256' }, + ], + stateMutability: 'pure', + }, +] as const; + +export const colonyAddress = + '0x777760996135F0791E2e1a74aFAA060711197778' as const; + +export const colonyConfig = { address: colonyAddress, abi: colonyAbi } as const; + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// ColonyFunding +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +export const colonyFundingAbi = [ + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'txHash', + internalType: 'bytes32', + type: 'bytes32', + indexed: true, + }, + { + name: 'metadata', + internalType: 'string', + type: 'string', + indexed: false, + }, + ], + name: 'Annotation', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'user', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'skillId', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + { + name: 'amount', + internalType: 'int256', + type: 'int256', + indexed: false, + }, + ], + name: 'ArbitraryReputationUpdate', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'target', + internalType: 'address', + type: 'address', + indexed: false, + }, + { name: 'data', internalType: 'bytes', type: 'bytes', indexed: false }, + { name: 'success', internalType: 'bool', type: 'bool', indexed: false }, + ], + name: 'ArbitraryTransaction', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'users', + internalType: 'address[]', + type: 'address[]', + indexed: false, + }, + { + name: 'amounts', + internalType: 'int256[]', + type: 'int256[]', + indexed: false, + }, + ], + name: 'ColonyBootstrapped', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'token', + internalType: 'address', + type: 'address', + indexed: false, + }, + { name: 'fee', internalType: 'uint256', type: 'uint256', indexed: false }, + { + name: 'payoutRemainder', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'ColonyFundsClaimed', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'fromPot', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'toPot', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'amount', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + { + name: 'token', + internalType: 'address', + type: 'address', + indexed: false, + }, + ], + name: 'ColonyFundsMovedBetweenFundingPots', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'colonyNetwork', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'token', + internalType: 'address', + type: 'address', + indexed: false, + }, + ], + name: 'ColonyInitialised', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'metadata', + internalType: 'string', + type: 'string', + indexed: false, + }, + ], + name: 'ColonyMetadata', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'metadata', + internalType: 'string', + type: 'string', + indexed: false, + }, + ], + name: 'ColonyMetadataDelta', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'rewardInverse', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'ColonyRewardInverseSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { name: 'user', internalType: 'address', type: 'address', indexed: true }, + { + name: 'domainId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { name: 'role', internalType: 'uint8', type: 'uint8', indexed: true }, + { name: 'setTo', internalType: 'bool', type: 'bool', indexed: false }, + ], + name: 'ColonyRoleSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'oldVersion', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + { + name: 'newVersion', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'ColonyUpgraded', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'domainId', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'DomainAdded', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'domainId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'deprecated', + internalType: 'bool', + type: 'bool', + indexed: false, + }, + ], + name: 'DomainDeprecated', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'token', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'domainId', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + { name: 'fee', internalType: 'uint256', type: 'uint256', indexed: false }, + { + name: 'payoutRemainder', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'DomainFundsClaimed', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'domainId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'metadata', + internalType: 'string', + type: 'string', + indexed: false, + }, + ], + name: 'DomainMetadata', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'expenditureId', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'ExpenditureAdded', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'expenditureId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + ], + name: 'ExpenditureCancelled', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'expenditureId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { name: 'slot', internalType: 'uint256', type: 'uint256', indexed: true }, + { + name: 'claimDelay', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'ExpenditureClaimDelaySet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'expenditureId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + ], + name: 'ExpenditureFinalized', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'globalClaimDelay', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'ExpenditureGlobalClaimDelaySet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'expenditureId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + ], + name: 'ExpenditureLocked', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'expenditureId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'metadata', + internalType: 'string', + type: 'string', + indexed: false, + }, + ], + name: 'ExpenditureMetadataSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'expenditureId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { name: 'slot', internalType: 'uint256', type: 'uint256', indexed: true }, + { + name: 'payoutModifier', + internalType: 'int256', + type: 'int256', + indexed: false, + }, + ], + name: 'ExpenditurePayoutModifierSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'expenditureId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { name: 'slot', internalType: 'uint256', type: 'uint256', indexed: true }, + { + name: 'token', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'amount', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'ExpenditurePayoutSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'expenditureId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { name: 'slot', internalType: 'uint256', type: 'uint256', indexed: true }, + { + name: 'recipient', + internalType: 'address', + type: 'address', + indexed: true, + }, + ], + name: 'ExpenditureRecipientSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'expenditureId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { name: 'slot', internalType: 'uint256', type: 'uint256', indexed: true }, + { + name: 'skillId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + ], + name: 'ExpenditureSkillSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'expenditureId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'storageSlot', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { name: 'mask', internalType: 'bool[]', type: 'bool[]', indexed: false }, + { + name: 'keys', + internalType: 'bytes32[]', + type: 'bytes32[]', + indexed: false, + }, + { + name: 'value', + internalType: 'bytes32', + type: 'bytes32', + indexed: false, + }, + ], + name: 'ExpenditureStateChanged', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'expenditureId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'owner', + internalType: 'address', + type: 'address', + indexed: true, + }, + ], + name: 'ExpenditureTransferred', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'fundingPotId', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'FundingPotAdded', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'localSkillId', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'LocalSkillAdded', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'localSkillId', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + { + name: 'deprecated', + internalType: 'bool', + type: 'bool', + indexed: false, + }, + ], + name: 'LocalSkillDeprecated', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'authority', + internalType: 'address', + type: 'address', + indexed: true, + }, + ], + name: 'LogSetAuthority', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'owner', + internalType: 'address', + type: 'address', + indexed: true, + }, + ], + name: 'LogSetOwner', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'paymentId', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'PaymentAdded', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'paymentId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + ], + name: 'PaymentFinalized', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'paymentId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'token', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'amount', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'PaymentPayoutSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'paymentId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'recipient', + internalType: 'address', + type: 'address', + indexed: false, + }, + ], + name: 'PaymentRecipientSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'paymentId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'skillId', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'PaymentSkillSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'fundingPotId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'token', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'amount', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'PayoutClaimed', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { name: 'id', internalType: 'uint256', type: 'uint256', indexed: false }, + { + name: 'slot', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + { + name: 'token', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'tokenPayout', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'PayoutClaimed', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: '_chainId', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + { + name: '_token', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: '_amount', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'ProxyColonyFundsClaimed', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'destinationChainId', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + { + name: 'salt', + internalType: 'bytes32', + type: 'bytes32', + indexed: false, + }, + ], + name: 'ProxyColonyRequested', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'rewardPayoutId', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + { + name: 'user', + internalType: 'address', + type: 'address', + indexed: false, + }, + { name: 'fee', internalType: 'uint256', type: 'uint256', indexed: false }, + { + name: 'rewardRemainder', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'RewardPayoutClaimed', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'rewardPayoutId', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'RewardPayoutCycleEnded', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'rewardPayoutId', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'RewardPayoutCycleStarted', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'taskId', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'TaskAdded', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'taskId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'specificationHash', + internalType: 'bytes32', + type: 'bytes32', + indexed: false, + }, + ], + name: 'TaskBriefSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'taskId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + ], + name: 'TaskCanceled', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'reviewerAddresses', + internalType: 'address[]', + type: 'address[]', + indexed: false, + }, + ], + name: 'TaskChangedViaSignatures', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'taskId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + ], + name: 'TaskCompleted', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'taskId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'deliverableHash', + internalType: 'bytes32', + type: 'bytes32', + indexed: false, + }, + ], + name: 'TaskDeliverableSubmitted', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'taskId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'dueDate', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'TaskDueDateSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'taskId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + ], + name: 'TaskFinalized', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'taskId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'role', + internalType: 'enum ColonyDataTypes.TaskRole', + type: 'uint8', + indexed: false, + }, + { + name: 'token', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'amount', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'TaskPayoutSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'taskId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'role', + internalType: 'enum ColonyDataTypes.TaskRole', + type: 'uint8', + indexed: false, + }, + { name: 'user', internalType: 'address', type: 'address', indexed: true }, + ], + name: 'TaskRoleUserSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'taskId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'skillId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + ], + name: 'TaskSkillSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'taskId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'role', + internalType: 'enum ColonyDataTypes.TaskRole', + type: 'uint8', + indexed: false, + }, + { name: 'rating', internalType: 'uint8', type: 'uint8', indexed: false }, + ], + name: 'TaskWorkRatingRevealed', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + ], + name: 'TokenUnlocked', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'token', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'amount', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'TokensBurned', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'agent', + internalType: 'address', + type: 'address', + indexed: false, + }, + { name: 'who', internalType: 'address', type: 'address', indexed: false }, + { + name: 'amount', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'TokensMinted', + }, + { + type: 'function', + inputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + name: 'DEPRECATED_taskWorkRatings', + outputs: [ + { name: 'count', internalType: 'uint256', type: 'uint256' }, + { name: 'timestamp', internalType: 'uint256', type: 'uint256' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'authority', + outputs: [ + { name: '', internalType: 'contract DSAuthority', type: 'address' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: '_chainId', internalType: 'uint256', type: 'uint256' }, + { name: '_token', internalType: 'address', type: 'address' }, + ], + name: 'claimColonyFunds', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: '_token', internalType: 'address', type: 'address' }], + name: 'claimColonyFunds', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_token', internalType: 'address', type: 'address' }, + { name: '_domainId', internalType: 'uint256', type: 'uint256' }, + ], + name: 'claimDomainFunds', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_id', internalType: 'uint256', type: 'uint256' }, + { name: '_slot', internalType: 'uint256', type: 'uint256' }, + { name: '_token', internalType: 'address', type: 'address' }, + ], + name: 'claimExpenditurePayout', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_id', internalType: 'uint256', type: 'uint256' }, + { name: '_slot', internalType: 'uint256', type: 'uint256' }, + { name: '_chainId', internalType: 'uint256', type: 'uint256' }, + { name: '_token', internalType: 'address', type: 'address' }, + ], + name: 'claimExpenditurePayout', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + name: 'domains', + outputs: [ + { name: 'skillId', internalType: 'uint256', type: 'uint256' }, + { name: 'fundingPotId', internalType: 'uint256', type: 'uint256' }, + { name: 'deprecated', internalType: 'bool', type: 'bool' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: '_domainId', internalType: 'uint256', type: 'uint256' }, + { name: '_amount', internalType: 'uint256', type: 'uint256' }, + { name: '_add', internalType: 'bool', type: 'bool' }, + ], + name: 'editAllowedDomainReputationReceipt', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_permissionDomainId', internalType: 'uint256', type: 'uint256' }, + { name: '_childSkillIndex', internalType: 'uint256', type: 'uint256' }, + { name: '_domainId', internalType: 'uint256', type: 'uint256' }, + { name: '_txdata', internalType: 'bytes', type: 'bytes' }, + { name: '_value', internalType: 'uint256', type: 'uint256' }, + { name: '_chainId', internalType: 'uint256', type: 'uint256' }, + { name: '_token', internalType: 'address', type: 'address' }, + { name: '_amount', internalType: 'uint256', type: 'uint256' }, + ], + name: 'exchangeTokensViaLiFi', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: '_domainId', internalType: 'uint256', type: 'uint256' }], + name: 'getAllowedDomainReputationReceipt', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: '_fundingPotId', internalType: 'uint256', type: 'uint256' }, + ], + name: 'getDomainFromFundingPot', + outputs: [{ name: 'domainId', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: '_id', internalType: 'uint256', type: 'uint256' }, + { name: '_slot', internalType: 'uint256', type: 'uint256' }, + { name: '_token', internalType: 'address', type: 'address' }, + ], + name: 'getExpenditureSlotPayout', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: '_id', internalType: 'uint256', type: 'uint256' }, + { name: '_slot', internalType: 'uint256', type: 'uint256' }, + { name: 'chainId', internalType: 'uint256', type: 'uint256' }, + { name: '_token', internalType: 'address', type: 'address' }, + ], + name: 'getExpenditureSlotPayout', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: '_potId', internalType: 'uint256', type: 'uint256' }], + name: 'getFundingPot', + outputs: [ + { + name: 'associatedType', + internalType: 'enum ColonyDataTypes.FundingPotAssociatedType', + type: 'uint8', + }, + { name: 'associatedTypeId', internalType: 'uint256', type: 'uint256' }, + { name: 'payoutsWeCannotMake', internalType: 'uint256', type: 'uint256' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: '_potId', internalType: 'uint256', type: 'uint256' }, + { name: '_token', internalType: 'address', type: 'address' }, + ], + name: 'getFundingPotBalance', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: '_potId', internalType: 'uint256', type: 'uint256' }, + { name: '_chainId', internalType: 'uint256', type: 'uint256' }, + { name: '_token', internalType: 'address', type: 'address' }, + ], + name: 'getFundingPotBalance', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'getFundingPotCount', + outputs: [{ name: 'count', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: '_potId', internalType: 'uint256', type: 'uint256' }, + { name: '_token', internalType: 'address', type: 'address' }, + ], + name: 'getFundingPotPayout', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: '_token', internalType: 'address', type: 'address' }], + name: 'getNonRewardPotsTotal', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: '_chainId', internalType: 'uint256', type: 'uint256' }, + { name: '_token', internalType: 'address', type: 'address' }, + ], + name: 'getNonRewardPotsTotal', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'getRewardInverse', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: '_permissionDomainId', internalType: 'uint256', type: 'uint256' }, + { name: '_childSkillIndex', internalType: 'uint256', type: 'uint256' }, + { name: '_domainId', internalType: 'uint256', type: 'uint256' }, + { + name: '_fromChildSkillIndex', + internalType: 'uint256', + type: 'uint256', + }, + { name: '_toChildSkillIndex', internalType: 'uint256', type: 'uint256' }, + { name: '_fromPot', internalType: 'uint256', type: 'uint256' }, + { name: '_toPot', internalType: 'uint256', type: 'uint256' }, + { name: '_amount', internalType: 'uint256', type: 'uint256' }, + { name: '_token', internalType: 'address', type: 'address' }, + ], + name: 'moveFundsBetweenPots', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_permissionDomainId', internalType: 'uint256', type: 'uint256' }, + { name: '_childSkillIndex', internalType: 'uint256', type: 'uint256' }, + { name: '_domainId', internalType: 'uint256', type: 'uint256' }, + { + name: '_fromChildSkillIndex', + internalType: 'uint256', + type: 'uint256', + }, + { name: '_toChildSkillIndex', internalType: 'uint256', type: 'uint256' }, + { name: '_fromPot', internalType: 'uint256', type: 'uint256' }, + { name: '_toPot', internalType: 'uint256', type: 'uint256' }, + { name: '_amount', internalType: 'uint256', type: 'uint256' }, + { name: '_chainId', internalType: 'uint256', type: 'uint256' }, + { name: '_token', internalType: 'address', type: 'address' }, + ], + name: 'moveFundsBetweenPots', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_permissionDomainId', internalType: 'uint256', type: 'uint256' }, + { + name: '_fromChildSkillIndex', + internalType: 'uint256', + type: 'uint256', + }, + { name: '_toChildSkillIndex', internalType: 'uint256', type: 'uint256' }, + { name: '_fromPot', internalType: 'uint256', type: 'uint256' }, + { name: '_toPot', internalType: 'uint256', type: 'uint256' }, + { name: '_amount', internalType: 'uint256', type: 'uint256' }, + { name: '_token', internalType: 'address', type: 'address' }, + ], + name: 'moveFundsBetweenPots', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'owner', + outputs: [{ name: '', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: '_chainId', internalType: 'uint256', type: 'uint256' }, + { name: '_token', internalType: 'address', type: 'address' }, + { name: '_domainId', internalType: 'uint256', type: 'uint256' }, + { name: '_amount', internalType: 'uint256', type: 'uint256' }, + ], + name: 'recordClaimedFundsFromBridge', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { + name: 'authority_', + internalType: 'contract DSAuthority', + type: 'address', + }, + ], + name: 'setAuthority', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_id', internalType: 'uint256', type: 'uint256' }, + { name: '_slot', internalType: 'uint256', type: 'uint256' }, + { name: '_token', internalType: 'address', type: 'address' }, + { name: '_amount', internalType: 'uint256', type: 'uint256' }, + ], + name: 'setExpenditurePayout', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_permissionDomainId', internalType: 'uint256', type: 'uint256' }, + { name: '_childSkillIndex', internalType: 'uint256', type: 'uint256' }, + { name: '_id', internalType: 'uint256', type: 'uint256' }, + { name: '_slot', internalType: 'uint256', type: 'uint256' }, + { name: '_chainId', internalType: 'uint256', type: 'uint256' }, + { name: '_token', internalType: 'address', type: 'address' }, + { name: '_amount', internalType: 'uint256', type: 'uint256' }, + ], + name: 'setExpenditurePayout', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_id', internalType: 'uint256', type: 'uint256' }, + { name: '_slot', internalType: 'uint256', type: 'uint256' }, + { name: '_chainId', internalType: 'uint256', type: 'uint256' }, + { name: '_token', internalType: 'address', type: 'address' }, + { name: '_amount', internalType: 'uint256', type: 'uint256' }, + ], + name: 'setExpenditurePayout', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_permissionDomainId', internalType: 'uint256', type: 'uint256' }, + { name: '_childSkillIndex', internalType: 'uint256', type: 'uint256' }, + { name: '_id', internalType: 'uint256', type: 'uint256' }, + { name: '_slot', internalType: 'uint256', type: 'uint256' }, + { name: '_token', internalType: 'address', type: 'address' }, + { name: '_amount', internalType: 'uint256', type: 'uint256' }, + ], + name: 'setExpenditurePayout', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_id', internalType: 'uint256', type: 'uint256' }, + { name: '_slots', internalType: 'uint256[]', type: 'uint256[]' }, + { name: '_token', internalType: 'address', type: 'address' }, + { name: '_amounts', internalType: 'uint256[]', type: 'uint256[]' }, + ], + name: 'setExpenditurePayouts', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: 'owner_', internalType: 'address', type: 'address' }], + name: 'setOwner', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: 'permissionDomainId', internalType: 'uint256', type: 'uint256' }, + { name: 'childSkillIndex', internalType: 'uint256', type: 'uint256' }, + { name: 'childDomainId', internalType: 'uint256', type: 'uint256' }, + ], + name: 'validateDomainInheritance', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, +] as const; + +export const colonyFundingAddress = + '0x777760996135f0791E2e1a74aFAa060711197779' as const; + +export const colonyFundingConfig = { + address: colonyFundingAddress, + abi: colonyFundingAbi, +} as const; + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// ColonyNetwork +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +export const colonyNetworkAbi = [ + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'auction', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'token', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'quantity', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'AuctionCreated', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'bridgeAddress', + internalType: 'address', + type: 'address', + indexed: false, + }, + ], + name: 'BridgeSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'colonyId', + internalType: 'uint256', + type: 'uint256', + indexed: true, + }, + { + name: 'colonyAddress', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'token', + internalType: 'address', + type: 'address', + indexed: false, + }, + ], + name: 'ColonyAdded', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'colony', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'label', + internalType: 'bytes32', + type: 'bytes32', + indexed: false, + }, + ], + name: 'ColonyLabelRegistered', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'resolver', + internalType: 'address', + type: 'address', + indexed: false, + }, + ], + name: 'ColonyNetworkInitialised', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'version', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + { + name: 'resolver', + internalType: 'address', + type: 'address', + indexed: false, + }, + ], + name: 'ColonyVersionAdded', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'extensionId', + internalType: 'bytes32', + type: 'bytes32', + indexed: true, + }, + { + name: 'version', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'ExtensionAddedToNetwork', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'extensionId', + internalType: 'bytes32', + type: 'bytes32', + indexed: true, + }, + { + name: 'colony', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'deprecated', + internalType: 'bool', + type: 'bool', + indexed: false, + }, + ], + name: 'ExtensionDeprecated', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'extensionId', + internalType: 'bytes32', + type: 'bytes32', + indexed: true, + }, + { + name: 'colony', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'version', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'ExtensionInstalled', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'extensionId', + internalType: 'bytes32', + type: 'bytes32', + indexed: true, + }, + { + name: 'colony', + internalType: 'address', + type: 'address', + indexed: true, + }, + ], + name: 'ExtensionUninstalled', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'extensionId', + internalType: 'bytes32', + type: 'bytes32', + indexed: true, + }, + { + name: 'colony', + internalType: 'address', + type: 'address', + indexed: true, + }, + { + name: 'version', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'ExtensionUpgraded', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'authority', + internalType: 'address', + type: 'address', + indexed: true, + }, + ], + name: 'LogSetAuthority', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'owner', + internalType: 'address', + type: 'address', + indexed: true, + }, + ], + name: 'LogSetOwner', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'metaColony', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'token', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'rootSkillId', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'MetaColonyCreated', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'userAddress', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'relayerAddress', + internalType: 'address payable', + type: 'address', + indexed: false, + }, + { name: 'payload', internalType: 'bytes', type: 'bytes', indexed: false }, + ], + name: 'MetaTransactionExecuted', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'miningCycleResolver', + internalType: 'address', + type: 'address', + indexed: false, + }, + ], + name: 'MiningCycleResolverSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'feeInverse', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'NetworkFeeInverseSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'colony', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'destinationChainId', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + { + name: 'salt', + internalType: 'bytes32', + type: 'bytes32', + indexed: false, + }, + ], + name: 'ProxyColonyRequested', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'ens', internalType: 'address', type: 'address', indexed: false }, + { + name: 'rootNode', + internalType: 'bytes32', + type: 'bytes32', + indexed: false, + }, + ], + name: 'RegistrarInitialised', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'miner', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'tokensLost', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'ReputationMinerPenalised', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'hash', + internalType: 'bytes32', + type: 'bytes32', + indexed: false, + }, + { + name: 'nLeaves', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'ReputationMiningCycleComplete', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'inactiveReputationMiningCycle', + internalType: 'address', + type: 'address', + indexed: false, + }, + ], + name: 'ReputationMiningInitialised', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'amount', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'ReputationMiningRewardSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'newHash', + internalType: 'bytes32', + type: 'bytes32', + indexed: false, + }, + { + name: 'newNLeaves', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + { + name: 'stakers', + internalType: 'address[]', + type: 'address[]', + indexed: false, + }, + { + name: 'reward', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'ReputationRootHashSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'colony', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'count', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'ReputationUpdateSentToBridge', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'colony', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'count', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'ReputationUpdateStored', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'skillId', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + { + name: 'parentSkillId', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'SkillAdded', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'tokenAuthorityAddress', + internalType: 'address', + type: 'address', + indexed: false, + }, + ], + name: 'TokenAuthorityDeployed', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'tokenAddress', + internalType: 'address', + type: 'address', + indexed: false, + }, + ], + name: 'TokenDeployed', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'tokenLocking', + internalType: 'address', + type: 'address', + indexed: false, + }, + ], + name: 'TokenLockingAddressSet', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'token', + internalType: 'address', + type: 'address', + indexed: false, + }, + { name: 'status', internalType: 'bool', type: 'bool', indexed: false }, + ], + name: 'TokenWhitelisted', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { name: 'user', internalType: 'address', type: 'address', indexed: true }, + { + name: 'label', + internalType: 'bytes32', + type: 'bytes32', + indexed: false, + }, + ], + name: 'UserLabelRegistered', + }, + { + type: 'function', + inputs: [ + { name: '_version', internalType: 'uint256', type: 'uint256' }, + { name: '_resolver', internalType: 'address', type: 'address' }, + ], + name: 'addColonyVersion', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'authority', + outputs: [ + { name: '', internalType: 'contract DSAuthority', type: 'address' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: '_chainId', internalType: 'uint256', type: 'uint256' }, + { name: '_payload', internalType: 'bytes', type: 'bytes' }, + ], + name: 'bridgeMessage', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_chainId', internalType: 'uint256', type: 'uint256' }, + { name: '_payload', internalType: 'bytes', type: 'bytes' }, + ], + name: 'bridgeMessageToNetwork', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: '_slot', internalType: 'uint256', type: 'uint256' }], + name: 'checkNotAdditionalProtectedVariable', + outputs: [], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: '_user', internalType: 'address', type: 'address' }, + { name: '_payload', internalType: 'bytes', type: 'bytes' }, + { name: '_sigR', internalType: 'bytes32', type: 'bytes32' }, + { name: '_sigS', internalType: 'bytes32', type: 'bytes32' }, + { name: '_sigV', internalType: 'uint8', type: 'uint8' }, + ], + name: 'executeMetaTransaction', + outputs: [{ name: 'returnData', internalType: 'bytes', type: 'bytes' }], + stateMutability: 'payable', + }, + { + type: 'function', + inputs: [{ name: '_id', internalType: 'uint256', type: 'uint256' }], + name: 'getColony', + outputs: [{ name: '', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'getColonyCount', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: '_version', internalType: 'uint256', type: 'uint256' }], + name: 'getColonyVersionResolver', + outputs: [{ name: '', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'getCurrentColonyVersion', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'getFeeInverse', + outputs: [ + { name: '_feeInverse', internalType: 'uint256', type: 'uint256' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'getMetaColony', + outputs: [{ name: '', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: '_user', internalType: 'address', type: 'address' }], + name: 'getMetatransactionNonce', + outputs: [{ name: 'nonce', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'getMiningChainId', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: '_token', internalType: 'address', type: 'address' }], + name: 'getPayoutWhitelist', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'getReputationMiningSkillId', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'getReputationRootHash', + outputs: [{ name: '', internalType: 'bytes32', type: 'bytes32' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'getReputationRootHashNLeaves', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'getReputationRootHashNNodes', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: '_skillId', internalType: 'uint256', type: 'uint256' }], + name: 'getSkill', + outputs: [ + { + name: 'skill', + internalType: 'struct CommonDataTypes.Skill', + type: 'tuple', + components: [ + { name: 'nParents', internalType: 'uint128', type: 'uint128' }, + { name: 'nChildren', internalType: 'uint128', type: 'uint128' }, + { name: 'parents', internalType: 'uint256[]', type: 'uint256[]' }, + { name: 'children', internalType: 'uint256[]', type: 'uint256[]' }, + { + name: 'DEPRECATED_globalSkill', + internalType: 'bool', + type: 'bool', + }, + { name: 'DEPRECATED_deprecated', internalType: 'bool', type: 'bool' }, + ], + }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'getSkillCount', + outputs: [{ name: '', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [], + name: 'getTokenLocking', + outputs: [{ name: '', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: '_resolver', internalType: 'address', type: 'address' }, + { name: '_version', internalType: 'uint256', type: 'uint256' }, + ], + name: 'initialise', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: '_colony', internalType: 'address', type: 'address' }], + name: 'isColony', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: 'data', internalType: 'bytes[]', type: 'bytes[]' }], + name: 'multicall', + outputs: [{ name: 'results', internalType: 'bytes[]', type: 'bytes[]' }], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'owner', + outputs: [{ name: '', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { + name: 'authority_', + internalType: 'contract DSAuthority', + type: 'address', + }, + ], + name: 'setAuthority', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: '_feeInverse', internalType: 'uint256', type: 'uint256' }], + name: 'setFeeInverse', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: 'owner_', internalType: 'address', type: 'address' }], + name: 'setOwner', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_token', internalType: 'address', type: 'address' }, + { name: '_status', internalType: 'bool', type: 'bool' }, + ], + name: 'setPayoutWhitelist', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_tokenLocking', internalType: 'address', type: 'address' }, + ], + name: 'setTokenLocking', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_user', internalType: 'address', type: 'address' }, + { name: '_nonce', internalType: 'uint256', type: 'uint256' }, + { name: '_chainId', internalType: 'uint256', type: 'uint256' }, + { name: '_payload', internalType: 'bytes', type: 'bytes' }, + { name: '_sigR', internalType: 'bytes32', type: 'bytes32' }, + { name: '_sigS', internalType: 'bytes32', type: 'bytes32' }, + { name: '_sigV', internalType: 'uint8', type: 'uint8' }, + ], + name: 'verify', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, +] as const; + +export const colonyNetworkAddress = + '0x777760996135F0791E2e1a74aFAa060711197777' as const; + +export const colonyNetworkConfig = { + address: colonyNetworkAddress, + abi: colonyNetworkAbi, +} as const; + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// ProxyColony +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +export const proxyColonyAbi = [ + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'token', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'domainId', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + { + name: 'balance', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'DomainFundsClaimed', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'authority', + internalType: 'address', + type: 'address', + indexed: true, + }, + ], + name: 'LogSetAuthority', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'owner', + internalType: 'address', + type: 'address', + indexed: true, + }, + ], + name: 'LogSetOwner', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'userAddress', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'relayerAddress', + internalType: 'address payable', + type: 'address', + indexed: false, + }, + { name: 'payload', internalType: 'bytes', type: 'bytes', indexed: false }, + ], + name: 'MetaTransactionExecuted', + }, + { + type: 'event', + anonymous: false, + inputs: [ + { + name: 'token', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'user', + internalType: 'address', + type: 'address', + indexed: false, + }, + { + name: 'amount', + internalType: 'uint256', + type: 'uint256', + indexed: false, + }, + ], + name: 'TransferMade', + }, + { + type: 'function', + inputs: [], + name: 'authority', + outputs: [ + { name: '', internalType: 'contract DSAuthority', type: 'address' }, + ], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [{ name: '_token', internalType: 'address', type: 'address' }], + name: 'claimColonyFunds', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_token', internalType: 'address', type: 'address' }, + { name: '_domainId', internalType: 'uint256', type: 'uint256' }, + ], + name: 'claimDomainFunds', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_user', internalType: 'address', type: 'address' }, + { name: '_payload', internalType: 'bytes', type: 'bytes' }, + { name: '_sigR', internalType: 'bytes32', type: 'bytes32' }, + { name: '_sigS', internalType: 'bytes32', type: 'bytes32' }, + { name: '_sigV', internalType: 'uint8', type: 'uint8' }, + ], + name: 'executeMetaTransaction', + outputs: [{ name: 'returnData', internalType: 'bytes', type: 'bytes' }], + stateMutability: 'payable', + }, + { + type: 'function', + inputs: [{ name: '_user', internalType: 'address', type: 'address' }], + name: 'getMetatransactionNonce', + outputs: [{ name: 'nonce', internalType: 'uint256', type: 'uint256' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { name: '_target', internalType: 'address', type: 'address' }, + { name: '_payload', internalType: 'bytes', type: 'bytes' }, + ], + name: 'makeArbitraryTransaction', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: 'data', internalType: 'bytes[]', type: 'bytes[]' }], + name: 'multicall', + outputs: [{ name: 'results', internalType: 'bytes[]', type: 'bytes[]' }], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [], + name: 'owner', + outputs: [{ name: '', internalType: 'address', type: 'address' }], + stateMutability: 'view', + }, + { + type: 'function', + inputs: [ + { + name: 'authority_', + internalType: 'contract DSAuthority', + type: 'address', + }, + ], + name: 'setAuthority', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [{ name: 'owner_', internalType: 'address', type: 'address' }], + name: 'setOwner', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_token', internalType: 'address', type: 'address' }, + { name: '_recipient', internalType: 'address', type: 'address' }, + { name: '_amount', internalType: 'uint256', type: 'uint256' }, + ], + name: 'transferFromBridge', + outputs: [], + stateMutability: 'nonpayable', + }, + { + type: 'function', + inputs: [ + { name: '_user', internalType: 'address', type: 'address' }, + { name: '_nonce', internalType: 'uint256', type: 'uint256' }, + { name: '_chainId', internalType: 'uint256', type: 'uint256' }, + { name: '_payload', internalType: 'bytes', type: 'bytes' }, + { name: '_sigR', internalType: 'bytes32', type: 'bytes32' }, + { name: '_sigS', internalType: 'bytes32', type: 'bytes32' }, + { name: '_sigV', internalType: 'uint8', type: 'uint8' }, + ], + name: 'verify', + outputs: [{ name: '', internalType: 'bool', type: 'bool' }], + stateMutability: 'view', + }, +] as const; + +export const proxyColonyAddress = + '0x777760996135F0791E2E1a74AFaA060711197781' as const; + +export const proxyColonyConfig = { + address: proxyColonyAddress, + abi: proxyColonyAbi, +} as const; diff --git a/src/constants/actions.ts b/src/constants/actions.ts index 1afcde4606a..9190b60e502 100644 --- a/src/constants/actions.ts +++ b/src/constants/actions.ts @@ -32,6 +32,7 @@ export const PERMISSIONS_NEEDED_FOR_ACTION = { SplitPayment: [[ColonyRole.Administration]], StagedPayment: [[ColonyRole.Administration]], ArbitraryTxs: [[ColonyRole.Root]], + ManageSupportedChains: [[ColonyRole.Root]], }; export enum Action { @@ -65,6 +66,7 @@ export enum Action { UserPermissions = 'user-permissions', SimpleDiscussion = 'simple-discussion', ManageVerifiedMembers = 'manage-verified-members', + ManageSupportedChains = 'manage-supported-chains', } export const ACTIONS_WITH_NETWORK_FEE = new Set([ diff --git a/src/constants/index.ts b/src/constants/index.ts index 50d6f69d472..4c19ad8e77b 100644 --- a/src/constants/index.ts +++ b/src/constants/index.ts @@ -1,7 +1,7 @@ import { type Icon } from '@phosphor-icons/react'; import { constants as ethersContants } from 'ethers'; -import ArbitrumIcon from '~icons/ArbitrumIcom.tsx'; +import ArbitrumIcon from '~icons/ArbitrumIcon.tsx'; import EthereumIcon from '~icons/EthereumIcon.tsx'; import GanacheIcon from '~icons/GanacheIcon.tsx'; import GnosisIcon from '~icons/GnosisIcon.tsx'; @@ -156,6 +156,36 @@ export const GANACHE_NETWORK: NetworkInfo = { blockTime: 5, }; +export const GANACHE_NETWORK_1: NetworkInfo = { + name: 'Local Proxy Chain 1', + chainId: '265669101', + shortName: 'Local Proxy Chain 1', + blockExplorerName: 'Noexplorer', + blockExplorerUrl: 'http://localhost', + displayENSDomain: 'joincolony.eth', + tokenExplorerLink: 'http://localhost', + contractAddressLink: 'http://localhost', + apiUri: 'https://api-sepolia.arbiscan.io/api', + icon: GanacheIcon, + nativeToken: ETHER_TOKEN, + blockTime: 5, +}; + +export const GANACHE_NETWORK_2: NetworkInfo = { + name: 'Local Proxy Chain 2', + chainId: '265669102', + shortName: 'Local Proxy Chain 2', + blockExplorerName: 'Noexplorer', + blockExplorerUrl: 'http://localhost', + displayENSDomain: 'joincolony.eth', + tokenExplorerLink: 'http://localhost', + contractAddressLink: 'http://localhost', + apiUri: 'https://api-sepolia.arbiscan.io/api', + icon: GanacheIcon, + nativeToken: ETHER_TOKEN, + blockTime: 5, +}; + export const BINANCE_NETWORK: NetworkInfo = { name: 'Binance Smart Chain', chainId: '56', @@ -224,6 +254,8 @@ export const ARBITRUM_SEPOLIA_NETWORK: NetworkInfo = { export const NETWORK_DATA: { [key: string]: NetworkInfo } = { [Network.Ganache]: GANACHE_NETWORK, + [Network.DevProxyChain1]: GANACHE_NETWORK_1, + [Network.DevProxyChain2]: GANACHE_NETWORK_2, [Network.Gnosis]: GNOSIS_NETWORK, [Network.GnosisFork]: GNOSIS_NETWORK, [Network.Goerli]: GOERLI_NETWORK, diff --git a/src/constants/proxyColonies.ts b/src/constants/proxyColonies.ts new file mode 100644 index 00000000000..6d3e0b1fb30 --- /dev/null +++ b/src/constants/proxyColonies.ts @@ -0,0 +1,14 @@ +import { + POLYGON_NETWORK, + AMOY_NETWORK, + GANACHE_NETWORK_1, + GANACHE_NETWORK_2, + type NetworkInfo, +} from '~constants'; + +export const SUPPORTED_CHAINS: NetworkInfo[] = [ + POLYGON_NETWORK, + AMOY_NETWORK, + GANACHE_NETWORK_1, + GANACHE_NETWORK_2, +]; diff --git a/src/constants/tokens/getNetworkTokenList.ts b/src/constants/tokens/getNetworkTokenList.ts index 0579adeda0b..dd8debca4d4 100644 --- a/src/constants/tokens/getNetworkTokenList.ts +++ b/src/constants/tokens/getNetworkTokenList.ts @@ -13,6 +13,9 @@ interface ListToken { symbol: string; name: string; decimals: number; + chainMetadata: { + chainId: string; + }; } interface FormattedListToken { @@ -22,6 +25,9 @@ interface FormattedListToken { symbol: string; name: string; decimals: number; + chainMetadata: { + chainId: string; + }; }; } diff --git a/src/context/ColonyManager.ts b/src/context/ColonyManager.ts index f2bf29af48a..5a2a5805775 100644 --- a/src/context/ColonyManager.ts +++ b/src/context/ColonyManager.ts @@ -11,9 +11,12 @@ import { type AnyColonyClient, type AnyMultisigPermissionsClient, } from '@colony/colony-js'; +import { type Abi, CustomContract, ContractConfig } from '@colony/sdk'; import { type Signer, type providers } from 'ethers'; +import { DEFAULT_NETWORK } from '~constants/index.ts'; import { type Address } from '~types/index.ts'; +import { ColonyJSNetworkMapping } from '~types/network.ts'; import { isAddress } from '~utils/web3/index.ts'; export default class ColonyManager { @@ -21,6 +24,8 @@ export default class ColonyManager { colonyClients: Map>; + customContracts: Map>; + extensionClients: Map>; tokenClients: Map>; @@ -38,6 +43,7 @@ export default class ColonyManager { this.extensionClients = new Map(); this.tokenClients = new Map(); this.tokenLockingClients = new Map(); + this.customContracts = new Map(); this.networkClient = networkClient; this.provider = networkClient.provider; this.signer = networkClient.signer; @@ -252,4 +258,34 @@ export default class ColonyManager { } return clientPromise; } + + /* + * Get a custom colony contract by address and ABI (using Colony SDK) + * + * @example + * ```ts + * import { abi as colonyNetworkAbi } from '../../network-files/contracts/colonyNetwork/ColonyNetwork.sol/ColonyNetwork.json'; + * const networkAddress = import.meta.env.NETWORK_CONTRACT_ADDRESS || ColonyNetworkAddress[DEFAULT_NETWORK]; + * const customColonyNetwork = colonyManager.getCustomContract(networkAddress, colonyNetworkAbi); + * ``` + */ + getCustomContract(address: string, abi: A): CustomContract { + const reputationOracleEndpoint = import.meta.env.REPUTATION_ORACLE_ENDPOINT + ? new URL(import.meta.env.REPUTATION_ORACLE_ENDPOINT) + : new URL(`/reputation`, window.location.origin); + + const metaTxBroadcasterEndpoint = `${import.meta.env.METATX_BROADCASTER_ENDPOINT}/broadcast`; + + const config = new ContractConfig(this.signer || this.provider, { + metaTxBroadcasterEndpoint, + network: ColonyJSNetworkMapping[DEFAULT_NETWORK], + reputationOracleEndpoint: reputationOracleEndpoint.toString(), + }); + + if (this.customContracts.has(address)) { + return this.customContracts.get(address) as CustomContract; + } + + return new CustomContract(address as `0x${string}`, abi, config); + } } diff --git a/src/context/FeatureFlagsContext/FeatureFlagsContextProvider.tsx b/src/context/FeatureFlagsContext/FeatureFlagsContextProvider.tsx index 789382482d0..af467c7fb4b 100644 --- a/src/context/FeatureFlagsContext/FeatureFlagsContextProvider.tsx +++ b/src/context/FeatureFlagsContext/FeatureFlagsContextProvider.tsx @@ -36,6 +36,9 @@ const FeatureFlagsContextProvider: FC = ({ children }) => { ); const guidedToursFeature = useFeatureFlag(FeatureFlag.GUIDED_TOURS); const arbitraryTxsAction = useFeatureFlag(FeatureFlag.ARBITRARY_TXS_ACTION); + const supportedChainsAction = useFeatureFlag( + FeatureFlag.SUPPORTED_CHAINS_ACTION, + ); const featureFlags: Record< FeatureFlag, @@ -46,12 +49,14 @@ const FeatureFlagsContextProvider: FC = ({ children }) => { [FeatureFlag.CRYPTO_TO_FIAT_WITHDRAWALS]: cryptoToFiatWithdrawalsFeature, [FeatureFlag.GUIDED_TOURS]: guidedToursFeature, [FeatureFlag.ARBITRARY_TXS_ACTION]: arbitraryTxsAction, + [FeatureFlag.SUPPORTED_CHAINS_ACTION]: supportedChainsAction, }), [ cryptoToFiatFeature, cryptoToFiatWithdrawalsFeature, guidedToursFeature, arbitraryTxsAction, + supportedChainsAction, ], ); diff --git a/src/context/FeatureFlagsContext/types.ts b/src/context/FeatureFlagsContext/types.ts index 43a4f214141..2354b390335 100644 --- a/src/context/FeatureFlagsContext/types.ts +++ b/src/context/FeatureFlagsContext/types.ts @@ -3,6 +3,7 @@ export enum FeatureFlag { CRYPTO_TO_FIAT_WITHDRAWALS = 'CRYPTO_TO_FIAT_WITHDRAWALS', GUIDED_TOURS = 'GUIDED_TOURS', ARBITRARY_TXS_ACTION = 'ARBITRARY_TXS_ACTION', + SUPPORTED_CHAINS_ACTION = 'SUPPORTED_CHAINS_ACTION', } export interface FeatureFlagValue { diff --git a/src/context/TokenSelectContext/TokenSelectContext.ts b/src/context/TokenSelectContext/TokenSelectContext.ts index 68628a3f52d..386a800ef83 100644 --- a/src/context/TokenSelectContext/TokenSelectContext.ts +++ b/src/context/TokenSelectContext/TokenSelectContext.ts @@ -1,14 +1,19 @@ import { createContext, useContext } from 'react'; -import { type TokenSearchItemOption } from '~v5/common/ActionSidebar/partials/TokenSelect/partials/TokenSearchItem/types.ts'; +import { + type TokenOption, + type SearchSelectOption, +} from '~v5/shared/SearchSelect/types.ts'; export const TokenSelectContext = createContext< | { isLoading?: boolean; setIsLoading: React.Dispatch>; - setOptions: React.Dispatch>; - options: TokenSearchItemOption[]; - suggestedOptions: TokenSearchItemOption[]; + setOptions: React.Dispatch< + React.SetStateAction[]> + >; + options: SearchSelectOption[]; + suggestedOptions: SearchSelectOption[]; } | undefined >(undefined); diff --git a/src/context/TokenSelectContext/TokenSelectContextProvider.tsx b/src/context/TokenSelectContext/TokenSelectContextProvider.tsx index 762d19b9c37..a32e183faf9 100644 --- a/src/context/TokenSelectContext/TokenSelectContextProvider.tsx +++ b/src/context/TokenSelectContext/TokenSelectContextProvider.tsx @@ -8,7 +8,10 @@ import React, { import { useGetTokensListQuery } from '~gql'; import { useGetAllTokens } from '~hooks/useGetAllTokens.ts'; import { notNull } from '~utils/arrays/index.ts'; -import { type TokenSearchItemOption } from '~v5/common/ActionSidebar/partials/TokenSelect/partials/TokenSearchItem/types.ts'; +import { + type TokenOption, + type SearchSelectOption, +} from '~v5/shared/SearchSelect/types.ts'; import { TokenSelectContext } from './TokenSelectContext.ts'; @@ -56,7 +59,7 @@ const TokenSelectContextProvider: FC = ({ children }) => { [tokensListData], ); - const suggestedOptions: TokenSearchItemOption[] = predefinedTokens + const suggestedOptions: SearchSelectOption[] = predefinedTokens .filter((token, index, self) => { return ( index === self.findIndex((t) => t.tokenAddress === token.tokenAddress) @@ -68,7 +71,7 @@ const TokenSelectContextProvider: FC = ({ children }) => { token: item, })); - const allTokensOptions: TokenSearchItemOption[] = [ + const allTokensOptions: SearchSelectOption[] = [ ...(allTokens.flatMap(({ token }) => token).filter(notNull) ?? []), ].map((item) => ({ label: item.name, diff --git a/src/graphql/fragments/actions.graphql b/src/graphql/fragments/actions.graphql index d4c4dd3b812..4aeb4a7ea5c 100644 --- a/src/graphql/fragments/actions.graphql +++ b/src/graphql/fragments/actions.graphql @@ -94,6 +94,9 @@ fragment ColonyAction on ColonyAction { nativeTokenSymbol: symbol tokenAddress: id name + chainMetadata { + chainId + } } tokens { ...ColonyTokensConnection @@ -152,6 +155,7 @@ fragment ColonyAction on ColonyAction { contractAddress encodedFunction } + targetChainId } fragment ApprovedTokenChanges on ApprovedTokenChanges { diff --git a/src/graphql/fragments/colony.graphql b/src/graphql/fragments/colony.graphql index ff0d5fe5243..bdaabce90e3 100644 --- a/src/graphql/fragments/colony.graphql +++ b/src/graphql/fragments/colony.graphql @@ -1,6 +1,10 @@ fragment Colony on Colony { colonyAddress: id name + colonyCreateEvent { + blockNumber + creationSalt + } nativeToken { ...Token } @@ -54,6 +58,12 @@ fragment Colony on Colony { invitesRemaining } lastUpdatedContributorsWithReputation + proxyColonies { + items { + chainId + isActive + } + } } fragment PublicColony on Colony { diff --git a/src/graphql/fragments/proxyColonies.graphql b/src/graphql/fragments/proxyColonies.graphql new file mode 100644 index 00000000000..3272c610b4a --- /dev/null +++ b/src/graphql/fragments/proxyColonies.graphql @@ -0,0 +1,11 @@ +fragment ProxyColony on ProxyColony { + id + colonyAddress + chainId + isActive +} + +fragment SupportedChain on SupportedChain { + id + isActive +} diff --git a/src/graphql/fragments/token.graphql b/src/graphql/fragments/token.graphql index 70e23045811..0c28a2c8cf4 100644 --- a/src/graphql/fragments/token.graphql +++ b/src/graphql/fragments/token.graphql @@ -6,6 +6,9 @@ fragment Token on Token { type avatar thumbnail + chainMetadata { + chainId + } } fragment UserTokenBalanceData on GetUserTokenBalanceReturn { diff --git a/src/graphql/generated.ts b/src/graphql/generated.ts index 0334765b139..b146bbed30c 100644 --- a/src/graphql/generated.ts +++ b/src/graphql/generated.ts @@ -33,6 +33,19 @@ export type Scalars = { AWSURL: string; }; +export type ActionWormholeInfo = { + __typename?: 'ActionWormholeInfo'; + emitterAddress: Scalars['String']; + emitterChainId?: Maybe; + sequence: Scalars['String']; +}; + +export type ActionWormholeInfoInput = { + emitterAddress: Scalars['String']; + emitterChainId?: InputMaybe; + sequence: Scalars['String']; +}; + /** Defines an annotation for actions, motions and decisions */ export type Annotation = { __typename?: 'Annotation'; @@ -301,9 +314,11 @@ export type Colony = { * Native chain token claim (e.g., Token 0x0000...0000: ETH, xDAI, etc.) * This is not an array since only a single token type can be returned */ - chainFundsClaim?: Maybe; + chainFundsClaim?: Maybe>>; /** Metadata related to the chain of the Colony */ chainMetadata: ChainMetadata; + /** Colony creation data */ + colonyCreateEvent?: Maybe; /** * The main member invite object * It is possible to create multiple member invites for a given colony @@ -335,6 +350,7 @@ export type Colony = { nativeTokenId: Scalars['ID']; /** A flag to indicate whether the colony is private */ private?: Maybe; + proxyColonies?: Maybe; /** The total reputation amount in the colony */ reputation?: Maybe; roles?: Maybe; @@ -398,6 +414,15 @@ export type ColonyFundsClaimDataArgs = { }; +/** Represents a Colony within the Colony Network */ +export type ColonyProxyColoniesArgs = { + filter?: InputMaybe; + limit?: InputMaybe; + nextToken?: InputMaybe; + sortDirection?: InputMaybe; +}; + + /** Represents a Colony within the Colony Network */ export type ColonyRolesArgs = { filter?: InputMaybe; @@ -454,6 +479,10 @@ export type ColonyAction = { expenditureSlotChanges?: Maybe; /** Ids of the staged payment slots released by the action, if any */ expenditureSlotIds?: Maybe>; + /** Expanded `ColonyAction` */ + finalizedActionData?: Maybe; + /** The motion action txHash that this action finalized */ + finalizedActionId?: Maybe; /** The source Domain of the action, if applicable */ fromDomain?: Maybe; /** The source Domain identifier, if applicable */ @@ -493,6 +522,10 @@ export type ColonyAction = { motionDomainId?: Maybe; /** The internal database id of the motion */ motionId?: Maybe; + /** Multichain info if the action is bridged */ + multiChainInfo?: Maybe; + /** The id of the multichain info entry */ + multiChainInfoId?: Maybe; /** Expanded `ColonyMultiSig` for the corresponding `multiSigId` */ multiSigData?: Maybe; /** The internal database id of the multiSig */ @@ -538,6 +571,8 @@ export type ColonyAction = { * Currently it is impossible to tell the reason for the action being hidden from the actions list */ showInActionsList: Scalars['Boolean']; + /** Target chain id if the action is on a proxy colony chain */ + targetChainId?: Maybe; /** The target Domain of the action, if applicable */ toDomain?: Maybe; /** The target Domain identifier, if applicable */ @@ -607,10 +642,16 @@ export type ColonyActionRolesInput = { * These can all happen in a Colony and will be interpreted by the dApp according to their types */ export enum ColonyActionType { + /** An action related to creating a proxy colony */ + AddProxyColony = 'ADD_PROXY_COLONY', + AddProxyColonyMotion = 'ADD_PROXY_COLONY_MOTION', + AddProxyColonyMultisig = 'ADD_PROXY_COLONY_MULTISIG', /** An action related to adding verified members */ AddVerifiedMembers = 'ADD_VERIFIED_MEMBERS', AddVerifiedMembersMotion = 'ADD_VERIFIED_MEMBERS_MOTION', AddVerifiedMembersMultisig = 'ADD_VERIFIED_MEMBERS_MULTISIG', + /** An action related to arbitrary transaction */ + ArbitraryTx = 'ARBITRARY_TX', /** An action related to canceling an expenditure */ CancelExpenditure = 'CANCEL_EXPENDITURE', /** An action related to a motion to cancel an expenditure */ @@ -709,6 +750,10 @@ export enum ColonyActionType { ReleaseStagedPayments = 'RELEASE_STAGED_PAYMENTS', /** An action related to a motion to release a staged payment */ ReleaseStagedPaymentsMotion = 'RELEASE_STAGED_PAYMENTS_MOTION', + /** An action related to disabling a proxy colony */ + RemoveProxyColony = 'REMOVE_PROXY_COLONY', + RemoveProxyColonyMotion = 'REMOVE_PROXY_COLONY_MOTION', + RemoveProxyColonyMultisig = 'REMOVE_PROXY_COLONY_MULTISIG', /** An action related to removing verified members */ RemoveVerifiedMembers = 'REMOVE_VERIFIED_MEMBERS', RemoveVerifiedMembersMotion = 'REMOVE_VERIFIED_MEMBERS_MOTION', @@ -856,6 +901,19 @@ export type ColonyContributorRolesArgs = { sortDirection?: InputMaybe; }; +export type ColonyCreateEvent = { + __typename?: 'ColonyCreateEvent'; + /** The block number the colony was created at */ + blockNumber: Scalars['Int']; + /** The salt used during creation */ + creationSalt: Scalars['String']; +}; + +export type ColonyCreateEventInput = { + blockNumber: Scalars['Int']; + creationSalt: Scalars['String']; +}; + export type ColonyDecision = { __typename?: 'ColonyDecision'; action?: Maybe; @@ -1093,6 +1151,10 @@ export type ColonyMotion = { expenditureId?: Maybe; /** Ids of the staged payment slots to be released if the motion pass, if any */ expenditureSlotIds?: Maybe>; + /** Expanded `ColonyAction` */ + finalizationActionData?: Maybe; + /** The action txHash that was triggered upon motion finalization */ + finalizationActionId?: Maybe; /** Simple flag indicating whether both sides of staking have been activated */ hasObjection: Scalars['Boolean']; /** @@ -1189,6 +1251,10 @@ export type ColonyMultiSig = { expenditureFunding?: Maybe>; /** Expenditure associated with the motion, if any */ expenditureId?: Maybe; + /** Expanded `ColonyAction` */ + finalizationActionData?: Maybe; + /** The action txHash that was triggered upon motion finalization */ + finalizationActionId?: Maybe; /** Whether the underlying action completed */ hasActionCompleted: Scalars['Boolean']; /** @@ -1449,6 +1515,7 @@ export type CreateColonyActionInput = { expenditureId?: InputMaybe; expenditureSlotChanges?: InputMaybe; expenditureSlotIds?: InputMaybe>; + finalizedActionId?: InputMaybe; fromDomainId?: InputMaybe; fromPotId?: InputMaybe; id?: InputMaybe; @@ -1460,6 +1527,7 @@ export type CreateColonyActionInput = { members?: InputMaybe>; motionDomainId?: InputMaybe; motionId?: InputMaybe; + multiChainInfoId?: InputMaybe; multiSigId?: InputMaybe; networkFee?: InputMaybe; newColonyVersion?: InputMaybe; @@ -1472,6 +1540,7 @@ export type CreateColonyActionInput = { rolesAreMultiSig?: InputMaybe; rootHash: Scalars['String']; showInActionsList: Scalars['Boolean']; + targetChainId?: InputMaybe; toDomainId?: InputMaybe; toPotId?: InputMaybe; tokenAddress?: InputMaybe; @@ -1572,8 +1641,9 @@ export type CreateColonyHistoricRoleInput = { export type CreateColonyInput = { balances?: InputMaybe; - chainFundsClaim?: InputMaybe; + chainFundsClaim?: InputMaybe>>; chainMetadata: ChainMetadataInput; + colonyCreateEvent?: InputMaybe; colonyMemberInviteCode?: InputMaybe; expendituresGlobalClaimDelay?: InputMaybe; id?: InputMaybe; @@ -1613,6 +1683,7 @@ export type CreateColonyMotionInput = { expenditureFunding?: InputMaybe>; expenditureId?: InputMaybe; expenditureSlotIds?: InputMaybe>; + finalizationActionId?: InputMaybe; hasObjection: Scalars['Boolean']; id?: InputMaybe; isDecision: Scalars['Boolean']; @@ -1642,6 +1713,7 @@ export type CreateColonyMultiSigInput = { executedBy?: InputMaybe; expenditureFunding?: InputMaybe>; expenditureId?: InputMaybe; + finalizationActionId?: InputMaybe; hasActionCompleted: Scalars['Boolean']; id?: InputMaybe; isDecision: Scalars['Boolean']; @@ -1772,6 +1844,7 @@ export type CreateExtensionInstallationsCountInput = { }; export type CreateIngestorStatsInput = { + chainId: Scalars['String']; id?: InputMaybe; value: Scalars['String']; }; @@ -1794,6 +1867,13 @@ export type CreateMotionMessageInput = { vote?: InputMaybe; }; +export type CreateMultiChainInfoInput = { + completedOnMainChain: Scalars['Boolean']; + completedOnProxyChain: Scalars['Boolean']; + id?: InputMaybe; + wormholeInfo?: InputMaybe; +}; + export type CreateMultiSigUserSignatureInput = { colonyAddress: Scalars['ID']; createdAt?: InputMaybe; @@ -1836,6 +1916,13 @@ export type CreateProfileInput = { website?: InputMaybe; }; +export type CreateProxyColonyInput = { + chainId: Scalars['String']; + colonyAddress: Scalars['ID']; + id?: InputMaybe; + isActive: Scalars['Boolean']; +}; + export type CreateReputationMiningCycleMetadataInput = { id?: InputMaybe; lastCompletedAt: Scalars['AWSDateTime']; @@ -1881,6 +1968,11 @@ export type CreateStreamingPaymentMetadataInput = { limitAmount?: InputMaybe; }; +export type CreateSupportedChainInput = { + id?: InputMaybe; + isActive?: InputMaybe; +}; + export type CreateTokenExchangeRateInput = { date: Scalars['AWSDateTime']; id?: InputMaybe; @@ -2118,6 +2210,10 @@ export type DeleteMotionMessageInput = { id: Scalars['ID']; }; +export type DeleteMultiChainInfoInput = { + id: Scalars['ID']; +}; + export type DeleteMultiSigUserSignatureInput = { id: Scalars['ID']; }; @@ -2134,6 +2230,10 @@ export type DeleteProfileInput = { id: Scalars['ID']; }; +export type DeleteProxyColonyInput = { + id: Scalars['ID']; +}; + export type DeleteReputationMiningCycleMetadataInput = { id: Scalars['ID']; }; @@ -2154,6 +2254,10 @@ export type DeleteStreamingPaymentMetadataInput = { id: Scalars['ID']; }; +export type DeleteSupportedChainInput = { + id: Scalars['ID']; +}; + export type DeleteTokenExchangeRateInput = { id: Scalars['ID']; }; @@ -2745,6 +2849,8 @@ export type GetVoterRewardsInput = { /** Model storing block ingestor stats, as key-value entries */ export type IngestorStats = { __typename?: 'IngestorStats'; + /** The chain id the stats are generated on */ + chainId: Scalars['String']; createdAt: Scalars['AWSDateTime']; /** Unique identifier of the ingestor stats */ id: Scalars['ID']; @@ -2900,6 +3006,7 @@ export type ModelColonyActionConditionInput = { createdAt?: InputMaybe; expenditureId?: InputMaybe; expenditureSlotIds?: InputMaybe; + finalizedActionId?: InputMaybe; fromDomainId?: InputMaybe; fromPotId?: InputMaybe; individualEvents?: InputMaybe; @@ -2910,6 +3017,7 @@ export type ModelColonyActionConditionInput = { members?: InputMaybe; motionDomainId?: InputMaybe; motionId?: InputMaybe; + multiChainInfoId?: InputMaybe; multiSigId?: InputMaybe; networkFee?: InputMaybe; newColonyVersion?: InputMaybe; @@ -2922,6 +3030,7 @@ export type ModelColonyActionConditionInput = { rolesAreMultiSig?: InputMaybe; rootHash?: InputMaybe; showInActionsList?: InputMaybe; + targetChainId?: InputMaybe; toDomainId?: InputMaybe; toPotId?: InputMaybe; tokenAddress?: InputMaybe; @@ -2945,6 +3054,7 @@ export type ModelColonyActionFilterInput = { createdAt?: InputMaybe; expenditureId?: InputMaybe; expenditureSlotIds?: InputMaybe; + finalizedActionId?: InputMaybe; fromDomainId?: InputMaybe; fromPotId?: InputMaybe; id?: InputMaybe; @@ -2956,6 +3066,7 @@ export type ModelColonyActionFilterInput = { members?: InputMaybe; motionDomainId?: InputMaybe; motionId?: InputMaybe; + multiChainInfoId?: InputMaybe; multiSigId?: InputMaybe; networkFee?: InputMaybe; newColonyVersion?: InputMaybe; @@ -2968,6 +3079,7 @@ export type ModelColonyActionFilterInput = { rolesAreMultiSig?: InputMaybe; rootHash?: InputMaybe; showInActionsList?: InputMaybe; + targetChainId?: InputMaybe; toDomainId?: InputMaybe; toPotId?: InputMaybe; tokenAddress?: InputMaybe; @@ -3273,6 +3385,7 @@ export type ModelColonyMotionConditionInput = { createdBy?: InputMaybe; expenditureId?: InputMaybe; expenditureSlotIds?: InputMaybe; + finalizationActionId?: InputMaybe; hasObjection?: InputMaybe; isDecision?: InputMaybe; isFinalized?: InputMaybe; @@ -3301,6 +3414,7 @@ export type ModelColonyMotionFilterInput = { createdBy?: InputMaybe; expenditureId?: InputMaybe; expenditureSlotIds?: InputMaybe; + finalizationActionId?: InputMaybe; hasObjection?: InputMaybe; id?: InputMaybe; isDecision?: InputMaybe; @@ -3326,6 +3440,7 @@ export type ModelColonyMultiSigConditionInput = { executedAt?: InputMaybe; executedBy?: InputMaybe; expenditureId?: InputMaybe; + finalizationActionId?: InputMaybe; hasActionCompleted?: InputMaybe; isDecision?: InputMaybe; isExecuted?: InputMaybe; @@ -3354,6 +3469,7 @@ export type ModelColonyMultiSigFilterInput = { executedAt?: InputMaybe; executedBy?: InputMaybe; expenditureId?: InputMaybe; + finalizationActionId?: InputMaybe; hasActionCompleted?: InputMaybe; id?: InputMaybe; isDecision?: InputMaybe; @@ -3785,6 +3901,7 @@ export type ModelIdKeyConditionInput = { export type ModelIngestorStatsConditionInput = { and?: InputMaybe>>; + chainId?: InputMaybe; not?: InputMaybe; or?: InputMaybe>>; value?: InputMaybe; @@ -3798,6 +3915,7 @@ export type ModelIngestorStatsConnection = { export type ModelIngestorStatsFilterInput = { and?: InputMaybe>>; + chainId?: InputMaybe; id?: InputMaybe; not?: InputMaybe; or?: InputMaybe>>; @@ -3882,6 +4000,29 @@ export type ModelMotionMessageFilterInput = { vote?: InputMaybe; }; +export type ModelMultiChainInfoConditionInput = { + and?: InputMaybe>>; + completedOnMainChain?: InputMaybe; + completedOnProxyChain?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type ModelMultiChainInfoConnection = { + __typename?: 'ModelMultiChainInfoConnection'; + items: Array>; + nextToken?: Maybe; +}; + +export type ModelMultiChainInfoFilterInput = { + and?: InputMaybe>>; + completedOnMainChain?: InputMaybe; + completedOnProxyChain?: InputMaybe; + id?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; +}; + export type ModelMultiSigUserSignatureConditionInput = { and?: InputMaybe>>; colonyAddress?: InputMaybe; @@ -4013,6 +4154,31 @@ export type ModelProfileFilterInput = { website?: InputMaybe; }; +export type ModelProxyColonyConditionInput = { + and?: InputMaybe>>; + chainId?: InputMaybe; + colonyAddress?: InputMaybe; + isActive?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type ModelProxyColonyConnection = { + __typename?: 'ModelProxyColonyConnection'; + items: Array>; + nextToken?: Maybe; +}; + +export type ModelProxyColonyFilterInput = { + and?: InputMaybe>>; + chainId?: InputMaybe; + colonyAddress?: InputMaybe; + id?: InputMaybe; + isActive?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; +}; + export type ModelReputationMiningCycleMetadataConditionInput = { and?: InputMaybe>>; lastCompletedAt?: InputMaybe; @@ -4238,6 +4404,7 @@ export type ModelSubscriptionColonyActionFilterInput = { createdAt?: InputMaybe; expenditureId?: InputMaybe; expenditureSlotIds?: InputMaybe; + finalizedActionId?: InputMaybe; fromDomainId?: InputMaybe; fromPotId?: InputMaybe; id?: InputMaybe; @@ -4249,6 +4416,7 @@ export type ModelSubscriptionColonyActionFilterInput = { members?: InputMaybe; motionDomainId?: InputMaybe; motionId?: InputMaybe; + multiChainInfoId?: InputMaybe; multiSigId?: InputMaybe; networkFee?: InputMaybe; newColonyVersion?: InputMaybe; @@ -4260,6 +4428,7 @@ export type ModelSubscriptionColonyActionFilterInput = { rolesAreMultiSig?: InputMaybe; rootHash?: InputMaybe; showInActionsList?: InputMaybe; + targetChainId?: InputMaybe; toDomainId?: InputMaybe; toPotId?: InputMaybe; tokenAddress?: InputMaybe; @@ -4383,6 +4552,7 @@ export type ModelSubscriptionColonyMotionFilterInput = { createdBy?: InputMaybe; expenditureId?: InputMaybe; expenditureSlotIds?: InputMaybe; + finalizationActionId?: InputMaybe; hasObjection?: InputMaybe; id?: InputMaybe; isDecision?: InputMaybe; @@ -4407,6 +4577,7 @@ export type ModelSubscriptionColonyMultiSigFilterInput = { executedAt?: InputMaybe; executedBy?: InputMaybe; expenditureId?: InputMaybe; + finalizationActionId?: InputMaybe; hasActionCompleted?: InputMaybe; id?: InputMaybe; isDecision?: InputMaybe; @@ -4578,6 +4749,7 @@ export type ModelSubscriptionIdInput = { export type ModelSubscriptionIngestorStatsFilterInput = { and?: InputMaybe>>; + chainId?: InputMaybe; id?: InputMaybe; or?: InputMaybe>>; value?: InputMaybe; @@ -4616,6 +4788,14 @@ export type ModelSubscriptionMotionMessageFilterInput = { vote?: InputMaybe; }; +export type ModelSubscriptionMultiChainInfoFilterInput = { + and?: InputMaybe>>; + completedOnMainChain?: InputMaybe; + completedOnProxyChain?: InputMaybe; + id?: InputMaybe; + or?: InputMaybe>>; +}; + export type ModelSubscriptionMultiSigUserSignatureFilterInput = { and?: InputMaybe>>; colonyAddress?: InputMaybe; @@ -4665,6 +4845,15 @@ export type ModelSubscriptionProfileFilterInput = { website?: InputMaybe; }; +export type ModelSubscriptionProxyColonyFilterInput = { + and?: InputMaybe>>; + chainId?: InputMaybe; + colonyAddress?: InputMaybe; + id?: InputMaybe; + isActive?: InputMaybe; + or?: InputMaybe>>; +}; + export type ModelSubscriptionReputationMiningCycleMetadataFilterInput = { and?: InputMaybe>>; id?: InputMaybe; @@ -4728,6 +4917,13 @@ export type ModelSubscriptionStringInput = { notIn?: InputMaybe>>; }; +export type ModelSubscriptionSupportedChainFilterInput = { + and?: InputMaybe>>; + id?: InputMaybe; + isActive?: InputMaybe; + or?: InputMaybe>>; +}; + export type ModelSubscriptionTokenExchangeRateFilterInput = { and?: InputMaybe>>; date?: InputMaybe; @@ -4820,6 +5016,27 @@ export type ModelSubscriptionVoterRewardsHistoryFilterInput = { userAddress?: InputMaybe; }; +export type ModelSupportedChainConditionInput = { + and?: InputMaybe>>; + isActive?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; +}; + +export type ModelSupportedChainConnection = { + __typename?: 'ModelSupportedChainConnection'; + items: Array>; + nextToken?: Maybe; +}; + +export type ModelSupportedChainFilterInput = { + and?: InputMaybe>>; + id?: InputMaybe; + isActive?: InputMaybe; + not?: InputMaybe; + or?: InputMaybe>>; +}; + export type ModelSupportedCurrenciesInput = { eq?: InputMaybe; ne?: InputMaybe; @@ -5211,6 +5428,17 @@ export type MotionStateHistoryInput = { yaySideFullyStakedAt?: InputMaybe; }; +export type MultiChainInfo = { + __typename?: 'MultiChainInfo'; + completedOnMainChain: Scalars['Boolean']; + completedOnProxyChain: Scalars['Boolean']; + createdAt: Scalars['AWSDateTime']; + /** The format is txHash_chainId */ + id: Scalars['ID']; + updatedAt: Scalars['AWSDateTime']; + wormholeInfo?: Maybe; +}; + export type MultiSigDomainConfig = { __typename?: 'MultiSigDomainConfig'; domainId: Scalars['ID']; @@ -5291,15 +5519,18 @@ export type Mutation = { createIngestorStats?: Maybe; createLiquidationAddress?: Maybe; createMotionMessage?: Maybe; + createMultiChainInfo?: Maybe; createMultiSigUserSignature?: Maybe; createNotificationsData?: Maybe; createPrivateBetaInviteCode?: Maybe; createProfile?: Maybe; + createProxyColony?: Maybe; createReputationMiningCycleMetadata?: Maybe; createSafeTransaction?: Maybe; createSafeTransactionData?: Maybe; createStreamingPayment?: Maybe; createStreamingPaymentMetadata?: Maybe; + createSupportedChain?: Maybe; createToken?: Maybe; createTokenExchangeRate?: Maybe; createTransaction?: Maybe; @@ -5339,15 +5570,18 @@ export type Mutation = { deleteIngestorStats?: Maybe; deleteLiquidationAddress?: Maybe; deleteMotionMessage?: Maybe; + deleteMultiChainInfo?: Maybe; deleteMultiSigUserSignature?: Maybe; deleteNotificationsData?: Maybe; deletePrivateBetaInviteCode?: Maybe; deleteProfile?: Maybe; + deleteProxyColony?: Maybe; deleteReputationMiningCycleMetadata?: Maybe; deleteSafeTransaction?: Maybe; deleteSafeTransactionData?: Maybe; deleteStreamingPayment?: Maybe; deleteStreamingPaymentMetadata?: Maybe; + deleteSupportedChain?: Maybe; deleteToken?: Maybe; deleteTokenExchangeRate?: Maybe; deleteTransaction?: Maybe; @@ -5387,15 +5621,18 @@ export type Mutation = { updateIngestorStats?: Maybe; updateLiquidationAddress?: Maybe; updateMotionMessage?: Maybe; + updateMultiChainInfo?: Maybe; updateMultiSigUserSignature?: Maybe; updateNotificationsData?: Maybe; updatePrivateBetaInviteCode?: Maybe; updateProfile?: Maybe; + updateProxyColony?: Maybe; updateReputationMiningCycleMetadata?: Maybe; updateSafeTransaction?: Maybe; updateSafeTransactionData?: Maybe; updateStreamingPayment?: Maybe; updateStreamingPaymentMetadata?: Maybe; + updateSupportedChain?: Maybe; updateToken?: Maybe; updateTokenExchangeRate?: Maybe; updateTransaction?: Maybe; @@ -5628,6 +5865,13 @@ export type MutationCreateMotionMessageArgs = { }; +/** Root mutation type */ +export type MutationCreateMultiChainInfoArgs = { + condition?: InputMaybe; + input: CreateMultiChainInfoInput; +}; + + /** Root mutation type */ export type MutationCreateMultiSigUserSignatureArgs = { condition?: InputMaybe; @@ -5656,6 +5900,13 @@ export type MutationCreateProfileArgs = { }; +/** Root mutation type */ +export type MutationCreateProxyColonyArgs = { + condition?: InputMaybe; + input: CreateProxyColonyInput; +}; + + /** Root mutation type */ export type MutationCreateReputationMiningCycleMetadataArgs = { condition?: InputMaybe; @@ -5691,6 +5942,13 @@ export type MutationCreateStreamingPaymentMetadataArgs = { }; +/** Root mutation type */ +export type MutationCreateSupportedChainArgs = { + condition?: InputMaybe; + input: CreateSupportedChainInput; +}; + + /** Root mutation type */ export type MutationCreateTokenArgs = { condition?: InputMaybe; @@ -5948,6 +6206,13 @@ export type MutationDeleteMotionMessageArgs = { }; +/** Root mutation type */ +export type MutationDeleteMultiChainInfoArgs = { + condition?: InputMaybe; + input: DeleteMultiChainInfoInput; +}; + + /** Root mutation type */ export type MutationDeleteMultiSigUserSignatureArgs = { condition?: InputMaybe; @@ -5976,6 +6241,13 @@ export type MutationDeleteProfileArgs = { }; +/** Root mutation type */ +export type MutationDeleteProxyColonyArgs = { + condition?: InputMaybe; + input: DeleteProxyColonyInput; +}; + + /** Root mutation type */ export type MutationDeleteReputationMiningCycleMetadataArgs = { condition?: InputMaybe; @@ -6011,6 +6283,13 @@ export type MutationDeleteStreamingPaymentMetadataArgs = { }; +/** Root mutation type */ +export type MutationDeleteSupportedChainArgs = { + condition?: InputMaybe; + input: DeleteSupportedChainInput; +}; + + /** Root mutation type */ export type MutationDeleteTokenArgs = { condition?: InputMaybe; @@ -6268,6 +6547,13 @@ export type MutationUpdateMotionMessageArgs = { }; +/** Root mutation type */ +export type MutationUpdateMultiChainInfoArgs = { + condition?: InputMaybe; + input: UpdateMultiChainInfoInput; +}; + + /** Root mutation type */ export type MutationUpdateMultiSigUserSignatureArgs = { condition?: InputMaybe; @@ -6296,6 +6582,13 @@ export type MutationUpdateProfileArgs = { }; +/** Root mutation type */ +export type MutationUpdateProxyColonyArgs = { + condition?: InputMaybe; + input: UpdateProxyColonyInput; +}; + + /** Root mutation type */ export type MutationUpdateReputationMiningCycleMetadataArgs = { condition?: InputMaybe; @@ -6331,6 +6624,13 @@ export type MutationUpdateStreamingPaymentMetadataArgs = { }; +/** Root mutation type */ +export type MutationUpdateSupportedChainArgs = { + condition?: InputMaybe; + input: UpdateSupportedChainInput; +}; + + /** Root mutation type */ export type MutationUpdateTokenArgs = { condition?: InputMaybe; @@ -6635,6 +6935,21 @@ export type ProfileMetadataInput = { metatransactionsEnabled?: InputMaybe; }; +/** Table representing a deployed proxy colony */ +export type ProxyColony = { + __typename?: 'ProxyColony'; + /** The chainId it's deployed on */ + chainId: Scalars['String']; + /** Address of the colony on the blockchain */ + colonyAddress: Scalars['ID']; + createdAt: Scalars['AWSDateTime']; + /** id in the format of colonyAddress_chainId */ + id: Scalars['ID']; + /** A flag that tells us if the proxy is active or not */ + isActive: Scalars['Boolean']; + updatedAt: Scalars['AWSDateTime']; +}; + /** Root query type */ export type Query = { __typename?: 'Query'; @@ -6673,7 +6988,9 @@ export type Query = { getColonyMemberInvite?: Maybe; getColonyMetadata?: Maybe; getColonyMotion?: Maybe; + getColonyMotionByFinalizationActionId?: Maybe; getColonyMultiSig?: Maybe; + getColonyMultiSigByFinalizationActionId?: Maybe; getColonyRole?: Maybe; getColonyTokens?: Maybe; getContractEvent?: Maybe; @@ -6698,6 +7015,7 @@ export type Query = { getExtensionsByHash?: Maybe; getFundsClaimsByColony?: Maybe; getIngestorStats?: Maybe; + getIngestorStatsByChainId?: Maybe; getLiquidationAddress?: Maybe; getLiquidationAddressesByUserAddress?: Maybe; getMotionByExpenditureId?: Maybe; @@ -6709,6 +7027,7 @@ export type Query = { /** Get the timeout for the current period of a motion */ getMotionTimeoutPeriods?: Maybe; getMotionVoterRewards?: Maybe; + getMultiChainInfo?: Maybe; getMultiSigByColonyAddress?: Maybe; getMultiSigByExpenditureId?: Maybe; getMultiSigByTransactionHash?: Maybe; @@ -6719,6 +7038,8 @@ export type Query = { getProfile?: Maybe; getProfileByEmail?: Maybe; getProfileByUsername?: Maybe; + getProxyColoniesByColonyAddress?: Maybe; + getProxyColony?: Maybe; getReputationMiningCycleMetadata?: Maybe; getRoleByColony?: Maybe; getRoleByDomainAndColony?: Maybe; @@ -6728,6 +7049,7 @@ export type Query = { getSafeTransactionStatus?: Maybe>; getStreamingPayment?: Maybe; getStreamingPaymentMetadata?: Maybe; + getSupportedChain?: Maybe; getToken?: Maybe; getTokenByAddress?: Maybe; getTokenExchangeRate?: Maybe; @@ -6783,15 +7105,18 @@ export type Query = { listIngestorStats?: Maybe; listLiquidationAddresses?: Maybe; listMotionMessages?: Maybe; + listMultiChainInfos?: Maybe; listMultiSigUserSignatures?: Maybe; listNotificationsData?: Maybe; listPrivateBetaInviteCodes?: Maybe; listProfiles?: Maybe; + listProxyColonies?: Maybe; listReputationMiningCycleMetadata?: Maybe; listSafeTransactionData?: Maybe; listSafeTransactions?: Maybe; listStreamingPaymentMetadata?: Maybe; listStreamingPayments?: Maybe; + listSupportedChains?: Maybe; listTokenExchangeRates?: Maybe; listTokens?: Maybe; listTransactions?: Maybe; @@ -7013,12 +7338,32 @@ export type QueryGetColonyMotionArgs = { }; +/** Root query type */ +export type QueryGetColonyMotionByFinalizationActionIdArgs = { + filter?: InputMaybe; + finalizationActionId: Scalars['ID']; + limit?: InputMaybe; + nextToken?: InputMaybe; + sortDirection?: InputMaybe; +}; + + /** Root query type */ export type QueryGetColonyMultiSigArgs = { id: Scalars['ID']; }; +/** Root query type */ +export type QueryGetColonyMultiSigByFinalizationActionIdArgs = { + filter?: InputMaybe; + finalizationActionId: Scalars['ID']; + limit?: InputMaybe; + nextToken?: InputMaybe; + sortDirection?: InputMaybe; +}; + + /** Root query type */ export type QueryGetColonyRoleArgs = { id: Scalars['ID']; @@ -7205,6 +7550,16 @@ export type QueryGetIngestorStatsArgs = { }; +/** Root query type */ +export type QueryGetIngestorStatsByChainIdArgs = { + chainId: Scalars['String']; + filter?: InputMaybe; + limit?: InputMaybe; + nextToken?: InputMaybe; + sortDirection?: InputMaybe; +}; + + /** Root query type */ export type QueryGetLiquidationAddressArgs = { id: Scalars['ID']; @@ -7281,6 +7636,12 @@ export type QueryGetMotionVoterRewardsArgs = { }; +/** Root query type */ +export type QueryGetMultiChainInfoArgs = { + id: Scalars['ID']; +}; + + /** Root query type */ export type QueryGetMultiSigByColonyAddressArgs = { colonyAddress: Scalars['ID']; @@ -7365,6 +7726,22 @@ export type QueryGetProfileByUsernameArgs = { }; +/** Root query type */ +export type QueryGetProxyColoniesByColonyAddressArgs = { + colonyAddress: Scalars['ID']; + filter?: InputMaybe; + limit?: InputMaybe; + nextToken?: InputMaybe; + sortDirection?: InputMaybe; +}; + + +/** Root query type */ +export type QueryGetProxyColonyArgs = { + id: Scalars['ID']; +}; + + /** Root query type */ export type QueryGetReputationMiningCycleMetadataArgs = { id: Scalars['ID']; @@ -7434,6 +7811,12 @@ export type QueryGetStreamingPaymentMetadataArgs = { }; +/** Root query type */ +export type QueryGetSupportedChainArgs = { + id: Scalars['ID']; +}; + + /** Root query type */ export type QueryGetTokenArgs = { id: Scalars['ID']; @@ -7829,6 +8212,14 @@ export type QueryListMotionMessagesArgs = { }; +/** Root query type */ +export type QueryListMultiChainInfosArgs = { + filter?: InputMaybe; + limit?: InputMaybe; + nextToken?: InputMaybe; +}; + + /** Root query type */ export type QueryListMultiSigUserSignaturesArgs = { filter?: InputMaybe; @@ -7863,6 +8254,14 @@ export type QueryListProfilesArgs = { }; +/** Root query type */ +export type QueryListProxyColoniesArgs = { + filter?: InputMaybe; + limit?: InputMaybe; + nextToken?: InputMaybe; +}; + + /** Root query type */ export type QueryListReputationMiningCycleMetadataArgs = { filter?: InputMaybe; @@ -7903,6 +8302,14 @@ export type QueryListStreamingPaymentsArgs = { }; +/** Root query type */ +export type QueryListSupportedChainsArgs = { + filter?: InputMaybe; + limit?: InputMaybe; + nextToken?: InputMaybe; +}; + + /** Root query type */ export type QueryListTokenExchangeRatesArgs = { filter?: InputMaybe; @@ -8108,6 +8515,7 @@ export enum SearchableColonyActionAggregateField { CreatedAt = 'createdAt', ExpenditureId = 'expenditureId', ExpenditureSlotIds = 'expenditureSlotIds', + FinalizedActionId = 'finalizedActionId', FromDomainId = 'fromDomainId', FromPotId = 'fromPotId', Id = 'id', @@ -8119,6 +8527,7 @@ export enum SearchableColonyActionAggregateField { Members = 'members', MotionDomainId = 'motionDomainId', MotionId = 'motionId', + MultiChainInfoId = 'multiChainInfoId', MultiSigId = 'multiSigId', NetworkFee = 'networkFee', NewColonyVersion = 'newColonyVersion', @@ -8129,6 +8538,7 @@ export enum SearchableColonyActionAggregateField { RolesAreMultiSig = 'rolesAreMultiSig', RootHash = 'rootHash', ShowInActionsList = 'showInActionsList', + TargetChainId = 'targetChainId', ToDomainId = 'toDomainId', ToPotId = 'toPotId', TokenAddress = 'tokenAddress', @@ -8161,6 +8571,7 @@ export type SearchableColonyActionFilterInput = { createdAt?: InputMaybe; expenditureId?: InputMaybe; expenditureSlotIds?: InputMaybe; + finalizedActionId?: InputMaybe; fromDomainId?: InputMaybe; fromPotId?: InputMaybe; id?: InputMaybe; @@ -8172,6 +8583,7 @@ export type SearchableColonyActionFilterInput = { members?: InputMaybe; motionDomainId?: InputMaybe; motionId?: InputMaybe; + multiChainInfoId?: InputMaybe; multiSigId?: InputMaybe; networkFee?: InputMaybe; newColonyVersion?: InputMaybe; @@ -8184,6 +8596,7 @@ export type SearchableColonyActionFilterInput = { rolesAreMultiSig?: InputMaybe; rootHash?: InputMaybe; showInActionsList?: InputMaybe; + targetChainId?: InputMaybe; toDomainId?: InputMaybe; toPotId?: InputMaybe; tokenAddress?: InputMaybe; @@ -8206,6 +8619,7 @@ export enum SearchableColonyActionSortableFields { CreatedAt = 'createdAt', ExpenditureId = 'expenditureId', ExpenditureSlotIds = 'expenditureSlotIds', + FinalizedActionId = 'finalizedActionId', FromDomainId = 'fromDomainId', FromPotId = 'fromPotId', Id = 'id', @@ -8217,6 +8631,7 @@ export enum SearchableColonyActionSortableFields { Members = 'members', MotionDomainId = 'motionDomainId', MotionId = 'motionId', + MultiChainInfoId = 'multiChainInfoId', MultiSigId = 'multiSigId', NetworkFee = 'networkFee', NewColonyVersion = 'newColonyVersion', @@ -8227,6 +8642,7 @@ export enum SearchableColonyActionSortableFields { RolesAreMultiSig = 'rolesAreMultiSig', RootHash = 'rootHash', ShowInActionsList = 'showInActionsList', + TargetChainId = 'targetChainId', ToDomainId = 'toDomainId', ToPotId = 'toPotId', TokenAddress = 'tokenAddress', @@ -8487,15 +8903,18 @@ export type Subscription = { onCreateIngestorStats?: Maybe; onCreateLiquidationAddress?: Maybe; onCreateMotionMessage?: Maybe; + onCreateMultiChainInfo?: Maybe; onCreateMultiSigUserSignature?: Maybe; onCreateNotificationsData?: Maybe; onCreatePrivateBetaInviteCode?: Maybe; onCreateProfile?: Maybe; + onCreateProxyColony?: Maybe; onCreateReputationMiningCycleMetadata?: Maybe; onCreateSafeTransaction?: Maybe; onCreateSafeTransactionData?: Maybe; onCreateStreamingPayment?: Maybe; onCreateStreamingPaymentMetadata?: Maybe; + onCreateSupportedChain?: Maybe; onCreateToken?: Maybe; onCreateTokenExchangeRate?: Maybe; onCreateTransaction?: Maybe; @@ -8531,15 +8950,18 @@ export type Subscription = { onDeleteIngestorStats?: Maybe; onDeleteLiquidationAddress?: Maybe; onDeleteMotionMessage?: Maybe; + onDeleteMultiChainInfo?: Maybe; onDeleteMultiSigUserSignature?: Maybe; onDeleteNotificationsData?: Maybe; onDeletePrivateBetaInviteCode?: Maybe; onDeleteProfile?: Maybe; + onDeleteProxyColony?: Maybe; onDeleteReputationMiningCycleMetadata?: Maybe; onDeleteSafeTransaction?: Maybe; onDeleteSafeTransactionData?: Maybe; onDeleteStreamingPayment?: Maybe; onDeleteStreamingPaymentMetadata?: Maybe; + onDeleteSupportedChain?: Maybe; onDeleteToken?: Maybe; onDeleteTokenExchangeRate?: Maybe; onDeleteTransaction?: Maybe; @@ -8575,15 +8997,18 @@ export type Subscription = { onUpdateIngestorStats?: Maybe; onUpdateLiquidationAddress?: Maybe; onUpdateMotionMessage?: Maybe; + onUpdateMultiChainInfo?: Maybe; onUpdateMultiSigUserSignature?: Maybe; onUpdateNotificationsData?: Maybe; onUpdatePrivateBetaInviteCode?: Maybe; onUpdateProfile?: Maybe; + onUpdateProxyColony?: Maybe; onUpdateReputationMiningCycleMetadata?: Maybe; onUpdateSafeTransaction?: Maybe; onUpdateSafeTransactionData?: Maybe; onUpdateStreamingPayment?: Maybe; onUpdateStreamingPaymentMetadata?: Maybe; + onUpdateSupportedChain?: Maybe; onUpdateToken?: Maybe; onUpdateTokenExchangeRate?: Maybe; onUpdateTransaction?: Maybe; @@ -8734,6 +9159,11 @@ export type SubscriptionOnCreateMotionMessageArgs = { }; +export type SubscriptionOnCreateMultiChainInfoArgs = { + filter?: InputMaybe; +}; + + export type SubscriptionOnCreateMultiSigUserSignatureArgs = { filter?: InputMaybe; }; @@ -8754,6 +9184,11 @@ export type SubscriptionOnCreateProfileArgs = { }; +export type SubscriptionOnCreateProxyColonyArgs = { + filter?: InputMaybe; +}; + + export type SubscriptionOnCreateReputationMiningCycleMetadataArgs = { filter?: InputMaybe; }; @@ -8779,6 +9214,11 @@ export type SubscriptionOnCreateStreamingPaymentMetadataArgs = { }; +export type SubscriptionOnCreateSupportedChainArgs = { + filter?: InputMaybe; +}; + + export type SubscriptionOnCreateTokenArgs = { filter?: InputMaybe; }; @@ -8954,6 +9394,11 @@ export type SubscriptionOnDeleteMotionMessageArgs = { }; +export type SubscriptionOnDeleteMultiChainInfoArgs = { + filter?: InputMaybe; +}; + + export type SubscriptionOnDeleteMultiSigUserSignatureArgs = { filter?: InputMaybe; }; @@ -8974,6 +9419,11 @@ export type SubscriptionOnDeleteProfileArgs = { }; +export type SubscriptionOnDeleteProxyColonyArgs = { + filter?: InputMaybe; +}; + + export type SubscriptionOnDeleteReputationMiningCycleMetadataArgs = { filter?: InputMaybe; }; @@ -8999,6 +9449,11 @@ export type SubscriptionOnDeleteStreamingPaymentMetadataArgs = { }; +export type SubscriptionOnDeleteSupportedChainArgs = { + filter?: InputMaybe; +}; + + export type SubscriptionOnDeleteTokenArgs = { filter?: InputMaybe; }; @@ -9174,6 +9629,11 @@ export type SubscriptionOnUpdateMotionMessageArgs = { }; +export type SubscriptionOnUpdateMultiChainInfoArgs = { + filter?: InputMaybe; +}; + + export type SubscriptionOnUpdateMultiSigUserSignatureArgs = { filter?: InputMaybe; }; @@ -9194,6 +9654,11 @@ export type SubscriptionOnUpdateProfileArgs = { }; +export type SubscriptionOnUpdateProxyColonyArgs = { + filter?: InputMaybe; +}; + + export type SubscriptionOnUpdateReputationMiningCycleMetadataArgs = { filter?: InputMaybe; }; @@ -9219,6 +9684,11 @@ export type SubscriptionOnUpdateStreamingPaymentMetadataArgs = { }; +export type SubscriptionOnUpdateSupportedChainArgs = { + filter?: InputMaybe; +}; + + export type SubscriptionOnUpdateTokenArgs = { filter?: InputMaybe; }; @@ -9253,6 +9723,16 @@ export type SubscriptionOnUpdateVoterRewardsHistoryArgs = { filter?: InputMaybe; }; +export type SupportedChain = { + __typename?: 'SupportedChain'; + createdAt: Scalars['AWSDateTime']; + /** The chainId of the supported chain */ + id: Scalars['ID']; + /** A flag that tells us if the supported chain is active or not */ + isActive?: Maybe; + updatedAt: Scalars['AWSDateTime']; +}; + /** Represents the currencies/tokens that users' balances can be converted to (for display purposes) */ export enum SupportedCurrencies { Brl = 'BRL', @@ -9523,6 +10003,7 @@ export type UpdateColonyActionInput = { expenditureId?: InputMaybe; expenditureSlotChanges?: InputMaybe; expenditureSlotIds?: InputMaybe>; + finalizedActionId?: InputMaybe; fromDomainId?: InputMaybe; fromPotId?: InputMaybe; id: Scalars['ID']; @@ -9534,6 +10015,7 @@ export type UpdateColonyActionInput = { members?: InputMaybe>; motionDomainId?: InputMaybe; motionId?: InputMaybe; + multiChainInfoId?: InputMaybe; multiSigId?: InputMaybe; networkFee?: InputMaybe; newColonyVersion?: InputMaybe; @@ -9546,6 +10028,7 @@ export type UpdateColonyActionInput = { rolesAreMultiSig?: InputMaybe; rootHash?: InputMaybe; showInActionsList?: InputMaybe; + targetChainId?: InputMaybe; toDomainId?: InputMaybe; toPotId?: InputMaybe; tokenAddress?: InputMaybe; @@ -9624,8 +10107,9 @@ export type UpdateColonyHistoricRoleInput = { export type UpdateColonyInput = { balances?: InputMaybe; - chainFundsClaim?: InputMaybe; + chainFundsClaim?: InputMaybe>>; chainMetadata?: InputMaybe; + colonyCreateEvent?: InputMaybe; colonyMemberInviteCode?: InputMaybe; expendituresGlobalClaimDelay?: InputMaybe; id: Scalars['ID']; @@ -9665,6 +10149,7 @@ export type UpdateColonyMotionInput = { expenditureFunding?: InputMaybe>; expenditureId?: InputMaybe; expenditureSlotIds?: InputMaybe>; + finalizationActionId?: InputMaybe; hasObjection?: InputMaybe; id: Scalars['ID']; isDecision?: InputMaybe; @@ -9694,6 +10179,7 @@ export type UpdateColonyMultiSigInput = { executedBy?: InputMaybe; expenditureFunding?: InputMaybe>; expenditureId?: InputMaybe; + finalizationActionId?: InputMaybe; hasActionCompleted?: InputMaybe; id: Scalars['ID']; isDecision?: InputMaybe; @@ -9852,6 +10338,7 @@ export type UpdateExtensionInstallationsCountInput = { }; export type UpdateIngestorStatsInput = { + chainId?: InputMaybe; id: Scalars['ID']; value?: InputMaybe; }; @@ -9874,6 +10361,13 @@ export type UpdateMotionMessageInput = { vote?: InputMaybe; }; +export type UpdateMultiChainInfoInput = { + completedOnMainChain?: InputMaybe; + completedOnProxyChain?: InputMaybe; + id: Scalars['ID']; + wormholeInfo?: InputMaybe; +}; + export type UpdateMultiSigUserSignatureInput = { colonyAddress?: InputMaybe; createdAt?: InputMaybe; @@ -9916,6 +10410,13 @@ export type UpdateProfileInput = { website?: InputMaybe; }; +export type UpdateProxyColonyInput = { + chainId?: InputMaybe; + colonyAddress?: InputMaybe; + id: Scalars['ID']; + isActive?: InputMaybe; +}; + export type UpdateReputationMiningCycleMetadataInput = { id: Scalars['ID']; lastCompletedAt?: InputMaybe; @@ -9961,6 +10462,11 @@ export type UpdateStreamingPaymentMetadataInput = { limitAmount?: InputMaybe; }; +export type UpdateSupportedChainInput = { + id: Scalars['ID']; + isActive?: InputMaybe; +}; + export type UpdateTokenExchangeRateInput = { date?: InputMaybe; id: Scalars['ID']; @@ -10263,7 +10769,7 @@ export type VotingReputationParamsInput = { voterRewardFraction: Scalars['String']; }; -export type ColonyActionFragment = { __typename?: 'ColonyAction', type: ColonyActionType, blockNumber: number, initiatorAddress: string, recipientAddress?: string | null, amount?: string | null, networkFee?: string | null, tokenAddress?: string | null, createdAt: string, newColonyVersion?: number | null, rolesAreMultiSig?: boolean | null, individualEvents?: string | null, isMotion?: boolean | null, showInActionsList: boolean, members?: Array | null, rootHash: string, expenditureId?: string | null, isMultiSig?: boolean | null, multiSigId?: string | null, transactionHash: string, colonyAddress: string, initiatorUser?: { __typename?: 'User', walletAddress: string, profile?: { __typename?: 'Profile', displayName?: string | null, displayNameChanged?: string | null, avatar?: string | null, thumbnail?: string | null } | null } | null, initiatorColony?: { __typename?: 'Colony', name: string, version: number, reputation?: string | null, expendituresGlobalClaimDelay?: string | null, private?: boolean | null, lastUpdatedContributorsWithReputation?: string | null, colonyAddress: string, metadata?: { __typename?: 'ColonyMetadata', avatar?: string | null, displayName: string, thumbnail?: string | null, description?: string | null, externalLinks?: Array<{ __typename?: 'ExternalLink', link: string, name: ExternalLinks }> | null, objective?: { __typename?: 'ColonyObjective', title: string, description: string, progress: number } | null, changelog?: Array<{ __typename?: 'ColonyMetadataChangelog', transactionHash: string, newDisplayName: string, oldDisplayName: string, hasAvatarChanged: boolean, hasDescriptionChanged?: boolean | null, haveExternalLinksChanged?: boolean | null, hasObjectiveChanged?: boolean | null, newSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null, oldSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null }> | null, safes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null } | null, nativeToken: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string }, status?: { __typename?: 'ColonyStatus', recovery?: boolean | null, nativeToken?: { __typename?: 'NativeTokenStatus', mintable?: boolean | null, unlockable?: boolean | null, unlocked?: boolean | null } | null } | null, chainMetadata: { __typename?: 'ChainMetadata', chainId: string, network?: Network | null }, tokens?: { __typename?: 'ModelColonyTokensConnection', items: Array<{ __typename?: 'ColonyTokens', colonyTokensId: string, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } } | null> } | null, motionsWithUnclaimedStakes?: Array<{ __typename?: 'ColonyUnclaimedStake', motionId: string, unclaimedRewards: Array<{ __typename?: 'StakerRewards', address: string, rewards: { __typename?: 'MotionStakeValues', nay: string, yay: string } }> }> | null, domains?: { __typename?: 'ModelDomainConnection', items: Array<{ __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null> } | null, balances?: { __typename?: 'ColonyBalances', items?: Array<{ __typename?: 'ColonyBalance', id: string, balance: string, domain?: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } } | null> | null } | null, fundsClaimData?: { __typename?: 'ModelColonyFundsClaimConnection', items: Array<{ __typename?: 'ColonyFundsClaim', id: string, createdAtBlock: number, createdAt: string, amount: string, isClaimed?: boolean | null, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } } | null> } | null, chainFundsClaim?: { __typename?: 'ColonyChainFundsClaim', id: string, createdAtBlock: number, createdAt: string, amount: string, isClaimed?: boolean | null } | null, roles?: { __typename?: 'ModelColonyRoleConnection', items: Array<{ __typename?: 'ColonyRole', id: string, targetAddress: string, role_0?: boolean | null, role_1?: boolean | null, role_2?: boolean | null, role_3?: boolean | null, role_5?: boolean | null, role_6?: boolean | null, isMultiSig?: boolean | null, domain: { __typename?: 'Domain', id: string, nativeId: number } } | null> } | null, colonyMemberInvite?: { __typename?: 'ColonyMemberInvite', id: string, invitesRemaining: number } | null } | null, initiatorExtension?: { __typename?: 'ColonyExtension', hash: string, installedBy: string, installedAt: number, isDeprecated: boolean, isDeleted: boolean, isInitialized: boolean, address: string, colonyAddress: string, currentVersion: number, params?: { __typename?: 'ExtensionParams', votingReputation?: { __typename?: 'VotingReputationParams', maxVoteFraction: string, totalStakeFraction: string, voterRewardFraction: string, userMinStakeFraction: string, stakePeriod: string, submitPeriod: string, revealPeriod: string, escalationPeriod: string } | null, stakedExpenditure?: { __typename?: 'StakedExpenditureParams', stakeFraction: string } | null, multiSig?: { __typename?: 'MultiSigParams', colonyThreshold: number, domainThresholds?: Array<{ __typename?: 'MultiSigDomainConfig', domainId: string, domainThreshold: number } | null> | null } | null } | null } | null, initiatorToken?: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } | null, recipientUser?: { __typename?: 'User', walletAddress: string, profile?: { __typename?: 'Profile', displayName?: string | null, displayNameChanged?: string | null, avatar?: string | null, thumbnail?: string | null } | null } | null, recipientColony?: { __typename?: 'Colony', name: string, version: number, reputation?: string | null, expendituresGlobalClaimDelay?: string | null, private?: boolean | null, lastUpdatedContributorsWithReputation?: string | null, colonyAddress: string, metadata?: { __typename?: 'ColonyMetadata', avatar?: string | null, displayName: string, thumbnail?: string | null, description?: string | null, externalLinks?: Array<{ __typename?: 'ExternalLink', link: string, name: ExternalLinks }> | null, objective?: { __typename?: 'ColonyObjective', title: string, description: string, progress: number } | null, changelog?: Array<{ __typename?: 'ColonyMetadataChangelog', transactionHash: string, newDisplayName: string, oldDisplayName: string, hasAvatarChanged: boolean, hasDescriptionChanged?: boolean | null, haveExternalLinksChanged?: boolean | null, hasObjectiveChanged?: boolean | null, newSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null, oldSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null }> | null, safes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null } | null, nativeToken: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string }, status?: { __typename?: 'ColonyStatus', recovery?: boolean | null, nativeToken?: { __typename?: 'NativeTokenStatus', mintable?: boolean | null, unlockable?: boolean | null, unlocked?: boolean | null } | null } | null, chainMetadata: { __typename?: 'ChainMetadata', chainId: string, network?: Network | null }, tokens?: { __typename?: 'ModelColonyTokensConnection', items: Array<{ __typename?: 'ColonyTokens', colonyTokensId: string, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } } | null> } | null, motionsWithUnclaimedStakes?: Array<{ __typename?: 'ColonyUnclaimedStake', motionId: string, unclaimedRewards: Array<{ __typename?: 'StakerRewards', address: string, rewards: { __typename?: 'MotionStakeValues', nay: string, yay: string } }> }> | null, domains?: { __typename?: 'ModelDomainConnection', items: Array<{ __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null> } | null, balances?: { __typename?: 'ColonyBalances', items?: Array<{ __typename?: 'ColonyBalance', id: string, balance: string, domain?: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } } | null> | null } | null, fundsClaimData?: { __typename?: 'ModelColonyFundsClaimConnection', items: Array<{ __typename?: 'ColonyFundsClaim', id: string, createdAtBlock: number, createdAt: string, amount: string, isClaimed?: boolean | null, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } } | null> } | null, chainFundsClaim?: { __typename?: 'ColonyChainFundsClaim', id: string, createdAtBlock: number, createdAt: string, amount: string, isClaimed?: boolean | null } | null, roles?: { __typename?: 'ModelColonyRoleConnection', items: Array<{ __typename?: 'ColonyRole', id: string, targetAddress: string, role_0?: boolean | null, role_1?: boolean | null, role_2?: boolean | null, role_3?: boolean | null, role_5?: boolean | null, role_6?: boolean | null, isMultiSig?: boolean | null, domain: { __typename?: 'Domain', id: string, nativeId: number } } | null> } | null, colonyMemberInvite?: { __typename?: 'ColonyMemberInvite', id: string, invitesRemaining: number } | null } | null, recipientExtension?: { __typename?: 'ColonyExtension', hash: string, installedBy: string, installedAt: number, isDeprecated: boolean, isDeleted: boolean, isInitialized: boolean, address: string, colonyAddress: string, currentVersion: number, params?: { __typename?: 'ExtensionParams', votingReputation?: { __typename?: 'VotingReputationParams', maxVoteFraction: string, totalStakeFraction: string, voterRewardFraction: string, userMinStakeFraction: string, stakePeriod: string, submitPeriod: string, revealPeriod: string, escalationPeriod: string } | null, stakedExpenditure?: { __typename?: 'StakedExpenditureParams', stakeFraction: string } | null, multiSig?: { __typename?: 'MultiSigParams', colonyThreshold: number, domainThresholds?: Array<{ __typename?: 'MultiSigDomainConfig', domainId: string, domainThreshold: number } | null> | null } | null } | null } | null, recipientToken?: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } | null, token?: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } | null, fromDomain?: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null, toDomain?: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null, roles?: { __typename?: 'ColonyActionRoles', role_0?: boolean | null, role_1?: boolean | null, role_2?: boolean | null, role_3?: boolean | null, role_5?: boolean | null, role_6?: boolean | null } | null, payments?: Array<{ __typename?: 'Payment', amount: string, tokenAddress: string, recipientAddress: string }> | null, motionData?: { __typename?: 'ColonyMotion', remainingStakes: Array, userMinStake: string, requiredStake: string, nativeMotionDomainId: string, isFinalized: boolean, skillRep: string, repSubmitted: string, hasObjection: boolean, isDecision: boolean, transactionHash: string, createdAt: string, createdBy: string, expenditureSlotIds?: Array | null, databaseMotionId: string, motionId: string, motionStakes: { __typename?: 'MotionStakes', raw: { __typename?: 'MotionStakeValues', yay: string, nay: string }, percentage: { __typename?: 'MotionStakeValues', yay: string, nay: string } }, usersStakes: Array<{ __typename?: 'UserMotionStakes', address: string, stakes: { __typename?: 'MotionStakes', raw: { __typename?: 'MotionStakeValues', yay: string, nay: string }, percentage: { __typename?: 'MotionStakeValues', yay: string, nay: string } } }>, motionDomain: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null }, stakerRewards: Array<{ __typename?: 'StakerRewards', address: string, isClaimed: boolean, rewards: { __typename?: 'MotionStakeValues', yay: string, nay: string } }>, voterRewards?: { __typename?: 'ModelVoterRewardsHistoryConnection', items: Array<{ __typename?: 'VoterRewardsHistory', userAddress: string, amount: string, user: { __typename?: 'User', bridgeCustomerId?: string | null, walletAddress: string, profile?: { __typename?: 'Profile', avatar?: string | null, bio?: string | null, displayName?: string | null, displayNameChanged?: string | null, email?: string | null, location?: string | null, thumbnail?: string | null, website?: string | null, preferredCurrency?: SupportedCurrencies | null, isAutoOfframpEnabled?: boolean | null, meta?: { __typename?: 'ProfileMetadata', metatransactionsEnabled?: boolean | null, decentralizedModeEnabled?: boolean | null, customRpc?: string | null } | null } | null, privateBetaInviteCode?: { __typename?: 'PrivateBetaInviteCode', id: string, shareableInvites?: number | null } | null, notificationsData?: { __typename?: 'NotificationsData', magicbellUserId: string, notificationsDisabled: boolean, mutedColonyAddresses: Array, paymentNotificationsDisabled: boolean, mentionNotificationsDisabled: boolean, adminNotificationsDisabled: boolean } | null } } | null> } | null, voterRecord: Array<{ __typename?: 'VoterRecord', address: string, voteCount: string, vote?: number | null }>, revealedVotes: { __typename?: 'MotionStakes', raw: { __typename?: 'MotionStakeValues', yay: string, nay: string }, percentage: { __typename?: 'MotionStakeValues', yay: string, nay: string } }, motionStateHistory: { __typename?: 'MotionStateHistory', hasVoted: boolean, hasPassed: boolean, hasFailed: boolean, hasFailedNotFinalizable: boolean, inRevealPhase: boolean, yaySideFullyStakedAt?: string | null, naySideFullyStakedAt?: string | null, allVotesSubmittedAt?: string | null, allVotesRevealedAt?: string | null, endedAt?: string | null, finalizedAt?: string | null }, messages?: { __typename?: 'ModelMotionMessageConnection', items: Array<{ __typename?: 'MotionMessage', initiatorAddress: string, name: string, messageKey: string, vote?: string | null, amount?: string | null, createdAt: string, initiatorUser?: { __typename?: 'User', bridgeCustomerId?: string | null, walletAddress: string, profile?: { __typename?: 'Profile', avatar?: string | null, bio?: string | null, displayName?: string | null, displayNameChanged?: string | null, email?: string | null, location?: string | null, thumbnail?: string | null, website?: string | null, preferredCurrency?: SupportedCurrencies | null, isAutoOfframpEnabled?: boolean | null, meta?: { __typename?: 'ProfileMetadata', metatransactionsEnabled?: boolean | null, decentralizedModeEnabled?: boolean | null, customRpc?: string | null } | null } | null, privateBetaInviteCode?: { __typename?: 'PrivateBetaInviteCode', id: string, shareableInvites?: number | null } | null, notificationsData?: { __typename?: 'NotificationsData', magicbellUserId: string, notificationsDisabled: boolean, mutedColonyAddresses: Array, paymentNotificationsDisabled: boolean, mentionNotificationsDisabled: boolean, adminNotificationsDisabled: boolean } | null } | null } | null> } | null, objectionAnnotation?: { __typename?: 'Annotation', createdAt: string, message: string } | null, action?: { __typename?: 'ColonyAction', type: ColonyActionType } | null } | null, colony: { __typename?: 'Colony', name: string, colonyAddress: string, nativeToken: { __typename?: 'Token', name: string, nativeTokenDecimals: number, nativeTokenSymbol: string, tokenAddress: string }, tokens?: { __typename?: 'ModelColonyTokensConnection', items: Array<{ __typename?: 'ColonyTokens', colonyTokensId: string, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } } | null> } | null, metadata?: { __typename?: 'ColonyMetadata', displayName: string, avatar?: string | null, description?: string | null, thumbnail?: string | null, externalLinks?: Array<{ __typename?: 'ExternalLink', name: ExternalLinks, link: string }> | null, objective?: { __typename?: 'ColonyObjective', title: string, description: string, progress: number } | null, changelog?: Array<{ __typename?: 'ColonyMetadataChangelog', transactionHash: string, newDisplayName: string, oldDisplayName: string, hasAvatarChanged: boolean, hasDescriptionChanged?: boolean | null, haveExternalLinksChanged?: boolean | null, hasObjectiveChanged?: boolean | null, newSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null, oldSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null }> | null, safes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null } | null }, pendingDomainMetadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null, pendingColonyMetadata?: { __typename?: 'ColonyMetadata', displayName: string, avatar?: string | null, description?: string | null, thumbnail?: string | null, externalLinks?: Array<{ __typename?: 'ExternalLink', name: ExternalLinks, link: string }> | null, objective?: { __typename?: 'ColonyObjective', title: string, description: string, progress: number } | null, changelog?: Array<{ __typename?: 'ColonyMetadataChangelog', transactionHash: string, newDisplayName: string, oldDisplayName: string, hasAvatarChanged: boolean, hasDescriptionChanged?: boolean | null, haveExternalLinksChanged?: boolean | null, hasObjectiveChanged?: boolean | null, newSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null, oldSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null }> | null, safes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null } | null, annotation?: { __typename?: 'Annotation', createdAt: string, message: string } | null, decisionData?: { __typename?: 'ColonyDecision', title: string, description: string, motionDomainId: number, walletAddress: string, createdAt: string, actionId: string, colonyAddress: string } | null, safeTransaction?: { __typename?: 'SafeTransaction', id: string, safe: { __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }, transactions?: { __typename?: 'ModelSafeTransactionDataConnection', items: Array<{ __typename?: 'SafeTransactionData', transactionType: SafeTransactionType, amount?: string | null, rawAmount?: string | null, data?: string | null, abi?: string | null, contractFunction?: string | null, token?: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } | null, recipient?: { __typename?: 'SimpleTarget', id: string, walletAddress: string, profile: { __typename?: 'SimpleTargetProfile', avatarHash?: string | null, displayName?: string | null } } | null, contract?: { __typename?: 'SimpleTarget', id: string, walletAddress: string, profile: { __typename?: 'SimpleTargetProfile', avatarHash?: string | null, displayName?: string | null } } | null, nft?: { __typename?: 'NFT', id: string, walletAddress: string, profile: { __typename?: 'NFTProfile', displayName: string } } | null, nftData?: { __typename?: 'NFTData', address: string, description?: string | null, id: string, imageUri?: string | null, logoUri: string, name?: string | null, tokenName: string, tokenSymbol: string, uri: string } | null, functionParams?: Array<{ __typename?: 'FunctionParam', name: string, type: string, value: string } | null> | null } | null> } | null } | null, metadata?: { __typename?: 'ColonyActionMetadata', customTitle: string, arbitraryTxAbis?: Array<{ __typename?: 'ArbitraryTxAbi', contractAddress: string, jsonAbi: string }> | null } | null, multiSigData?: { __typename?: 'ColonyMultiSig', id: string, nativeMultiSigId: string, createdAt: string, multiSigDomainId: string, nativeMultiSigDomainId: string, requiredPermissions: number, transactionHash: string, isExecuted: boolean, hasActionCompleted: boolean, isRejected: boolean, isDecision: boolean, executedAt?: string | null, executedBy?: string | null, rejectedAt?: string | null, rejectedBy?: string | null, multiSigDomain: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null }, signatures?: { __typename?: 'ModelMultiSigUserSignatureConnection', items: Array<{ __typename?: 'MultiSigUserSignature', id: string, role: number, userAddress: string, multiSigId: string, vote: MultiSigVote, createdAt: string, updatedAt: string, user: { __typename?: 'User', bridgeCustomerId?: string | null, walletAddress: string, profile?: { __typename?: 'Profile', avatar?: string | null, bio?: string | null, displayName?: string | null, displayNameChanged?: string | null, email?: string | null, location?: string | null, thumbnail?: string | null, website?: string | null, preferredCurrency?: SupportedCurrencies | null, isAutoOfframpEnabled?: boolean | null, meta?: { __typename?: 'ProfileMetadata', metatransactionsEnabled?: boolean | null, decentralizedModeEnabled?: boolean | null, customRpc?: string | null } | null } | null, privateBetaInviteCode?: { __typename?: 'PrivateBetaInviteCode', id: string, shareableInvites?: number | null } | null, notificationsData?: { __typename?: 'NotificationsData', magicbellUserId: string, notificationsDisabled: boolean, mutedColonyAddresses: Array, paymentNotificationsDisabled: boolean, mentionNotificationsDisabled: boolean, adminNotificationsDisabled: boolean } | null } } | null> } | null, executedByUser?: { __typename?: 'User', walletAddress: string, profile?: { __typename?: 'Profile', displayName?: string | null, displayNameChanged?: string | null, avatar?: string | null, thumbnail?: string | null } | null } | null, rejectedByUser?: { __typename?: 'User', walletAddress: string, profile?: { __typename?: 'Profile', displayName?: string | null, displayNameChanged?: string | null, avatar?: string | null, thumbnail?: string | null } | null } | null } | null, approvedTokenChanges?: { __typename?: 'ApprovedTokenChanges', added: Array, removed: Array, unaffected: Array } | null, expenditure?: { __typename?: 'Expenditure', isStaked: boolean, type: ExpenditureType, metadata?: { __typename?: 'ExpenditureMetadata', distributionType?: SplitPaymentDistributionType | null } | null, creatingActions?: { __typename?: 'ModelColonyActionConnection', items: Array<{ __typename?: 'ColonyAction', transactionHash: string } | null> } | null } | null, arbitraryTransactions?: Array<{ __typename?: 'ColonyActionArbitraryTransaction', contractAddress: string, encodedFunction: string }> | null }; +export type ColonyActionFragment = { __typename?: 'ColonyAction', type: ColonyActionType, blockNumber: number, initiatorAddress: string, recipientAddress?: string | null, amount?: string | null, networkFee?: string | null, tokenAddress?: string | null, createdAt: string, newColonyVersion?: number | null, rolesAreMultiSig?: boolean | null, individualEvents?: string | null, isMotion?: boolean | null, showInActionsList: boolean, members?: Array | null, rootHash: string, expenditureId?: string | null, isMultiSig?: boolean | null, multiSigId?: string | null, targetChainId?: number | null, transactionHash: string, colonyAddress: string, initiatorUser?: { __typename?: 'User', walletAddress: string, profile?: { __typename?: 'Profile', displayName?: string | null, displayNameChanged?: string | null, avatar?: string | null, thumbnail?: string | null } | null } | null, initiatorColony?: { __typename?: 'Colony', name: string, version: number, reputation?: string | null, expendituresGlobalClaimDelay?: string | null, private?: boolean | null, lastUpdatedContributorsWithReputation?: string | null, colonyAddress: string, metadata?: { __typename?: 'ColonyMetadata', avatar?: string | null, displayName: string, thumbnail?: string | null, description?: string | null, externalLinks?: Array<{ __typename?: 'ExternalLink', link: string, name: ExternalLinks }> | null, objective?: { __typename?: 'ColonyObjective', title: string, description: string, progress: number } | null, changelog?: Array<{ __typename?: 'ColonyMetadataChangelog', transactionHash: string, newDisplayName: string, oldDisplayName: string, hasAvatarChanged: boolean, hasDescriptionChanged?: boolean | null, haveExternalLinksChanged?: boolean | null, hasObjectiveChanged?: boolean | null, newSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null, oldSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null }> | null, safes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null } | null, colonyCreateEvent?: { __typename?: 'ColonyCreateEvent', blockNumber: number, creationSalt: string } | null, nativeToken: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } }, status?: { __typename?: 'ColonyStatus', recovery?: boolean | null, nativeToken?: { __typename?: 'NativeTokenStatus', mintable?: boolean | null, unlockable?: boolean | null, unlocked?: boolean | null } | null } | null, chainMetadata: { __typename?: 'ChainMetadata', chainId: string, network?: Network | null }, tokens?: { __typename?: 'ModelColonyTokensConnection', items: Array<{ __typename?: 'ColonyTokens', colonyTokensId: string, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } } | null> } | null, motionsWithUnclaimedStakes?: Array<{ __typename?: 'ColonyUnclaimedStake', motionId: string, unclaimedRewards: Array<{ __typename?: 'StakerRewards', address: string, rewards: { __typename?: 'MotionStakeValues', nay: string, yay: string } }> }> | null, domains?: { __typename?: 'ModelDomainConnection', items: Array<{ __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null> } | null, balances?: { __typename?: 'ColonyBalances', items?: Array<{ __typename?: 'ColonyBalance', id: string, balance: string, domain?: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } } | null> | null } | null, fundsClaimData?: { __typename?: 'ModelColonyFundsClaimConnection', items: Array<{ __typename?: 'ColonyFundsClaim', id: string, createdAtBlock: number, createdAt: string, amount: string, isClaimed?: boolean | null, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } } | null> } | null, chainFundsClaim?: Array<{ __typename?: 'ColonyChainFundsClaim', id: string, createdAtBlock: number, createdAt: string, amount: string, isClaimed?: boolean | null } | null> | null, roles?: { __typename?: 'ModelColonyRoleConnection', items: Array<{ __typename?: 'ColonyRole', id: string, targetAddress: string, role_0?: boolean | null, role_1?: boolean | null, role_2?: boolean | null, role_3?: boolean | null, role_5?: boolean | null, role_6?: boolean | null, isMultiSig?: boolean | null, domain: { __typename?: 'Domain', id: string, nativeId: number } } | null> } | null, colonyMemberInvite?: { __typename?: 'ColonyMemberInvite', id: string, invitesRemaining: number } | null, proxyColonies?: { __typename?: 'ModelProxyColonyConnection', items: Array<{ __typename?: 'ProxyColony', chainId: string, isActive: boolean } | null> } | null } | null, initiatorExtension?: { __typename?: 'ColonyExtension', hash: string, installedBy: string, installedAt: number, isDeprecated: boolean, isDeleted: boolean, isInitialized: boolean, address: string, colonyAddress: string, currentVersion: number, params?: { __typename?: 'ExtensionParams', votingReputation?: { __typename?: 'VotingReputationParams', maxVoteFraction: string, totalStakeFraction: string, voterRewardFraction: string, userMinStakeFraction: string, stakePeriod: string, submitPeriod: string, revealPeriod: string, escalationPeriod: string } | null, stakedExpenditure?: { __typename?: 'StakedExpenditureParams', stakeFraction: string } | null, multiSig?: { __typename?: 'MultiSigParams', colonyThreshold: number, domainThresholds?: Array<{ __typename?: 'MultiSigDomainConfig', domainId: string, domainThreshold: number } | null> | null } | null } | null } | null, initiatorToken?: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } | null, recipientUser?: { __typename?: 'User', walletAddress: string, profile?: { __typename?: 'Profile', displayName?: string | null, displayNameChanged?: string | null, avatar?: string | null, thumbnail?: string | null } | null } | null, recipientColony?: { __typename?: 'Colony', name: string, version: number, reputation?: string | null, expendituresGlobalClaimDelay?: string | null, private?: boolean | null, lastUpdatedContributorsWithReputation?: string | null, colonyAddress: string, metadata?: { __typename?: 'ColonyMetadata', avatar?: string | null, displayName: string, thumbnail?: string | null, description?: string | null, externalLinks?: Array<{ __typename?: 'ExternalLink', link: string, name: ExternalLinks }> | null, objective?: { __typename?: 'ColonyObjective', title: string, description: string, progress: number } | null, changelog?: Array<{ __typename?: 'ColonyMetadataChangelog', transactionHash: string, newDisplayName: string, oldDisplayName: string, hasAvatarChanged: boolean, hasDescriptionChanged?: boolean | null, haveExternalLinksChanged?: boolean | null, hasObjectiveChanged?: boolean | null, newSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null, oldSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null }> | null, safes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null } | null, colonyCreateEvent?: { __typename?: 'ColonyCreateEvent', blockNumber: number, creationSalt: string } | null, nativeToken: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } }, status?: { __typename?: 'ColonyStatus', recovery?: boolean | null, nativeToken?: { __typename?: 'NativeTokenStatus', mintable?: boolean | null, unlockable?: boolean | null, unlocked?: boolean | null } | null } | null, chainMetadata: { __typename?: 'ChainMetadata', chainId: string, network?: Network | null }, tokens?: { __typename?: 'ModelColonyTokensConnection', items: Array<{ __typename?: 'ColonyTokens', colonyTokensId: string, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } } | null> } | null, motionsWithUnclaimedStakes?: Array<{ __typename?: 'ColonyUnclaimedStake', motionId: string, unclaimedRewards: Array<{ __typename?: 'StakerRewards', address: string, rewards: { __typename?: 'MotionStakeValues', nay: string, yay: string } }> }> | null, domains?: { __typename?: 'ModelDomainConnection', items: Array<{ __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null> } | null, balances?: { __typename?: 'ColonyBalances', items?: Array<{ __typename?: 'ColonyBalance', id: string, balance: string, domain?: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } } | null> | null } | null, fundsClaimData?: { __typename?: 'ModelColonyFundsClaimConnection', items: Array<{ __typename?: 'ColonyFundsClaim', id: string, createdAtBlock: number, createdAt: string, amount: string, isClaimed?: boolean | null, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } } | null> } | null, chainFundsClaim?: Array<{ __typename?: 'ColonyChainFundsClaim', id: string, createdAtBlock: number, createdAt: string, amount: string, isClaimed?: boolean | null } | null> | null, roles?: { __typename?: 'ModelColonyRoleConnection', items: Array<{ __typename?: 'ColonyRole', id: string, targetAddress: string, role_0?: boolean | null, role_1?: boolean | null, role_2?: boolean | null, role_3?: boolean | null, role_5?: boolean | null, role_6?: boolean | null, isMultiSig?: boolean | null, domain: { __typename?: 'Domain', id: string, nativeId: number } } | null> } | null, colonyMemberInvite?: { __typename?: 'ColonyMemberInvite', id: string, invitesRemaining: number } | null, proxyColonies?: { __typename?: 'ModelProxyColonyConnection', items: Array<{ __typename?: 'ProxyColony', chainId: string, isActive: boolean } | null> } | null } | null, recipientExtension?: { __typename?: 'ColonyExtension', hash: string, installedBy: string, installedAt: number, isDeprecated: boolean, isDeleted: boolean, isInitialized: boolean, address: string, colonyAddress: string, currentVersion: number, params?: { __typename?: 'ExtensionParams', votingReputation?: { __typename?: 'VotingReputationParams', maxVoteFraction: string, totalStakeFraction: string, voterRewardFraction: string, userMinStakeFraction: string, stakePeriod: string, submitPeriod: string, revealPeriod: string, escalationPeriod: string } | null, stakedExpenditure?: { __typename?: 'StakedExpenditureParams', stakeFraction: string } | null, multiSig?: { __typename?: 'MultiSigParams', colonyThreshold: number, domainThresholds?: Array<{ __typename?: 'MultiSigDomainConfig', domainId: string, domainThreshold: number } | null> | null } | null } | null } | null, recipientToken?: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } | null, token?: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } | null, fromDomain?: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null, toDomain?: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null, roles?: { __typename?: 'ColonyActionRoles', role_0?: boolean | null, role_1?: boolean | null, role_2?: boolean | null, role_3?: boolean | null, role_5?: boolean | null, role_6?: boolean | null } | null, payments?: Array<{ __typename?: 'Payment', amount: string, tokenAddress: string, recipientAddress: string }> | null, motionData?: { __typename?: 'ColonyMotion', remainingStakes: Array, userMinStake: string, requiredStake: string, nativeMotionDomainId: string, isFinalized: boolean, skillRep: string, repSubmitted: string, hasObjection: boolean, isDecision: boolean, transactionHash: string, createdAt: string, createdBy: string, expenditureSlotIds?: Array | null, databaseMotionId: string, motionId: string, motionStakes: { __typename?: 'MotionStakes', raw: { __typename?: 'MotionStakeValues', yay: string, nay: string }, percentage: { __typename?: 'MotionStakeValues', yay: string, nay: string } }, usersStakes: Array<{ __typename?: 'UserMotionStakes', address: string, stakes: { __typename?: 'MotionStakes', raw: { __typename?: 'MotionStakeValues', yay: string, nay: string }, percentage: { __typename?: 'MotionStakeValues', yay: string, nay: string } } }>, motionDomain: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null }, stakerRewards: Array<{ __typename?: 'StakerRewards', address: string, isClaimed: boolean, rewards: { __typename?: 'MotionStakeValues', yay: string, nay: string } }>, voterRewards?: { __typename?: 'ModelVoterRewardsHistoryConnection', items: Array<{ __typename?: 'VoterRewardsHistory', userAddress: string, amount: string, user: { __typename?: 'User', bridgeCustomerId?: string | null, walletAddress: string, profile?: { __typename?: 'Profile', avatar?: string | null, bio?: string | null, displayName?: string | null, displayNameChanged?: string | null, email?: string | null, location?: string | null, thumbnail?: string | null, website?: string | null, preferredCurrency?: SupportedCurrencies | null, isAutoOfframpEnabled?: boolean | null, meta?: { __typename?: 'ProfileMetadata', metatransactionsEnabled?: boolean | null, decentralizedModeEnabled?: boolean | null, customRpc?: string | null } | null } | null, privateBetaInviteCode?: { __typename?: 'PrivateBetaInviteCode', id: string, shareableInvites?: number | null } | null, notificationsData?: { __typename?: 'NotificationsData', magicbellUserId: string, notificationsDisabled: boolean, mutedColonyAddresses: Array, paymentNotificationsDisabled: boolean, mentionNotificationsDisabled: boolean, adminNotificationsDisabled: boolean } | null } } | null> } | null, voterRecord: Array<{ __typename?: 'VoterRecord', address: string, voteCount: string, vote?: number | null }>, revealedVotes: { __typename?: 'MotionStakes', raw: { __typename?: 'MotionStakeValues', yay: string, nay: string }, percentage: { __typename?: 'MotionStakeValues', yay: string, nay: string } }, motionStateHistory: { __typename?: 'MotionStateHistory', hasVoted: boolean, hasPassed: boolean, hasFailed: boolean, hasFailedNotFinalizable: boolean, inRevealPhase: boolean, yaySideFullyStakedAt?: string | null, naySideFullyStakedAt?: string | null, allVotesSubmittedAt?: string | null, allVotesRevealedAt?: string | null, endedAt?: string | null, finalizedAt?: string | null }, messages?: { __typename?: 'ModelMotionMessageConnection', items: Array<{ __typename?: 'MotionMessage', initiatorAddress: string, name: string, messageKey: string, vote?: string | null, amount?: string | null, createdAt: string, initiatorUser?: { __typename?: 'User', bridgeCustomerId?: string | null, walletAddress: string, profile?: { __typename?: 'Profile', avatar?: string | null, bio?: string | null, displayName?: string | null, displayNameChanged?: string | null, email?: string | null, location?: string | null, thumbnail?: string | null, website?: string | null, preferredCurrency?: SupportedCurrencies | null, isAutoOfframpEnabled?: boolean | null, meta?: { __typename?: 'ProfileMetadata', metatransactionsEnabled?: boolean | null, decentralizedModeEnabled?: boolean | null, customRpc?: string | null } | null } | null, privateBetaInviteCode?: { __typename?: 'PrivateBetaInviteCode', id: string, shareableInvites?: number | null } | null, notificationsData?: { __typename?: 'NotificationsData', magicbellUserId: string, notificationsDisabled: boolean, mutedColonyAddresses: Array, paymentNotificationsDisabled: boolean, mentionNotificationsDisabled: boolean, adminNotificationsDisabled: boolean } | null } | null } | null> } | null, objectionAnnotation?: { __typename?: 'Annotation', createdAt: string, message: string } | null, action?: { __typename?: 'ColonyAction', type: ColonyActionType } | null } | null, colony: { __typename?: 'Colony', name: string, colonyAddress: string, nativeToken: { __typename?: 'Token', name: string, nativeTokenDecimals: number, nativeTokenSymbol: string, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } }, tokens?: { __typename?: 'ModelColonyTokensConnection', items: Array<{ __typename?: 'ColonyTokens', colonyTokensId: string, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } } | null> } | null, metadata?: { __typename?: 'ColonyMetadata', displayName: string, avatar?: string | null, description?: string | null, thumbnail?: string | null, externalLinks?: Array<{ __typename?: 'ExternalLink', name: ExternalLinks, link: string }> | null, objective?: { __typename?: 'ColonyObjective', title: string, description: string, progress: number } | null, changelog?: Array<{ __typename?: 'ColonyMetadataChangelog', transactionHash: string, newDisplayName: string, oldDisplayName: string, hasAvatarChanged: boolean, hasDescriptionChanged?: boolean | null, haveExternalLinksChanged?: boolean | null, hasObjectiveChanged?: boolean | null, newSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null, oldSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null }> | null, safes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null } | null }, pendingDomainMetadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null, pendingColonyMetadata?: { __typename?: 'ColonyMetadata', displayName: string, avatar?: string | null, description?: string | null, thumbnail?: string | null, externalLinks?: Array<{ __typename?: 'ExternalLink', name: ExternalLinks, link: string }> | null, objective?: { __typename?: 'ColonyObjective', title: string, description: string, progress: number } | null, changelog?: Array<{ __typename?: 'ColonyMetadataChangelog', transactionHash: string, newDisplayName: string, oldDisplayName: string, hasAvatarChanged: boolean, hasDescriptionChanged?: boolean | null, haveExternalLinksChanged?: boolean | null, hasObjectiveChanged?: boolean | null, newSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null, oldSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null }> | null, safes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null } | null, annotation?: { __typename?: 'Annotation', createdAt: string, message: string } | null, decisionData?: { __typename?: 'ColonyDecision', title: string, description: string, motionDomainId: number, walletAddress: string, createdAt: string, actionId: string, colonyAddress: string } | null, safeTransaction?: { __typename?: 'SafeTransaction', id: string, safe: { __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }, transactions?: { __typename?: 'ModelSafeTransactionDataConnection', items: Array<{ __typename?: 'SafeTransactionData', transactionType: SafeTransactionType, amount?: string | null, rawAmount?: string | null, data?: string | null, abi?: string | null, contractFunction?: string | null, token?: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } | null, recipient?: { __typename?: 'SimpleTarget', id: string, walletAddress: string, profile: { __typename?: 'SimpleTargetProfile', avatarHash?: string | null, displayName?: string | null } } | null, contract?: { __typename?: 'SimpleTarget', id: string, walletAddress: string, profile: { __typename?: 'SimpleTargetProfile', avatarHash?: string | null, displayName?: string | null } } | null, nft?: { __typename?: 'NFT', id: string, walletAddress: string, profile: { __typename?: 'NFTProfile', displayName: string } } | null, nftData?: { __typename?: 'NFTData', address: string, description?: string | null, id: string, imageUri?: string | null, logoUri: string, name?: string | null, tokenName: string, tokenSymbol: string, uri: string } | null, functionParams?: Array<{ __typename?: 'FunctionParam', name: string, type: string, value: string } | null> | null } | null> } | null } | null, metadata?: { __typename?: 'ColonyActionMetadata', customTitle: string, arbitraryTxAbis?: Array<{ __typename?: 'ArbitraryTxAbi', contractAddress: string, jsonAbi: string }> | null } | null, multiSigData?: { __typename?: 'ColonyMultiSig', id: string, nativeMultiSigId: string, createdAt: string, multiSigDomainId: string, nativeMultiSigDomainId: string, requiredPermissions: number, transactionHash: string, isExecuted: boolean, hasActionCompleted: boolean, isRejected: boolean, isDecision: boolean, executedAt?: string | null, executedBy?: string | null, rejectedAt?: string | null, rejectedBy?: string | null, multiSigDomain: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null }, signatures?: { __typename?: 'ModelMultiSigUserSignatureConnection', items: Array<{ __typename?: 'MultiSigUserSignature', id: string, role: number, userAddress: string, multiSigId: string, vote: MultiSigVote, createdAt: string, updatedAt: string, user: { __typename?: 'User', bridgeCustomerId?: string | null, walletAddress: string, profile?: { __typename?: 'Profile', avatar?: string | null, bio?: string | null, displayName?: string | null, displayNameChanged?: string | null, email?: string | null, location?: string | null, thumbnail?: string | null, website?: string | null, preferredCurrency?: SupportedCurrencies | null, isAutoOfframpEnabled?: boolean | null, meta?: { __typename?: 'ProfileMetadata', metatransactionsEnabled?: boolean | null, decentralizedModeEnabled?: boolean | null, customRpc?: string | null } | null } | null, privateBetaInviteCode?: { __typename?: 'PrivateBetaInviteCode', id: string, shareableInvites?: number | null } | null, notificationsData?: { __typename?: 'NotificationsData', magicbellUserId: string, notificationsDisabled: boolean, mutedColonyAddresses: Array, paymentNotificationsDisabled: boolean, mentionNotificationsDisabled: boolean, adminNotificationsDisabled: boolean } | null } } | null> } | null, executedByUser?: { __typename?: 'User', walletAddress: string, profile?: { __typename?: 'Profile', displayName?: string | null, displayNameChanged?: string | null, avatar?: string | null, thumbnail?: string | null } | null } | null, rejectedByUser?: { __typename?: 'User', walletAddress: string, profile?: { __typename?: 'Profile', displayName?: string | null, displayNameChanged?: string | null, avatar?: string | null, thumbnail?: string | null } | null } | null } | null, approvedTokenChanges?: { __typename?: 'ApprovedTokenChanges', added: Array, removed: Array, unaffected: Array } | null, expenditure?: { __typename?: 'Expenditure', isStaked: boolean, type: ExpenditureType, metadata?: { __typename?: 'ExpenditureMetadata', distributionType?: SplitPaymentDistributionType | null } | null, creatingActions?: { __typename?: 'ModelColonyActionConnection', items: Array<{ __typename?: 'ColonyAction', transactionHash: string } | null> } | null } | null, arbitraryTransactions?: Array<{ __typename?: 'ColonyActionArbitraryTransaction', contractAddress: string, encodedFunction: string }> | null }; export type ApprovedTokenChangesFragment = { __typename?: 'ApprovedTokenChanges', added: Array, removed: Array, unaffected: Array }; @@ -10293,21 +10799,21 @@ export type BridgeBankAccountFragment = { __typename?: 'BridgeBankAccount', id: export type BridgeDrainFragment = { __typename?: 'BridgeDrain', id: string, amount: string, currency: string, state: string, createdAt: string, receipt?: { __typename?: 'BridgeDrainReceipt', url: string } | null }; -export type ColonyFragment = { __typename?: 'Colony', name: string, version: number, reputation?: string | null, expendituresGlobalClaimDelay?: string | null, private?: boolean | null, lastUpdatedContributorsWithReputation?: string | null, colonyAddress: string, nativeToken: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string }, status?: { __typename?: 'ColonyStatus', recovery?: boolean | null, nativeToken?: { __typename?: 'NativeTokenStatus', mintable?: boolean | null, unlockable?: boolean | null, unlocked?: boolean | null } | null } | null, chainMetadata: { __typename?: 'ChainMetadata', chainId: string, network?: Network | null }, tokens?: { __typename?: 'ModelColonyTokensConnection', items: Array<{ __typename?: 'ColonyTokens', colonyTokensId: string, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } } | null> } | null, motionsWithUnclaimedStakes?: Array<{ __typename?: 'ColonyUnclaimedStake', motionId: string, unclaimedRewards: Array<{ __typename?: 'StakerRewards', address: string, rewards: { __typename?: 'MotionStakeValues', nay: string, yay: string } }> }> | null, domains?: { __typename?: 'ModelDomainConnection', items: Array<{ __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null> } | null, balances?: { __typename?: 'ColonyBalances', items?: Array<{ __typename?: 'ColonyBalance', id: string, balance: string, domain?: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } } | null> | null } | null, fundsClaimData?: { __typename?: 'ModelColonyFundsClaimConnection', items: Array<{ __typename?: 'ColonyFundsClaim', id: string, createdAtBlock: number, createdAt: string, amount: string, isClaimed?: boolean | null, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } } | null> } | null, chainFundsClaim?: { __typename?: 'ColonyChainFundsClaim', id: string, createdAtBlock: number, createdAt: string, amount: string, isClaimed?: boolean | null } | null, metadata?: { __typename?: 'ColonyMetadata', displayName: string, avatar?: string | null, description?: string | null, thumbnail?: string | null, externalLinks?: Array<{ __typename?: 'ExternalLink', name: ExternalLinks, link: string }> | null, objective?: { __typename?: 'ColonyObjective', title: string, description: string, progress: number } | null, changelog?: Array<{ __typename?: 'ColonyMetadataChangelog', transactionHash: string, newDisplayName: string, oldDisplayName: string, hasAvatarChanged: boolean, hasDescriptionChanged?: boolean | null, haveExternalLinksChanged?: boolean | null, hasObjectiveChanged?: boolean | null, newSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null, oldSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null }> | null, safes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null } | null, roles?: { __typename?: 'ModelColonyRoleConnection', items: Array<{ __typename?: 'ColonyRole', id: string, targetAddress: string, role_0?: boolean | null, role_1?: boolean | null, role_2?: boolean | null, role_3?: boolean | null, role_5?: boolean | null, role_6?: boolean | null, isMultiSig?: boolean | null, domain: { __typename?: 'Domain', id: string, nativeId: number } } | null> } | null, colonyMemberInvite?: { __typename?: 'ColonyMemberInvite', id: string, invitesRemaining: number } | null }; +export type ColonyFragment = { __typename?: 'Colony', name: string, version: number, reputation?: string | null, expendituresGlobalClaimDelay?: string | null, private?: boolean | null, lastUpdatedContributorsWithReputation?: string | null, colonyAddress: string, colonyCreateEvent?: { __typename?: 'ColonyCreateEvent', blockNumber: number, creationSalt: string } | null, nativeToken: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } }, status?: { __typename?: 'ColonyStatus', recovery?: boolean | null, nativeToken?: { __typename?: 'NativeTokenStatus', mintable?: boolean | null, unlockable?: boolean | null, unlocked?: boolean | null } | null } | null, chainMetadata: { __typename?: 'ChainMetadata', chainId: string, network?: Network | null }, tokens?: { __typename?: 'ModelColonyTokensConnection', items: Array<{ __typename?: 'ColonyTokens', colonyTokensId: string, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } } | null> } | null, motionsWithUnclaimedStakes?: Array<{ __typename?: 'ColonyUnclaimedStake', motionId: string, unclaimedRewards: Array<{ __typename?: 'StakerRewards', address: string, rewards: { __typename?: 'MotionStakeValues', nay: string, yay: string } }> }> | null, domains?: { __typename?: 'ModelDomainConnection', items: Array<{ __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null> } | null, balances?: { __typename?: 'ColonyBalances', items?: Array<{ __typename?: 'ColonyBalance', id: string, balance: string, domain?: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } } | null> | null } | null, fundsClaimData?: { __typename?: 'ModelColonyFundsClaimConnection', items: Array<{ __typename?: 'ColonyFundsClaim', id: string, createdAtBlock: number, createdAt: string, amount: string, isClaimed?: boolean | null, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } } | null> } | null, chainFundsClaim?: Array<{ __typename?: 'ColonyChainFundsClaim', id: string, createdAtBlock: number, createdAt: string, amount: string, isClaimed?: boolean | null } | null> | null, metadata?: { __typename?: 'ColonyMetadata', displayName: string, avatar?: string | null, description?: string | null, thumbnail?: string | null, externalLinks?: Array<{ __typename?: 'ExternalLink', name: ExternalLinks, link: string }> | null, objective?: { __typename?: 'ColonyObjective', title: string, description: string, progress: number } | null, changelog?: Array<{ __typename?: 'ColonyMetadataChangelog', transactionHash: string, newDisplayName: string, oldDisplayName: string, hasAvatarChanged: boolean, hasDescriptionChanged?: boolean | null, haveExternalLinksChanged?: boolean | null, hasObjectiveChanged?: boolean | null, newSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null, oldSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null }> | null, safes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null } | null, roles?: { __typename?: 'ModelColonyRoleConnection', items: Array<{ __typename?: 'ColonyRole', id: string, targetAddress: string, role_0?: boolean | null, role_1?: boolean | null, role_2?: boolean | null, role_3?: boolean | null, role_5?: boolean | null, role_6?: boolean | null, isMultiSig?: boolean | null, domain: { __typename?: 'Domain', id: string, nativeId: number } } | null> } | null, colonyMemberInvite?: { __typename?: 'ColonyMemberInvite', id: string, invitesRemaining: number } | null, proxyColonies?: { __typename?: 'ModelProxyColonyConnection', items: Array<{ __typename?: 'ProxyColony', chainId: string, isActive: boolean } | null> } | null }; export type PublicColonyFragment = { __typename?: 'Colony', name: string, colonyAddress: string, metadata?: { __typename?: 'ColonyMetadata', avatar?: string | null, displayName: string, thumbnail?: string | null, externalLinks?: Array<{ __typename?: 'ExternalLink', link: string, name: ExternalLinks }> | null } | null }; -export type ColonyTokensConnectionFragment = { __typename?: 'ModelColonyTokensConnection', items: Array<{ __typename?: 'ColonyTokens', colonyTokensId: string, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } } | null> }; +export type ColonyTokensConnectionFragment = { __typename?: 'ModelColonyTokensConnection', items: Array<{ __typename?: 'ColonyTokens', colonyTokensId: string, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } } | null> }; export type UnclaimedStakesFragment = { __typename?: 'ColonyUnclaimedStake', motionId: string, unclaimedRewards: Array<{ __typename?: 'StakerRewards', address: string, rewards: { __typename?: 'MotionStakeValues', nay: string, yay: string } }> }; export type ColonyMetadataFragment = { __typename?: 'ColonyMetadata', displayName: string, avatar?: string | null, description?: string | null, thumbnail?: string | null, externalLinks?: Array<{ __typename?: 'ExternalLink', name: ExternalLinks, link: string }> | null, objective?: { __typename?: 'ColonyObjective', title: string, description: string, progress: number } | null, changelog?: Array<{ __typename?: 'ColonyMetadataChangelog', transactionHash: string, newDisplayName: string, oldDisplayName: string, hasAvatarChanged: boolean, hasDescriptionChanged?: boolean | null, haveExternalLinksChanged?: boolean | null, hasObjectiveChanged?: boolean | null, newSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null, oldSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null }> | null, safes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null }; -export type ColonyBalancesFragment = { __typename?: 'ColonyBalances', items?: Array<{ __typename?: 'ColonyBalance', id: string, balance: string, domain?: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } } | null> | null }; +export type ColonyBalancesFragment = { __typename?: 'ColonyBalances', items?: Array<{ __typename?: 'ColonyBalance', id: string, balance: string, domain?: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } } | null> | null }; -export type ColonyBalanceFragment = { __typename?: 'ColonyBalance', id: string, balance: string, domain?: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } }; +export type ColonyBalanceFragment = { __typename?: 'ColonyBalance', id: string, balance: string, domain?: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } }; -export type FundsClaimFragment = { __typename?: 'ColonyFundsClaim', id: string, createdAtBlock: number, createdAt: string, amount: string, isClaimed?: boolean | null, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } }; +export type FundsClaimFragment = { __typename?: 'ColonyFundsClaim', id: string, createdAtBlock: number, createdAt: string, amount: string, isClaimed?: boolean | null, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } }; export type ChainFundsClaimFragment = { __typename?: 'ColonyChainFundsClaim', id: string, createdAtBlock: number, createdAt: string, amount: string, isClaimed?: boolean | null }; @@ -10321,7 +10827,7 @@ export type JoinedColonyFragment = { __typename?: 'Colony', name: string, colony export type JoinedColonyWithExtensionsFragment = { __typename?: 'Colony', name: string, colonyAddress: string, metadata?: { __typename?: 'ColonyMetadata', displayName: string, avatar?: string | null, description?: string | null, thumbnail?: string | null, externalLinks?: Array<{ __typename?: 'ExternalLink', name: ExternalLinks, link: string }> | null, objective?: { __typename?: 'ColonyObjective', title: string, description: string, progress: number } | null, changelog?: Array<{ __typename?: 'ColonyMetadataChangelog', transactionHash: string, newDisplayName: string, oldDisplayName: string, hasAvatarChanged: boolean, hasDescriptionChanged?: boolean | null, haveExternalLinksChanged?: boolean | null, hasObjectiveChanged?: boolean | null, newSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null, oldSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null }> | null, safes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null } | null, chainMetadata: { __typename?: 'ChainMetadata', chainId: string, network?: Network | null }, extensions?: { __typename?: 'ModelColonyExtensionConnection', items: Array<{ __typename?: 'ColonyExtension', version: number, hash: string, isDeleted: boolean, isDeprecated: boolean, isInitialized: boolean, address: string } | null> } | null }; -export type NotificationColonyFragment = { __typename?: 'Colony', name: string, colonyAddress: string, metadata?: { __typename?: 'ColonyMetadata', displayName: string, avatar?: string | null, description?: string | null, thumbnail?: string | null, externalLinks?: Array<{ __typename?: 'ExternalLink', name: ExternalLinks, link: string }> | null, objective?: { __typename?: 'ColonyObjective', title: string, description: string, progress: number } | null, changelog?: Array<{ __typename?: 'ColonyMetadataChangelog', transactionHash: string, newDisplayName: string, oldDisplayName: string, hasAvatarChanged: boolean, hasDescriptionChanged?: boolean | null, haveExternalLinksChanged?: boolean | null, hasObjectiveChanged?: boolean | null, newSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null, oldSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null }> | null, safes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null } | null, nativeToken: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } }; +export type NotificationColonyFragment = { __typename?: 'Colony', name: string, colonyAddress: string, metadata?: { __typename?: 'ColonyMetadata', displayName: string, avatar?: string | null, description?: string | null, thumbnail?: string | null, externalLinks?: Array<{ __typename?: 'ExternalLink', name: ExternalLinks, link: string }> | null, objective?: { __typename?: 'ColonyObjective', title: string, description: string, progress: number } | null, changelog?: Array<{ __typename?: 'ColonyMetadataChangelog', transactionHash: string, newDisplayName: string, oldDisplayName: string, hasAvatarChanged: boolean, hasDescriptionChanged?: boolean | null, haveExternalLinksChanged?: boolean | null, hasObjectiveChanged?: boolean | null, newSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null, oldSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null }> | null, safes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null } | null, nativeToken: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } }; export type ContributorReputationFragment = { __typename?: 'ContributorReputation', reputationPercentage: number, reputationRaw: string, domainId: string, id: string, domain: { __typename?: 'Domain', id: string, nativeId: number, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor } | null } }; @@ -10355,19 +10861,23 @@ export type ExtensionDisplayFragmentFragment = { __typename?: 'ColonyExtension', export type LiquidationAddressFragment = { __typename?: 'LiquidationAddress', id: string, chainId: number, userAddress: string, liquidationAddress: string, user?: { __typename?: 'User', bridgeCustomerId?: string | null, walletAddress: string, profile?: { __typename?: 'Profile', avatar?: string | null, bio?: string | null, displayName?: string | null, displayNameChanged?: string | null, email?: string | null, location?: string | null, thumbnail?: string | null, website?: string | null, preferredCurrency?: SupportedCurrencies | null, isAutoOfframpEnabled?: boolean | null, meta?: { __typename?: 'ProfileMetadata', metatransactionsEnabled?: boolean | null, decentralizedModeEnabled?: boolean | null, customRpc?: string | null } | null } | null, privateBetaInviteCode?: { __typename?: 'PrivateBetaInviteCode', id: string, shareableInvites?: number | null } | null, notificationsData?: { __typename?: 'NotificationsData', magicbellUserId: string, notificationsDisabled: boolean, mutedColonyAddresses: Array, paymentNotificationsDisabled: boolean, mentionNotificationsDisabled: boolean, adminNotificationsDisabled: boolean } | null } | null }; +export type ProxyColonyFragment = { __typename?: 'ProxyColony', id: string, colonyAddress: string, chainId: string, isActive: boolean }; + +export type SupportedChainFragment = { __typename?: 'SupportedChain', id: string, isActive?: boolean | null }; + export type ColonyUserRoleFragment = { __typename?: 'ColonyRole', id: string, targetAddress: string, role_1?: boolean | null, role_2?: boolean | null, role_3?: boolean | null, role_5?: boolean | null, role_6?: boolean | null, targetUser?: { __typename?: 'User', bridgeCustomerId?: string | null, walletAddress: string, profile?: { __typename?: 'Profile', avatar?: string | null, bio?: string | null, displayName?: string | null, displayNameChanged?: string | null, email?: string | null, location?: string | null, thumbnail?: string | null, website?: string | null, preferredCurrency?: SupportedCurrencies | null, isAutoOfframpEnabled?: boolean | null, meta?: { __typename?: 'ProfileMetadata', metatransactionsEnabled?: boolean | null, decentralizedModeEnabled?: boolean | null, customRpc?: string | null } | null } | null, privateBetaInviteCode?: { __typename?: 'PrivateBetaInviteCode', id: string, shareableInvites?: number | null } | null, notificationsData?: { __typename?: 'NotificationsData', magicbellUserId: string, notificationsDisabled: boolean, mutedColonyAddresses: Array, paymentNotificationsDisabled: boolean, mentionNotificationsDisabled: boolean, adminNotificationsDisabled: boolean } | null } | null }; export type NftDataFragment = { __typename?: 'NFTData', address: string, description?: string | null, id: string, imageUri?: string | null, logoUri: string, name?: string | null, tokenName: string, tokenSymbol: string, uri: string }; export type FunctionParamFragment = { __typename?: 'FunctionParam', name: string, type: string, value: string }; -export type SafeTransactionDataFragment = { __typename?: 'SafeTransactionData', transactionType: SafeTransactionType, amount?: string | null, rawAmount?: string | null, data?: string | null, abi?: string | null, contractFunction?: string | null, token?: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } | null, recipient?: { __typename?: 'SimpleTarget', id: string, walletAddress: string, profile: { __typename?: 'SimpleTargetProfile', avatarHash?: string | null, displayName?: string | null } } | null, contract?: { __typename?: 'SimpleTarget', id: string, walletAddress: string, profile: { __typename?: 'SimpleTargetProfile', avatarHash?: string | null, displayName?: string | null } } | null, nft?: { __typename?: 'NFT', id: string, walletAddress: string, profile: { __typename?: 'NFTProfile', displayName: string } } | null, nftData?: { __typename?: 'NFTData', address: string, description?: string | null, id: string, imageUri?: string | null, logoUri: string, name?: string | null, tokenName: string, tokenSymbol: string, uri: string } | null, functionParams?: Array<{ __typename?: 'FunctionParam', name: string, type: string, value: string } | null> | null }; +export type SafeTransactionDataFragment = { __typename?: 'SafeTransactionData', transactionType: SafeTransactionType, amount?: string | null, rawAmount?: string | null, data?: string | null, abi?: string | null, contractFunction?: string | null, token?: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } | null, recipient?: { __typename?: 'SimpleTarget', id: string, walletAddress: string, profile: { __typename?: 'SimpleTargetProfile', avatarHash?: string | null, displayName?: string | null } } | null, contract?: { __typename?: 'SimpleTarget', id: string, walletAddress: string, profile: { __typename?: 'SimpleTargetProfile', avatarHash?: string | null, displayName?: string | null } } | null, nft?: { __typename?: 'NFT', id: string, walletAddress: string, profile: { __typename?: 'NFTProfile', displayName: string } } | null, nftData?: { __typename?: 'NFTData', address: string, description?: string | null, id: string, imageUri?: string | null, logoUri: string, name?: string | null, tokenName: string, tokenSymbol: string, uri: string } | null, functionParams?: Array<{ __typename?: 'FunctionParam', name: string, type: string, value: string } | null> | null }; -export type SafeTransactionFragment = { __typename?: 'SafeTransaction', id: string, safe: { __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }, transactions?: { __typename?: 'ModelSafeTransactionDataConnection', items: Array<{ __typename?: 'SafeTransactionData', transactionType: SafeTransactionType, amount?: string | null, rawAmount?: string | null, data?: string | null, abi?: string | null, contractFunction?: string | null, token?: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } | null, recipient?: { __typename?: 'SimpleTarget', id: string, walletAddress: string, profile: { __typename?: 'SimpleTargetProfile', avatarHash?: string | null, displayName?: string | null } } | null, contract?: { __typename?: 'SimpleTarget', id: string, walletAddress: string, profile: { __typename?: 'SimpleTargetProfile', avatarHash?: string | null, displayName?: string | null } } | null, nft?: { __typename?: 'NFT', id: string, walletAddress: string, profile: { __typename?: 'NFTProfile', displayName: string } } | null, nftData?: { __typename?: 'NFTData', address: string, description?: string | null, id: string, imageUri?: string | null, logoUri: string, name?: string | null, tokenName: string, tokenSymbol: string, uri: string } | null, functionParams?: Array<{ __typename?: 'FunctionParam', name: string, type: string, value: string } | null> | null } | null> } | null }; +export type SafeTransactionFragment = { __typename?: 'SafeTransaction', id: string, safe: { __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }, transactions?: { __typename?: 'ModelSafeTransactionDataConnection', items: Array<{ __typename?: 'SafeTransactionData', transactionType: SafeTransactionType, amount?: string | null, rawAmount?: string | null, data?: string | null, abi?: string | null, contractFunction?: string | null, token?: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } | null, recipient?: { __typename?: 'SimpleTarget', id: string, walletAddress: string, profile: { __typename?: 'SimpleTargetProfile', avatarHash?: string | null, displayName?: string | null } } | null, contract?: { __typename?: 'SimpleTarget', id: string, walletAddress: string, profile: { __typename?: 'SimpleTargetProfile', avatarHash?: string | null, displayName?: string | null } } | null, nft?: { __typename?: 'NFT', id: string, walletAddress: string, profile: { __typename?: 'NFTProfile', displayName: string } } | null, nftData?: { __typename?: 'NFTData', address: string, description?: string | null, id: string, imageUri?: string | null, logoUri: string, name?: string | null, tokenName: string, tokenSymbol: string, uri: string } | null, functionParams?: Array<{ __typename?: 'FunctionParam', name: string, type: string, value: string } | null> | null } | null> } | null }; -export type UserStakeFragment = { __typename?: 'UserStake', id: string, amount: string, isClaimed: boolean, createdAt: string, type?: UserStakeType | null, action?: { __typename?: 'ColonyAction', type: ColonyActionType, blockNumber: number, initiatorAddress: string, recipientAddress?: string | null, amount?: string | null, networkFee?: string | null, tokenAddress?: string | null, createdAt: string, newColonyVersion?: number | null, rolesAreMultiSig?: boolean | null, individualEvents?: string | null, isMotion?: boolean | null, showInActionsList: boolean, members?: Array | null, rootHash: string, expenditureId?: string | null, isMultiSig?: boolean | null, multiSigId?: string | null, transactionHash: string, colonyAddress: string, initiatorUser?: { __typename?: 'User', walletAddress: string, profile?: { __typename?: 'Profile', displayName?: string | null, displayNameChanged?: string | null, avatar?: string | null, thumbnail?: string | null } | null } | null, initiatorColony?: { __typename?: 'Colony', name: string, version: number, reputation?: string | null, expendituresGlobalClaimDelay?: string | null, private?: boolean | null, lastUpdatedContributorsWithReputation?: string | null, colonyAddress: string, metadata?: { __typename?: 'ColonyMetadata', avatar?: string | null, displayName: string, thumbnail?: string | null, description?: string | null, externalLinks?: Array<{ __typename?: 'ExternalLink', link: string, name: ExternalLinks }> | null, objective?: { __typename?: 'ColonyObjective', title: string, description: string, progress: number } | null, changelog?: Array<{ __typename?: 'ColonyMetadataChangelog', transactionHash: string, newDisplayName: string, oldDisplayName: string, hasAvatarChanged: boolean, hasDescriptionChanged?: boolean | null, haveExternalLinksChanged?: boolean | null, hasObjectiveChanged?: boolean | null, newSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null, oldSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null }> | null, safes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null } | null, nativeToken: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string }, status?: { __typename?: 'ColonyStatus', recovery?: boolean | null, nativeToken?: { __typename?: 'NativeTokenStatus', mintable?: boolean | null, unlockable?: boolean | null, unlocked?: boolean | null } | null } | null, chainMetadata: { __typename?: 'ChainMetadata', chainId: string, network?: Network | null }, tokens?: { __typename?: 'ModelColonyTokensConnection', items: Array<{ __typename?: 'ColonyTokens', colonyTokensId: string, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } } | null> } | null, motionsWithUnclaimedStakes?: Array<{ __typename?: 'ColonyUnclaimedStake', motionId: string, unclaimedRewards: Array<{ __typename?: 'StakerRewards', address: string, rewards: { __typename?: 'MotionStakeValues', nay: string, yay: string } }> }> | null, domains?: { __typename?: 'ModelDomainConnection', items: Array<{ __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null> } | null, balances?: { __typename?: 'ColonyBalances', items?: Array<{ __typename?: 'ColonyBalance', id: string, balance: string, domain?: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } } | null> | null } | null, fundsClaimData?: { __typename?: 'ModelColonyFundsClaimConnection', items: Array<{ __typename?: 'ColonyFundsClaim', id: string, createdAtBlock: number, createdAt: string, amount: string, isClaimed?: boolean | null, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } } | null> } | null, chainFundsClaim?: { __typename?: 'ColonyChainFundsClaim', id: string, createdAtBlock: number, createdAt: string, amount: string, isClaimed?: boolean | null } | null, roles?: { __typename?: 'ModelColonyRoleConnection', items: Array<{ __typename?: 'ColonyRole', id: string, targetAddress: string, role_0?: boolean | null, role_1?: boolean | null, role_2?: boolean | null, role_3?: boolean | null, role_5?: boolean | null, role_6?: boolean | null, isMultiSig?: boolean | null, domain: { __typename?: 'Domain', id: string, nativeId: number } } | null> } | null, colonyMemberInvite?: { __typename?: 'ColonyMemberInvite', id: string, invitesRemaining: number } | null } | null, initiatorExtension?: { __typename?: 'ColonyExtension', hash: string, installedBy: string, installedAt: number, isDeprecated: boolean, isDeleted: boolean, isInitialized: boolean, address: string, colonyAddress: string, currentVersion: number, params?: { __typename?: 'ExtensionParams', votingReputation?: { __typename?: 'VotingReputationParams', maxVoteFraction: string, totalStakeFraction: string, voterRewardFraction: string, userMinStakeFraction: string, stakePeriod: string, submitPeriod: string, revealPeriod: string, escalationPeriod: string } | null, stakedExpenditure?: { __typename?: 'StakedExpenditureParams', stakeFraction: string } | null, multiSig?: { __typename?: 'MultiSigParams', colonyThreshold: number, domainThresholds?: Array<{ __typename?: 'MultiSigDomainConfig', domainId: string, domainThreshold: number } | null> | null } | null } | null } | null, initiatorToken?: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } | null, recipientUser?: { __typename?: 'User', walletAddress: string, profile?: { __typename?: 'Profile', displayName?: string | null, displayNameChanged?: string | null, avatar?: string | null, thumbnail?: string | null } | null } | null, recipientColony?: { __typename?: 'Colony', name: string, version: number, reputation?: string | null, expendituresGlobalClaimDelay?: string | null, private?: boolean | null, lastUpdatedContributorsWithReputation?: string | null, colonyAddress: string, metadata?: { __typename?: 'ColonyMetadata', avatar?: string | null, displayName: string, thumbnail?: string | null, description?: string | null, externalLinks?: Array<{ __typename?: 'ExternalLink', link: string, name: ExternalLinks }> | null, objective?: { __typename?: 'ColonyObjective', title: string, description: string, progress: number } | null, changelog?: Array<{ __typename?: 'ColonyMetadataChangelog', transactionHash: string, newDisplayName: string, oldDisplayName: string, hasAvatarChanged: boolean, hasDescriptionChanged?: boolean | null, haveExternalLinksChanged?: boolean | null, hasObjectiveChanged?: boolean | null, newSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null, oldSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null }> | null, safes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null } | null, nativeToken: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string }, status?: { __typename?: 'ColonyStatus', recovery?: boolean | null, nativeToken?: { __typename?: 'NativeTokenStatus', mintable?: boolean | null, unlockable?: boolean | null, unlocked?: boolean | null } | null } | null, chainMetadata: { __typename?: 'ChainMetadata', chainId: string, network?: Network | null }, tokens?: { __typename?: 'ModelColonyTokensConnection', items: Array<{ __typename?: 'ColonyTokens', colonyTokensId: string, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } } | null> } | null, motionsWithUnclaimedStakes?: Array<{ __typename?: 'ColonyUnclaimedStake', motionId: string, unclaimedRewards: Array<{ __typename?: 'StakerRewards', address: string, rewards: { __typename?: 'MotionStakeValues', nay: string, yay: string } }> }> | null, domains?: { __typename?: 'ModelDomainConnection', items: Array<{ __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null> } | null, balances?: { __typename?: 'ColonyBalances', items?: Array<{ __typename?: 'ColonyBalance', id: string, balance: string, domain?: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } } | null> | null } | null, fundsClaimData?: { __typename?: 'ModelColonyFundsClaimConnection', items: Array<{ __typename?: 'ColonyFundsClaim', id: string, createdAtBlock: number, createdAt: string, amount: string, isClaimed?: boolean | null, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } } | null> } | null, chainFundsClaim?: { __typename?: 'ColonyChainFundsClaim', id: string, createdAtBlock: number, createdAt: string, amount: string, isClaimed?: boolean | null } | null, roles?: { __typename?: 'ModelColonyRoleConnection', items: Array<{ __typename?: 'ColonyRole', id: string, targetAddress: string, role_0?: boolean | null, role_1?: boolean | null, role_2?: boolean | null, role_3?: boolean | null, role_5?: boolean | null, role_6?: boolean | null, isMultiSig?: boolean | null, domain: { __typename?: 'Domain', id: string, nativeId: number } } | null> } | null, colonyMemberInvite?: { __typename?: 'ColonyMemberInvite', id: string, invitesRemaining: number } | null } | null, recipientExtension?: { __typename?: 'ColonyExtension', hash: string, installedBy: string, installedAt: number, isDeprecated: boolean, isDeleted: boolean, isInitialized: boolean, address: string, colonyAddress: string, currentVersion: number, params?: { __typename?: 'ExtensionParams', votingReputation?: { __typename?: 'VotingReputationParams', maxVoteFraction: string, totalStakeFraction: string, voterRewardFraction: string, userMinStakeFraction: string, stakePeriod: string, submitPeriod: string, revealPeriod: string, escalationPeriod: string } | null, stakedExpenditure?: { __typename?: 'StakedExpenditureParams', stakeFraction: string } | null, multiSig?: { __typename?: 'MultiSigParams', colonyThreshold: number, domainThresholds?: Array<{ __typename?: 'MultiSigDomainConfig', domainId: string, domainThreshold: number } | null> | null } | null } | null } | null, recipientToken?: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } | null, token?: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } | null, fromDomain?: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null, toDomain?: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null, roles?: { __typename?: 'ColonyActionRoles', role_0?: boolean | null, role_1?: boolean | null, role_2?: boolean | null, role_3?: boolean | null, role_5?: boolean | null, role_6?: boolean | null } | null, payments?: Array<{ __typename?: 'Payment', amount: string, tokenAddress: string, recipientAddress: string }> | null, motionData?: { __typename?: 'ColonyMotion', remainingStakes: Array, userMinStake: string, requiredStake: string, nativeMotionDomainId: string, isFinalized: boolean, skillRep: string, repSubmitted: string, hasObjection: boolean, isDecision: boolean, transactionHash: string, createdAt: string, createdBy: string, expenditureSlotIds?: Array | null, databaseMotionId: string, motionId: string, motionStakes: { __typename?: 'MotionStakes', raw: { __typename?: 'MotionStakeValues', yay: string, nay: string }, percentage: { __typename?: 'MotionStakeValues', yay: string, nay: string } }, usersStakes: Array<{ __typename?: 'UserMotionStakes', address: string, stakes: { __typename?: 'MotionStakes', raw: { __typename?: 'MotionStakeValues', yay: string, nay: string }, percentage: { __typename?: 'MotionStakeValues', yay: string, nay: string } } }>, motionDomain: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null }, stakerRewards: Array<{ __typename?: 'StakerRewards', address: string, isClaimed: boolean, rewards: { __typename?: 'MotionStakeValues', yay: string, nay: string } }>, voterRewards?: { __typename?: 'ModelVoterRewardsHistoryConnection', items: Array<{ __typename?: 'VoterRewardsHistory', userAddress: string, amount: string, user: { __typename?: 'User', bridgeCustomerId?: string | null, walletAddress: string, profile?: { __typename?: 'Profile', avatar?: string | null, bio?: string | null, displayName?: string | null, displayNameChanged?: string | null, email?: string | null, location?: string | null, thumbnail?: string | null, website?: string | null, preferredCurrency?: SupportedCurrencies | null, isAutoOfframpEnabled?: boolean | null, meta?: { __typename?: 'ProfileMetadata', metatransactionsEnabled?: boolean | null, decentralizedModeEnabled?: boolean | null, customRpc?: string | null } | null } | null, privateBetaInviteCode?: { __typename?: 'PrivateBetaInviteCode', id: string, shareableInvites?: number | null } | null, notificationsData?: { __typename?: 'NotificationsData', magicbellUserId: string, notificationsDisabled: boolean, mutedColonyAddresses: Array, paymentNotificationsDisabled: boolean, mentionNotificationsDisabled: boolean, adminNotificationsDisabled: boolean } | null } } | null> } | null, voterRecord: Array<{ __typename?: 'VoterRecord', address: string, voteCount: string, vote?: number | null }>, revealedVotes: { __typename?: 'MotionStakes', raw: { __typename?: 'MotionStakeValues', yay: string, nay: string }, percentage: { __typename?: 'MotionStakeValues', yay: string, nay: string } }, motionStateHistory: { __typename?: 'MotionStateHistory', hasVoted: boolean, hasPassed: boolean, hasFailed: boolean, hasFailedNotFinalizable: boolean, inRevealPhase: boolean, yaySideFullyStakedAt?: string | null, naySideFullyStakedAt?: string | null, allVotesSubmittedAt?: string | null, allVotesRevealedAt?: string | null, endedAt?: string | null, finalizedAt?: string | null }, messages?: { __typename?: 'ModelMotionMessageConnection', items: Array<{ __typename?: 'MotionMessage', initiatorAddress: string, name: string, messageKey: string, vote?: string | null, amount?: string | null, createdAt: string, initiatorUser?: { __typename?: 'User', bridgeCustomerId?: string | null, walletAddress: string, profile?: { __typename?: 'Profile', avatar?: string | null, bio?: string | null, displayName?: string | null, displayNameChanged?: string | null, email?: string | null, location?: string | null, thumbnail?: string | null, website?: string | null, preferredCurrency?: SupportedCurrencies | null, isAutoOfframpEnabled?: boolean | null, meta?: { __typename?: 'ProfileMetadata', metatransactionsEnabled?: boolean | null, decentralizedModeEnabled?: boolean | null, customRpc?: string | null } | null } | null, privateBetaInviteCode?: { __typename?: 'PrivateBetaInviteCode', id: string, shareableInvites?: number | null } | null, notificationsData?: { __typename?: 'NotificationsData', magicbellUserId: string, notificationsDisabled: boolean, mutedColonyAddresses: Array, paymentNotificationsDisabled: boolean, mentionNotificationsDisabled: boolean, adminNotificationsDisabled: boolean } | null } | null } | null> } | null, objectionAnnotation?: { __typename?: 'Annotation', createdAt: string, message: string } | null, action?: { __typename?: 'ColonyAction', type: ColonyActionType } | null } | null, colony: { __typename?: 'Colony', name: string, colonyAddress: string, nativeToken: { __typename?: 'Token', name: string, nativeTokenDecimals: number, nativeTokenSymbol: string, tokenAddress: string }, tokens?: { __typename?: 'ModelColonyTokensConnection', items: Array<{ __typename?: 'ColonyTokens', colonyTokensId: string, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } } | null> } | null, metadata?: { __typename?: 'ColonyMetadata', displayName: string, avatar?: string | null, description?: string | null, thumbnail?: string | null, externalLinks?: Array<{ __typename?: 'ExternalLink', name: ExternalLinks, link: string }> | null, objective?: { __typename?: 'ColonyObjective', title: string, description: string, progress: number } | null, changelog?: Array<{ __typename?: 'ColonyMetadataChangelog', transactionHash: string, newDisplayName: string, oldDisplayName: string, hasAvatarChanged: boolean, hasDescriptionChanged?: boolean | null, haveExternalLinksChanged?: boolean | null, hasObjectiveChanged?: boolean | null, newSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null, oldSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null }> | null, safes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null } | null }, pendingDomainMetadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null, pendingColonyMetadata?: { __typename?: 'ColonyMetadata', displayName: string, avatar?: string | null, description?: string | null, thumbnail?: string | null, externalLinks?: Array<{ __typename?: 'ExternalLink', name: ExternalLinks, link: string }> | null, objective?: { __typename?: 'ColonyObjective', title: string, description: string, progress: number } | null, changelog?: Array<{ __typename?: 'ColonyMetadataChangelog', transactionHash: string, newDisplayName: string, oldDisplayName: string, hasAvatarChanged: boolean, hasDescriptionChanged?: boolean | null, haveExternalLinksChanged?: boolean | null, hasObjectiveChanged?: boolean | null, newSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null, oldSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null }> | null, safes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null } | null, annotation?: { __typename?: 'Annotation', createdAt: string, message: string } | null, decisionData?: { __typename?: 'ColonyDecision', title: string, description: string, motionDomainId: number, walletAddress: string, createdAt: string, actionId: string, colonyAddress: string } | null, safeTransaction?: { __typename?: 'SafeTransaction', id: string, safe: { __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }, transactions?: { __typename?: 'ModelSafeTransactionDataConnection', items: Array<{ __typename?: 'SafeTransactionData', transactionType: SafeTransactionType, amount?: string | null, rawAmount?: string | null, data?: string | null, abi?: string | null, contractFunction?: string | null, token?: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } | null, recipient?: { __typename?: 'SimpleTarget', id: string, walletAddress: string, profile: { __typename?: 'SimpleTargetProfile', avatarHash?: string | null, displayName?: string | null } } | null, contract?: { __typename?: 'SimpleTarget', id: string, walletAddress: string, profile: { __typename?: 'SimpleTargetProfile', avatarHash?: string | null, displayName?: string | null } } | null, nft?: { __typename?: 'NFT', id: string, walletAddress: string, profile: { __typename?: 'NFTProfile', displayName: string } } | null, nftData?: { __typename?: 'NFTData', address: string, description?: string | null, id: string, imageUri?: string | null, logoUri: string, name?: string | null, tokenName: string, tokenSymbol: string, uri: string } | null, functionParams?: Array<{ __typename?: 'FunctionParam', name: string, type: string, value: string } | null> | null } | null> } | null } | null, metadata?: { __typename?: 'ColonyActionMetadata', customTitle: string, arbitraryTxAbis?: Array<{ __typename?: 'ArbitraryTxAbi', contractAddress: string, jsonAbi: string }> | null } | null, multiSigData?: { __typename?: 'ColonyMultiSig', id: string, nativeMultiSigId: string, createdAt: string, multiSigDomainId: string, nativeMultiSigDomainId: string, requiredPermissions: number, transactionHash: string, isExecuted: boolean, hasActionCompleted: boolean, isRejected: boolean, isDecision: boolean, executedAt?: string | null, executedBy?: string | null, rejectedAt?: string | null, rejectedBy?: string | null, multiSigDomain: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null }, signatures?: { __typename?: 'ModelMultiSigUserSignatureConnection', items: Array<{ __typename?: 'MultiSigUserSignature', id: string, role: number, userAddress: string, multiSigId: string, vote: MultiSigVote, createdAt: string, updatedAt: string, user: { __typename?: 'User', bridgeCustomerId?: string | null, walletAddress: string, profile?: { __typename?: 'Profile', avatar?: string | null, bio?: string | null, displayName?: string | null, displayNameChanged?: string | null, email?: string | null, location?: string | null, thumbnail?: string | null, website?: string | null, preferredCurrency?: SupportedCurrencies | null, isAutoOfframpEnabled?: boolean | null, meta?: { __typename?: 'ProfileMetadata', metatransactionsEnabled?: boolean | null, decentralizedModeEnabled?: boolean | null, customRpc?: string | null } | null } | null, privateBetaInviteCode?: { __typename?: 'PrivateBetaInviteCode', id: string, shareableInvites?: number | null } | null, notificationsData?: { __typename?: 'NotificationsData', magicbellUserId: string, notificationsDisabled: boolean, mutedColonyAddresses: Array, paymentNotificationsDisabled: boolean, mentionNotificationsDisabled: boolean, adminNotificationsDisabled: boolean } | null } } | null> } | null, executedByUser?: { __typename?: 'User', walletAddress: string, profile?: { __typename?: 'Profile', displayName?: string | null, displayNameChanged?: string | null, avatar?: string | null, thumbnail?: string | null } | null } | null, rejectedByUser?: { __typename?: 'User', walletAddress: string, profile?: { __typename?: 'Profile', displayName?: string | null, displayNameChanged?: string | null, avatar?: string | null, thumbnail?: string | null } | null } | null } | null, approvedTokenChanges?: { __typename?: 'ApprovedTokenChanges', added: Array, removed: Array, unaffected: Array } | null, expenditure?: { __typename?: 'Expenditure', isStaked: boolean, type: ExpenditureType, metadata?: { __typename?: 'ExpenditureMetadata', distributionType?: SplitPaymentDistributionType | null } | null, creatingActions?: { __typename?: 'ModelColonyActionConnection', items: Array<{ __typename?: 'ColonyAction', transactionHash: string } | null> } | null } | null, arbitraryTransactions?: Array<{ __typename?: 'ColonyActionArbitraryTransaction', contractAddress: string, encodedFunction: string }> | null } | null }; +export type UserStakeFragment = { __typename?: 'UserStake', id: string, amount: string, isClaimed: boolean, createdAt: string, type?: UserStakeType | null, action?: { __typename?: 'ColonyAction', type: ColonyActionType, blockNumber: number, initiatorAddress: string, recipientAddress?: string | null, amount?: string | null, networkFee?: string | null, tokenAddress?: string | null, createdAt: string, newColonyVersion?: number | null, rolesAreMultiSig?: boolean | null, individualEvents?: string | null, isMotion?: boolean | null, showInActionsList: boolean, members?: Array | null, rootHash: string, expenditureId?: string | null, isMultiSig?: boolean | null, multiSigId?: string | null, targetChainId?: number | null, transactionHash: string, colonyAddress: string, initiatorUser?: { __typename?: 'User', walletAddress: string, profile?: { __typename?: 'Profile', displayName?: string | null, displayNameChanged?: string | null, avatar?: string | null, thumbnail?: string | null } | null } | null, initiatorColony?: { __typename?: 'Colony', name: string, version: number, reputation?: string | null, expendituresGlobalClaimDelay?: string | null, private?: boolean | null, lastUpdatedContributorsWithReputation?: string | null, colonyAddress: string, metadata?: { __typename?: 'ColonyMetadata', avatar?: string | null, displayName: string, thumbnail?: string | null, description?: string | null, externalLinks?: Array<{ __typename?: 'ExternalLink', link: string, name: ExternalLinks }> | null, objective?: { __typename?: 'ColonyObjective', title: string, description: string, progress: number } | null, changelog?: Array<{ __typename?: 'ColonyMetadataChangelog', transactionHash: string, newDisplayName: string, oldDisplayName: string, hasAvatarChanged: boolean, hasDescriptionChanged?: boolean | null, haveExternalLinksChanged?: boolean | null, hasObjectiveChanged?: boolean | null, newSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null, oldSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null }> | null, safes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null } | null, colonyCreateEvent?: { __typename?: 'ColonyCreateEvent', blockNumber: number, creationSalt: string } | null, nativeToken: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } }, status?: { __typename?: 'ColonyStatus', recovery?: boolean | null, nativeToken?: { __typename?: 'NativeTokenStatus', mintable?: boolean | null, unlockable?: boolean | null, unlocked?: boolean | null } | null } | null, chainMetadata: { __typename?: 'ChainMetadata', chainId: string, network?: Network | null }, tokens?: { __typename?: 'ModelColonyTokensConnection', items: Array<{ __typename?: 'ColonyTokens', colonyTokensId: string, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } } | null> } | null, motionsWithUnclaimedStakes?: Array<{ __typename?: 'ColonyUnclaimedStake', motionId: string, unclaimedRewards: Array<{ __typename?: 'StakerRewards', address: string, rewards: { __typename?: 'MotionStakeValues', nay: string, yay: string } }> }> | null, domains?: { __typename?: 'ModelDomainConnection', items: Array<{ __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null> } | null, balances?: { __typename?: 'ColonyBalances', items?: Array<{ __typename?: 'ColonyBalance', id: string, balance: string, domain?: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } } | null> | null } | null, fundsClaimData?: { __typename?: 'ModelColonyFundsClaimConnection', items: Array<{ __typename?: 'ColonyFundsClaim', id: string, createdAtBlock: number, createdAt: string, amount: string, isClaimed?: boolean | null, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } } | null> } | null, chainFundsClaim?: Array<{ __typename?: 'ColonyChainFundsClaim', id: string, createdAtBlock: number, createdAt: string, amount: string, isClaimed?: boolean | null } | null> | null, roles?: { __typename?: 'ModelColonyRoleConnection', items: Array<{ __typename?: 'ColonyRole', id: string, targetAddress: string, role_0?: boolean | null, role_1?: boolean | null, role_2?: boolean | null, role_3?: boolean | null, role_5?: boolean | null, role_6?: boolean | null, isMultiSig?: boolean | null, domain: { __typename?: 'Domain', id: string, nativeId: number } } | null> } | null, colonyMemberInvite?: { __typename?: 'ColonyMemberInvite', id: string, invitesRemaining: number } | null, proxyColonies?: { __typename?: 'ModelProxyColonyConnection', items: Array<{ __typename?: 'ProxyColony', chainId: string, isActive: boolean } | null> } | null } | null, initiatorExtension?: { __typename?: 'ColonyExtension', hash: string, installedBy: string, installedAt: number, isDeprecated: boolean, isDeleted: boolean, isInitialized: boolean, address: string, colonyAddress: string, currentVersion: number, params?: { __typename?: 'ExtensionParams', votingReputation?: { __typename?: 'VotingReputationParams', maxVoteFraction: string, totalStakeFraction: string, voterRewardFraction: string, userMinStakeFraction: string, stakePeriod: string, submitPeriod: string, revealPeriod: string, escalationPeriod: string } | null, stakedExpenditure?: { __typename?: 'StakedExpenditureParams', stakeFraction: string } | null, multiSig?: { __typename?: 'MultiSigParams', colonyThreshold: number, domainThresholds?: Array<{ __typename?: 'MultiSigDomainConfig', domainId: string, domainThreshold: number } | null> | null } | null } | null } | null, initiatorToken?: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } | null, recipientUser?: { __typename?: 'User', walletAddress: string, profile?: { __typename?: 'Profile', displayName?: string | null, displayNameChanged?: string | null, avatar?: string | null, thumbnail?: string | null } | null } | null, recipientColony?: { __typename?: 'Colony', name: string, version: number, reputation?: string | null, expendituresGlobalClaimDelay?: string | null, private?: boolean | null, lastUpdatedContributorsWithReputation?: string | null, colonyAddress: string, metadata?: { __typename?: 'ColonyMetadata', avatar?: string | null, displayName: string, thumbnail?: string | null, description?: string | null, externalLinks?: Array<{ __typename?: 'ExternalLink', link: string, name: ExternalLinks }> | null, objective?: { __typename?: 'ColonyObjective', title: string, description: string, progress: number } | null, changelog?: Array<{ __typename?: 'ColonyMetadataChangelog', transactionHash: string, newDisplayName: string, oldDisplayName: string, hasAvatarChanged: boolean, hasDescriptionChanged?: boolean | null, haveExternalLinksChanged?: boolean | null, hasObjectiveChanged?: boolean | null, newSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null, oldSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null }> | null, safes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null } | null, colonyCreateEvent?: { __typename?: 'ColonyCreateEvent', blockNumber: number, creationSalt: string } | null, nativeToken: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } }, status?: { __typename?: 'ColonyStatus', recovery?: boolean | null, nativeToken?: { __typename?: 'NativeTokenStatus', mintable?: boolean | null, unlockable?: boolean | null, unlocked?: boolean | null } | null } | null, chainMetadata: { __typename?: 'ChainMetadata', chainId: string, network?: Network | null }, tokens?: { __typename?: 'ModelColonyTokensConnection', items: Array<{ __typename?: 'ColonyTokens', colonyTokensId: string, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } } | null> } | null, motionsWithUnclaimedStakes?: Array<{ __typename?: 'ColonyUnclaimedStake', motionId: string, unclaimedRewards: Array<{ __typename?: 'StakerRewards', address: string, rewards: { __typename?: 'MotionStakeValues', nay: string, yay: string } }> }> | null, domains?: { __typename?: 'ModelDomainConnection', items: Array<{ __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null> } | null, balances?: { __typename?: 'ColonyBalances', items?: Array<{ __typename?: 'ColonyBalance', id: string, balance: string, domain?: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } } | null> | null } | null, fundsClaimData?: { __typename?: 'ModelColonyFundsClaimConnection', items: Array<{ __typename?: 'ColonyFundsClaim', id: string, createdAtBlock: number, createdAt: string, amount: string, isClaimed?: boolean | null, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } } | null> } | null, chainFundsClaim?: Array<{ __typename?: 'ColonyChainFundsClaim', id: string, createdAtBlock: number, createdAt: string, amount: string, isClaimed?: boolean | null } | null> | null, roles?: { __typename?: 'ModelColonyRoleConnection', items: Array<{ __typename?: 'ColonyRole', id: string, targetAddress: string, role_0?: boolean | null, role_1?: boolean | null, role_2?: boolean | null, role_3?: boolean | null, role_5?: boolean | null, role_6?: boolean | null, isMultiSig?: boolean | null, domain: { __typename?: 'Domain', id: string, nativeId: number } } | null> } | null, colonyMemberInvite?: { __typename?: 'ColonyMemberInvite', id: string, invitesRemaining: number } | null, proxyColonies?: { __typename?: 'ModelProxyColonyConnection', items: Array<{ __typename?: 'ProxyColony', chainId: string, isActive: boolean } | null> } | null } | null, recipientExtension?: { __typename?: 'ColonyExtension', hash: string, installedBy: string, installedAt: number, isDeprecated: boolean, isDeleted: boolean, isInitialized: boolean, address: string, colonyAddress: string, currentVersion: number, params?: { __typename?: 'ExtensionParams', votingReputation?: { __typename?: 'VotingReputationParams', maxVoteFraction: string, totalStakeFraction: string, voterRewardFraction: string, userMinStakeFraction: string, stakePeriod: string, submitPeriod: string, revealPeriod: string, escalationPeriod: string } | null, stakedExpenditure?: { __typename?: 'StakedExpenditureParams', stakeFraction: string } | null, multiSig?: { __typename?: 'MultiSigParams', colonyThreshold: number, domainThresholds?: Array<{ __typename?: 'MultiSigDomainConfig', domainId: string, domainThreshold: number } | null> | null } | null } | null } | null, recipientToken?: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } | null, token?: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } | null, fromDomain?: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null, toDomain?: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null, roles?: { __typename?: 'ColonyActionRoles', role_0?: boolean | null, role_1?: boolean | null, role_2?: boolean | null, role_3?: boolean | null, role_5?: boolean | null, role_6?: boolean | null } | null, payments?: Array<{ __typename?: 'Payment', amount: string, tokenAddress: string, recipientAddress: string }> | null, motionData?: { __typename?: 'ColonyMotion', remainingStakes: Array, userMinStake: string, requiredStake: string, nativeMotionDomainId: string, isFinalized: boolean, skillRep: string, repSubmitted: string, hasObjection: boolean, isDecision: boolean, transactionHash: string, createdAt: string, createdBy: string, expenditureSlotIds?: Array | null, databaseMotionId: string, motionId: string, motionStakes: { __typename?: 'MotionStakes', raw: { __typename?: 'MotionStakeValues', yay: string, nay: string }, percentage: { __typename?: 'MotionStakeValues', yay: string, nay: string } }, usersStakes: Array<{ __typename?: 'UserMotionStakes', address: string, stakes: { __typename?: 'MotionStakes', raw: { __typename?: 'MotionStakeValues', yay: string, nay: string }, percentage: { __typename?: 'MotionStakeValues', yay: string, nay: string } } }>, motionDomain: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null }, stakerRewards: Array<{ __typename?: 'StakerRewards', address: string, isClaimed: boolean, rewards: { __typename?: 'MotionStakeValues', yay: string, nay: string } }>, voterRewards?: { __typename?: 'ModelVoterRewardsHistoryConnection', items: Array<{ __typename?: 'VoterRewardsHistory', userAddress: string, amount: string, user: { __typename?: 'User', bridgeCustomerId?: string | null, walletAddress: string, profile?: { __typename?: 'Profile', avatar?: string | null, bio?: string | null, displayName?: string | null, displayNameChanged?: string | null, email?: string | null, location?: string | null, thumbnail?: string | null, website?: string | null, preferredCurrency?: SupportedCurrencies | null, isAutoOfframpEnabled?: boolean | null, meta?: { __typename?: 'ProfileMetadata', metatransactionsEnabled?: boolean | null, decentralizedModeEnabled?: boolean | null, customRpc?: string | null } | null } | null, privateBetaInviteCode?: { __typename?: 'PrivateBetaInviteCode', id: string, shareableInvites?: number | null } | null, notificationsData?: { __typename?: 'NotificationsData', magicbellUserId: string, notificationsDisabled: boolean, mutedColonyAddresses: Array, paymentNotificationsDisabled: boolean, mentionNotificationsDisabled: boolean, adminNotificationsDisabled: boolean } | null } } | null> } | null, voterRecord: Array<{ __typename?: 'VoterRecord', address: string, voteCount: string, vote?: number | null }>, revealedVotes: { __typename?: 'MotionStakes', raw: { __typename?: 'MotionStakeValues', yay: string, nay: string }, percentage: { __typename?: 'MotionStakeValues', yay: string, nay: string } }, motionStateHistory: { __typename?: 'MotionStateHistory', hasVoted: boolean, hasPassed: boolean, hasFailed: boolean, hasFailedNotFinalizable: boolean, inRevealPhase: boolean, yaySideFullyStakedAt?: string | null, naySideFullyStakedAt?: string | null, allVotesSubmittedAt?: string | null, allVotesRevealedAt?: string | null, endedAt?: string | null, finalizedAt?: string | null }, messages?: { __typename?: 'ModelMotionMessageConnection', items: Array<{ __typename?: 'MotionMessage', initiatorAddress: string, name: string, messageKey: string, vote?: string | null, amount?: string | null, createdAt: string, initiatorUser?: { __typename?: 'User', bridgeCustomerId?: string | null, walletAddress: string, profile?: { __typename?: 'Profile', avatar?: string | null, bio?: string | null, displayName?: string | null, displayNameChanged?: string | null, email?: string | null, location?: string | null, thumbnail?: string | null, website?: string | null, preferredCurrency?: SupportedCurrencies | null, isAutoOfframpEnabled?: boolean | null, meta?: { __typename?: 'ProfileMetadata', metatransactionsEnabled?: boolean | null, decentralizedModeEnabled?: boolean | null, customRpc?: string | null } | null } | null, privateBetaInviteCode?: { __typename?: 'PrivateBetaInviteCode', id: string, shareableInvites?: number | null } | null, notificationsData?: { __typename?: 'NotificationsData', magicbellUserId: string, notificationsDisabled: boolean, mutedColonyAddresses: Array, paymentNotificationsDisabled: boolean, mentionNotificationsDisabled: boolean, adminNotificationsDisabled: boolean } | null } | null } | null> } | null, objectionAnnotation?: { __typename?: 'Annotation', createdAt: string, message: string } | null, action?: { __typename?: 'ColonyAction', type: ColonyActionType } | null } | null, colony: { __typename?: 'Colony', name: string, colonyAddress: string, nativeToken: { __typename?: 'Token', name: string, nativeTokenDecimals: number, nativeTokenSymbol: string, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } }, tokens?: { __typename?: 'ModelColonyTokensConnection', items: Array<{ __typename?: 'ColonyTokens', colonyTokensId: string, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } } | null> } | null, metadata?: { __typename?: 'ColonyMetadata', displayName: string, avatar?: string | null, description?: string | null, thumbnail?: string | null, externalLinks?: Array<{ __typename?: 'ExternalLink', name: ExternalLinks, link: string }> | null, objective?: { __typename?: 'ColonyObjective', title: string, description: string, progress: number } | null, changelog?: Array<{ __typename?: 'ColonyMetadataChangelog', transactionHash: string, newDisplayName: string, oldDisplayName: string, hasAvatarChanged: boolean, hasDescriptionChanged?: boolean | null, haveExternalLinksChanged?: boolean | null, hasObjectiveChanged?: boolean | null, newSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null, oldSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null }> | null, safes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null } | null }, pendingDomainMetadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null, pendingColonyMetadata?: { __typename?: 'ColonyMetadata', displayName: string, avatar?: string | null, description?: string | null, thumbnail?: string | null, externalLinks?: Array<{ __typename?: 'ExternalLink', name: ExternalLinks, link: string }> | null, objective?: { __typename?: 'ColonyObjective', title: string, description: string, progress: number } | null, changelog?: Array<{ __typename?: 'ColonyMetadataChangelog', transactionHash: string, newDisplayName: string, oldDisplayName: string, hasAvatarChanged: boolean, hasDescriptionChanged?: boolean | null, haveExternalLinksChanged?: boolean | null, hasObjectiveChanged?: boolean | null, newSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null, oldSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null }> | null, safes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null } | null, annotation?: { __typename?: 'Annotation', createdAt: string, message: string } | null, decisionData?: { __typename?: 'ColonyDecision', title: string, description: string, motionDomainId: number, walletAddress: string, createdAt: string, actionId: string, colonyAddress: string } | null, safeTransaction?: { __typename?: 'SafeTransaction', id: string, safe: { __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }, transactions?: { __typename?: 'ModelSafeTransactionDataConnection', items: Array<{ __typename?: 'SafeTransactionData', transactionType: SafeTransactionType, amount?: string | null, rawAmount?: string | null, data?: string | null, abi?: string | null, contractFunction?: string | null, token?: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } | null, recipient?: { __typename?: 'SimpleTarget', id: string, walletAddress: string, profile: { __typename?: 'SimpleTargetProfile', avatarHash?: string | null, displayName?: string | null } } | null, contract?: { __typename?: 'SimpleTarget', id: string, walletAddress: string, profile: { __typename?: 'SimpleTargetProfile', avatarHash?: string | null, displayName?: string | null } } | null, nft?: { __typename?: 'NFT', id: string, walletAddress: string, profile: { __typename?: 'NFTProfile', displayName: string } } | null, nftData?: { __typename?: 'NFTData', address: string, description?: string | null, id: string, imageUri?: string | null, logoUri: string, name?: string | null, tokenName: string, tokenSymbol: string, uri: string } | null, functionParams?: Array<{ __typename?: 'FunctionParam', name: string, type: string, value: string } | null> | null } | null> } | null } | null, metadata?: { __typename?: 'ColonyActionMetadata', customTitle: string, arbitraryTxAbis?: Array<{ __typename?: 'ArbitraryTxAbi', contractAddress: string, jsonAbi: string }> | null } | null, multiSigData?: { __typename?: 'ColonyMultiSig', id: string, nativeMultiSigId: string, createdAt: string, multiSigDomainId: string, nativeMultiSigDomainId: string, requiredPermissions: number, transactionHash: string, isExecuted: boolean, hasActionCompleted: boolean, isRejected: boolean, isDecision: boolean, executedAt?: string | null, executedBy?: string | null, rejectedAt?: string | null, rejectedBy?: string | null, multiSigDomain: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null }, signatures?: { __typename?: 'ModelMultiSigUserSignatureConnection', items: Array<{ __typename?: 'MultiSigUserSignature', id: string, role: number, userAddress: string, multiSigId: string, vote: MultiSigVote, createdAt: string, updatedAt: string, user: { __typename?: 'User', bridgeCustomerId?: string | null, walletAddress: string, profile?: { __typename?: 'Profile', avatar?: string | null, bio?: string | null, displayName?: string | null, displayNameChanged?: string | null, email?: string | null, location?: string | null, thumbnail?: string | null, website?: string | null, preferredCurrency?: SupportedCurrencies | null, isAutoOfframpEnabled?: boolean | null, meta?: { __typename?: 'ProfileMetadata', metatransactionsEnabled?: boolean | null, decentralizedModeEnabled?: boolean | null, customRpc?: string | null } | null } | null, privateBetaInviteCode?: { __typename?: 'PrivateBetaInviteCode', id: string, shareableInvites?: number | null } | null, notificationsData?: { __typename?: 'NotificationsData', magicbellUserId: string, notificationsDisabled: boolean, mutedColonyAddresses: Array, paymentNotificationsDisabled: boolean, mentionNotificationsDisabled: boolean, adminNotificationsDisabled: boolean } | null } } | null> } | null, executedByUser?: { __typename?: 'User', walletAddress: string, profile?: { __typename?: 'Profile', displayName?: string | null, displayNameChanged?: string | null, avatar?: string | null, thumbnail?: string | null } | null } | null, rejectedByUser?: { __typename?: 'User', walletAddress: string, profile?: { __typename?: 'Profile', displayName?: string | null, displayNameChanged?: string | null, avatar?: string | null, thumbnail?: string | null } | null } | null } | null, approvedTokenChanges?: { __typename?: 'ApprovedTokenChanges', added: Array, removed: Array, unaffected: Array } | null, expenditure?: { __typename?: 'Expenditure', isStaked: boolean, type: ExpenditureType, metadata?: { __typename?: 'ExpenditureMetadata', distributionType?: SplitPaymentDistributionType | null } | null, creatingActions?: { __typename?: 'ModelColonyActionConnection', items: Array<{ __typename?: 'ColonyAction', transactionHash: string } | null> } | null } | null, arbitraryTransactions?: Array<{ __typename?: 'ColonyActionArbitraryTransaction', contractAddress: string, encodedFunction: string }> | null } | null }; -export type TokenFragment = { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string }; +export type TokenFragment = { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } }; export type UserTokenBalanceDataFragment = { __typename?: 'GetUserTokenBalanceReturn', balance?: string | null, inactiveBalance?: string | null, lockedBalance?: string | null, activeBalance?: string | null, pendingBalance?: string | null }; @@ -10596,14 +11106,14 @@ export type GetColonyActionsQueryVariables = Exact<{ }>; -export type GetColonyActionsQuery = { __typename?: 'Query', getActionsByColony?: { __typename?: 'ModelColonyActionConnection', nextToken?: string | null, items: Array<{ __typename?: 'ColonyAction', type: ColonyActionType, blockNumber: number, initiatorAddress: string, recipientAddress?: string | null, amount?: string | null, networkFee?: string | null, tokenAddress?: string | null, createdAt: string, newColonyVersion?: number | null, rolesAreMultiSig?: boolean | null, individualEvents?: string | null, isMotion?: boolean | null, showInActionsList: boolean, members?: Array | null, rootHash: string, expenditureId?: string | null, isMultiSig?: boolean | null, multiSigId?: string | null, transactionHash: string, colonyAddress: string, initiatorUser?: { __typename?: 'User', walletAddress: string, profile?: { __typename?: 'Profile', displayName?: string | null, displayNameChanged?: string | null, avatar?: string | null, thumbnail?: string | null } | null } | null, initiatorColony?: { __typename?: 'Colony', name: string, version: number, reputation?: string | null, expendituresGlobalClaimDelay?: string | null, private?: boolean | null, lastUpdatedContributorsWithReputation?: string | null, colonyAddress: string, metadata?: { __typename?: 'ColonyMetadata', avatar?: string | null, displayName: string, thumbnail?: string | null, description?: string | null, externalLinks?: Array<{ __typename?: 'ExternalLink', link: string, name: ExternalLinks }> | null, objective?: { __typename?: 'ColonyObjective', title: string, description: string, progress: number } | null, changelog?: Array<{ __typename?: 'ColonyMetadataChangelog', transactionHash: string, newDisplayName: string, oldDisplayName: string, hasAvatarChanged: boolean, hasDescriptionChanged?: boolean | null, haveExternalLinksChanged?: boolean | null, hasObjectiveChanged?: boolean | null, newSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null, oldSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null }> | null, safes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null } | null, nativeToken: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string }, status?: { __typename?: 'ColonyStatus', recovery?: boolean | null, nativeToken?: { __typename?: 'NativeTokenStatus', mintable?: boolean | null, unlockable?: boolean | null, unlocked?: boolean | null } | null } | null, chainMetadata: { __typename?: 'ChainMetadata', chainId: string, network?: Network | null }, tokens?: { __typename?: 'ModelColonyTokensConnection', items: Array<{ __typename?: 'ColonyTokens', colonyTokensId: string, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } } | null> } | null, motionsWithUnclaimedStakes?: Array<{ __typename?: 'ColonyUnclaimedStake', motionId: string, unclaimedRewards: Array<{ __typename?: 'StakerRewards', address: string, rewards: { __typename?: 'MotionStakeValues', nay: string, yay: string } }> }> | null, domains?: { __typename?: 'ModelDomainConnection', items: Array<{ __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null> } | null, balances?: { __typename?: 'ColonyBalances', items?: Array<{ __typename?: 'ColonyBalance', id: string, balance: string, domain?: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } } | null> | null } | null, fundsClaimData?: { __typename?: 'ModelColonyFundsClaimConnection', items: Array<{ __typename?: 'ColonyFundsClaim', id: string, createdAtBlock: number, createdAt: string, amount: string, isClaimed?: boolean | null, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } } | null> } | null, chainFundsClaim?: { __typename?: 'ColonyChainFundsClaim', id: string, createdAtBlock: number, createdAt: string, amount: string, isClaimed?: boolean | null } | null, roles?: { __typename?: 'ModelColonyRoleConnection', items: Array<{ __typename?: 'ColonyRole', id: string, targetAddress: string, role_0?: boolean | null, role_1?: boolean | null, role_2?: boolean | null, role_3?: boolean | null, role_5?: boolean | null, role_6?: boolean | null, isMultiSig?: boolean | null, domain: { __typename?: 'Domain', id: string, nativeId: number } } | null> } | null, colonyMemberInvite?: { __typename?: 'ColonyMemberInvite', id: string, invitesRemaining: number } | null } | null, initiatorExtension?: { __typename?: 'ColonyExtension', hash: string, installedBy: string, installedAt: number, isDeprecated: boolean, isDeleted: boolean, isInitialized: boolean, address: string, colonyAddress: string, currentVersion: number, params?: { __typename?: 'ExtensionParams', votingReputation?: { __typename?: 'VotingReputationParams', maxVoteFraction: string, totalStakeFraction: string, voterRewardFraction: string, userMinStakeFraction: string, stakePeriod: string, submitPeriod: string, revealPeriod: string, escalationPeriod: string } | null, stakedExpenditure?: { __typename?: 'StakedExpenditureParams', stakeFraction: string } | null, multiSig?: { __typename?: 'MultiSigParams', colonyThreshold: number, domainThresholds?: Array<{ __typename?: 'MultiSigDomainConfig', domainId: string, domainThreshold: number } | null> | null } | null } | null } | null, initiatorToken?: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } | null, recipientUser?: { __typename?: 'User', walletAddress: string, profile?: { __typename?: 'Profile', displayName?: string | null, displayNameChanged?: string | null, avatar?: string | null, thumbnail?: string | null } | null } | null, recipientColony?: { __typename?: 'Colony', name: string, version: number, reputation?: string | null, expendituresGlobalClaimDelay?: string | null, private?: boolean | null, lastUpdatedContributorsWithReputation?: string | null, colonyAddress: string, metadata?: { __typename?: 'ColonyMetadata', avatar?: string | null, displayName: string, thumbnail?: string | null, description?: string | null, externalLinks?: Array<{ __typename?: 'ExternalLink', link: string, name: ExternalLinks }> | null, objective?: { __typename?: 'ColonyObjective', title: string, description: string, progress: number } | null, changelog?: Array<{ __typename?: 'ColonyMetadataChangelog', transactionHash: string, newDisplayName: string, oldDisplayName: string, hasAvatarChanged: boolean, hasDescriptionChanged?: boolean | null, haveExternalLinksChanged?: boolean | null, hasObjectiveChanged?: boolean | null, newSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null, oldSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null }> | null, safes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null } | null, nativeToken: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string }, status?: { __typename?: 'ColonyStatus', recovery?: boolean | null, nativeToken?: { __typename?: 'NativeTokenStatus', mintable?: boolean | null, unlockable?: boolean | null, unlocked?: boolean | null } | null } | null, chainMetadata: { __typename?: 'ChainMetadata', chainId: string, network?: Network | null }, tokens?: { __typename?: 'ModelColonyTokensConnection', items: Array<{ __typename?: 'ColonyTokens', colonyTokensId: string, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } } | null> } | null, motionsWithUnclaimedStakes?: Array<{ __typename?: 'ColonyUnclaimedStake', motionId: string, unclaimedRewards: Array<{ __typename?: 'StakerRewards', address: string, rewards: { __typename?: 'MotionStakeValues', nay: string, yay: string } }> }> | null, domains?: { __typename?: 'ModelDomainConnection', items: Array<{ __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null> } | null, balances?: { __typename?: 'ColonyBalances', items?: Array<{ __typename?: 'ColonyBalance', id: string, balance: string, domain?: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } } | null> | null } | null, fundsClaimData?: { __typename?: 'ModelColonyFundsClaimConnection', items: Array<{ __typename?: 'ColonyFundsClaim', id: string, createdAtBlock: number, createdAt: string, amount: string, isClaimed?: boolean | null, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } } | null> } | null, chainFundsClaim?: { __typename?: 'ColonyChainFundsClaim', id: string, createdAtBlock: number, createdAt: string, amount: string, isClaimed?: boolean | null } | null, roles?: { __typename?: 'ModelColonyRoleConnection', items: Array<{ __typename?: 'ColonyRole', id: string, targetAddress: string, role_0?: boolean | null, role_1?: boolean | null, role_2?: boolean | null, role_3?: boolean | null, role_5?: boolean | null, role_6?: boolean | null, isMultiSig?: boolean | null, domain: { __typename?: 'Domain', id: string, nativeId: number } } | null> } | null, colonyMemberInvite?: { __typename?: 'ColonyMemberInvite', id: string, invitesRemaining: number } | null } | null, recipientExtension?: { __typename?: 'ColonyExtension', hash: string, installedBy: string, installedAt: number, isDeprecated: boolean, isDeleted: boolean, isInitialized: boolean, address: string, colonyAddress: string, currentVersion: number, params?: { __typename?: 'ExtensionParams', votingReputation?: { __typename?: 'VotingReputationParams', maxVoteFraction: string, totalStakeFraction: string, voterRewardFraction: string, userMinStakeFraction: string, stakePeriod: string, submitPeriod: string, revealPeriod: string, escalationPeriod: string } | null, stakedExpenditure?: { __typename?: 'StakedExpenditureParams', stakeFraction: string } | null, multiSig?: { __typename?: 'MultiSigParams', colonyThreshold: number, domainThresholds?: Array<{ __typename?: 'MultiSigDomainConfig', domainId: string, domainThreshold: number } | null> | null } | null } | null } | null, recipientToken?: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } | null, token?: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } | null, fromDomain?: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null, toDomain?: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null, roles?: { __typename?: 'ColonyActionRoles', role_0?: boolean | null, role_1?: boolean | null, role_2?: boolean | null, role_3?: boolean | null, role_5?: boolean | null, role_6?: boolean | null } | null, payments?: Array<{ __typename?: 'Payment', amount: string, tokenAddress: string, recipientAddress: string }> | null, motionData?: { __typename?: 'ColonyMotion', remainingStakes: Array, userMinStake: string, requiredStake: string, nativeMotionDomainId: string, isFinalized: boolean, skillRep: string, repSubmitted: string, hasObjection: boolean, isDecision: boolean, transactionHash: string, createdAt: string, createdBy: string, expenditureSlotIds?: Array | null, databaseMotionId: string, motionId: string, motionStakes: { __typename?: 'MotionStakes', raw: { __typename?: 'MotionStakeValues', yay: string, nay: string }, percentage: { __typename?: 'MotionStakeValues', yay: string, nay: string } }, usersStakes: Array<{ __typename?: 'UserMotionStakes', address: string, stakes: { __typename?: 'MotionStakes', raw: { __typename?: 'MotionStakeValues', yay: string, nay: string }, percentage: { __typename?: 'MotionStakeValues', yay: string, nay: string } } }>, motionDomain: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null }, stakerRewards: Array<{ __typename?: 'StakerRewards', address: string, isClaimed: boolean, rewards: { __typename?: 'MotionStakeValues', yay: string, nay: string } }>, voterRewards?: { __typename?: 'ModelVoterRewardsHistoryConnection', items: Array<{ __typename?: 'VoterRewardsHistory', userAddress: string, amount: string, user: { __typename?: 'User', bridgeCustomerId?: string | null, walletAddress: string, profile?: { __typename?: 'Profile', avatar?: string | null, bio?: string | null, displayName?: string | null, displayNameChanged?: string | null, email?: string | null, location?: string | null, thumbnail?: string | null, website?: string | null, preferredCurrency?: SupportedCurrencies | null, isAutoOfframpEnabled?: boolean | null, meta?: { __typename?: 'ProfileMetadata', metatransactionsEnabled?: boolean | null, decentralizedModeEnabled?: boolean | null, customRpc?: string | null } | null } | null, privateBetaInviteCode?: { __typename?: 'PrivateBetaInviteCode', id: string, shareableInvites?: number | null } | null, notificationsData?: { __typename?: 'NotificationsData', magicbellUserId: string, notificationsDisabled: boolean, mutedColonyAddresses: Array, paymentNotificationsDisabled: boolean, mentionNotificationsDisabled: boolean, adminNotificationsDisabled: boolean } | null } } | null> } | null, voterRecord: Array<{ __typename?: 'VoterRecord', address: string, voteCount: string, vote?: number | null }>, revealedVotes: { __typename?: 'MotionStakes', raw: { __typename?: 'MotionStakeValues', yay: string, nay: string }, percentage: { __typename?: 'MotionStakeValues', yay: string, nay: string } }, motionStateHistory: { __typename?: 'MotionStateHistory', hasVoted: boolean, hasPassed: boolean, hasFailed: boolean, hasFailedNotFinalizable: boolean, inRevealPhase: boolean, yaySideFullyStakedAt?: string | null, naySideFullyStakedAt?: string | null, allVotesSubmittedAt?: string | null, allVotesRevealedAt?: string | null, endedAt?: string | null, finalizedAt?: string | null }, messages?: { __typename?: 'ModelMotionMessageConnection', items: Array<{ __typename?: 'MotionMessage', initiatorAddress: string, name: string, messageKey: string, vote?: string | null, amount?: string | null, createdAt: string, initiatorUser?: { __typename?: 'User', bridgeCustomerId?: string | null, walletAddress: string, profile?: { __typename?: 'Profile', avatar?: string | null, bio?: string | null, displayName?: string | null, displayNameChanged?: string | null, email?: string | null, location?: string | null, thumbnail?: string | null, website?: string | null, preferredCurrency?: SupportedCurrencies | null, isAutoOfframpEnabled?: boolean | null, meta?: { __typename?: 'ProfileMetadata', metatransactionsEnabled?: boolean | null, decentralizedModeEnabled?: boolean | null, customRpc?: string | null } | null } | null, privateBetaInviteCode?: { __typename?: 'PrivateBetaInviteCode', id: string, shareableInvites?: number | null } | null, notificationsData?: { __typename?: 'NotificationsData', magicbellUserId: string, notificationsDisabled: boolean, mutedColonyAddresses: Array, paymentNotificationsDisabled: boolean, mentionNotificationsDisabled: boolean, adminNotificationsDisabled: boolean } | null } | null } | null> } | null, objectionAnnotation?: { __typename?: 'Annotation', createdAt: string, message: string } | null, action?: { __typename?: 'ColonyAction', type: ColonyActionType } | null } | null, colony: { __typename?: 'Colony', name: string, colonyAddress: string, nativeToken: { __typename?: 'Token', name: string, nativeTokenDecimals: number, nativeTokenSymbol: string, tokenAddress: string }, tokens?: { __typename?: 'ModelColonyTokensConnection', items: Array<{ __typename?: 'ColonyTokens', colonyTokensId: string, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } } | null> } | null, metadata?: { __typename?: 'ColonyMetadata', displayName: string, avatar?: string | null, description?: string | null, thumbnail?: string | null, externalLinks?: Array<{ __typename?: 'ExternalLink', name: ExternalLinks, link: string }> | null, objective?: { __typename?: 'ColonyObjective', title: string, description: string, progress: number } | null, changelog?: Array<{ __typename?: 'ColonyMetadataChangelog', transactionHash: string, newDisplayName: string, oldDisplayName: string, hasAvatarChanged: boolean, hasDescriptionChanged?: boolean | null, haveExternalLinksChanged?: boolean | null, hasObjectiveChanged?: boolean | null, newSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null, oldSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null }> | null, safes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null } | null }, pendingDomainMetadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null, pendingColonyMetadata?: { __typename?: 'ColonyMetadata', displayName: string, avatar?: string | null, description?: string | null, thumbnail?: string | null, externalLinks?: Array<{ __typename?: 'ExternalLink', name: ExternalLinks, link: string }> | null, objective?: { __typename?: 'ColonyObjective', title: string, description: string, progress: number } | null, changelog?: Array<{ __typename?: 'ColonyMetadataChangelog', transactionHash: string, newDisplayName: string, oldDisplayName: string, hasAvatarChanged: boolean, hasDescriptionChanged?: boolean | null, haveExternalLinksChanged?: boolean | null, hasObjectiveChanged?: boolean | null, newSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null, oldSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null }> | null, safes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null } | null, annotation?: { __typename?: 'Annotation', createdAt: string, message: string } | null, decisionData?: { __typename?: 'ColonyDecision', title: string, description: string, motionDomainId: number, walletAddress: string, createdAt: string, actionId: string, colonyAddress: string } | null, safeTransaction?: { __typename?: 'SafeTransaction', id: string, safe: { __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }, transactions?: { __typename?: 'ModelSafeTransactionDataConnection', items: Array<{ __typename?: 'SafeTransactionData', transactionType: SafeTransactionType, amount?: string | null, rawAmount?: string | null, data?: string | null, abi?: string | null, contractFunction?: string | null, token?: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } | null, recipient?: { __typename?: 'SimpleTarget', id: string, walletAddress: string, profile: { __typename?: 'SimpleTargetProfile', avatarHash?: string | null, displayName?: string | null } } | null, contract?: { __typename?: 'SimpleTarget', id: string, walletAddress: string, profile: { __typename?: 'SimpleTargetProfile', avatarHash?: string | null, displayName?: string | null } } | null, nft?: { __typename?: 'NFT', id: string, walletAddress: string, profile: { __typename?: 'NFTProfile', displayName: string } } | null, nftData?: { __typename?: 'NFTData', address: string, description?: string | null, id: string, imageUri?: string | null, logoUri: string, name?: string | null, tokenName: string, tokenSymbol: string, uri: string } | null, functionParams?: Array<{ __typename?: 'FunctionParam', name: string, type: string, value: string } | null> | null } | null> } | null } | null, metadata?: { __typename?: 'ColonyActionMetadata', customTitle: string, arbitraryTxAbis?: Array<{ __typename?: 'ArbitraryTxAbi', contractAddress: string, jsonAbi: string }> | null } | null, multiSigData?: { __typename?: 'ColonyMultiSig', id: string, nativeMultiSigId: string, createdAt: string, multiSigDomainId: string, nativeMultiSigDomainId: string, requiredPermissions: number, transactionHash: string, isExecuted: boolean, hasActionCompleted: boolean, isRejected: boolean, isDecision: boolean, executedAt?: string | null, executedBy?: string | null, rejectedAt?: string | null, rejectedBy?: string | null, multiSigDomain: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null }, signatures?: { __typename?: 'ModelMultiSigUserSignatureConnection', items: Array<{ __typename?: 'MultiSigUserSignature', id: string, role: number, userAddress: string, multiSigId: string, vote: MultiSigVote, createdAt: string, updatedAt: string, user: { __typename?: 'User', bridgeCustomerId?: string | null, walletAddress: string, profile?: { __typename?: 'Profile', avatar?: string | null, bio?: string | null, displayName?: string | null, displayNameChanged?: string | null, email?: string | null, location?: string | null, thumbnail?: string | null, website?: string | null, preferredCurrency?: SupportedCurrencies | null, isAutoOfframpEnabled?: boolean | null, meta?: { __typename?: 'ProfileMetadata', metatransactionsEnabled?: boolean | null, decentralizedModeEnabled?: boolean | null, customRpc?: string | null } | null } | null, privateBetaInviteCode?: { __typename?: 'PrivateBetaInviteCode', id: string, shareableInvites?: number | null } | null, notificationsData?: { __typename?: 'NotificationsData', magicbellUserId: string, notificationsDisabled: boolean, mutedColonyAddresses: Array, paymentNotificationsDisabled: boolean, mentionNotificationsDisabled: boolean, adminNotificationsDisabled: boolean } | null } } | null> } | null, executedByUser?: { __typename?: 'User', walletAddress: string, profile?: { __typename?: 'Profile', displayName?: string | null, displayNameChanged?: string | null, avatar?: string | null, thumbnail?: string | null } | null } | null, rejectedByUser?: { __typename?: 'User', walletAddress: string, profile?: { __typename?: 'Profile', displayName?: string | null, displayNameChanged?: string | null, avatar?: string | null, thumbnail?: string | null } | null } | null } | null, approvedTokenChanges?: { __typename?: 'ApprovedTokenChanges', added: Array, removed: Array, unaffected: Array } | null, expenditure?: { __typename?: 'Expenditure', isStaked: boolean, type: ExpenditureType, metadata?: { __typename?: 'ExpenditureMetadata', distributionType?: SplitPaymentDistributionType | null } | null, creatingActions?: { __typename?: 'ModelColonyActionConnection', items: Array<{ __typename?: 'ColonyAction', transactionHash: string } | null> } | null } | null, arbitraryTransactions?: Array<{ __typename?: 'ColonyActionArbitraryTransaction', contractAddress: string, encodedFunction: string }> | null } | null> } | null }; +export type GetColonyActionsQuery = { __typename?: 'Query', getActionsByColony?: { __typename?: 'ModelColonyActionConnection', nextToken?: string | null, items: Array<{ __typename?: 'ColonyAction', type: ColonyActionType, blockNumber: number, initiatorAddress: string, recipientAddress?: string | null, amount?: string | null, networkFee?: string | null, tokenAddress?: string | null, createdAt: string, newColonyVersion?: number | null, rolesAreMultiSig?: boolean | null, individualEvents?: string | null, isMotion?: boolean | null, showInActionsList: boolean, members?: Array | null, rootHash: string, expenditureId?: string | null, isMultiSig?: boolean | null, multiSigId?: string | null, targetChainId?: number | null, transactionHash: string, colonyAddress: string, initiatorUser?: { __typename?: 'User', walletAddress: string, profile?: { __typename?: 'Profile', displayName?: string | null, displayNameChanged?: string | null, avatar?: string | null, thumbnail?: string | null } | null } | null, initiatorColony?: { __typename?: 'Colony', name: string, version: number, reputation?: string | null, expendituresGlobalClaimDelay?: string | null, private?: boolean | null, lastUpdatedContributorsWithReputation?: string | null, colonyAddress: string, metadata?: { __typename?: 'ColonyMetadata', avatar?: string | null, displayName: string, thumbnail?: string | null, description?: string | null, externalLinks?: Array<{ __typename?: 'ExternalLink', link: string, name: ExternalLinks }> | null, objective?: { __typename?: 'ColonyObjective', title: string, description: string, progress: number } | null, changelog?: Array<{ __typename?: 'ColonyMetadataChangelog', transactionHash: string, newDisplayName: string, oldDisplayName: string, hasAvatarChanged: boolean, hasDescriptionChanged?: boolean | null, haveExternalLinksChanged?: boolean | null, hasObjectiveChanged?: boolean | null, newSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null, oldSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null }> | null, safes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null } | null, colonyCreateEvent?: { __typename?: 'ColonyCreateEvent', blockNumber: number, creationSalt: string } | null, nativeToken: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } }, status?: { __typename?: 'ColonyStatus', recovery?: boolean | null, nativeToken?: { __typename?: 'NativeTokenStatus', mintable?: boolean | null, unlockable?: boolean | null, unlocked?: boolean | null } | null } | null, chainMetadata: { __typename?: 'ChainMetadata', chainId: string, network?: Network | null }, tokens?: { __typename?: 'ModelColonyTokensConnection', items: Array<{ __typename?: 'ColonyTokens', colonyTokensId: string, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } } | null> } | null, motionsWithUnclaimedStakes?: Array<{ __typename?: 'ColonyUnclaimedStake', motionId: string, unclaimedRewards: Array<{ __typename?: 'StakerRewards', address: string, rewards: { __typename?: 'MotionStakeValues', nay: string, yay: string } }> }> | null, domains?: { __typename?: 'ModelDomainConnection', items: Array<{ __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null> } | null, balances?: { __typename?: 'ColonyBalances', items?: Array<{ __typename?: 'ColonyBalance', id: string, balance: string, domain?: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } } | null> | null } | null, fundsClaimData?: { __typename?: 'ModelColonyFundsClaimConnection', items: Array<{ __typename?: 'ColonyFundsClaim', id: string, createdAtBlock: number, createdAt: string, amount: string, isClaimed?: boolean | null, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } } | null> } | null, chainFundsClaim?: Array<{ __typename?: 'ColonyChainFundsClaim', id: string, createdAtBlock: number, createdAt: string, amount: string, isClaimed?: boolean | null } | null> | null, roles?: { __typename?: 'ModelColonyRoleConnection', items: Array<{ __typename?: 'ColonyRole', id: string, targetAddress: string, role_0?: boolean | null, role_1?: boolean | null, role_2?: boolean | null, role_3?: boolean | null, role_5?: boolean | null, role_6?: boolean | null, isMultiSig?: boolean | null, domain: { __typename?: 'Domain', id: string, nativeId: number } } | null> } | null, colonyMemberInvite?: { __typename?: 'ColonyMemberInvite', id: string, invitesRemaining: number } | null, proxyColonies?: { __typename?: 'ModelProxyColonyConnection', items: Array<{ __typename?: 'ProxyColony', chainId: string, isActive: boolean } | null> } | null } | null, initiatorExtension?: { __typename?: 'ColonyExtension', hash: string, installedBy: string, installedAt: number, isDeprecated: boolean, isDeleted: boolean, isInitialized: boolean, address: string, colonyAddress: string, currentVersion: number, params?: { __typename?: 'ExtensionParams', votingReputation?: { __typename?: 'VotingReputationParams', maxVoteFraction: string, totalStakeFraction: string, voterRewardFraction: string, userMinStakeFraction: string, stakePeriod: string, submitPeriod: string, revealPeriod: string, escalationPeriod: string } | null, stakedExpenditure?: { __typename?: 'StakedExpenditureParams', stakeFraction: string } | null, multiSig?: { __typename?: 'MultiSigParams', colonyThreshold: number, domainThresholds?: Array<{ __typename?: 'MultiSigDomainConfig', domainId: string, domainThreshold: number } | null> | null } | null } | null } | null, initiatorToken?: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } | null, recipientUser?: { __typename?: 'User', walletAddress: string, profile?: { __typename?: 'Profile', displayName?: string | null, displayNameChanged?: string | null, avatar?: string | null, thumbnail?: string | null } | null } | null, recipientColony?: { __typename?: 'Colony', name: string, version: number, reputation?: string | null, expendituresGlobalClaimDelay?: string | null, private?: boolean | null, lastUpdatedContributorsWithReputation?: string | null, colonyAddress: string, metadata?: { __typename?: 'ColonyMetadata', avatar?: string | null, displayName: string, thumbnail?: string | null, description?: string | null, externalLinks?: Array<{ __typename?: 'ExternalLink', link: string, name: ExternalLinks }> | null, objective?: { __typename?: 'ColonyObjective', title: string, description: string, progress: number } | null, changelog?: Array<{ __typename?: 'ColonyMetadataChangelog', transactionHash: string, newDisplayName: string, oldDisplayName: string, hasAvatarChanged: boolean, hasDescriptionChanged?: boolean | null, haveExternalLinksChanged?: boolean | null, hasObjectiveChanged?: boolean | null, newSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null, oldSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null }> | null, safes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null } | null, colonyCreateEvent?: { __typename?: 'ColonyCreateEvent', blockNumber: number, creationSalt: string } | null, nativeToken: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } }, status?: { __typename?: 'ColonyStatus', recovery?: boolean | null, nativeToken?: { __typename?: 'NativeTokenStatus', mintable?: boolean | null, unlockable?: boolean | null, unlocked?: boolean | null } | null } | null, chainMetadata: { __typename?: 'ChainMetadata', chainId: string, network?: Network | null }, tokens?: { __typename?: 'ModelColonyTokensConnection', items: Array<{ __typename?: 'ColonyTokens', colonyTokensId: string, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } } | null> } | null, motionsWithUnclaimedStakes?: Array<{ __typename?: 'ColonyUnclaimedStake', motionId: string, unclaimedRewards: Array<{ __typename?: 'StakerRewards', address: string, rewards: { __typename?: 'MotionStakeValues', nay: string, yay: string } }> }> | null, domains?: { __typename?: 'ModelDomainConnection', items: Array<{ __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null> } | null, balances?: { __typename?: 'ColonyBalances', items?: Array<{ __typename?: 'ColonyBalance', id: string, balance: string, domain?: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } } | null> | null } | null, fundsClaimData?: { __typename?: 'ModelColonyFundsClaimConnection', items: Array<{ __typename?: 'ColonyFundsClaim', id: string, createdAtBlock: number, createdAt: string, amount: string, isClaimed?: boolean | null, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } } | null> } | null, chainFundsClaim?: Array<{ __typename?: 'ColonyChainFundsClaim', id: string, createdAtBlock: number, createdAt: string, amount: string, isClaimed?: boolean | null } | null> | null, roles?: { __typename?: 'ModelColonyRoleConnection', items: Array<{ __typename?: 'ColonyRole', id: string, targetAddress: string, role_0?: boolean | null, role_1?: boolean | null, role_2?: boolean | null, role_3?: boolean | null, role_5?: boolean | null, role_6?: boolean | null, isMultiSig?: boolean | null, domain: { __typename?: 'Domain', id: string, nativeId: number } } | null> } | null, colonyMemberInvite?: { __typename?: 'ColonyMemberInvite', id: string, invitesRemaining: number } | null, proxyColonies?: { __typename?: 'ModelProxyColonyConnection', items: Array<{ __typename?: 'ProxyColony', chainId: string, isActive: boolean } | null> } | null } | null, recipientExtension?: { __typename?: 'ColonyExtension', hash: string, installedBy: string, installedAt: number, isDeprecated: boolean, isDeleted: boolean, isInitialized: boolean, address: string, colonyAddress: string, currentVersion: number, params?: { __typename?: 'ExtensionParams', votingReputation?: { __typename?: 'VotingReputationParams', maxVoteFraction: string, totalStakeFraction: string, voterRewardFraction: string, userMinStakeFraction: string, stakePeriod: string, submitPeriod: string, revealPeriod: string, escalationPeriod: string } | null, stakedExpenditure?: { __typename?: 'StakedExpenditureParams', stakeFraction: string } | null, multiSig?: { __typename?: 'MultiSigParams', colonyThreshold: number, domainThresholds?: Array<{ __typename?: 'MultiSigDomainConfig', domainId: string, domainThreshold: number } | null> | null } | null } | null } | null, recipientToken?: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } | null, token?: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } | null, fromDomain?: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null, toDomain?: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null, roles?: { __typename?: 'ColonyActionRoles', role_0?: boolean | null, role_1?: boolean | null, role_2?: boolean | null, role_3?: boolean | null, role_5?: boolean | null, role_6?: boolean | null } | null, payments?: Array<{ __typename?: 'Payment', amount: string, tokenAddress: string, recipientAddress: string }> | null, motionData?: { __typename?: 'ColonyMotion', remainingStakes: Array, userMinStake: string, requiredStake: string, nativeMotionDomainId: string, isFinalized: boolean, skillRep: string, repSubmitted: string, hasObjection: boolean, isDecision: boolean, transactionHash: string, createdAt: string, createdBy: string, expenditureSlotIds?: Array | null, databaseMotionId: string, motionId: string, motionStakes: { __typename?: 'MotionStakes', raw: { __typename?: 'MotionStakeValues', yay: string, nay: string }, percentage: { __typename?: 'MotionStakeValues', yay: string, nay: string } }, usersStakes: Array<{ __typename?: 'UserMotionStakes', address: string, stakes: { __typename?: 'MotionStakes', raw: { __typename?: 'MotionStakeValues', yay: string, nay: string }, percentage: { __typename?: 'MotionStakeValues', yay: string, nay: string } } }>, motionDomain: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null }, stakerRewards: Array<{ __typename?: 'StakerRewards', address: string, isClaimed: boolean, rewards: { __typename?: 'MotionStakeValues', yay: string, nay: string } }>, voterRewards?: { __typename?: 'ModelVoterRewardsHistoryConnection', items: Array<{ __typename?: 'VoterRewardsHistory', userAddress: string, amount: string, user: { __typename?: 'User', bridgeCustomerId?: string | null, walletAddress: string, profile?: { __typename?: 'Profile', avatar?: string | null, bio?: string | null, displayName?: string | null, displayNameChanged?: string | null, email?: string | null, location?: string | null, thumbnail?: string | null, website?: string | null, preferredCurrency?: SupportedCurrencies | null, isAutoOfframpEnabled?: boolean | null, meta?: { __typename?: 'ProfileMetadata', metatransactionsEnabled?: boolean | null, decentralizedModeEnabled?: boolean | null, customRpc?: string | null } | null } | null, privateBetaInviteCode?: { __typename?: 'PrivateBetaInviteCode', id: string, shareableInvites?: number | null } | null, notificationsData?: { __typename?: 'NotificationsData', magicbellUserId: string, notificationsDisabled: boolean, mutedColonyAddresses: Array, paymentNotificationsDisabled: boolean, mentionNotificationsDisabled: boolean, adminNotificationsDisabled: boolean } | null } } | null> } | null, voterRecord: Array<{ __typename?: 'VoterRecord', address: string, voteCount: string, vote?: number | null }>, revealedVotes: { __typename?: 'MotionStakes', raw: { __typename?: 'MotionStakeValues', yay: string, nay: string }, percentage: { __typename?: 'MotionStakeValues', yay: string, nay: string } }, motionStateHistory: { __typename?: 'MotionStateHistory', hasVoted: boolean, hasPassed: boolean, hasFailed: boolean, hasFailedNotFinalizable: boolean, inRevealPhase: boolean, yaySideFullyStakedAt?: string | null, naySideFullyStakedAt?: string | null, allVotesSubmittedAt?: string | null, allVotesRevealedAt?: string | null, endedAt?: string | null, finalizedAt?: string | null }, messages?: { __typename?: 'ModelMotionMessageConnection', items: Array<{ __typename?: 'MotionMessage', initiatorAddress: string, name: string, messageKey: string, vote?: string | null, amount?: string | null, createdAt: string, initiatorUser?: { __typename?: 'User', bridgeCustomerId?: string | null, walletAddress: string, profile?: { __typename?: 'Profile', avatar?: string | null, bio?: string | null, displayName?: string | null, displayNameChanged?: string | null, email?: string | null, location?: string | null, thumbnail?: string | null, website?: string | null, preferredCurrency?: SupportedCurrencies | null, isAutoOfframpEnabled?: boolean | null, meta?: { __typename?: 'ProfileMetadata', metatransactionsEnabled?: boolean | null, decentralizedModeEnabled?: boolean | null, customRpc?: string | null } | null } | null, privateBetaInviteCode?: { __typename?: 'PrivateBetaInviteCode', id: string, shareableInvites?: number | null } | null, notificationsData?: { __typename?: 'NotificationsData', magicbellUserId: string, notificationsDisabled: boolean, mutedColonyAddresses: Array, paymentNotificationsDisabled: boolean, mentionNotificationsDisabled: boolean, adminNotificationsDisabled: boolean } | null } | null } | null> } | null, objectionAnnotation?: { __typename?: 'Annotation', createdAt: string, message: string } | null, action?: { __typename?: 'ColonyAction', type: ColonyActionType } | null } | null, colony: { __typename?: 'Colony', name: string, colonyAddress: string, nativeToken: { __typename?: 'Token', name: string, nativeTokenDecimals: number, nativeTokenSymbol: string, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } }, tokens?: { __typename?: 'ModelColonyTokensConnection', items: Array<{ __typename?: 'ColonyTokens', colonyTokensId: string, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } } | null> } | null, metadata?: { __typename?: 'ColonyMetadata', displayName: string, avatar?: string | null, description?: string | null, thumbnail?: string | null, externalLinks?: Array<{ __typename?: 'ExternalLink', name: ExternalLinks, link: string }> | null, objective?: { __typename?: 'ColonyObjective', title: string, description: string, progress: number } | null, changelog?: Array<{ __typename?: 'ColonyMetadataChangelog', transactionHash: string, newDisplayName: string, oldDisplayName: string, hasAvatarChanged: boolean, hasDescriptionChanged?: boolean | null, haveExternalLinksChanged?: boolean | null, hasObjectiveChanged?: boolean | null, newSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null, oldSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null }> | null, safes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null } | null }, pendingDomainMetadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null, pendingColonyMetadata?: { __typename?: 'ColonyMetadata', displayName: string, avatar?: string | null, description?: string | null, thumbnail?: string | null, externalLinks?: Array<{ __typename?: 'ExternalLink', name: ExternalLinks, link: string }> | null, objective?: { __typename?: 'ColonyObjective', title: string, description: string, progress: number } | null, changelog?: Array<{ __typename?: 'ColonyMetadataChangelog', transactionHash: string, newDisplayName: string, oldDisplayName: string, hasAvatarChanged: boolean, hasDescriptionChanged?: boolean | null, haveExternalLinksChanged?: boolean | null, hasObjectiveChanged?: boolean | null, newSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null, oldSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null }> | null, safes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null } | null, annotation?: { __typename?: 'Annotation', createdAt: string, message: string } | null, decisionData?: { __typename?: 'ColonyDecision', title: string, description: string, motionDomainId: number, walletAddress: string, createdAt: string, actionId: string, colonyAddress: string } | null, safeTransaction?: { __typename?: 'SafeTransaction', id: string, safe: { __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }, transactions?: { __typename?: 'ModelSafeTransactionDataConnection', items: Array<{ __typename?: 'SafeTransactionData', transactionType: SafeTransactionType, amount?: string | null, rawAmount?: string | null, data?: string | null, abi?: string | null, contractFunction?: string | null, token?: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } | null, recipient?: { __typename?: 'SimpleTarget', id: string, walletAddress: string, profile: { __typename?: 'SimpleTargetProfile', avatarHash?: string | null, displayName?: string | null } } | null, contract?: { __typename?: 'SimpleTarget', id: string, walletAddress: string, profile: { __typename?: 'SimpleTargetProfile', avatarHash?: string | null, displayName?: string | null } } | null, nft?: { __typename?: 'NFT', id: string, walletAddress: string, profile: { __typename?: 'NFTProfile', displayName: string } } | null, nftData?: { __typename?: 'NFTData', address: string, description?: string | null, id: string, imageUri?: string | null, logoUri: string, name?: string | null, tokenName: string, tokenSymbol: string, uri: string } | null, functionParams?: Array<{ __typename?: 'FunctionParam', name: string, type: string, value: string } | null> | null } | null> } | null } | null, metadata?: { __typename?: 'ColonyActionMetadata', customTitle: string, arbitraryTxAbis?: Array<{ __typename?: 'ArbitraryTxAbi', contractAddress: string, jsonAbi: string }> | null } | null, multiSigData?: { __typename?: 'ColonyMultiSig', id: string, nativeMultiSigId: string, createdAt: string, multiSigDomainId: string, nativeMultiSigDomainId: string, requiredPermissions: number, transactionHash: string, isExecuted: boolean, hasActionCompleted: boolean, isRejected: boolean, isDecision: boolean, executedAt?: string | null, executedBy?: string | null, rejectedAt?: string | null, rejectedBy?: string | null, multiSigDomain: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null }, signatures?: { __typename?: 'ModelMultiSigUserSignatureConnection', items: Array<{ __typename?: 'MultiSigUserSignature', id: string, role: number, userAddress: string, multiSigId: string, vote: MultiSigVote, createdAt: string, updatedAt: string, user: { __typename?: 'User', bridgeCustomerId?: string | null, walletAddress: string, profile?: { __typename?: 'Profile', avatar?: string | null, bio?: string | null, displayName?: string | null, displayNameChanged?: string | null, email?: string | null, location?: string | null, thumbnail?: string | null, website?: string | null, preferredCurrency?: SupportedCurrencies | null, isAutoOfframpEnabled?: boolean | null, meta?: { __typename?: 'ProfileMetadata', metatransactionsEnabled?: boolean | null, decentralizedModeEnabled?: boolean | null, customRpc?: string | null } | null } | null, privateBetaInviteCode?: { __typename?: 'PrivateBetaInviteCode', id: string, shareableInvites?: number | null } | null, notificationsData?: { __typename?: 'NotificationsData', magicbellUserId: string, notificationsDisabled: boolean, mutedColonyAddresses: Array, paymentNotificationsDisabled: boolean, mentionNotificationsDisabled: boolean, adminNotificationsDisabled: boolean } | null } } | null> } | null, executedByUser?: { __typename?: 'User', walletAddress: string, profile?: { __typename?: 'Profile', displayName?: string | null, displayNameChanged?: string | null, avatar?: string | null, thumbnail?: string | null } | null } | null, rejectedByUser?: { __typename?: 'User', walletAddress: string, profile?: { __typename?: 'Profile', displayName?: string | null, displayNameChanged?: string | null, avatar?: string | null, thumbnail?: string | null } | null } | null } | null, approvedTokenChanges?: { __typename?: 'ApprovedTokenChanges', added: Array, removed: Array, unaffected: Array } | null, expenditure?: { __typename?: 'Expenditure', isStaked: boolean, type: ExpenditureType, metadata?: { __typename?: 'ExpenditureMetadata', distributionType?: SplitPaymentDistributionType | null } | null, creatingActions?: { __typename?: 'ModelColonyActionConnection', items: Array<{ __typename?: 'ColonyAction', transactionHash: string } | null> } | null } | null, arbitraryTransactions?: Array<{ __typename?: 'ColonyActionArbitraryTransaction', contractAddress: string, encodedFunction: string }> | null } | null> } | null }; export type GetColonyActionQueryVariables = Exact<{ transactionHash: Scalars['ID']; }>; -export type GetColonyActionQuery = { __typename?: 'Query', getColonyAction?: { __typename?: 'ColonyAction', type: ColonyActionType, blockNumber: number, initiatorAddress: string, recipientAddress?: string | null, amount?: string | null, networkFee?: string | null, tokenAddress?: string | null, createdAt: string, newColonyVersion?: number | null, rolesAreMultiSig?: boolean | null, individualEvents?: string | null, isMotion?: boolean | null, showInActionsList: boolean, members?: Array | null, rootHash: string, expenditureId?: string | null, isMultiSig?: boolean | null, multiSigId?: string | null, transactionHash: string, colonyAddress: string, initiatorUser?: { __typename?: 'User', walletAddress: string, profile?: { __typename?: 'Profile', displayName?: string | null, displayNameChanged?: string | null, avatar?: string | null, thumbnail?: string | null } | null } | null, initiatorColony?: { __typename?: 'Colony', name: string, version: number, reputation?: string | null, expendituresGlobalClaimDelay?: string | null, private?: boolean | null, lastUpdatedContributorsWithReputation?: string | null, colonyAddress: string, metadata?: { __typename?: 'ColonyMetadata', avatar?: string | null, displayName: string, thumbnail?: string | null, description?: string | null, externalLinks?: Array<{ __typename?: 'ExternalLink', link: string, name: ExternalLinks }> | null, objective?: { __typename?: 'ColonyObjective', title: string, description: string, progress: number } | null, changelog?: Array<{ __typename?: 'ColonyMetadataChangelog', transactionHash: string, newDisplayName: string, oldDisplayName: string, hasAvatarChanged: boolean, hasDescriptionChanged?: boolean | null, haveExternalLinksChanged?: boolean | null, hasObjectiveChanged?: boolean | null, newSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null, oldSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null }> | null, safes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null } | null, nativeToken: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string }, status?: { __typename?: 'ColonyStatus', recovery?: boolean | null, nativeToken?: { __typename?: 'NativeTokenStatus', mintable?: boolean | null, unlockable?: boolean | null, unlocked?: boolean | null } | null } | null, chainMetadata: { __typename?: 'ChainMetadata', chainId: string, network?: Network | null }, tokens?: { __typename?: 'ModelColonyTokensConnection', items: Array<{ __typename?: 'ColonyTokens', colonyTokensId: string, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } } | null> } | null, motionsWithUnclaimedStakes?: Array<{ __typename?: 'ColonyUnclaimedStake', motionId: string, unclaimedRewards: Array<{ __typename?: 'StakerRewards', address: string, rewards: { __typename?: 'MotionStakeValues', nay: string, yay: string } }> }> | null, domains?: { __typename?: 'ModelDomainConnection', items: Array<{ __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null> } | null, balances?: { __typename?: 'ColonyBalances', items?: Array<{ __typename?: 'ColonyBalance', id: string, balance: string, domain?: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } } | null> | null } | null, fundsClaimData?: { __typename?: 'ModelColonyFundsClaimConnection', items: Array<{ __typename?: 'ColonyFundsClaim', id: string, createdAtBlock: number, createdAt: string, amount: string, isClaimed?: boolean | null, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } } | null> } | null, chainFundsClaim?: { __typename?: 'ColonyChainFundsClaim', id: string, createdAtBlock: number, createdAt: string, amount: string, isClaimed?: boolean | null } | null, roles?: { __typename?: 'ModelColonyRoleConnection', items: Array<{ __typename?: 'ColonyRole', id: string, targetAddress: string, role_0?: boolean | null, role_1?: boolean | null, role_2?: boolean | null, role_3?: boolean | null, role_5?: boolean | null, role_6?: boolean | null, isMultiSig?: boolean | null, domain: { __typename?: 'Domain', id: string, nativeId: number } } | null> } | null, colonyMemberInvite?: { __typename?: 'ColonyMemberInvite', id: string, invitesRemaining: number } | null } | null, initiatorExtension?: { __typename?: 'ColonyExtension', hash: string, installedBy: string, installedAt: number, isDeprecated: boolean, isDeleted: boolean, isInitialized: boolean, address: string, colonyAddress: string, currentVersion: number, params?: { __typename?: 'ExtensionParams', votingReputation?: { __typename?: 'VotingReputationParams', maxVoteFraction: string, totalStakeFraction: string, voterRewardFraction: string, userMinStakeFraction: string, stakePeriod: string, submitPeriod: string, revealPeriod: string, escalationPeriod: string } | null, stakedExpenditure?: { __typename?: 'StakedExpenditureParams', stakeFraction: string } | null, multiSig?: { __typename?: 'MultiSigParams', colonyThreshold: number, domainThresholds?: Array<{ __typename?: 'MultiSigDomainConfig', domainId: string, domainThreshold: number } | null> | null } | null } | null } | null, initiatorToken?: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } | null, recipientUser?: { __typename?: 'User', walletAddress: string, profile?: { __typename?: 'Profile', displayName?: string | null, displayNameChanged?: string | null, avatar?: string | null, thumbnail?: string | null } | null } | null, recipientColony?: { __typename?: 'Colony', name: string, version: number, reputation?: string | null, expendituresGlobalClaimDelay?: string | null, private?: boolean | null, lastUpdatedContributorsWithReputation?: string | null, colonyAddress: string, metadata?: { __typename?: 'ColonyMetadata', avatar?: string | null, displayName: string, thumbnail?: string | null, description?: string | null, externalLinks?: Array<{ __typename?: 'ExternalLink', link: string, name: ExternalLinks }> | null, objective?: { __typename?: 'ColonyObjective', title: string, description: string, progress: number } | null, changelog?: Array<{ __typename?: 'ColonyMetadataChangelog', transactionHash: string, newDisplayName: string, oldDisplayName: string, hasAvatarChanged: boolean, hasDescriptionChanged?: boolean | null, haveExternalLinksChanged?: boolean | null, hasObjectiveChanged?: boolean | null, newSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null, oldSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null }> | null, safes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null } | null, nativeToken: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string }, status?: { __typename?: 'ColonyStatus', recovery?: boolean | null, nativeToken?: { __typename?: 'NativeTokenStatus', mintable?: boolean | null, unlockable?: boolean | null, unlocked?: boolean | null } | null } | null, chainMetadata: { __typename?: 'ChainMetadata', chainId: string, network?: Network | null }, tokens?: { __typename?: 'ModelColonyTokensConnection', items: Array<{ __typename?: 'ColonyTokens', colonyTokensId: string, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } } | null> } | null, motionsWithUnclaimedStakes?: Array<{ __typename?: 'ColonyUnclaimedStake', motionId: string, unclaimedRewards: Array<{ __typename?: 'StakerRewards', address: string, rewards: { __typename?: 'MotionStakeValues', nay: string, yay: string } }> }> | null, domains?: { __typename?: 'ModelDomainConnection', items: Array<{ __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null> } | null, balances?: { __typename?: 'ColonyBalances', items?: Array<{ __typename?: 'ColonyBalance', id: string, balance: string, domain?: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } } | null> | null } | null, fundsClaimData?: { __typename?: 'ModelColonyFundsClaimConnection', items: Array<{ __typename?: 'ColonyFundsClaim', id: string, createdAtBlock: number, createdAt: string, amount: string, isClaimed?: boolean | null, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } } | null> } | null, chainFundsClaim?: { __typename?: 'ColonyChainFundsClaim', id: string, createdAtBlock: number, createdAt: string, amount: string, isClaimed?: boolean | null } | null, roles?: { __typename?: 'ModelColonyRoleConnection', items: Array<{ __typename?: 'ColonyRole', id: string, targetAddress: string, role_0?: boolean | null, role_1?: boolean | null, role_2?: boolean | null, role_3?: boolean | null, role_5?: boolean | null, role_6?: boolean | null, isMultiSig?: boolean | null, domain: { __typename?: 'Domain', id: string, nativeId: number } } | null> } | null, colonyMemberInvite?: { __typename?: 'ColonyMemberInvite', id: string, invitesRemaining: number } | null } | null, recipientExtension?: { __typename?: 'ColonyExtension', hash: string, installedBy: string, installedAt: number, isDeprecated: boolean, isDeleted: boolean, isInitialized: boolean, address: string, colonyAddress: string, currentVersion: number, params?: { __typename?: 'ExtensionParams', votingReputation?: { __typename?: 'VotingReputationParams', maxVoteFraction: string, totalStakeFraction: string, voterRewardFraction: string, userMinStakeFraction: string, stakePeriod: string, submitPeriod: string, revealPeriod: string, escalationPeriod: string } | null, stakedExpenditure?: { __typename?: 'StakedExpenditureParams', stakeFraction: string } | null, multiSig?: { __typename?: 'MultiSigParams', colonyThreshold: number, domainThresholds?: Array<{ __typename?: 'MultiSigDomainConfig', domainId: string, domainThreshold: number } | null> | null } | null } | null } | null, recipientToken?: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } | null, token?: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } | null, fromDomain?: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null, toDomain?: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null, roles?: { __typename?: 'ColonyActionRoles', role_0?: boolean | null, role_1?: boolean | null, role_2?: boolean | null, role_3?: boolean | null, role_5?: boolean | null, role_6?: boolean | null } | null, payments?: Array<{ __typename?: 'Payment', amount: string, tokenAddress: string, recipientAddress: string }> | null, motionData?: { __typename?: 'ColonyMotion', remainingStakes: Array, userMinStake: string, requiredStake: string, nativeMotionDomainId: string, isFinalized: boolean, skillRep: string, repSubmitted: string, hasObjection: boolean, isDecision: boolean, transactionHash: string, createdAt: string, createdBy: string, expenditureSlotIds?: Array | null, databaseMotionId: string, motionId: string, motionStakes: { __typename?: 'MotionStakes', raw: { __typename?: 'MotionStakeValues', yay: string, nay: string }, percentage: { __typename?: 'MotionStakeValues', yay: string, nay: string } }, usersStakes: Array<{ __typename?: 'UserMotionStakes', address: string, stakes: { __typename?: 'MotionStakes', raw: { __typename?: 'MotionStakeValues', yay: string, nay: string }, percentage: { __typename?: 'MotionStakeValues', yay: string, nay: string } } }>, motionDomain: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null }, stakerRewards: Array<{ __typename?: 'StakerRewards', address: string, isClaimed: boolean, rewards: { __typename?: 'MotionStakeValues', yay: string, nay: string } }>, voterRewards?: { __typename?: 'ModelVoterRewardsHistoryConnection', items: Array<{ __typename?: 'VoterRewardsHistory', userAddress: string, amount: string, user: { __typename?: 'User', bridgeCustomerId?: string | null, walletAddress: string, profile?: { __typename?: 'Profile', avatar?: string | null, bio?: string | null, displayName?: string | null, displayNameChanged?: string | null, email?: string | null, location?: string | null, thumbnail?: string | null, website?: string | null, preferredCurrency?: SupportedCurrencies | null, isAutoOfframpEnabled?: boolean | null, meta?: { __typename?: 'ProfileMetadata', metatransactionsEnabled?: boolean | null, decentralizedModeEnabled?: boolean | null, customRpc?: string | null } | null } | null, privateBetaInviteCode?: { __typename?: 'PrivateBetaInviteCode', id: string, shareableInvites?: number | null } | null, notificationsData?: { __typename?: 'NotificationsData', magicbellUserId: string, notificationsDisabled: boolean, mutedColonyAddresses: Array, paymentNotificationsDisabled: boolean, mentionNotificationsDisabled: boolean, adminNotificationsDisabled: boolean } | null } } | null> } | null, voterRecord: Array<{ __typename?: 'VoterRecord', address: string, voteCount: string, vote?: number | null }>, revealedVotes: { __typename?: 'MotionStakes', raw: { __typename?: 'MotionStakeValues', yay: string, nay: string }, percentage: { __typename?: 'MotionStakeValues', yay: string, nay: string } }, motionStateHistory: { __typename?: 'MotionStateHistory', hasVoted: boolean, hasPassed: boolean, hasFailed: boolean, hasFailedNotFinalizable: boolean, inRevealPhase: boolean, yaySideFullyStakedAt?: string | null, naySideFullyStakedAt?: string | null, allVotesSubmittedAt?: string | null, allVotesRevealedAt?: string | null, endedAt?: string | null, finalizedAt?: string | null }, messages?: { __typename?: 'ModelMotionMessageConnection', items: Array<{ __typename?: 'MotionMessage', initiatorAddress: string, name: string, messageKey: string, vote?: string | null, amount?: string | null, createdAt: string, initiatorUser?: { __typename?: 'User', bridgeCustomerId?: string | null, walletAddress: string, profile?: { __typename?: 'Profile', avatar?: string | null, bio?: string | null, displayName?: string | null, displayNameChanged?: string | null, email?: string | null, location?: string | null, thumbnail?: string | null, website?: string | null, preferredCurrency?: SupportedCurrencies | null, isAutoOfframpEnabled?: boolean | null, meta?: { __typename?: 'ProfileMetadata', metatransactionsEnabled?: boolean | null, decentralizedModeEnabled?: boolean | null, customRpc?: string | null } | null } | null, privateBetaInviteCode?: { __typename?: 'PrivateBetaInviteCode', id: string, shareableInvites?: number | null } | null, notificationsData?: { __typename?: 'NotificationsData', magicbellUserId: string, notificationsDisabled: boolean, mutedColonyAddresses: Array, paymentNotificationsDisabled: boolean, mentionNotificationsDisabled: boolean, adminNotificationsDisabled: boolean } | null } | null } | null> } | null, objectionAnnotation?: { __typename?: 'Annotation', createdAt: string, message: string } | null, action?: { __typename?: 'ColonyAction', type: ColonyActionType } | null } | null, colony: { __typename?: 'Colony', name: string, colonyAddress: string, nativeToken: { __typename?: 'Token', name: string, nativeTokenDecimals: number, nativeTokenSymbol: string, tokenAddress: string }, tokens?: { __typename?: 'ModelColonyTokensConnection', items: Array<{ __typename?: 'ColonyTokens', colonyTokensId: string, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } } | null> } | null, metadata?: { __typename?: 'ColonyMetadata', displayName: string, avatar?: string | null, description?: string | null, thumbnail?: string | null, externalLinks?: Array<{ __typename?: 'ExternalLink', name: ExternalLinks, link: string }> | null, objective?: { __typename?: 'ColonyObjective', title: string, description: string, progress: number } | null, changelog?: Array<{ __typename?: 'ColonyMetadataChangelog', transactionHash: string, newDisplayName: string, oldDisplayName: string, hasAvatarChanged: boolean, hasDescriptionChanged?: boolean | null, haveExternalLinksChanged?: boolean | null, hasObjectiveChanged?: boolean | null, newSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null, oldSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null }> | null, safes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null } | null }, pendingDomainMetadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null, pendingColonyMetadata?: { __typename?: 'ColonyMetadata', displayName: string, avatar?: string | null, description?: string | null, thumbnail?: string | null, externalLinks?: Array<{ __typename?: 'ExternalLink', name: ExternalLinks, link: string }> | null, objective?: { __typename?: 'ColonyObjective', title: string, description: string, progress: number } | null, changelog?: Array<{ __typename?: 'ColonyMetadataChangelog', transactionHash: string, newDisplayName: string, oldDisplayName: string, hasAvatarChanged: boolean, hasDescriptionChanged?: boolean | null, haveExternalLinksChanged?: boolean | null, hasObjectiveChanged?: boolean | null, newSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null, oldSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null }> | null, safes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null } | null, annotation?: { __typename?: 'Annotation', createdAt: string, message: string } | null, decisionData?: { __typename?: 'ColonyDecision', title: string, description: string, motionDomainId: number, walletAddress: string, createdAt: string, actionId: string, colonyAddress: string } | null, safeTransaction?: { __typename?: 'SafeTransaction', id: string, safe: { __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }, transactions?: { __typename?: 'ModelSafeTransactionDataConnection', items: Array<{ __typename?: 'SafeTransactionData', transactionType: SafeTransactionType, amount?: string | null, rawAmount?: string | null, data?: string | null, abi?: string | null, contractFunction?: string | null, token?: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } | null, recipient?: { __typename?: 'SimpleTarget', id: string, walletAddress: string, profile: { __typename?: 'SimpleTargetProfile', avatarHash?: string | null, displayName?: string | null } } | null, contract?: { __typename?: 'SimpleTarget', id: string, walletAddress: string, profile: { __typename?: 'SimpleTargetProfile', avatarHash?: string | null, displayName?: string | null } } | null, nft?: { __typename?: 'NFT', id: string, walletAddress: string, profile: { __typename?: 'NFTProfile', displayName: string } } | null, nftData?: { __typename?: 'NFTData', address: string, description?: string | null, id: string, imageUri?: string | null, logoUri: string, name?: string | null, tokenName: string, tokenSymbol: string, uri: string } | null, functionParams?: Array<{ __typename?: 'FunctionParam', name: string, type: string, value: string } | null> | null } | null> } | null } | null, metadata?: { __typename?: 'ColonyActionMetadata', customTitle: string, arbitraryTxAbis?: Array<{ __typename?: 'ArbitraryTxAbi', contractAddress: string, jsonAbi: string }> | null } | null, multiSigData?: { __typename?: 'ColonyMultiSig', id: string, nativeMultiSigId: string, createdAt: string, multiSigDomainId: string, nativeMultiSigDomainId: string, requiredPermissions: number, transactionHash: string, isExecuted: boolean, hasActionCompleted: boolean, isRejected: boolean, isDecision: boolean, executedAt?: string | null, executedBy?: string | null, rejectedAt?: string | null, rejectedBy?: string | null, multiSigDomain: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null }, signatures?: { __typename?: 'ModelMultiSigUserSignatureConnection', items: Array<{ __typename?: 'MultiSigUserSignature', id: string, role: number, userAddress: string, multiSigId: string, vote: MultiSigVote, createdAt: string, updatedAt: string, user: { __typename?: 'User', bridgeCustomerId?: string | null, walletAddress: string, profile?: { __typename?: 'Profile', avatar?: string | null, bio?: string | null, displayName?: string | null, displayNameChanged?: string | null, email?: string | null, location?: string | null, thumbnail?: string | null, website?: string | null, preferredCurrency?: SupportedCurrencies | null, isAutoOfframpEnabled?: boolean | null, meta?: { __typename?: 'ProfileMetadata', metatransactionsEnabled?: boolean | null, decentralizedModeEnabled?: boolean | null, customRpc?: string | null } | null } | null, privateBetaInviteCode?: { __typename?: 'PrivateBetaInviteCode', id: string, shareableInvites?: number | null } | null, notificationsData?: { __typename?: 'NotificationsData', magicbellUserId: string, notificationsDisabled: boolean, mutedColonyAddresses: Array, paymentNotificationsDisabled: boolean, mentionNotificationsDisabled: boolean, adminNotificationsDisabled: boolean } | null } } | null> } | null, executedByUser?: { __typename?: 'User', walletAddress: string, profile?: { __typename?: 'Profile', displayName?: string | null, displayNameChanged?: string | null, avatar?: string | null, thumbnail?: string | null } | null } | null, rejectedByUser?: { __typename?: 'User', walletAddress: string, profile?: { __typename?: 'Profile', displayName?: string | null, displayNameChanged?: string | null, avatar?: string | null, thumbnail?: string | null } | null } | null } | null, approvedTokenChanges?: { __typename?: 'ApprovedTokenChanges', added: Array, removed: Array, unaffected: Array } | null, expenditure?: { __typename?: 'Expenditure', isStaked: boolean, type: ExpenditureType, metadata?: { __typename?: 'ExpenditureMetadata', distributionType?: SplitPaymentDistributionType | null } | null, creatingActions?: { __typename?: 'ModelColonyActionConnection', items: Array<{ __typename?: 'ColonyAction', transactionHash: string } | null> } | null } | null, arbitraryTransactions?: Array<{ __typename?: 'ColonyActionArbitraryTransaction', contractAddress: string, encodedFunction: string }> | null } | null }; +export type GetColonyActionQuery = { __typename?: 'Query', getColonyAction?: { __typename?: 'ColonyAction', type: ColonyActionType, blockNumber: number, initiatorAddress: string, recipientAddress?: string | null, amount?: string | null, networkFee?: string | null, tokenAddress?: string | null, createdAt: string, newColonyVersion?: number | null, rolesAreMultiSig?: boolean | null, individualEvents?: string | null, isMotion?: boolean | null, showInActionsList: boolean, members?: Array | null, rootHash: string, expenditureId?: string | null, isMultiSig?: boolean | null, multiSigId?: string | null, targetChainId?: number | null, transactionHash: string, colonyAddress: string, initiatorUser?: { __typename?: 'User', walletAddress: string, profile?: { __typename?: 'Profile', displayName?: string | null, displayNameChanged?: string | null, avatar?: string | null, thumbnail?: string | null } | null } | null, initiatorColony?: { __typename?: 'Colony', name: string, version: number, reputation?: string | null, expendituresGlobalClaimDelay?: string | null, private?: boolean | null, lastUpdatedContributorsWithReputation?: string | null, colonyAddress: string, metadata?: { __typename?: 'ColonyMetadata', avatar?: string | null, displayName: string, thumbnail?: string | null, description?: string | null, externalLinks?: Array<{ __typename?: 'ExternalLink', link: string, name: ExternalLinks }> | null, objective?: { __typename?: 'ColonyObjective', title: string, description: string, progress: number } | null, changelog?: Array<{ __typename?: 'ColonyMetadataChangelog', transactionHash: string, newDisplayName: string, oldDisplayName: string, hasAvatarChanged: boolean, hasDescriptionChanged?: boolean | null, haveExternalLinksChanged?: boolean | null, hasObjectiveChanged?: boolean | null, newSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null, oldSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null }> | null, safes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null } | null, colonyCreateEvent?: { __typename?: 'ColonyCreateEvent', blockNumber: number, creationSalt: string } | null, nativeToken: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } }, status?: { __typename?: 'ColonyStatus', recovery?: boolean | null, nativeToken?: { __typename?: 'NativeTokenStatus', mintable?: boolean | null, unlockable?: boolean | null, unlocked?: boolean | null } | null } | null, chainMetadata: { __typename?: 'ChainMetadata', chainId: string, network?: Network | null }, tokens?: { __typename?: 'ModelColonyTokensConnection', items: Array<{ __typename?: 'ColonyTokens', colonyTokensId: string, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } } | null> } | null, motionsWithUnclaimedStakes?: Array<{ __typename?: 'ColonyUnclaimedStake', motionId: string, unclaimedRewards: Array<{ __typename?: 'StakerRewards', address: string, rewards: { __typename?: 'MotionStakeValues', nay: string, yay: string } }> }> | null, domains?: { __typename?: 'ModelDomainConnection', items: Array<{ __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null> } | null, balances?: { __typename?: 'ColonyBalances', items?: Array<{ __typename?: 'ColonyBalance', id: string, balance: string, domain?: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } } | null> | null } | null, fundsClaimData?: { __typename?: 'ModelColonyFundsClaimConnection', items: Array<{ __typename?: 'ColonyFundsClaim', id: string, createdAtBlock: number, createdAt: string, amount: string, isClaimed?: boolean | null, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } } | null> } | null, chainFundsClaim?: Array<{ __typename?: 'ColonyChainFundsClaim', id: string, createdAtBlock: number, createdAt: string, amount: string, isClaimed?: boolean | null } | null> | null, roles?: { __typename?: 'ModelColonyRoleConnection', items: Array<{ __typename?: 'ColonyRole', id: string, targetAddress: string, role_0?: boolean | null, role_1?: boolean | null, role_2?: boolean | null, role_3?: boolean | null, role_5?: boolean | null, role_6?: boolean | null, isMultiSig?: boolean | null, domain: { __typename?: 'Domain', id: string, nativeId: number } } | null> } | null, colonyMemberInvite?: { __typename?: 'ColonyMemberInvite', id: string, invitesRemaining: number } | null, proxyColonies?: { __typename?: 'ModelProxyColonyConnection', items: Array<{ __typename?: 'ProxyColony', chainId: string, isActive: boolean } | null> } | null } | null, initiatorExtension?: { __typename?: 'ColonyExtension', hash: string, installedBy: string, installedAt: number, isDeprecated: boolean, isDeleted: boolean, isInitialized: boolean, address: string, colonyAddress: string, currentVersion: number, params?: { __typename?: 'ExtensionParams', votingReputation?: { __typename?: 'VotingReputationParams', maxVoteFraction: string, totalStakeFraction: string, voterRewardFraction: string, userMinStakeFraction: string, stakePeriod: string, submitPeriod: string, revealPeriod: string, escalationPeriod: string } | null, stakedExpenditure?: { __typename?: 'StakedExpenditureParams', stakeFraction: string } | null, multiSig?: { __typename?: 'MultiSigParams', colonyThreshold: number, domainThresholds?: Array<{ __typename?: 'MultiSigDomainConfig', domainId: string, domainThreshold: number } | null> | null } | null } | null } | null, initiatorToken?: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } | null, recipientUser?: { __typename?: 'User', walletAddress: string, profile?: { __typename?: 'Profile', displayName?: string | null, displayNameChanged?: string | null, avatar?: string | null, thumbnail?: string | null } | null } | null, recipientColony?: { __typename?: 'Colony', name: string, version: number, reputation?: string | null, expendituresGlobalClaimDelay?: string | null, private?: boolean | null, lastUpdatedContributorsWithReputation?: string | null, colonyAddress: string, metadata?: { __typename?: 'ColonyMetadata', avatar?: string | null, displayName: string, thumbnail?: string | null, description?: string | null, externalLinks?: Array<{ __typename?: 'ExternalLink', link: string, name: ExternalLinks }> | null, objective?: { __typename?: 'ColonyObjective', title: string, description: string, progress: number } | null, changelog?: Array<{ __typename?: 'ColonyMetadataChangelog', transactionHash: string, newDisplayName: string, oldDisplayName: string, hasAvatarChanged: boolean, hasDescriptionChanged?: boolean | null, haveExternalLinksChanged?: boolean | null, hasObjectiveChanged?: boolean | null, newSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null, oldSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null }> | null, safes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null } | null, colonyCreateEvent?: { __typename?: 'ColonyCreateEvent', blockNumber: number, creationSalt: string } | null, nativeToken: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } }, status?: { __typename?: 'ColonyStatus', recovery?: boolean | null, nativeToken?: { __typename?: 'NativeTokenStatus', mintable?: boolean | null, unlockable?: boolean | null, unlocked?: boolean | null } | null } | null, chainMetadata: { __typename?: 'ChainMetadata', chainId: string, network?: Network | null }, tokens?: { __typename?: 'ModelColonyTokensConnection', items: Array<{ __typename?: 'ColonyTokens', colonyTokensId: string, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } } | null> } | null, motionsWithUnclaimedStakes?: Array<{ __typename?: 'ColonyUnclaimedStake', motionId: string, unclaimedRewards: Array<{ __typename?: 'StakerRewards', address: string, rewards: { __typename?: 'MotionStakeValues', nay: string, yay: string } }> }> | null, domains?: { __typename?: 'ModelDomainConnection', items: Array<{ __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null> } | null, balances?: { __typename?: 'ColonyBalances', items?: Array<{ __typename?: 'ColonyBalance', id: string, balance: string, domain?: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } } | null> | null } | null, fundsClaimData?: { __typename?: 'ModelColonyFundsClaimConnection', items: Array<{ __typename?: 'ColonyFundsClaim', id: string, createdAtBlock: number, createdAt: string, amount: string, isClaimed?: boolean | null, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } } | null> } | null, chainFundsClaim?: Array<{ __typename?: 'ColonyChainFundsClaim', id: string, createdAtBlock: number, createdAt: string, amount: string, isClaimed?: boolean | null } | null> | null, roles?: { __typename?: 'ModelColonyRoleConnection', items: Array<{ __typename?: 'ColonyRole', id: string, targetAddress: string, role_0?: boolean | null, role_1?: boolean | null, role_2?: boolean | null, role_3?: boolean | null, role_5?: boolean | null, role_6?: boolean | null, isMultiSig?: boolean | null, domain: { __typename?: 'Domain', id: string, nativeId: number } } | null> } | null, colonyMemberInvite?: { __typename?: 'ColonyMemberInvite', id: string, invitesRemaining: number } | null, proxyColonies?: { __typename?: 'ModelProxyColonyConnection', items: Array<{ __typename?: 'ProxyColony', chainId: string, isActive: boolean } | null> } | null } | null, recipientExtension?: { __typename?: 'ColonyExtension', hash: string, installedBy: string, installedAt: number, isDeprecated: boolean, isDeleted: boolean, isInitialized: boolean, address: string, colonyAddress: string, currentVersion: number, params?: { __typename?: 'ExtensionParams', votingReputation?: { __typename?: 'VotingReputationParams', maxVoteFraction: string, totalStakeFraction: string, voterRewardFraction: string, userMinStakeFraction: string, stakePeriod: string, submitPeriod: string, revealPeriod: string, escalationPeriod: string } | null, stakedExpenditure?: { __typename?: 'StakedExpenditureParams', stakeFraction: string } | null, multiSig?: { __typename?: 'MultiSigParams', colonyThreshold: number, domainThresholds?: Array<{ __typename?: 'MultiSigDomainConfig', domainId: string, domainThreshold: number } | null> | null } | null } | null } | null, recipientToken?: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } | null, token?: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } | null, fromDomain?: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null, toDomain?: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null, roles?: { __typename?: 'ColonyActionRoles', role_0?: boolean | null, role_1?: boolean | null, role_2?: boolean | null, role_3?: boolean | null, role_5?: boolean | null, role_6?: boolean | null } | null, payments?: Array<{ __typename?: 'Payment', amount: string, tokenAddress: string, recipientAddress: string }> | null, motionData?: { __typename?: 'ColonyMotion', remainingStakes: Array, userMinStake: string, requiredStake: string, nativeMotionDomainId: string, isFinalized: boolean, skillRep: string, repSubmitted: string, hasObjection: boolean, isDecision: boolean, transactionHash: string, createdAt: string, createdBy: string, expenditureSlotIds?: Array | null, databaseMotionId: string, motionId: string, motionStakes: { __typename?: 'MotionStakes', raw: { __typename?: 'MotionStakeValues', yay: string, nay: string }, percentage: { __typename?: 'MotionStakeValues', yay: string, nay: string } }, usersStakes: Array<{ __typename?: 'UserMotionStakes', address: string, stakes: { __typename?: 'MotionStakes', raw: { __typename?: 'MotionStakeValues', yay: string, nay: string }, percentage: { __typename?: 'MotionStakeValues', yay: string, nay: string } } }>, motionDomain: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null }, stakerRewards: Array<{ __typename?: 'StakerRewards', address: string, isClaimed: boolean, rewards: { __typename?: 'MotionStakeValues', yay: string, nay: string } }>, voterRewards?: { __typename?: 'ModelVoterRewardsHistoryConnection', items: Array<{ __typename?: 'VoterRewardsHistory', userAddress: string, amount: string, user: { __typename?: 'User', bridgeCustomerId?: string | null, walletAddress: string, profile?: { __typename?: 'Profile', avatar?: string | null, bio?: string | null, displayName?: string | null, displayNameChanged?: string | null, email?: string | null, location?: string | null, thumbnail?: string | null, website?: string | null, preferredCurrency?: SupportedCurrencies | null, isAutoOfframpEnabled?: boolean | null, meta?: { __typename?: 'ProfileMetadata', metatransactionsEnabled?: boolean | null, decentralizedModeEnabled?: boolean | null, customRpc?: string | null } | null } | null, privateBetaInviteCode?: { __typename?: 'PrivateBetaInviteCode', id: string, shareableInvites?: number | null } | null, notificationsData?: { __typename?: 'NotificationsData', magicbellUserId: string, notificationsDisabled: boolean, mutedColonyAddresses: Array, paymentNotificationsDisabled: boolean, mentionNotificationsDisabled: boolean, adminNotificationsDisabled: boolean } | null } } | null> } | null, voterRecord: Array<{ __typename?: 'VoterRecord', address: string, voteCount: string, vote?: number | null }>, revealedVotes: { __typename?: 'MotionStakes', raw: { __typename?: 'MotionStakeValues', yay: string, nay: string }, percentage: { __typename?: 'MotionStakeValues', yay: string, nay: string } }, motionStateHistory: { __typename?: 'MotionStateHistory', hasVoted: boolean, hasPassed: boolean, hasFailed: boolean, hasFailedNotFinalizable: boolean, inRevealPhase: boolean, yaySideFullyStakedAt?: string | null, naySideFullyStakedAt?: string | null, allVotesSubmittedAt?: string | null, allVotesRevealedAt?: string | null, endedAt?: string | null, finalizedAt?: string | null }, messages?: { __typename?: 'ModelMotionMessageConnection', items: Array<{ __typename?: 'MotionMessage', initiatorAddress: string, name: string, messageKey: string, vote?: string | null, amount?: string | null, createdAt: string, initiatorUser?: { __typename?: 'User', bridgeCustomerId?: string | null, walletAddress: string, profile?: { __typename?: 'Profile', avatar?: string | null, bio?: string | null, displayName?: string | null, displayNameChanged?: string | null, email?: string | null, location?: string | null, thumbnail?: string | null, website?: string | null, preferredCurrency?: SupportedCurrencies | null, isAutoOfframpEnabled?: boolean | null, meta?: { __typename?: 'ProfileMetadata', metatransactionsEnabled?: boolean | null, decentralizedModeEnabled?: boolean | null, customRpc?: string | null } | null } | null, privateBetaInviteCode?: { __typename?: 'PrivateBetaInviteCode', id: string, shareableInvites?: number | null } | null, notificationsData?: { __typename?: 'NotificationsData', magicbellUserId: string, notificationsDisabled: boolean, mutedColonyAddresses: Array, paymentNotificationsDisabled: boolean, mentionNotificationsDisabled: boolean, adminNotificationsDisabled: boolean } | null } | null } | null> } | null, objectionAnnotation?: { __typename?: 'Annotation', createdAt: string, message: string } | null, action?: { __typename?: 'ColonyAction', type: ColonyActionType } | null } | null, colony: { __typename?: 'Colony', name: string, colonyAddress: string, nativeToken: { __typename?: 'Token', name: string, nativeTokenDecimals: number, nativeTokenSymbol: string, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } }, tokens?: { __typename?: 'ModelColonyTokensConnection', items: Array<{ __typename?: 'ColonyTokens', colonyTokensId: string, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } } | null> } | null, metadata?: { __typename?: 'ColonyMetadata', displayName: string, avatar?: string | null, description?: string | null, thumbnail?: string | null, externalLinks?: Array<{ __typename?: 'ExternalLink', name: ExternalLinks, link: string }> | null, objective?: { __typename?: 'ColonyObjective', title: string, description: string, progress: number } | null, changelog?: Array<{ __typename?: 'ColonyMetadataChangelog', transactionHash: string, newDisplayName: string, oldDisplayName: string, hasAvatarChanged: boolean, hasDescriptionChanged?: boolean | null, haveExternalLinksChanged?: boolean | null, hasObjectiveChanged?: boolean | null, newSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null, oldSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null }> | null, safes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null } | null }, pendingDomainMetadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null, pendingColonyMetadata?: { __typename?: 'ColonyMetadata', displayName: string, avatar?: string | null, description?: string | null, thumbnail?: string | null, externalLinks?: Array<{ __typename?: 'ExternalLink', name: ExternalLinks, link: string }> | null, objective?: { __typename?: 'ColonyObjective', title: string, description: string, progress: number } | null, changelog?: Array<{ __typename?: 'ColonyMetadataChangelog', transactionHash: string, newDisplayName: string, oldDisplayName: string, hasAvatarChanged: boolean, hasDescriptionChanged?: boolean | null, haveExternalLinksChanged?: boolean | null, hasObjectiveChanged?: boolean | null, newSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null, oldSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null }> | null, safes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null } | null, annotation?: { __typename?: 'Annotation', createdAt: string, message: string } | null, decisionData?: { __typename?: 'ColonyDecision', title: string, description: string, motionDomainId: number, walletAddress: string, createdAt: string, actionId: string, colonyAddress: string } | null, safeTransaction?: { __typename?: 'SafeTransaction', id: string, safe: { __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }, transactions?: { __typename?: 'ModelSafeTransactionDataConnection', items: Array<{ __typename?: 'SafeTransactionData', transactionType: SafeTransactionType, amount?: string | null, rawAmount?: string | null, data?: string | null, abi?: string | null, contractFunction?: string | null, token?: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } | null, recipient?: { __typename?: 'SimpleTarget', id: string, walletAddress: string, profile: { __typename?: 'SimpleTargetProfile', avatarHash?: string | null, displayName?: string | null } } | null, contract?: { __typename?: 'SimpleTarget', id: string, walletAddress: string, profile: { __typename?: 'SimpleTargetProfile', avatarHash?: string | null, displayName?: string | null } } | null, nft?: { __typename?: 'NFT', id: string, walletAddress: string, profile: { __typename?: 'NFTProfile', displayName: string } } | null, nftData?: { __typename?: 'NFTData', address: string, description?: string | null, id: string, imageUri?: string | null, logoUri: string, name?: string | null, tokenName: string, tokenSymbol: string, uri: string } | null, functionParams?: Array<{ __typename?: 'FunctionParam', name: string, type: string, value: string } | null> | null } | null> } | null } | null, metadata?: { __typename?: 'ColonyActionMetadata', customTitle: string, arbitraryTxAbis?: Array<{ __typename?: 'ArbitraryTxAbi', contractAddress: string, jsonAbi: string }> | null } | null, multiSigData?: { __typename?: 'ColonyMultiSig', id: string, nativeMultiSigId: string, createdAt: string, multiSigDomainId: string, nativeMultiSigDomainId: string, requiredPermissions: number, transactionHash: string, isExecuted: boolean, hasActionCompleted: boolean, isRejected: boolean, isDecision: boolean, executedAt?: string | null, executedBy?: string | null, rejectedAt?: string | null, rejectedBy?: string | null, multiSigDomain: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null }, signatures?: { __typename?: 'ModelMultiSigUserSignatureConnection', items: Array<{ __typename?: 'MultiSigUserSignature', id: string, role: number, userAddress: string, multiSigId: string, vote: MultiSigVote, createdAt: string, updatedAt: string, user: { __typename?: 'User', bridgeCustomerId?: string | null, walletAddress: string, profile?: { __typename?: 'Profile', avatar?: string | null, bio?: string | null, displayName?: string | null, displayNameChanged?: string | null, email?: string | null, location?: string | null, thumbnail?: string | null, website?: string | null, preferredCurrency?: SupportedCurrencies | null, isAutoOfframpEnabled?: boolean | null, meta?: { __typename?: 'ProfileMetadata', metatransactionsEnabled?: boolean | null, decentralizedModeEnabled?: boolean | null, customRpc?: string | null } | null } | null, privateBetaInviteCode?: { __typename?: 'PrivateBetaInviteCode', id: string, shareableInvites?: number | null } | null, notificationsData?: { __typename?: 'NotificationsData', magicbellUserId: string, notificationsDisabled: boolean, mutedColonyAddresses: Array, paymentNotificationsDisabled: boolean, mentionNotificationsDisabled: boolean, adminNotificationsDisabled: boolean } | null } } | null> } | null, executedByUser?: { __typename?: 'User', walletAddress: string, profile?: { __typename?: 'Profile', displayName?: string | null, displayNameChanged?: string | null, avatar?: string | null, thumbnail?: string | null } | null } | null, rejectedByUser?: { __typename?: 'User', walletAddress: string, profile?: { __typename?: 'Profile', displayName?: string | null, displayNameChanged?: string | null, avatar?: string | null, thumbnail?: string | null } | null } | null } | null, approvedTokenChanges?: { __typename?: 'ApprovedTokenChanges', added: Array, removed: Array, unaffected: Array } | null, expenditure?: { __typename?: 'Expenditure', isStaked: boolean, type: ExpenditureType, metadata?: { __typename?: 'ExpenditureMetadata', distributionType?: SplitPaymentDistributionType | null } | null, creatingActions?: { __typename?: 'ModelColonyActionConnection', items: Array<{ __typename?: 'ColonyAction', transactionHash: string } | null> } | null } | null, arbitraryTransactions?: Array<{ __typename?: 'ColonyActionArbitraryTransaction', contractAddress: string, encodedFunction: string }> | null } | null }; export type GetColonyMotionQueryVariables = Exact<{ id: Scalars['ID']; @@ -10648,7 +11158,7 @@ export type SearchActionsQueryVariables = Exact<{ }>; -export type SearchActionsQuery = { __typename?: 'Query', searchColonyActions?: { __typename?: 'SearchableColonyActionConnection', nextToken?: string | null, items: Array<{ __typename?: 'ColonyAction', type: ColonyActionType, blockNumber: number, initiatorAddress: string, recipientAddress?: string | null, amount?: string | null, networkFee?: string | null, tokenAddress?: string | null, createdAt: string, newColonyVersion?: number | null, rolesAreMultiSig?: boolean | null, individualEvents?: string | null, isMotion?: boolean | null, showInActionsList: boolean, members?: Array | null, rootHash: string, expenditureId?: string | null, isMultiSig?: boolean | null, multiSigId?: string | null, transactionHash: string, colonyAddress: string, initiatorUser?: { __typename?: 'User', walletAddress: string, profile?: { __typename?: 'Profile', displayName?: string | null, displayNameChanged?: string | null, avatar?: string | null, thumbnail?: string | null } | null } | null, initiatorColony?: { __typename?: 'Colony', name: string, version: number, reputation?: string | null, expendituresGlobalClaimDelay?: string | null, private?: boolean | null, lastUpdatedContributorsWithReputation?: string | null, colonyAddress: string, metadata?: { __typename?: 'ColonyMetadata', avatar?: string | null, displayName: string, thumbnail?: string | null, description?: string | null, externalLinks?: Array<{ __typename?: 'ExternalLink', link: string, name: ExternalLinks }> | null, objective?: { __typename?: 'ColonyObjective', title: string, description: string, progress: number } | null, changelog?: Array<{ __typename?: 'ColonyMetadataChangelog', transactionHash: string, newDisplayName: string, oldDisplayName: string, hasAvatarChanged: boolean, hasDescriptionChanged?: boolean | null, haveExternalLinksChanged?: boolean | null, hasObjectiveChanged?: boolean | null, newSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null, oldSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null }> | null, safes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null } | null, nativeToken: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string }, status?: { __typename?: 'ColonyStatus', recovery?: boolean | null, nativeToken?: { __typename?: 'NativeTokenStatus', mintable?: boolean | null, unlockable?: boolean | null, unlocked?: boolean | null } | null } | null, chainMetadata: { __typename?: 'ChainMetadata', chainId: string, network?: Network | null }, tokens?: { __typename?: 'ModelColonyTokensConnection', items: Array<{ __typename?: 'ColonyTokens', colonyTokensId: string, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } } | null> } | null, motionsWithUnclaimedStakes?: Array<{ __typename?: 'ColonyUnclaimedStake', motionId: string, unclaimedRewards: Array<{ __typename?: 'StakerRewards', address: string, rewards: { __typename?: 'MotionStakeValues', nay: string, yay: string } }> }> | null, domains?: { __typename?: 'ModelDomainConnection', items: Array<{ __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null> } | null, balances?: { __typename?: 'ColonyBalances', items?: Array<{ __typename?: 'ColonyBalance', id: string, balance: string, domain?: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } } | null> | null } | null, fundsClaimData?: { __typename?: 'ModelColonyFundsClaimConnection', items: Array<{ __typename?: 'ColonyFundsClaim', id: string, createdAtBlock: number, createdAt: string, amount: string, isClaimed?: boolean | null, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } } | null> } | null, chainFundsClaim?: { __typename?: 'ColonyChainFundsClaim', id: string, createdAtBlock: number, createdAt: string, amount: string, isClaimed?: boolean | null } | null, roles?: { __typename?: 'ModelColonyRoleConnection', items: Array<{ __typename?: 'ColonyRole', id: string, targetAddress: string, role_0?: boolean | null, role_1?: boolean | null, role_2?: boolean | null, role_3?: boolean | null, role_5?: boolean | null, role_6?: boolean | null, isMultiSig?: boolean | null, domain: { __typename?: 'Domain', id: string, nativeId: number } } | null> } | null, colonyMemberInvite?: { __typename?: 'ColonyMemberInvite', id: string, invitesRemaining: number } | null } | null, initiatorExtension?: { __typename?: 'ColonyExtension', hash: string, installedBy: string, installedAt: number, isDeprecated: boolean, isDeleted: boolean, isInitialized: boolean, address: string, colonyAddress: string, currentVersion: number, params?: { __typename?: 'ExtensionParams', votingReputation?: { __typename?: 'VotingReputationParams', maxVoteFraction: string, totalStakeFraction: string, voterRewardFraction: string, userMinStakeFraction: string, stakePeriod: string, submitPeriod: string, revealPeriod: string, escalationPeriod: string } | null, stakedExpenditure?: { __typename?: 'StakedExpenditureParams', stakeFraction: string } | null, multiSig?: { __typename?: 'MultiSigParams', colonyThreshold: number, domainThresholds?: Array<{ __typename?: 'MultiSigDomainConfig', domainId: string, domainThreshold: number } | null> | null } | null } | null } | null, initiatorToken?: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } | null, recipientUser?: { __typename?: 'User', walletAddress: string, profile?: { __typename?: 'Profile', displayName?: string | null, displayNameChanged?: string | null, avatar?: string | null, thumbnail?: string | null } | null } | null, recipientColony?: { __typename?: 'Colony', name: string, version: number, reputation?: string | null, expendituresGlobalClaimDelay?: string | null, private?: boolean | null, lastUpdatedContributorsWithReputation?: string | null, colonyAddress: string, metadata?: { __typename?: 'ColonyMetadata', avatar?: string | null, displayName: string, thumbnail?: string | null, description?: string | null, externalLinks?: Array<{ __typename?: 'ExternalLink', link: string, name: ExternalLinks }> | null, objective?: { __typename?: 'ColonyObjective', title: string, description: string, progress: number } | null, changelog?: Array<{ __typename?: 'ColonyMetadataChangelog', transactionHash: string, newDisplayName: string, oldDisplayName: string, hasAvatarChanged: boolean, hasDescriptionChanged?: boolean | null, haveExternalLinksChanged?: boolean | null, hasObjectiveChanged?: boolean | null, newSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null, oldSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null }> | null, safes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null } | null, nativeToken: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string }, status?: { __typename?: 'ColonyStatus', recovery?: boolean | null, nativeToken?: { __typename?: 'NativeTokenStatus', mintable?: boolean | null, unlockable?: boolean | null, unlocked?: boolean | null } | null } | null, chainMetadata: { __typename?: 'ChainMetadata', chainId: string, network?: Network | null }, tokens?: { __typename?: 'ModelColonyTokensConnection', items: Array<{ __typename?: 'ColonyTokens', colonyTokensId: string, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } } | null> } | null, motionsWithUnclaimedStakes?: Array<{ __typename?: 'ColonyUnclaimedStake', motionId: string, unclaimedRewards: Array<{ __typename?: 'StakerRewards', address: string, rewards: { __typename?: 'MotionStakeValues', nay: string, yay: string } }> }> | null, domains?: { __typename?: 'ModelDomainConnection', items: Array<{ __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null> } | null, balances?: { __typename?: 'ColonyBalances', items?: Array<{ __typename?: 'ColonyBalance', id: string, balance: string, domain?: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } } | null> | null } | null, fundsClaimData?: { __typename?: 'ModelColonyFundsClaimConnection', items: Array<{ __typename?: 'ColonyFundsClaim', id: string, createdAtBlock: number, createdAt: string, amount: string, isClaimed?: boolean | null, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } } | null> } | null, chainFundsClaim?: { __typename?: 'ColonyChainFundsClaim', id: string, createdAtBlock: number, createdAt: string, amount: string, isClaimed?: boolean | null } | null, roles?: { __typename?: 'ModelColonyRoleConnection', items: Array<{ __typename?: 'ColonyRole', id: string, targetAddress: string, role_0?: boolean | null, role_1?: boolean | null, role_2?: boolean | null, role_3?: boolean | null, role_5?: boolean | null, role_6?: boolean | null, isMultiSig?: boolean | null, domain: { __typename?: 'Domain', id: string, nativeId: number } } | null> } | null, colonyMemberInvite?: { __typename?: 'ColonyMemberInvite', id: string, invitesRemaining: number } | null } | null, recipientExtension?: { __typename?: 'ColonyExtension', hash: string, installedBy: string, installedAt: number, isDeprecated: boolean, isDeleted: boolean, isInitialized: boolean, address: string, colonyAddress: string, currentVersion: number, params?: { __typename?: 'ExtensionParams', votingReputation?: { __typename?: 'VotingReputationParams', maxVoteFraction: string, totalStakeFraction: string, voterRewardFraction: string, userMinStakeFraction: string, stakePeriod: string, submitPeriod: string, revealPeriod: string, escalationPeriod: string } | null, stakedExpenditure?: { __typename?: 'StakedExpenditureParams', stakeFraction: string } | null, multiSig?: { __typename?: 'MultiSigParams', colonyThreshold: number, domainThresholds?: Array<{ __typename?: 'MultiSigDomainConfig', domainId: string, domainThreshold: number } | null> | null } | null } | null } | null, recipientToken?: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } | null, token?: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } | null, fromDomain?: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null, toDomain?: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null, roles?: { __typename?: 'ColonyActionRoles', role_0?: boolean | null, role_1?: boolean | null, role_2?: boolean | null, role_3?: boolean | null, role_5?: boolean | null, role_6?: boolean | null } | null, payments?: Array<{ __typename?: 'Payment', amount: string, tokenAddress: string, recipientAddress: string }> | null, motionData?: { __typename?: 'ColonyMotion', remainingStakes: Array, userMinStake: string, requiredStake: string, nativeMotionDomainId: string, isFinalized: boolean, skillRep: string, repSubmitted: string, hasObjection: boolean, isDecision: boolean, transactionHash: string, createdAt: string, createdBy: string, expenditureSlotIds?: Array | null, databaseMotionId: string, motionId: string, motionStakes: { __typename?: 'MotionStakes', raw: { __typename?: 'MotionStakeValues', yay: string, nay: string }, percentage: { __typename?: 'MotionStakeValues', yay: string, nay: string } }, usersStakes: Array<{ __typename?: 'UserMotionStakes', address: string, stakes: { __typename?: 'MotionStakes', raw: { __typename?: 'MotionStakeValues', yay: string, nay: string }, percentage: { __typename?: 'MotionStakeValues', yay: string, nay: string } } }>, motionDomain: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null }, stakerRewards: Array<{ __typename?: 'StakerRewards', address: string, isClaimed: boolean, rewards: { __typename?: 'MotionStakeValues', yay: string, nay: string } }>, voterRewards?: { __typename?: 'ModelVoterRewardsHistoryConnection', items: Array<{ __typename?: 'VoterRewardsHistory', userAddress: string, amount: string, user: { __typename?: 'User', bridgeCustomerId?: string | null, walletAddress: string, profile?: { __typename?: 'Profile', avatar?: string | null, bio?: string | null, displayName?: string | null, displayNameChanged?: string | null, email?: string | null, location?: string | null, thumbnail?: string | null, website?: string | null, preferredCurrency?: SupportedCurrencies | null, isAutoOfframpEnabled?: boolean | null, meta?: { __typename?: 'ProfileMetadata', metatransactionsEnabled?: boolean | null, decentralizedModeEnabled?: boolean | null, customRpc?: string | null } | null } | null, privateBetaInviteCode?: { __typename?: 'PrivateBetaInviteCode', id: string, shareableInvites?: number | null } | null, notificationsData?: { __typename?: 'NotificationsData', magicbellUserId: string, notificationsDisabled: boolean, mutedColonyAddresses: Array, paymentNotificationsDisabled: boolean, mentionNotificationsDisabled: boolean, adminNotificationsDisabled: boolean } | null } } | null> } | null, voterRecord: Array<{ __typename?: 'VoterRecord', address: string, voteCount: string, vote?: number | null }>, revealedVotes: { __typename?: 'MotionStakes', raw: { __typename?: 'MotionStakeValues', yay: string, nay: string }, percentage: { __typename?: 'MotionStakeValues', yay: string, nay: string } }, motionStateHistory: { __typename?: 'MotionStateHistory', hasVoted: boolean, hasPassed: boolean, hasFailed: boolean, hasFailedNotFinalizable: boolean, inRevealPhase: boolean, yaySideFullyStakedAt?: string | null, naySideFullyStakedAt?: string | null, allVotesSubmittedAt?: string | null, allVotesRevealedAt?: string | null, endedAt?: string | null, finalizedAt?: string | null }, messages?: { __typename?: 'ModelMotionMessageConnection', items: Array<{ __typename?: 'MotionMessage', initiatorAddress: string, name: string, messageKey: string, vote?: string | null, amount?: string | null, createdAt: string, initiatorUser?: { __typename?: 'User', bridgeCustomerId?: string | null, walletAddress: string, profile?: { __typename?: 'Profile', avatar?: string | null, bio?: string | null, displayName?: string | null, displayNameChanged?: string | null, email?: string | null, location?: string | null, thumbnail?: string | null, website?: string | null, preferredCurrency?: SupportedCurrencies | null, isAutoOfframpEnabled?: boolean | null, meta?: { __typename?: 'ProfileMetadata', metatransactionsEnabled?: boolean | null, decentralizedModeEnabled?: boolean | null, customRpc?: string | null } | null } | null, privateBetaInviteCode?: { __typename?: 'PrivateBetaInviteCode', id: string, shareableInvites?: number | null } | null, notificationsData?: { __typename?: 'NotificationsData', magicbellUserId: string, notificationsDisabled: boolean, mutedColonyAddresses: Array, paymentNotificationsDisabled: boolean, mentionNotificationsDisabled: boolean, adminNotificationsDisabled: boolean } | null } | null } | null> } | null, objectionAnnotation?: { __typename?: 'Annotation', createdAt: string, message: string } | null, action?: { __typename?: 'ColonyAction', type: ColonyActionType } | null } | null, colony: { __typename?: 'Colony', name: string, colonyAddress: string, nativeToken: { __typename?: 'Token', name: string, nativeTokenDecimals: number, nativeTokenSymbol: string, tokenAddress: string }, tokens?: { __typename?: 'ModelColonyTokensConnection', items: Array<{ __typename?: 'ColonyTokens', colonyTokensId: string, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } } | null> } | null, metadata?: { __typename?: 'ColonyMetadata', displayName: string, avatar?: string | null, description?: string | null, thumbnail?: string | null, externalLinks?: Array<{ __typename?: 'ExternalLink', name: ExternalLinks, link: string }> | null, objective?: { __typename?: 'ColonyObjective', title: string, description: string, progress: number } | null, changelog?: Array<{ __typename?: 'ColonyMetadataChangelog', transactionHash: string, newDisplayName: string, oldDisplayName: string, hasAvatarChanged: boolean, hasDescriptionChanged?: boolean | null, haveExternalLinksChanged?: boolean | null, hasObjectiveChanged?: boolean | null, newSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null, oldSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null }> | null, safes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null } | null }, pendingDomainMetadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null, pendingColonyMetadata?: { __typename?: 'ColonyMetadata', displayName: string, avatar?: string | null, description?: string | null, thumbnail?: string | null, externalLinks?: Array<{ __typename?: 'ExternalLink', name: ExternalLinks, link: string }> | null, objective?: { __typename?: 'ColonyObjective', title: string, description: string, progress: number } | null, changelog?: Array<{ __typename?: 'ColonyMetadataChangelog', transactionHash: string, newDisplayName: string, oldDisplayName: string, hasAvatarChanged: boolean, hasDescriptionChanged?: boolean | null, haveExternalLinksChanged?: boolean | null, hasObjectiveChanged?: boolean | null, newSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null, oldSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null }> | null, safes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null } | null, annotation?: { __typename?: 'Annotation', createdAt: string, message: string } | null, decisionData?: { __typename?: 'ColonyDecision', title: string, description: string, motionDomainId: number, walletAddress: string, createdAt: string, actionId: string, colonyAddress: string } | null, safeTransaction?: { __typename?: 'SafeTransaction', id: string, safe: { __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }, transactions?: { __typename?: 'ModelSafeTransactionDataConnection', items: Array<{ __typename?: 'SafeTransactionData', transactionType: SafeTransactionType, amount?: string | null, rawAmount?: string | null, data?: string | null, abi?: string | null, contractFunction?: string | null, token?: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } | null, recipient?: { __typename?: 'SimpleTarget', id: string, walletAddress: string, profile: { __typename?: 'SimpleTargetProfile', avatarHash?: string | null, displayName?: string | null } } | null, contract?: { __typename?: 'SimpleTarget', id: string, walletAddress: string, profile: { __typename?: 'SimpleTargetProfile', avatarHash?: string | null, displayName?: string | null } } | null, nft?: { __typename?: 'NFT', id: string, walletAddress: string, profile: { __typename?: 'NFTProfile', displayName: string } } | null, nftData?: { __typename?: 'NFTData', address: string, description?: string | null, id: string, imageUri?: string | null, logoUri: string, name?: string | null, tokenName: string, tokenSymbol: string, uri: string } | null, functionParams?: Array<{ __typename?: 'FunctionParam', name: string, type: string, value: string } | null> | null } | null> } | null } | null, metadata?: { __typename?: 'ColonyActionMetadata', customTitle: string, arbitraryTxAbis?: Array<{ __typename?: 'ArbitraryTxAbi', contractAddress: string, jsonAbi: string }> | null } | null, multiSigData?: { __typename?: 'ColonyMultiSig', id: string, nativeMultiSigId: string, createdAt: string, multiSigDomainId: string, nativeMultiSigDomainId: string, requiredPermissions: number, transactionHash: string, isExecuted: boolean, hasActionCompleted: boolean, isRejected: boolean, isDecision: boolean, executedAt?: string | null, executedBy?: string | null, rejectedAt?: string | null, rejectedBy?: string | null, multiSigDomain: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null }, signatures?: { __typename?: 'ModelMultiSigUserSignatureConnection', items: Array<{ __typename?: 'MultiSigUserSignature', id: string, role: number, userAddress: string, multiSigId: string, vote: MultiSigVote, createdAt: string, updatedAt: string, user: { __typename?: 'User', bridgeCustomerId?: string | null, walletAddress: string, profile?: { __typename?: 'Profile', avatar?: string | null, bio?: string | null, displayName?: string | null, displayNameChanged?: string | null, email?: string | null, location?: string | null, thumbnail?: string | null, website?: string | null, preferredCurrency?: SupportedCurrencies | null, isAutoOfframpEnabled?: boolean | null, meta?: { __typename?: 'ProfileMetadata', metatransactionsEnabled?: boolean | null, decentralizedModeEnabled?: boolean | null, customRpc?: string | null } | null } | null, privateBetaInviteCode?: { __typename?: 'PrivateBetaInviteCode', id: string, shareableInvites?: number | null } | null, notificationsData?: { __typename?: 'NotificationsData', magicbellUserId: string, notificationsDisabled: boolean, mutedColonyAddresses: Array, paymentNotificationsDisabled: boolean, mentionNotificationsDisabled: boolean, adminNotificationsDisabled: boolean } | null } } | null> } | null, executedByUser?: { __typename?: 'User', walletAddress: string, profile?: { __typename?: 'Profile', displayName?: string | null, displayNameChanged?: string | null, avatar?: string | null, thumbnail?: string | null } | null } | null, rejectedByUser?: { __typename?: 'User', walletAddress: string, profile?: { __typename?: 'Profile', displayName?: string | null, displayNameChanged?: string | null, avatar?: string | null, thumbnail?: string | null } | null } | null } | null, approvedTokenChanges?: { __typename?: 'ApprovedTokenChanges', added: Array, removed: Array, unaffected: Array } | null, expenditure?: { __typename?: 'Expenditure', isStaked: boolean, type: ExpenditureType, metadata?: { __typename?: 'ExpenditureMetadata', distributionType?: SplitPaymentDistributionType | null } | null, creatingActions?: { __typename?: 'ModelColonyActionConnection', items: Array<{ __typename?: 'ColonyAction', transactionHash: string } | null> } | null } | null, arbitraryTransactions?: Array<{ __typename?: 'ColonyActionArbitraryTransaction', contractAddress: string, encodedFunction: string }> | null } | null> } | null }; +export type SearchActionsQuery = { __typename?: 'Query', searchColonyActions?: { __typename?: 'SearchableColonyActionConnection', nextToken?: string | null, items: Array<{ __typename?: 'ColonyAction', type: ColonyActionType, blockNumber: number, initiatorAddress: string, recipientAddress?: string | null, amount?: string | null, networkFee?: string | null, tokenAddress?: string | null, createdAt: string, newColonyVersion?: number | null, rolesAreMultiSig?: boolean | null, individualEvents?: string | null, isMotion?: boolean | null, showInActionsList: boolean, members?: Array | null, rootHash: string, expenditureId?: string | null, isMultiSig?: boolean | null, multiSigId?: string | null, targetChainId?: number | null, transactionHash: string, colonyAddress: string, initiatorUser?: { __typename?: 'User', walletAddress: string, profile?: { __typename?: 'Profile', displayName?: string | null, displayNameChanged?: string | null, avatar?: string | null, thumbnail?: string | null } | null } | null, initiatorColony?: { __typename?: 'Colony', name: string, version: number, reputation?: string | null, expendituresGlobalClaimDelay?: string | null, private?: boolean | null, lastUpdatedContributorsWithReputation?: string | null, colonyAddress: string, metadata?: { __typename?: 'ColonyMetadata', avatar?: string | null, displayName: string, thumbnail?: string | null, description?: string | null, externalLinks?: Array<{ __typename?: 'ExternalLink', link: string, name: ExternalLinks }> | null, objective?: { __typename?: 'ColonyObjective', title: string, description: string, progress: number } | null, changelog?: Array<{ __typename?: 'ColonyMetadataChangelog', transactionHash: string, newDisplayName: string, oldDisplayName: string, hasAvatarChanged: boolean, hasDescriptionChanged?: boolean | null, haveExternalLinksChanged?: boolean | null, hasObjectiveChanged?: boolean | null, newSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null, oldSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null }> | null, safes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null } | null, colonyCreateEvent?: { __typename?: 'ColonyCreateEvent', blockNumber: number, creationSalt: string } | null, nativeToken: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } }, status?: { __typename?: 'ColonyStatus', recovery?: boolean | null, nativeToken?: { __typename?: 'NativeTokenStatus', mintable?: boolean | null, unlockable?: boolean | null, unlocked?: boolean | null } | null } | null, chainMetadata: { __typename?: 'ChainMetadata', chainId: string, network?: Network | null }, tokens?: { __typename?: 'ModelColonyTokensConnection', items: Array<{ __typename?: 'ColonyTokens', colonyTokensId: string, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } } | null> } | null, motionsWithUnclaimedStakes?: Array<{ __typename?: 'ColonyUnclaimedStake', motionId: string, unclaimedRewards: Array<{ __typename?: 'StakerRewards', address: string, rewards: { __typename?: 'MotionStakeValues', nay: string, yay: string } }> }> | null, domains?: { __typename?: 'ModelDomainConnection', items: Array<{ __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null> } | null, balances?: { __typename?: 'ColonyBalances', items?: Array<{ __typename?: 'ColonyBalance', id: string, balance: string, domain?: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } } | null> | null } | null, fundsClaimData?: { __typename?: 'ModelColonyFundsClaimConnection', items: Array<{ __typename?: 'ColonyFundsClaim', id: string, createdAtBlock: number, createdAt: string, amount: string, isClaimed?: boolean | null, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } } | null> } | null, chainFundsClaim?: Array<{ __typename?: 'ColonyChainFundsClaim', id: string, createdAtBlock: number, createdAt: string, amount: string, isClaimed?: boolean | null } | null> | null, roles?: { __typename?: 'ModelColonyRoleConnection', items: Array<{ __typename?: 'ColonyRole', id: string, targetAddress: string, role_0?: boolean | null, role_1?: boolean | null, role_2?: boolean | null, role_3?: boolean | null, role_5?: boolean | null, role_6?: boolean | null, isMultiSig?: boolean | null, domain: { __typename?: 'Domain', id: string, nativeId: number } } | null> } | null, colonyMemberInvite?: { __typename?: 'ColonyMemberInvite', id: string, invitesRemaining: number } | null, proxyColonies?: { __typename?: 'ModelProxyColonyConnection', items: Array<{ __typename?: 'ProxyColony', chainId: string, isActive: boolean } | null> } | null } | null, initiatorExtension?: { __typename?: 'ColonyExtension', hash: string, installedBy: string, installedAt: number, isDeprecated: boolean, isDeleted: boolean, isInitialized: boolean, address: string, colonyAddress: string, currentVersion: number, params?: { __typename?: 'ExtensionParams', votingReputation?: { __typename?: 'VotingReputationParams', maxVoteFraction: string, totalStakeFraction: string, voterRewardFraction: string, userMinStakeFraction: string, stakePeriod: string, submitPeriod: string, revealPeriod: string, escalationPeriod: string } | null, stakedExpenditure?: { __typename?: 'StakedExpenditureParams', stakeFraction: string } | null, multiSig?: { __typename?: 'MultiSigParams', colonyThreshold: number, domainThresholds?: Array<{ __typename?: 'MultiSigDomainConfig', domainId: string, domainThreshold: number } | null> | null } | null } | null } | null, initiatorToken?: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } | null, recipientUser?: { __typename?: 'User', walletAddress: string, profile?: { __typename?: 'Profile', displayName?: string | null, displayNameChanged?: string | null, avatar?: string | null, thumbnail?: string | null } | null } | null, recipientColony?: { __typename?: 'Colony', name: string, version: number, reputation?: string | null, expendituresGlobalClaimDelay?: string | null, private?: boolean | null, lastUpdatedContributorsWithReputation?: string | null, colonyAddress: string, metadata?: { __typename?: 'ColonyMetadata', avatar?: string | null, displayName: string, thumbnail?: string | null, description?: string | null, externalLinks?: Array<{ __typename?: 'ExternalLink', link: string, name: ExternalLinks }> | null, objective?: { __typename?: 'ColonyObjective', title: string, description: string, progress: number } | null, changelog?: Array<{ __typename?: 'ColonyMetadataChangelog', transactionHash: string, newDisplayName: string, oldDisplayName: string, hasAvatarChanged: boolean, hasDescriptionChanged?: boolean | null, haveExternalLinksChanged?: boolean | null, hasObjectiveChanged?: boolean | null, newSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null, oldSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null }> | null, safes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null } | null, colonyCreateEvent?: { __typename?: 'ColonyCreateEvent', blockNumber: number, creationSalt: string } | null, nativeToken: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } }, status?: { __typename?: 'ColonyStatus', recovery?: boolean | null, nativeToken?: { __typename?: 'NativeTokenStatus', mintable?: boolean | null, unlockable?: boolean | null, unlocked?: boolean | null } | null } | null, chainMetadata: { __typename?: 'ChainMetadata', chainId: string, network?: Network | null }, tokens?: { __typename?: 'ModelColonyTokensConnection', items: Array<{ __typename?: 'ColonyTokens', colonyTokensId: string, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } } | null> } | null, motionsWithUnclaimedStakes?: Array<{ __typename?: 'ColonyUnclaimedStake', motionId: string, unclaimedRewards: Array<{ __typename?: 'StakerRewards', address: string, rewards: { __typename?: 'MotionStakeValues', nay: string, yay: string } }> }> | null, domains?: { __typename?: 'ModelDomainConnection', items: Array<{ __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null> } | null, balances?: { __typename?: 'ColonyBalances', items?: Array<{ __typename?: 'ColonyBalance', id: string, balance: string, domain?: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } } | null> | null } | null, fundsClaimData?: { __typename?: 'ModelColonyFundsClaimConnection', items: Array<{ __typename?: 'ColonyFundsClaim', id: string, createdAtBlock: number, createdAt: string, amount: string, isClaimed?: boolean | null, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } } | null> } | null, chainFundsClaim?: Array<{ __typename?: 'ColonyChainFundsClaim', id: string, createdAtBlock: number, createdAt: string, amount: string, isClaimed?: boolean | null } | null> | null, roles?: { __typename?: 'ModelColonyRoleConnection', items: Array<{ __typename?: 'ColonyRole', id: string, targetAddress: string, role_0?: boolean | null, role_1?: boolean | null, role_2?: boolean | null, role_3?: boolean | null, role_5?: boolean | null, role_6?: boolean | null, isMultiSig?: boolean | null, domain: { __typename?: 'Domain', id: string, nativeId: number } } | null> } | null, colonyMemberInvite?: { __typename?: 'ColonyMemberInvite', id: string, invitesRemaining: number } | null, proxyColonies?: { __typename?: 'ModelProxyColonyConnection', items: Array<{ __typename?: 'ProxyColony', chainId: string, isActive: boolean } | null> } | null } | null, recipientExtension?: { __typename?: 'ColonyExtension', hash: string, installedBy: string, installedAt: number, isDeprecated: boolean, isDeleted: boolean, isInitialized: boolean, address: string, colonyAddress: string, currentVersion: number, params?: { __typename?: 'ExtensionParams', votingReputation?: { __typename?: 'VotingReputationParams', maxVoteFraction: string, totalStakeFraction: string, voterRewardFraction: string, userMinStakeFraction: string, stakePeriod: string, submitPeriod: string, revealPeriod: string, escalationPeriod: string } | null, stakedExpenditure?: { __typename?: 'StakedExpenditureParams', stakeFraction: string } | null, multiSig?: { __typename?: 'MultiSigParams', colonyThreshold: number, domainThresholds?: Array<{ __typename?: 'MultiSigDomainConfig', domainId: string, domainThreshold: number } | null> | null } | null } | null } | null, recipientToken?: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } | null, token?: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } | null, fromDomain?: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null, toDomain?: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null, roles?: { __typename?: 'ColonyActionRoles', role_0?: boolean | null, role_1?: boolean | null, role_2?: boolean | null, role_3?: boolean | null, role_5?: boolean | null, role_6?: boolean | null } | null, payments?: Array<{ __typename?: 'Payment', amount: string, tokenAddress: string, recipientAddress: string }> | null, motionData?: { __typename?: 'ColonyMotion', remainingStakes: Array, userMinStake: string, requiredStake: string, nativeMotionDomainId: string, isFinalized: boolean, skillRep: string, repSubmitted: string, hasObjection: boolean, isDecision: boolean, transactionHash: string, createdAt: string, createdBy: string, expenditureSlotIds?: Array | null, databaseMotionId: string, motionId: string, motionStakes: { __typename?: 'MotionStakes', raw: { __typename?: 'MotionStakeValues', yay: string, nay: string }, percentage: { __typename?: 'MotionStakeValues', yay: string, nay: string } }, usersStakes: Array<{ __typename?: 'UserMotionStakes', address: string, stakes: { __typename?: 'MotionStakes', raw: { __typename?: 'MotionStakeValues', yay: string, nay: string }, percentage: { __typename?: 'MotionStakeValues', yay: string, nay: string } } }>, motionDomain: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null }, stakerRewards: Array<{ __typename?: 'StakerRewards', address: string, isClaimed: boolean, rewards: { __typename?: 'MotionStakeValues', yay: string, nay: string } }>, voterRewards?: { __typename?: 'ModelVoterRewardsHistoryConnection', items: Array<{ __typename?: 'VoterRewardsHistory', userAddress: string, amount: string, user: { __typename?: 'User', bridgeCustomerId?: string | null, walletAddress: string, profile?: { __typename?: 'Profile', avatar?: string | null, bio?: string | null, displayName?: string | null, displayNameChanged?: string | null, email?: string | null, location?: string | null, thumbnail?: string | null, website?: string | null, preferredCurrency?: SupportedCurrencies | null, isAutoOfframpEnabled?: boolean | null, meta?: { __typename?: 'ProfileMetadata', metatransactionsEnabled?: boolean | null, decentralizedModeEnabled?: boolean | null, customRpc?: string | null } | null } | null, privateBetaInviteCode?: { __typename?: 'PrivateBetaInviteCode', id: string, shareableInvites?: number | null } | null, notificationsData?: { __typename?: 'NotificationsData', magicbellUserId: string, notificationsDisabled: boolean, mutedColonyAddresses: Array, paymentNotificationsDisabled: boolean, mentionNotificationsDisabled: boolean, adminNotificationsDisabled: boolean } | null } } | null> } | null, voterRecord: Array<{ __typename?: 'VoterRecord', address: string, voteCount: string, vote?: number | null }>, revealedVotes: { __typename?: 'MotionStakes', raw: { __typename?: 'MotionStakeValues', yay: string, nay: string }, percentage: { __typename?: 'MotionStakeValues', yay: string, nay: string } }, motionStateHistory: { __typename?: 'MotionStateHistory', hasVoted: boolean, hasPassed: boolean, hasFailed: boolean, hasFailedNotFinalizable: boolean, inRevealPhase: boolean, yaySideFullyStakedAt?: string | null, naySideFullyStakedAt?: string | null, allVotesSubmittedAt?: string | null, allVotesRevealedAt?: string | null, endedAt?: string | null, finalizedAt?: string | null }, messages?: { __typename?: 'ModelMotionMessageConnection', items: Array<{ __typename?: 'MotionMessage', initiatorAddress: string, name: string, messageKey: string, vote?: string | null, amount?: string | null, createdAt: string, initiatorUser?: { __typename?: 'User', bridgeCustomerId?: string | null, walletAddress: string, profile?: { __typename?: 'Profile', avatar?: string | null, bio?: string | null, displayName?: string | null, displayNameChanged?: string | null, email?: string | null, location?: string | null, thumbnail?: string | null, website?: string | null, preferredCurrency?: SupportedCurrencies | null, isAutoOfframpEnabled?: boolean | null, meta?: { __typename?: 'ProfileMetadata', metatransactionsEnabled?: boolean | null, decentralizedModeEnabled?: boolean | null, customRpc?: string | null } | null } | null, privateBetaInviteCode?: { __typename?: 'PrivateBetaInviteCode', id: string, shareableInvites?: number | null } | null, notificationsData?: { __typename?: 'NotificationsData', magicbellUserId: string, notificationsDisabled: boolean, mutedColonyAddresses: Array, paymentNotificationsDisabled: boolean, mentionNotificationsDisabled: boolean, adminNotificationsDisabled: boolean } | null } | null } | null> } | null, objectionAnnotation?: { __typename?: 'Annotation', createdAt: string, message: string } | null, action?: { __typename?: 'ColonyAction', type: ColonyActionType } | null } | null, colony: { __typename?: 'Colony', name: string, colonyAddress: string, nativeToken: { __typename?: 'Token', name: string, nativeTokenDecimals: number, nativeTokenSymbol: string, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } }, tokens?: { __typename?: 'ModelColonyTokensConnection', items: Array<{ __typename?: 'ColonyTokens', colonyTokensId: string, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } } | null> } | null, metadata?: { __typename?: 'ColonyMetadata', displayName: string, avatar?: string | null, description?: string | null, thumbnail?: string | null, externalLinks?: Array<{ __typename?: 'ExternalLink', name: ExternalLinks, link: string }> | null, objective?: { __typename?: 'ColonyObjective', title: string, description: string, progress: number } | null, changelog?: Array<{ __typename?: 'ColonyMetadataChangelog', transactionHash: string, newDisplayName: string, oldDisplayName: string, hasAvatarChanged: boolean, hasDescriptionChanged?: boolean | null, haveExternalLinksChanged?: boolean | null, hasObjectiveChanged?: boolean | null, newSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null, oldSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null }> | null, safes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null } | null }, pendingDomainMetadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null, pendingColonyMetadata?: { __typename?: 'ColonyMetadata', displayName: string, avatar?: string | null, description?: string | null, thumbnail?: string | null, externalLinks?: Array<{ __typename?: 'ExternalLink', name: ExternalLinks, link: string }> | null, objective?: { __typename?: 'ColonyObjective', title: string, description: string, progress: number } | null, changelog?: Array<{ __typename?: 'ColonyMetadataChangelog', transactionHash: string, newDisplayName: string, oldDisplayName: string, hasAvatarChanged: boolean, hasDescriptionChanged?: boolean | null, haveExternalLinksChanged?: boolean | null, hasObjectiveChanged?: boolean | null, newSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null, oldSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null }> | null, safes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null } | null, annotation?: { __typename?: 'Annotation', createdAt: string, message: string } | null, decisionData?: { __typename?: 'ColonyDecision', title: string, description: string, motionDomainId: number, walletAddress: string, createdAt: string, actionId: string, colonyAddress: string } | null, safeTransaction?: { __typename?: 'SafeTransaction', id: string, safe: { __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }, transactions?: { __typename?: 'ModelSafeTransactionDataConnection', items: Array<{ __typename?: 'SafeTransactionData', transactionType: SafeTransactionType, amount?: string | null, rawAmount?: string | null, data?: string | null, abi?: string | null, contractFunction?: string | null, token?: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } | null, recipient?: { __typename?: 'SimpleTarget', id: string, walletAddress: string, profile: { __typename?: 'SimpleTargetProfile', avatarHash?: string | null, displayName?: string | null } } | null, contract?: { __typename?: 'SimpleTarget', id: string, walletAddress: string, profile: { __typename?: 'SimpleTargetProfile', avatarHash?: string | null, displayName?: string | null } } | null, nft?: { __typename?: 'NFT', id: string, walletAddress: string, profile: { __typename?: 'NFTProfile', displayName: string } } | null, nftData?: { __typename?: 'NFTData', address: string, description?: string | null, id: string, imageUri?: string | null, logoUri: string, name?: string | null, tokenName: string, tokenSymbol: string, uri: string } | null, functionParams?: Array<{ __typename?: 'FunctionParam', name: string, type: string, value: string } | null> | null } | null> } | null } | null, metadata?: { __typename?: 'ColonyActionMetadata', customTitle: string, arbitraryTxAbis?: Array<{ __typename?: 'ArbitraryTxAbi', contractAddress: string, jsonAbi: string }> | null } | null, multiSigData?: { __typename?: 'ColonyMultiSig', id: string, nativeMultiSigId: string, createdAt: string, multiSigDomainId: string, nativeMultiSigDomainId: string, requiredPermissions: number, transactionHash: string, isExecuted: boolean, hasActionCompleted: boolean, isRejected: boolean, isDecision: boolean, executedAt?: string | null, executedBy?: string | null, rejectedAt?: string | null, rejectedBy?: string | null, multiSigDomain: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null }, signatures?: { __typename?: 'ModelMultiSigUserSignatureConnection', items: Array<{ __typename?: 'MultiSigUserSignature', id: string, role: number, userAddress: string, multiSigId: string, vote: MultiSigVote, createdAt: string, updatedAt: string, user: { __typename?: 'User', bridgeCustomerId?: string | null, walletAddress: string, profile?: { __typename?: 'Profile', avatar?: string | null, bio?: string | null, displayName?: string | null, displayNameChanged?: string | null, email?: string | null, location?: string | null, thumbnail?: string | null, website?: string | null, preferredCurrency?: SupportedCurrencies | null, isAutoOfframpEnabled?: boolean | null, meta?: { __typename?: 'ProfileMetadata', metatransactionsEnabled?: boolean | null, decentralizedModeEnabled?: boolean | null, customRpc?: string | null } | null } | null, privateBetaInviteCode?: { __typename?: 'PrivateBetaInviteCode', id: string, shareableInvites?: number | null } | null, notificationsData?: { __typename?: 'NotificationsData', magicbellUserId: string, notificationsDisabled: boolean, mutedColonyAddresses: Array, paymentNotificationsDisabled: boolean, mentionNotificationsDisabled: boolean, adminNotificationsDisabled: boolean } | null } } | null> } | null, executedByUser?: { __typename?: 'User', walletAddress: string, profile?: { __typename?: 'Profile', displayName?: string | null, displayNameChanged?: string | null, avatar?: string | null, thumbnail?: string | null } | null } | null, rejectedByUser?: { __typename?: 'User', walletAddress: string, profile?: { __typename?: 'Profile', displayName?: string | null, displayNameChanged?: string | null, avatar?: string | null, thumbnail?: string | null } | null } | null } | null, approvedTokenChanges?: { __typename?: 'ApprovedTokenChanges', added: Array, removed: Array, unaffected: Array } | null, expenditure?: { __typename?: 'Expenditure', isStaked: boolean, type: ExpenditureType, metadata?: { __typename?: 'ExpenditureMetadata', distributionType?: SplitPaymentDistributionType | null } | null, creatingActions?: { __typename?: 'ModelColonyActionConnection', items: Array<{ __typename?: 'ColonyAction', transactionHash: string } | null> } | null } | null, arbitraryTransactions?: Array<{ __typename?: 'ColonyActionArbitraryTransaction', contractAddress: string, encodedFunction: string }> | null } | null> } | null }; export type OnCreateColonyActionMetadataSubscriptionVariables = Exact<{ [key: string]: never; }>; @@ -10699,14 +11209,14 @@ export type GetFullColonyByAddressQueryVariables = Exact<{ }>; -export type GetFullColonyByAddressQuery = { __typename?: 'Query', getColonyByAddress?: { __typename?: 'ModelColonyConnection', items: Array<{ __typename?: 'Colony', name: string, version: number, reputation?: string | null, expendituresGlobalClaimDelay?: string | null, private?: boolean | null, lastUpdatedContributorsWithReputation?: string | null, colonyAddress: string, nativeToken: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string }, status?: { __typename?: 'ColonyStatus', recovery?: boolean | null, nativeToken?: { __typename?: 'NativeTokenStatus', mintable?: boolean | null, unlockable?: boolean | null, unlocked?: boolean | null } | null } | null, chainMetadata: { __typename?: 'ChainMetadata', chainId: string, network?: Network | null }, tokens?: { __typename?: 'ModelColonyTokensConnection', items: Array<{ __typename?: 'ColonyTokens', colonyTokensId: string, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } } | null> } | null, motionsWithUnclaimedStakes?: Array<{ __typename?: 'ColonyUnclaimedStake', motionId: string, unclaimedRewards: Array<{ __typename?: 'StakerRewards', address: string, rewards: { __typename?: 'MotionStakeValues', nay: string, yay: string } }> }> | null, domains?: { __typename?: 'ModelDomainConnection', items: Array<{ __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null> } | null, balances?: { __typename?: 'ColonyBalances', items?: Array<{ __typename?: 'ColonyBalance', id: string, balance: string, domain?: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } } | null> | null } | null, fundsClaimData?: { __typename?: 'ModelColonyFundsClaimConnection', items: Array<{ __typename?: 'ColonyFundsClaim', id: string, createdAtBlock: number, createdAt: string, amount: string, isClaimed?: boolean | null, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } } | null> } | null, chainFundsClaim?: { __typename?: 'ColonyChainFundsClaim', id: string, createdAtBlock: number, createdAt: string, amount: string, isClaimed?: boolean | null } | null, metadata?: { __typename?: 'ColonyMetadata', displayName: string, avatar?: string | null, description?: string | null, thumbnail?: string | null, externalLinks?: Array<{ __typename?: 'ExternalLink', name: ExternalLinks, link: string }> | null, objective?: { __typename?: 'ColonyObjective', title: string, description: string, progress: number } | null, changelog?: Array<{ __typename?: 'ColonyMetadataChangelog', transactionHash: string, newDisplayName: string, oldDisplayName: string, hasAvatarChanged: boolean, hasDescriptionChanged?: boolean | null, haveExternalLinksChanged?: boolean | null, hasObjectiveChanged?: boolean | null, newSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null, oldSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null }> | null, safes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null } | null, roles?: { __typename?: 'ModelColonyRoleConnection', items: Array<{ __typename?: 'ColonyRole', id: string, targetAddress: string, role_0?: boolean | null, role_1?: boolean | null, role_2?: boolean | null, role_3?: boolean | null, role_5?: boolean | null, role_6?: boolean | null, isMultiSig?: boolean | null, domain: { __typename?: 'Domain', id: string, nativeId: number } } | null> } | null, colonyMemberInvite?: { __typename?: 'ColonyMemberInvite', id: string, invitesRemaining: number } | null } | null> } | null }; +export type GetFullColonyByAddressQuery = { __typename?: 'Query', getColonyByAddress?: { __typename?: 'ModelColonyConnection', items: Array<{ __typename?: 'Colony', name: string, version: number, reputation?: string | null, expendituresGlobalClaimDelay?: string | null, private?: boolean | null, lastUpdatedContributorsWithReputation?: string | null, colonyAddress: string, colonyCreateEvent?: { __typename?: 'ColonyCreateEvent', blockNumber: number, creationSalt: string } | null, nativeToken: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } }, status?: { __typename?: 'ColonyStatus', recovery?: boolean | null, nativeToken?: { __typename?: 'NativeTokenStatus', mintable?: boolean | null, unlockable?: boolean | null, unlocked?: boolean | null } | null } | null, chainMetadata: { __typename?: 'ChainMetadata', chainId: string, network?: Network | null }, tokens?: { __typename?: 'ModelColonyTokensConnection', items: Array<{ __typename?: 'ColonyTokens', colonyTokensId: string, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } } | null> } | null, motionsWithUnclaimedStakes?: Array<{ __typename?: 'ColonyUnclaimedStake', motionId: string, unclaimedRewards: Array<{ __typename?: 'StakerRewards', address: string, rewards: { __typename?: 'MotionStakeValues', nay: string, yay: string } }> }> | null, domains?: { __typename?: 'ModelDomainConnection', items: Array<{ __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null> } | null, balances?: { __typename?: 'ColonyBalances', items?: Array<{ __typename?: 'ColonyBalance', id: string, balance: string, domain?: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } } | null> | null } | null, fundsClaimData?: { __typename?: 'ModelColonyFundsClaimConnection', items: Array<{ __typename?: 'ColonyFundsClaim', id: string, createdAtBlock: number, createdAt: string, amount: string, isClaimed?: boolean | null, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } } | null> } | null, chainFundsClaim?: Array<{ __typename?: 'ColonyChainFundsClaim', id: string, createdAtBlock: number, createdAt: string, amount: string, isClaimed?: boolean | null } | null> | null, metadata?: { __typename?: 'ColonyMetadata', displayName: string, avatar?: string | null, description?: string | null, thumbnail?: string | null, externalLinks?: Array<{ __typename?: 'ExternalLink', name: ExternalLinks, link: string }> | null, objective?: { __typename?: 'ColonyObjective', title: string, description: string, progress: number } | null, changelog?: Array<{ __typename?: 'ColonyMetadataChangelog', transactionHash: string, newDisplayName: string, oldDisplayName: string, hasAvatarChanged: boolean, hasDescriptionChanged?: boolean | null, haveExternalLinksChanged?: boolean | null, hasObjectiveChanged?: boolean | null, newSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null, oldSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null }> | null, safes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null } | null, roles?: { __typename?: 'ModelColonyRoleConnection', items: Array<{ __typename?: 'ColonyRole', id: string, targetAddress: string, role_0?: boolean | null, role_1?: boolean | null, role_2?: boolean | null, role_3?: boolean | null, role_5?: boolean | null, role_6?: boolean | null, isMultiSig?: boolean | null, domain: { __typename?: 'Domain', id: string, nativeId: number } } | null> } | null, colonyMemberInvite?: { __typename?: 'ColonyMemberInvite', id: string, invitesRemaining: number } | null, proxyColonies?: { __typename?: 'ModelProxyColonyConnection', items: Array<{ __typename?: 'ProxyColony', chainId: string, isActive: boolean } | null> } | null } | null> } | null }; export type GetFullColonyByNameQueryVariables = Exact<{ name: Scalars['String']; }>; -export type GetFullColonyByNameQuery = { __typename?: 'Query', getColonyByName?: { __typename?: 'ModelColonyConnection', items: Array<{ __typename?: 'Colony', name: string, version: number, reputation?: string | null, expendituresGlobalClaimDelay?: string | null, private?: boolean | null, lastUpdatedContributorsWithReputation?: string | null, colonyAddress: string, nativeToken: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string }, status?: { __typename?: 'ColonyStatus', recovery?: boolean | null, nativeToken?: { __typename?: 'NativeTokenStatus', mintable?: boolean | null, unlockable?: boolean | null, unlocked?: boolean | null } | null } | null, chainMetadata: { __typename?: 'ChainMetadata', chainId: string, network?: Network | null }, tokens?: { __typename?: 'ModelColonyTokensConnection', items: Array<{ __typename?: 'ColonyTokens', colonyTokensId: string, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } } | null> } | null, motionsWithUnclaimedStakes?: Array<{ __typename?: 'ColonyUnclaimedStake', motionId: string, unclaimedRewards: Array<{ __typename?: 'StakerRewards', address: string, rewards: { __typename?: 'MotionStakeValues', nay: string, yay: string } }> }> | null, domains?: { __typename?: 'ModelDomainConnection', items: Array<{ __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null> } | null, balances?: { __typename?: 'ColonyBalances', items?: Array<{ __typename?: 'ColonyBalance', id: string, balance: string, domain?: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } } | null> | null } | null, fundsClaimData?: { __typename?: 'ModelColonyFundsClaimConnection', items: Array<{ __typename?: 'ColonyFundsClaim', id: string, createdAtBlock: number, createdAt: string, amount: string, isClaimed?: boolean | null, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } } | null> } | null, chainFundsClaim?: { __typename?: 'ColonyChainFundsClaim', id: string, createdAtBlock: number, createdAt: string, amount: string, isClaimed?: boolean | null } | null, metadata?: { __typename?: 'ColonyMetadata', displayName: string, avatar?: string | null, description?: string | null, thumbnail?: string | null, externalLinks?: Array<{ __typename?: 'ExternalLink', name: ExternalLinks, link: string }> | null, objective?: { __typename?: 'ColonyObjective', title: string, description: string, progress: number } | null, changelog?: Array<{ __typename?: 'ColonyMetadataChangelog', transactionHash: string, newDisplayName: string, oldDisplayName: string, hasAvatarChanged: boolean, hasDescriptionChanged?: boolean | null, haveExternalLinksChanged?: boolean | null, hasObjectiveChanged?: boolean | null, newSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null, oldSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null }> | null, safes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null } | null, roles?: { __typename?: 'ModelColonyRoleConnection', items: Array<{ __typename?: 'ColonyRole', id: string, targetAddress: string, role_0?: boolean | null, role_1?: boolean | null, role_2?: boolean | null, role_3?: boolean | null, role_5?: boolean | null, role_6?: boolean | null, isMultiSig?: boolean | null, domain: { __typename?: 'Domain', id: string, nativeId: number } } | null> } | null, colonyMemberInvite?: { __typename?: 'ColonyMemberInvite', id: string, invitesRemaining: number } | null } | null> } | null }; +export type GetFullColonyByNameQuery = { __typename?: 'Query', getColonyByName?: { __typename?: 'ModelColonyConnection', items: Array<{ __typename?: 'Colony', name: string, version: number, reputation?: string | null, expendituresGlobalClaimDelay?: string | null, private?: boolean | null, lastUpdatedContributorsWithReputation?: string | null, colonyAddress: string, colonyCreateEvent?: { __typename?: 'ColonyCreateEvent', blockNumber: number, creationSalt: string } | null, nativeToken: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } }, status?: { __typename?: 'ColonyStatus', recovery?: boolean | null, nativeToken?: { __typename?: 'NativeTokenStatus', mintable?: boolean | null, unlockable?: boolean | null, unlocked?: boolean | null } | null } | null, chainMetadata: { __typename?: 'ChainMetadata', chainId: string, network?: Network | null }, tokens?: { __typename?: 'ModelColonyTokensConnection', items: Array<{ __typename?: 'ColonyTokens', colonyTokensId: string, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } } | null> } | null, motionsWithUnclaimedStakes?: Array<{ __typename?: 'ColonyUnclaimedStake', motionId: string, unclaimedRewards: Array<{ __typename?: 'StakerRewards', address: string, rewards: { __typename?: 'MotionStakeValues', nay: string, yay: string } }> }> | null, domains?: { __typename?: 'ModelDomainConnection', items: Array<{ __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null> } | null, balances?: { __typename?: 'ColonyBalances', items?: Array<{ __typename?: 'ColonyBalance', id: string, balance: string, domain?: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } } | null> | null } | null, fundsClaimData?: { __typename?: 'ModelColonyFundsClaimConnection', items: Array<{ __typename?: 'ColonyFundsClaim', id: string, createdAtBlock: number, createdAt: string, amount: string, isClaimed?: boolean | null, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } } | null> } | null, chainFundsClaim?: Array<{ __typename?: 'ColonyChainFundsClaim', id: string, createdAtBlock: number, createdAt: string, amount: string, isClaimed?: boolean | null } | null> | null, metadata?: { __typename?: 'ColonyMetadata', displayName: string, avatar?: string | null, description?: string | null, thumbnail?: string | null, externalLinks?: Array<{ __typename?: 'ExternalLink', name: ExternalLinks, link: string }> | null, objective?: { __typename?: 'ColonyObjective', title: string, description: string, progress: number } | null, changelog?: Array<{ __typename?: 'ColonyMetadataChangelog', transactionHash: string, newDisplayName: string, oldDisplayName: string, hasAvatarChanged: boolean, hasDescriptionChanged?: boolean | null, haveExternalLinksChanged?: boolean | null, hasObjectiveChanged?: boolean | null, newSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null, oldSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null }> | null, safes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null } | null, roles?: { __typename?: 'ModelColonyRoleConnection', items: Array<{ __typename?: 'ColonyRole', id: string, targetAddress: string, role_0?: boolean | null, role_1?: boolean | null, role_2?: boolean | null, role_3?: boolean | null, role_5?: boolean | null, role_6?: boolean | null, isMultiSig?: boolean | null, domain: { __typename?: 'Domain', id: string, nativeId: number } } | null> } | null, colonyMemberInvite?: { __typename?: 'ColonyMemberInvite', id: string, invitesRemaining: number } | null, proxyColonies?: { __typename?: 'ModelProxyColonyConnection', items: Array<{ __typename?: 'ProxyColony', chainId: string, isActive: boolean } | null> } | null } | null> } | null }; export type GetDisplayNameByColonyNameQueryVariables = Exact<{ name: Scalars['String']; @@ -10718,7 +11228,7 @@ export type GetDisplayNameByColonyNameQuery = { __typename?: 'Query', getColonyB export type GetMetacolonyQueryVariables = Exact<{ [key: string]: never; }>; -export type GetMetacolonyQuery = { __typename?: 'Query', getColonyByType?: { __typename?: 'ModelColonyConnection', items: Array<{ __typename?: 'Colony', name: string, version: number, reputation?: string | null, expendituresGlobalClaimDelay?: string | null, private?: boolean | null, lastUpdatedContributorsWithReputation?: string | null, colonyAddress: string, nativeToken: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string }, status?: { __typename?: 'ColonyStatus', recovery?: boolean | null, nativeToken?: { __typename?: 'NativeTokenStatus', mintable?: boolean | null, unlockable?: boolean | null, unlocked?: boolean | null } | null } | null, chainMetadata: { __typename?: 'ChainMetadata', chainId: string, network?: Network | null }, tokens?: { __typename?: 'ModelColonyTokensConnection', items: Array<{ __typename?: 'ColonyTokens', colonyTokensId: string, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } } | null> } | null, motionsWithUnclaimedStakes?: Array<{ __typename?: 'ColonyUnclaimedStake', motionId: string, unclaimedRewards: Array<{ __typename?: 'StakerRewards', address: string, rewards: { __typename?: 'MotionStakeValues', nay: string, yay: string } }> }> | null, domains?: { __typename?: 'ModelDomainConnection', items: Array<{ __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null> } | null, balances?: { __typename?: 'ColonyBalances', items?: Array<{ __typename?: 'ColonyBalance', id: string, balance: string, domain?: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } } | null> | null } | null, fundsClaimData?: { __typename?: 'ModelColonyFundsClaimConnection', items: Array<{ __typename?: 'ColonyFundsClaim', id: string, createdAtBlock: number, createdAt: string, amount: string, isClaimed?: boolean | null, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } } | null> } | null, chainFundsClaim?: { __typename?: 'ColonyChainFundsClaim', id: string, createdAtBlock: number, createdAt: string, amount: string, isClaimed?: boolean | null } | null, metadata?: { __typename?: 'ColonyMetadata', displayName: string, avatar?: string | null, description?: string | null, thumbnail?: string | null, externalLinks?: Array<{ __typename?: 'ExternalLink', name: ExternalLinks, link: string }> | null, objective?: { __typename?: 'ColonyObjective', title: string, description: string, progress: number } | null, changelog?: Array<{ __typename?: 'ColonyMetadataChangelog', transactionHash: string, newDisplayName: string, oldDisplayName: string, hasAvatarChanged: boolean, hasDescriptionChanged?: boolean | null, haveExternalLinksChanged?: boolean | null, hasObjectiveChanged?: boolean | null, newSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null, oldSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null }> | null, safes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null } | null, roles?: { __typename?: 'ModelColonyRoleConnection', items: Array<{ __typename?: 'ColonyRole', id: string, targetAddress: string, role_0?: boolean | null, role_1?: boolean | null, role_2?: boolean | null, role_3?: boolean | null, role_5?: boolean | null, role_6?: boolean | null, isMultiSig?: boolean | null, domain: { __typename?: 'Domain', id: string, nativeId: number } } | null> } | null, colonyMemberInvite?: { __typename?: 'ColonyMemberInvite', id: string, invitesRemaining: number } | null } | null> } | null }; +export type GetMetacolonyQuery = { __typename?: 'Query', getColonyByType?: { __typename?: 'ModelColonyConnection', items: Array<{ __typename?: 'Colony', name: string, version: number, reputation?: string | null, expendituresGlobalClaimDelay?: string | null, private?: boolean | null, lastUpdatedContributorsWithReputation?: string | null, colonyAddress: string, colonyCreateEvent?: { __typename?: 'ColonyCreateEvent', blockNumber: number, creationSalt: string } | null, nativeToken: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } }, status?: { __typename?: 'ColonyStatus', recovery?: boolean | null, nativeToken?: { __typename?: 'NativeTokenStatus', mintable?: boolean | null, unlockable?: boolean | null, unlocked?: boolean | null } | null } | null, chainMetadata: { __typename?: 'ChainMetadata', chainId: string, network?: Network | null }, tokens?: { __typename?: 'ModelColonyTokensConnection', items: Array<{ __typename?: 'ColonyTokens', colonyTokensId: string, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } } | null> } | null, motionsWithUnclaimedStakes?: Array<{ __typename?: 'ColonyUnclaimedStake', motionId: string, unclaimedRewards: Array<{ __typename?: 'StakerRewards', address: string, rewards: { __typename?: 'MotionStakeValues', nay: string, yay: string } }> }> | null, domains?: { __typename?: 'ModelDomainConnection', items: Array<{ __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null> } | null, balances?: { __typename?: 'ColonyBalances', items?: Array<{ __typename?: 'ColonyBalance', id: string, balance: string, domain?: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } } | null> | null } | null, fundsClaimData?: { __typename?: 'ModelColonyFundsClaimConnection', items: Array<{ __typename?: 'ColonyFundsClaim', id: string, createdAtBlock: number, createdAt: string, amount: string, isClaimed?: boolean | null, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } } | null> } | null, chainFundsClaim?: Array<{ __typename?: 'ColonyChainFundsClaim', id: string, createdAtBlock: number, createdAt: string, amount: string, isClaimed?: boolean | null } | null> | null, metadata?: { __typename?: 'ColonyMetadata', displayName: string, avatar?: string | null, description?: string | null, thumbnail?: string | null, externalLinks?: Array<{ __typename?: 'ExternalLink', name: ExternalLinks, link: string }> | null, objective?: { __typename?: 'ColonyObjective', title: string, description: string, progress: number } | null, changelog?: Array<{ __typename?: 'ColonyMetadataChangelog', transactionHash: string, newDisplayName: string, oldDisplayName: string, hasAvatarChanged: boolean, hasDescriptionChanged?: boolean | null, haveExternalLinksChanged?: boolean | null, hasObjectiveChanged?: boolean | null, newSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null, oldSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null }> | null, safes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null } | null, roles?: { __typename?: 'ModelColonyRoleConnection', items: Array<{ __typename?: 'ColonyRole', id: string, targetAddress: string, role_0?: boolean | null, role_1?: boolean | null, role_2?: boolean | null, role_3?: boolean | null, role_5?: boolean | null, role_6?: boolean | null, isMultiSig?: boolean | null, domain: { __typename?: 'Domain', id: string, nativeId: number } } | null> } | null, colonyMemberInvite?: { __typename?: 'ColonyMemberInvite', id: string, invitesRemaining: number } | null, proxyColonies?: { __typename?: 'ModelProxyColonyConnection', items: Array<{ __typename?: 'ProxyColony', chainId: string, isActive: boolean } | null> } | null } | null> } | null }; export type GetColonyRootRolesQueryVariables = Exact<{ colonyAddress: Scalars['ID']; @@ -10787,7 +11297,7 @@ export type GetColonyForNotificationQueryVariables = Exact<{ }>; -export type GetColonyForNotificationQuery = { __typename?: 'Query', getColonyByAddress?: { __typename?: 'ModelColonyConnection', items: Array<{ __typename?: 'Colony', name: string, colonyAddress: string, metadata?: { __typename?: 'ColonyMetadata', displayName: string, avatar?: string | null, description?: string | null, thumbnail?: string | null, externalLinks?: Array<{ __typename?: 'ExternalLink', name: ExternalLinks, link: string }> | null, objective?: { __typename?: 'ColonyObjective', title: string, description: string, progress: number } | null, changelog?: Array<{ __typename?: 'ColonyMetadataChangelog', transactionHash: string, newDisplayName: string, oldDisplayName: string, hasAvatarChanged: boolean, hasDescriptionChanged?: boolean | null, haveExternalLinksChanged?: boolean | null, hasObjectiveChanged?: boolean | null, newSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null, oldSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null }> | null, safes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null } | null, nativeToken: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } } | null> } | null }; +export type GetColonyForNotificationQuery = { __typename?: 'Query', getColonyByAddress?: { __typename?: 'ModelColonyConnection', items: Array<{ __typename?: 'Colony', name: string, colonyAddress: string, metadata?: { __typename?: 'ColonyMetadata', displayName: string, avatar?: string | null, description?: string | null, thumbnail?: string | null, externalLinks?: Array<{ __typename?: 'ExternalLink', name: ExternalLinks, link: string }> | null, objective?: { __typename?: 'ColonyObjective', title: string, description: string, progress: number } | null, changelog?: Array<{ __typename?: 'ColonyMetadataChangelog', transactionHash: string, newDisplayName: string, oldDisplayName: string, hasAvatarChanged: boolean, hasDescriptionChanged?: boolean | null, haveExternalLinksChanged?: boolean | null, hasObjectiveChanged?: boolean | null, newSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null, oldSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null }> | null, safes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null } | null, nativeToken: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } } | null> } | null }; export type GetColonyContributorQueryVariables = Exact<{ id: Scalars['ID']; @@ -10933,6 +11443,18 @@ export type GetProfileByEmailQueryVariables = Exact<{ export type GetProfileByEmailQuery = { __typename?: 'Query', getProfileByEmail?: { __typename?: 'ModelProfileConnection', items: Array<{ __typename?: 'Profile', id: string } | null> } | null }; +export type GetProxyColoniesQueryVariables = Exact<{ + colonyAddress: Scalars['ID']; +}>; + + +export type GetProxyColoniesQuery = { __typename?: 'Query', getProxyColoniesByColonyAddress?: { __typename?: 'ModelProxyColonyConnection', items: Array<{ __typename?: 'ProxyColony', id: string, colonyAddress: string, chainId: string, isActive: boolean } | null> } | null }; + +export type GetSupportedChainsQueryVariables = Exact<{ [key: string]: never; }>; + + +export type GetSupportedChainsQuery = { __typename?: 'Query', listSupportedChains?: { __typename?: 'ModelSupportedChainConnection', items: Array<{ __typename?: 'SupportedChain', id: string, isActive?: boolean | null } | null> } | null }; + export type GetColonyHistoricRoleRolesQueryVariables = Exact<{ id: Scalars['ID']; }>; @@ -10953,21 +11475,21 @@ export type GetUserStakesQueryVariables = Exact<{ }>; -export type GetUserStakesQuery = { __typename?: 'Query', getUserStakes?: { __typename?: 'ModelUserStakeConnection', items: Array<{ __typename?: 'UserStake', id: string, amount: string, isClaimed: boolean, createdAt: string, type?: UserStakeType | null, action?: { __typename?: 'ColonyAction', type: ColonyActionType, blockNumber: number, initiatorAddress: string, recipientAddress?: string | null, amount?: string | null, networkFee?: string | null, tokenAddress?: string | null, createdAt: string, newColonyVersion?: number | null, rolesAreMultiSig?: boolean | null, individualEvents?: string | null, isMotion?: boolean | null, showInActionsList: boolean, members?: Array | null, rootHash: string, expenditureId?: string | null, isMultiSig?: boolean | null, multiSigId?: string | null, transactionHash: string, colonyAddress: string, initiatorUser?: { __typename?: 'User', walletAddress: string, profile?: { __typename?: 'Profile', displayName?: string | null, displayNameChanged?: string | null, avatar?: string | null, thumbnail?: string | null } | null } | null, initiatorColony?: { __typename?: 'Colony', name: string, version: number, reputation?: string | null, expendituresGlobalClaimDelay?: string | null, private?: boolean | null, lastUpdatedContributorsWithReputation?: string | null, colonyAddress: string, metadata?: { __typename?: 'ColonyMetadata', avatar?: string | null, displayName: string, thumbnail?: string | null, description?: string | null, externalLinks?: Array<{ __typename?: 'ExternalLink', link: string, name: ExternalLinks }> | null, objective?: { __typename?: 'ColonyObjective', title: string, description: string, progress: number } | null, changelog?: Array<{ __typename?: 'ColonyMetadataChangelog', transactionHash: string, newDisplayName: string, oldDisplayName: string, hasAvatarChanged: boolean, hasDescriptionChanged?: boolean | null, haveExternalLinksChanged?: boolean | null, hasObjectiveChanged?: boolean | null, newSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null, oldSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null }> | null, safes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null } | null, nativeToken: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string }, status?: { __typename?: 'ColonyStatus', recovery?: boolean | null, nativeToken?: { __typename?: 'NativeTokenStatus', mintable?: boolean | null, unlockable?: boolean | null, unlocked?: boolean | null } | null } | null, chainMetadata: { __typename?: 'ChainMetadata', chainId: string, network?: Network | null }, tokens?: { __typename?: 'ModelColonyTokensConnection', items: Array<{ __typename?: 'ColonyTokens', colonyTokensId: string, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } } | null> } | null, motionsWithUnclaimedStakes?: Array<{ __typename?: 'ColonyUnclaimedStake', motionId: string, unclaimedRewards: Array<{ __typename?: 'StakerRewards', address: string, rewards: { __typename?: 'MotionStakeValues', nay: string, yay: string } }> }> | null, domains?: { __typename?: 'ModelDomainConnection', items: Array<{ __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null> } | null, balances?: { __typename?: 'ColonyBalances', items?: Array<{ __typename?: 'ColonyBalance', id: string, balance: string, domain?: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } } | null> | null } | null, fundsClaimData?: { __typename?: 'ModelColonyFundsClaimConnection', items: Array<{ __typename?: 'ColonyFundsClaim', id: string, createdAtBlock: number, createdAt: string, amount: string, isClaimed?: boolean | null, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } } | null> } | null, chainFundsClaim?: { __typename?: 'ColonyChainFundsClaim', id: string, createdAtBlock: number, createdAt: string, amount: string, isClaimed?: boolean | null } | null, roles?: { __typename?: 'ModelColonyRoleConnection', items: Array<{ __typename?: 'ColonyRole', id: string, targetAddress: string, role_0?: boolean | null, role_1?: boolean | null, role_2?: boolean | null, role_3?: boolean | null, role_5?: boolean | null, role_6?: boolean | null, isMultiSig?: boolean | null, domain: { __typename?: 'Domain', id: string, nativeId: number } } | null> } | null, colonyMemberInvite?: { __typename?: 'ColonyMemberInvite', id: string, invitesRemaining: number } | null } | null, initiatorExtension?: { __typename?: 'ColonyExtension', hash: string, installedBy: string, installedAt: number, isDeprecated: boolean, isDeleted: boolean, isInitialized: boolean, address: string, colonyAddress: string, currentVersion: number, params?: { __typename?: 'ExtensionParams', votingReputation?: { __typename?: 'VotingReputationParams', maxVoteFraction: string, totalStakeFraction: string, voterRewardFraction: string, userMinStakeFraction: string, stakePeriod: string, submitPeriod: string, revealPeriod: string, escalationPeriod: string } | null, stakedExpenditure?: { __typename?: 'StakedExpenditureParams', stakeFraction: string } | null, multiSig?: { __typename?: 'MultiSigParams', colonyThreshold: number, domainThresholds?: Array<{ __typename?: 'MultiSigDomainConfig', domainId: string, domainThreshold: number } | null> | null } | null } | null } | null, initiatorToken?: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } | null, recipientUser?: { __typename?: 'User', walletAddress: string, profile?: { __typename?: 'Profile', displayName?: string | null, displayNameChanged?: string | null, avatar?: string | null, thumbnail?: string | null } | null } | null, recipientColony?: { __typename?: 'Colony', name: string, version: number, reputation?: string | null, expendituresGlobalClaimDelay?: string | null, private?: boolean | null, lastUpdatedContributorsWithReputation?: string | null, colonyAddress: string, metadata?: { __typename?: 'ColonyMetadata', avatar?: string | null, displayName: string, thumbnail?: string | null, description?: string | null, externalLinks?: Array<{ __typename?: 'ExternalLink', link: string, name: ExternalLinks }> | null, objective?: { __typename?: 'ColonyObjective', title: string, description: string, progress: number } | null, changelog?: Array<{ __typename?: 'ColonyMetadataChangelog', transactionHash: string, newDisplayName: string, oldDisplayName: string, hasAvatarChanged: boolean, hasDescriptionChanged?: boolean | null, haveExternalLinksChanged?: boolean | null, hasObjectiveChanged?: boolean | null, newSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null, oldSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null }> | null, safes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null } | null, nativeToken: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string }, status?: { __typename?: 'ColonyStatus', recovery?: boolean | null, nativeToken?: { __typename?: 'NativeTokenStatus', mintable?: boolean | null, unlockable?: boolean | null, unlocked?: boolean | null } | null } | null, chainMetadata: { __typename?: 'ChainMetadata', chainId: string, network?: Network | null }, tokens?: { __typename?: 'ModelColonyTokensConnection', items: Array<{ __typename?: 'ColonyTokens', colonyTokensId: string, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } } | null> } | null, motionsWithUnclaimedStakes?: Array<{ __typename?: 'ColonyUnclaimedStake', motionId: string, unclaimedRewards: Array<{ __typename?: 'StakerRewards', address: string, rewards: { __typename?: 'MotionStakeValues', nay: string, yay: string } }> }> | null, domains?: { __typename?: 'ModelDomainConnection', items: Array<{ __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null> } | null, balances?: { __typename?: 'ColonyBalances', items?: Array<{ __typename?: 'ColonyBalance', id: string, balance: string, domain?: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } } | null> | null } | null, fundsClaimData?: { __typename?: 'ModelColonyFundsClaimConnection', items: Array<{ __typename?: 'ColonyFundsClaim', id: string, createdAtBlock: number, createdAt: string, amount: string, isClaimed?: boolean | null, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } } | null> } | null, chainFundsClaim?: { __typename?: 'ColonyChainFundsClaim', id: string, createdAtBlock: number, createdAt: string, amount: string, isClaimed?: boolean | null } | null, roles?: { __typename?: 'ModelColonyRoleConnection', items: Array<{ __typename?: 'ColonyRole', id: string, targetAddress: string, role_0?: boolean | null, role_1?: boolean | null, role_2?: boolean | null, role_3?: boolean | null, role_5?: boolean | null, role_6?: boolean | null, isMultiSig?: boolean | null, domain: { __typename?: 'Domain', id: string, nativeId: number } } | null> } | null, colonyMemberInvite?: { __typename?: 'ColonyMemberInvite', id: string, invitesRemaining: number } | null } | null, recipientExtension?: { __typename?: 'ColonyExtension', hash: string, installedBy: string, installedAt: number, isDeprecated: boolean, isDeleted: boolean, isInitialized: boolean, address: string, colonyAddress: string, currentVersion: number, params?: { __typename?: 'ExtensionParams', votingReputation?: { __typename?: 'VotingReputationParams', maxVoteFraction: string, totalStakeFraction: string, voterRewardFraction: string, userMinStakeFraction: string, stakePeriod: string, submitPeriod: string, revealPeriod: string, escalationPeriod: string } | null, stakedExpenditure?: { __typename?: 'StakedExpenditureParams', stakeFraction: string } | null, multiSig?: { __typename?: 'MultiSigParams', colonyThreshold: number, domainThresholds?: Array<{ __typename?: 'MultiSigDomainConfig', domainId: string, domainThreshold: number } | null> | null } | null } | null } | null, recipientToken?: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } | null, token?: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } | null, fromDomain?: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null, toDomain?: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null, roles?: { __typename?: 'ColonyActionRoles', role_0?: boolean | null, role_1?: boolean | null, role_2?: boolean | null, role_3?: boolean | null, role_5?: boolean | null, role_6?: boolean | null } | null, payments?: Array<{ __typename?: 'Payment', amount: string, tokenAddress: string, recipientAddress: string }> | null, motionData?: { __typename?: 'ColonyMotion', remainingStakes: Array, userMinStake: string, requiredStake: string, nativeMotionDomainId: string, isFinalized: boolean, skillRep: string, repSubmitted: string, hasObjection: boolean, isDecision: boolean, transactionHash: string, createdAt: string, createdBy: string, expenditureSlotIds?: Array | null, databaseMotionId: string, motionId: string, motionStakes: { __typename?: 'MotionStakes', raw: { __typename?: 'MotionStakeValues', yay: string, nay: string }, percentage: { __typename?: 'MotionStakeValues', yay: string, nay: string } }, usersStakes: Array<{ __typename?: 'UserMotionStakes', address: string, stakes: { __typename?: 'MotionStakes', raw: { __typename?: 'MotionStakeValues', yay: string, nay: string }, percentage: { __typename?: 'MotionStakeValues', yay: string, nay: string } } }>, motionDomain: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null }, stakerRewards: Array<{ __typename?: 'StakerRewards', address: string, isClaimed: boolean, rewards: { __typename?: 'MotionStakeValues', yay: string, nay: string } }>, voterRewards?: { __typename?: 'ModelVoterRewardsHistoryConnection', items: Array<{ __typename?: 'VoterRewardsHistory', userAddress: string, amount: string, user: { __typename?: 'User', bridgeCustomerId?: string | null, walletAddress: string, profile?: { __typename?: 'Profile', avatar?: string | null, bio?: string | null, displayName?: string | null, displayNameChanged?: string | null, email?: string | null, location?: string | null, thumbnail?: string | null, website?: string | null, preferredCurrency?: SupportedCurrencies | null, isAutoOfframpEnabled?: boolean | null, meta?: { __typename?: 'ProfileMetadata', metatransactionsEnabled?: boolean | null, decentralizedModeEnabled?: boolean | null, customRpc?: string | null } | null } | null, privateBetaInviteCode?: { __typename?: 'PrivateBetaInviteCode', id: string, shareableInvites?: number | null } | null, notificationsData?: { __typename?: 'NotificationsData', magicbellUserId: string, notificationsDisabled: boolean, mutedColonyAddresses: Array, paymentNotificationsDisabled: boolean, mentionNotificationsDisabled: boolean, adminNotificationsDisabled: boolean } | null } } | null> } | null, voterRecord: Array<{ __typename?: 'VoterRecord', address: string, voteCount: string, vote?: number | null }>, revealedVotes: { __typename?: 'MotionStakes', raw: { __typename?: 'MotionStakeValues', yay: string, nay: string }, percentage: { __typename?: 'MotionStakeValues', yay: string, nay: string } }, motionStateHistory: { __typename?: 'MotionStateHistory', hasVoted: boolean, hasPassed: boolean, hasFailed: boolean, hasFailedNotFinalizable: boolean, inRevealPhase: boolean, yaySideFullyStakedAt?: string | null, naySideFullyStakedAt?: string | null, allVotesSubmittedAt?: string | null, allVotesRevealedAt?: string | null, endedAt?: string | null, finalizedAt?: string | null }, messages?: { __typename?: 'ModelMotionMessageConnection', items: Array<{ __typename?: 'MotionMessage', initiatorAddress: string, name: string, messageKey: string, vote?: string | null, amount?: string | null, createdAt: string, initiatorUser?: { __typename?: 'User', bridgeCustomerId?: string | null, walletAddress: string, profile?: { __typename?: 'Profile', avatar?: string | null, bio?: string | null, displayName?: string | null, displayNameChanged?: string | null, email?: string | null, location?: string | null, thumbnail?: string | null, website?: string | null, preferredCurrency?: SupportedCurrencies | null, isAutoOfframpEnabled?: boolean | null, meta?: { __typename?: 'ProfileMetadata', metatransactionsEnabled?: boolean | null, decentralizedModeEnabled?: boolean | null, customRpc?: string | null } | null } | null, privateBetaInviteCode?: { __typename?: 'PrivateBetaInviteCode', id: string, shareableInvites?: number | null } | null, notificationsData?: { __typename?: 'NotificationsData', magicbellUserId: string, notificationsDisabled: boolean, mutedColonyAddresses: Array, paymentNotificationsDisabled: boolean, mentionNotificationsDisabled: boolean, adminNotificationsDisabled: boolean } | null } | null } | null> } | null, objectionAnnotation?: { __typename?: 'Annotation', createdAt: string, message: string } | null, action?: { __typename?: 'ColonyAction', type: ColonyActionType } | null } | null, colony: { __typename?: 'Colony', name: string, colonyAddress: string, nativeToken: { __typename?: 'Token', name: string, nativeTokenDecimals: number, nativeTokenSymbol: string, tokenAddress: string }, tokens?: { __typename?: 'ModelColonyTokensConnection', items: Array<{ __typename?: 'ColonyTokens', colonyTokensId: string, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } } | null> } | null, metadata?: { __typename?: 'ColonyMetadata', displayName: string, avatar?: string | null, description?: string | null, thumbnail?: string | null, externalLinks?: Array<{ __typename?: 'ExternalLink', name: ExternalLinks, link: string }> | null, objective?: { __typename?: 'ColonyObjective', title: string, description: string, progress: number } | null, changelog?: Array<{ __typename?: 'ColonyMetadataChangelog', transactionHash: string, newDisplayName: string, oldDisplayName: string, hasAvatarChanged: boolean, hasDescriptionChanged?: boolean | null, haveExternalLinksChanged?: boolean | null, hasObjectiveChanged?: boolean | null, newSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null, oldSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null }> | null, safes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null } | null }, pendingDomainMetadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null, pendingColonyMetadata?: { __typename?: 'ColonyMetadata', displayName: string, avatar?: string | null, description?: string | null, thumbnail?: string | null, externalLinks?: Array<{ __typename?: 'ExternalLink', name: ExternalLinks, link: string }> | null, objective?: { __typename?: 'ColonyObjective', title: string, description: string, progress: number } | null, changelog?: Array<{ __typename?: 'ColonyMetadataChangelog', transactionHash: string, newDisplayName: string, oldDisplayName: string, hasAvatarChanged: boolean, hasDescriptionChanged?: boolean | null, haveExternalLinksChanged?: boolean | null, hasObjectiveChanged?: boolean | null, newSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null, oldSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null }> | null, safes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null } | null, annotation?: { __typename?: 'Annotation', createdAt: string, message: string } | null, decisionData?: { __typename?: 'ColonyDecision', title: string, description: string, motionDomainId: number, walletAddress: string, createdAt: string, actionId: string, colonyAddress: string } | null, safeTransaction?: { __typename?: 'SafeTransaction', id: string, safe: { __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }, transactions?: { __typename?: 'ModelSafeTransactionDataConnection', items: Array<{ __typename?: 'SafeTransactionData', transactionType: SafeTransactionType, amount?: string | null, rawAmount?: string | null, data?: string | null, abi?: string | null, contractFunction?: string | null, token?: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } | null, recipient?: { __typename?: 'SimpleTarget', id: string, walletAddress: string, profile: { __typename?: 'SimpleTargetProfile', avatarHash?: string | null, displayName?: string | null } } | null, contract?: { __typename?: 'SimpleTarget', id: string, walletAddress: string, profile: { __typename?: 'SimpleTargetProfile', avatarHash?: string | null, displayName?: string | null } } | null, nft?: { __typename?: 'NFT', id: string, walletAddress: string, profile: { __typename?: 'NFTProfile', displayName: string } } | null, nftData?: { __typename?: 'NFTData', address: string, description?: string | null, id: string, imageUri?: string | null, logoUri: string, name?: string | null, tokenName: string, tokenSymbol: string, uri: string } | null, functionParams?: Array<{ __typename?: 'FunctionParam', name: string, type: string, value: string } | null> | null } | null> } | null } | null, metadata?: { __typename?: 'ColonyActionMetadata', customTitle: string, arbitraryTxAbis?: Array<{ __typename?: 'ArbitraryTxAbi', contractAddress: string, jsonAbi: string }> | null } | null, multiSigData?: { __typename?: 'ColonyMultiSig', id: string, nativeMultiSigId: string, createdAt: string, multiSigDomainId: string, nativeMultiSigDomainId: string, requiredPermissions: number, transactionHash: string, isExecuted: boolean, hasActionCompleted: boolean, isRejected: boolean, isDecision: boolean, executedAt?: string | null, executedBy?: string | null, rejectedAt?: string | null, rejectedBy?: string | null, multiSigDomain: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null }, signatures?: { __typename?: 'ModelMultiSigUserSignatureConnection', items: Array<{ __typename?: 'MultiSigUserSignature', id: string, role: number, userAddress: string, multiSigId: string, vote: MultiSigVote, createdAt: string, updatedAt: string, user: { __typename?: 'User', bridgeCustomerId?: string | null, walletAddress: string, profile?: { __typename?: 'Profile', avatar?: string | null, bio?: string | null, displayName?: string | null, displayNameChanged?: string | null, email?: string | null, location?: string | null, thumbnail?: string | null, website?: string | null, preferredCurrency?: SupportedCurrencies | null, isAutoOfframpEnabled?: boolean | null, meta?: { __typename?: 'ProfileMetadata', metatransactionsEnabled?: boolean | null, decentralizedModeEnabled?: boolean | null, customRpc?: string | null } | null } | null, privateBetaInviteCode?: { __typename?: 'PrivateBetaInviteCode', id: string, shareableInvites?: number | null } | null, notificationsData?: { __typename?: 'NotificationsData', magicbellUserId: string, notificationsDisabled: boolean, mutedColonyAddresses: Array, paymentNotificationsDisabled: boolean, mentionNotificationsDisabled: boolean, adminNotificationsDisabled: boolean } | null } } | null> } | null, executedByUser?: { __typename?: 'User', walletAddress: string, profile?: { __typename?: 'Profile', displayName?: string | null, displayNameChanged?: string | null, avatar?: string | null, thumbnail?: string | null } | null } | null, rejectedByUser?: { __typename?: 'User', walletAddress: string, profile?: { __typename?: 'Profile', displayName?: string | null, displayNameChanged?: string | null, avatar?: string | null, thumbnail?: string | null } | null } | null } | null, approvedTokenChanges?: { __typename?: 'ApprovedTokenChanges', added: Array, removed: Array, unaffected: Array } | null, expenditure?: { __typename?: 'Expenditure', isStaked: boolean, type: ExpenditureType, metadata?: { __typename?: 'ExpenditureMetadata', distributionType?: SplitPaymentDistributionType | null } | null, creatingActions?: { __typename?: 'ModelColonyActionConnection', items: Array<{ __typename?: 'ColonyAction', transactionHash: string } | null> } | null } | null, arbitraryTransactions?: Array<{ __typename?: 'ColonyActionArbitraryTransaction', contractAddress: string, encodedFunction: string }> | null } | null } | null> } | null }; +export type GetUserStakesQuery = { __typename?: 'Query', getUserStakes?: { __typename?: 'ModelUserStakeConnection', items: Array<{ __typename?: 'UserStake', id: string, amount: string, isClaimed: boolean, createdAt: string, type?: UserStakeType | null, action?: { __typename?: 'ColonyAction', type: ColonyActionType, blockNumber: number, initiatorAddress: string, recipientAddress?: string | null, amount?: string | null, networkFee?: string | null, tokenAddress?: string | null, createdAt: string, newColonyVersion?: number | null, rolesAreMultiSig?: boolean | null, individualEvents?: string | null, isMotion?: boolean | null, showInActionsList: boolean, members?: Array | null, rootHash: string, expenditureId?: string | null, isMultiSig?: boolean | null, multiSigId?: string | null, targetChainId?: number | null, transactionHash: string, colonyAddress: string, initiatorUser?: { __typename?: 'User', walletAddress: string, profile?: { __typename?: 'Profile', displayName?: string | null, displayNameChanged?: string | null, avatar?: string | null, thumbnail?: string | null } | null } | null, initiatorColony?: { __typename?: 'Colony', name: string, version: number, reputation?: string | null, expendituresGlobalClaimDelay?: string | null, private?: boolean | null, lastUpdatedContributorsWithReputation?: string | null, colonyAddress: string, metadata?: { __typename?: 'ColonyMetadata', avatar?: string | null, displayName: string, thumbnail?: string | null, description?: string | null, externalLinks?: Array<{ __typename?: 'ExternalLink', link: string, name: ExternalLinks }> | null, objective?: { __typename?: 'ColonyObjective', title: string, description: string, progress: number } | null, changelog?: Array<{ __typename?: 'ColonyMetadataChangelog', transactionHash: string, newDisplayName: string, oldDisplayName: string, hasAvatarChanged: boolean, hasDescriptionChanged?: boolean | null, haveExternalLinksChanged?: boolean | null, hasObjectiveChanged?: boolean | null, newSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null, oldSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null }> | null, safes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null } | null, colonyCreateEvent?: { __typename?: 'ColonyCreateEvent', blockNumber: number, creationSalt: string } | null, nativeToken: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } }, status?: { __typename?: 'ColonyStatus', recovery?: boolean | null, nativeToken?: { __typename?: 'NativeTokenStatus', mintable?: boolean | null, unlockable?: boolean | null, unlocked?: boolean | null } | null } | null, chainMetadata: { __typename?: 'ChainMetadata', chainId: string, network?: Network | null }, tokens?: { __typename?: 'ModelColonyTokensConnection', items: Array<{ __typename?: 'ColonyTokens', colonyTokensId: string, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } } | null> } | null, motionsWithUnclaimedStakes?: Array<{ __typename?: 'ColonyUnclaimedStake', motionId: string, unclaimedRewards: Array<{ __typename?: 'StakerRewards', address: string, rewards: { __typename?: 'MotionStakeValues', nay: string, yay: string } }> }> | null, domains?: { __typename?: 'ModelDomainConnection', items: Array<{ __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null> } | null, balances?: { __typename?: 'ColonyBalances', items?: Array<{ __typename?: 'ColonyBalance', id: string, balance: string, domain?: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } } | null> | null } | null, fundsClaimData?: { __typename?: 'ModelColonyFundsClaimConnection', items: Array<{ __typename?: 'ColonyFundsClaim', id: string, createdAtBlock: number, createdAt: string, amount: string, isClaimed?: boolean | null, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } } | null> } | null, chainFundsClaim?: Array<{ __typename?: 'ColonyChainFundsClaim', id: string, createdAtBlock: number, createdAt: string, amount: string, isClaimed?: boolean | null } | null> | null, roles?: { __typename?: 'ModelColonyRoleConnection', items: Array<{ __typename?: 'ColonyRole', id: string, targetAddress: string, role_0?: boolean | null, role_1?: boolean | null, role_2?: boolean | null, role_3?: boolean | null, role_5?: boolean | null, role_6?: boolean | null, isMultiSig?: boolean | null, domain: { __typename?: 'Domain', id: string, nativeId: number } } | null> } | null, colonyMemberInvite?: { __typename?: 'ColonyMemberInvite', id: string, invitesRemaining: number } | null, proxyColonies?: { __typename?: 'ModelProxyColonyConnection', items: Array<{ __typename?: 'ProxyColony', chainId: string, isActive: boolean } | null> } | null } | null, initiatorExtension?: { __typename?: 'ColonyExtension', hash: string, installedBy: string, installedAt: number, isDeprecated: boolean, isDeleted: boolean, isInitialized: boolean, address: string, colonyAddress: string, currentVersion: number, params?: { __typename?: 'ExtensionParams', votingReputation?: { __typename?: 'VotingReputationParams', maxVoteFraction: string, totalStakeFraction: string, voterRewardFraction: string, userMinStakeFraction: string, stakePeriod: string, submitPeriod: string, revealPeriod: string, escalationPeriod: string } | null, stakedExpenditure?: { __typename?: 'StakedExpenditureParams', stakeFraction: string } | null, multiSig?: { __typename?: 'MultiSigParams', colonyThreshold: number, domainThresholds?: Array<{ __typename?: 'MultiSigDomainConfig', domainId: string, domainThreshold: number } | null> | null } | null } | null } | null, initiatorToken?: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } | null, recipientUser?: { __typename?: 'User', walletAddress: string, profile?: { __typename?: 'Profile', displayName?: string | null, displayNameChanged?: string | null, avatar?: string | null, thumbnail?: string | null } | null } | null, recipientColony?: { __typename?: 'Colony', name: string, version: number, reputation?: string | null, expendituresGlobalClaimDelay?: string | null, private?: boolean | null, lastUpdatedContributorsWithReputation?: string | null, colonyAddress: string, metadata?: { __typename?: 'ColonyMetadata', avatar?: string | null, displayName: string, thumbnail?: string | null, description?: string | null, externalLinks?: Array<{ __typename?: 'ExternalLink', link: string, name: ExternalLinks }> | null, objective?: { __typename?: 'ColonyObjective', title: string, description: string, progress: number } | null, changelog?: Array<{ __typename?: 'ColonyMetadataChangelog', transactionHash: string, newDisplayName: string, oldDisplayName: string, hasAvatarChanged: boolean, hasDescriptionChanged?: boolean | null, haveExternalLinksChanged?: boolean | null, hasObjectiveChanged?: boolean | null, newSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null, oldSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null }> | null, safes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null } | null, colonyCreateEvent?: { __typename?: 'ColonyCreateEvent', blockNumber: number, creationSalt: string } | null, nativeToken: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } }, status?: { __typename?: 'ColonyStatus', recovery?: boolean | null, nativeToken?: { __typename?: 'NativeTokenStatus', mintable?: boolean | null, unlockable?: boolean | null, unlocked?: boolean | null } | null } | null, chainMetadata: { __typename?: 'ChainMetadata', chainId: string, network?: Network | null }, tokens?: { __typename?: 'ModelColonyTokensConnection', items: Array<{ __typename?: 'ColonyTokens', colonyTokensId: string, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } } | null> } | null, motionsWithUnclaimedStakes?: Array<{ __typename?: 'ColonyUnclaimedStake', motionId: string, unclaimedRewards: Array<{ __typename?: 'StakerRewards', address: string, rewards: { __typename?: 'MotionStakeValues', nay: string, yay: string } }> }> | null, domains?: { __typename?: 'ModelDomainConnection', items: Array<{ __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null> } | null, balances?: { __typename?: 'ColonyBalances', items?: Array<{ __typename?: 'ColonyBalance', id: string, balance: string, domain?: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } } | null> | null } | null, fundsClaimData?: { __typename?: 'ModelColonyFundsClaimConnection', items: Array<{ __typename?: 'ColonyFundsClaim', id: string, createdAtBlock: number, createdAt: string, amount: string, isClaimed?: boolean | null, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } } | null> } | null, chainFundsClaim?: Array<{ __typename?: 'ColonyChainFundsClaim', id: string, createdAtBlock: number, createdAt: string, amount: string, isClaimed?: boolean | null } | null> | null, roles?: { __typename?: 'ModelColonyRoleConnection', items: Array<{ __typename?: 'ColonyRole', id: string, targetAddress: string, role_0?: boolean | null, role_1?: boolean | null, role_2?: boolean | null, role_3?: boolean | null, role_5?: boolean | null, role_6?: boolean | null, isMultiSig?: boolean | null, domain: { __typename?: 'Domain', id: string, nativeId: number } } | null> } | null, colonyMemberInvite?: { __typename?: 'ColonyMemberInvite', id: string, invitesRemaining: number } | null, proxyColonies?: { __typename?: 'ModelProxyColonyConnection', items: Array<{ __typename?: 'ProxyColony', chainId: string, isActive: boolean } | null> } | null } | null, recipientExtension?: { __typename?: 'ColonyExtension', hash: string, installedBy: string, installedAt: number, isDeprecated: boolean, isDeleted: boolean, isInitialized: boolean, address: string, colonyAddress: string, currentVersion: number, params?: { __typename?: 'ExtensionParams', votingReputation?: { __typename?: 'VotingReputationParams', maxVoteFraction: string, totalStakeFraction: string, voterRewardFraction: string, userMinStakeFraction: string, stakePeriod: string, submitPeriod: string, revealPeriod: string, escalationPeriod: string } | null, stakedExpenditure?: { __typename?: 'StakedExpenditureParams', stakeFraction: string } | null, multiSig?: { __typename?: 'MultiSigParams', colonyThreshold: number, domainThresholds?: Array<{ __typename?: 'MultiSigDomainConfig', domainId: string, domainThreshold: number } | null> | null } | null } | null } | null, recipientToken?: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } | null, token?: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } | null, fromDomain?: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null, toDomain?: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null } | null, roles?: { __typename?: 'ColonyActionRoles', role_0?: boolean | null, role_1?: boolean | null, role_2?: boolean | null, role_3?: boolean | null, role_5?: boolean | null, role_6?: boolean | null } | null, payments?: Array<{ __typename?: 'Payment', amount: string, tokenAddress: string, recipientAddress: string }> | null, motionData?: { __typename?: 'ColonyMotion', remainingStakes: Array, userMinStake: string, requiredStake: string, nativeMotionDomainId: string, isFinalized: boolean, skillRep: string, repSubmitted: string, hasObjection: boolean, isDecision: boolean, transactionHash: string, createdAt: string, createdBy: string, expenditureSlotIds?: Array | null, databaseMotionId: string, motionId: string, motionStakes: { __typename?: 'MotionStakes', raw: { __typename?: 'MotionStakeValues', yay: string, nay: string }, percentage: { __typename?: 'MotionStakeValues', yay: string, nay: string } }, usersStakes: Array<{ __typename?: 'UserMotionStakes', address: string, stakes: { __typename?: 'MotionStakes', raw: { __typename?: 'MotionStakeValues', yay: string, nay: string }, percentage: { __typename?: 'MotionStakeValues', yay: string, nay: string } } }>, motionDomain: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null }, stakerRewards: Array<{ __typename?: 'StakerRewards', address: string, isClaimed: boolean, rewards: { __typename?: 'MotionStakeValues', yay: string, nay: string } }>, voterRewards?: { __typename?: 'ModelVoterRewardsHistoryConnection', items: Array<{ __typename?: 'VoterRewardsHistory', userAddress: string, amount: string, user: { __typename?: 'User', bridgeCustomerId?: string | null, walletAddress: string, profile?: { __typename?: 'Profile', avatar?: string | null, bio?: string | null, displayName?: string | null, displayNameChanged?: string | null, email?: string | null, location?: string | null, thumbnail?: string | null, website?: string | null, preferredCurrency?: SupportedCurrencies | null, isAutoOfframpEnabled?: boolean | null, meta?: { __typename?: 'ProfileMetadata', metatransactionsEnabled?: boolean | null, decentralizedModeEnabled?: boolean | null, customRpc?: string | null } | null } | null, privateBetaInviteCode?: { __typename?: 'PrivateBetaInviteCode', id: string, shareableInvites?: number | null } | null, notificationsData?: { __typename?: 'NotificationsData', magicbellUserId: string, notificationsDisabled: boolean, mutedColonyAddresses: Array, paymentNotificationsDisabled: boolean, mentionNotificationsDisabled: boolean, adminNotificationsDisabled: boolean } | null } } | null> } | null, voterRecord: Array<{ __typename?: 'VoterRecord', address: string, voteCount: string, vote?: number | null }>, revealedVotes: { __typename?: 'MotionStakes', raw: { __typename?: 'MotionStakeValues', yay: string, nay: string }, percentage: { __typename?: 'MotionStakeValues', yay: string, nay: string } }, motionStateHistory: { __typename?: 'MotionStateHistory', hasVoted: boolean, hasPassed: boolean, hasFailed: boolean, hasFailedNotFinalizable: boolean, inRevealPhase: boolean, yaySideFullyStakedAt?: string | null, naySideFullyStakedAt?: string | null, allVotesSubmittedAt?: string | null, allVotesRevealedAt?: string | null, endedAt?: string | null, finalizedAt?: string | null }, messages?: { __typename?: 'ModelMotionMessageConnection', items: Array<{ __typename?: 'MotionMessage', initiatorAddress: string, name: string, messageKey: string, vote?: string | null, amount?: string | null, createdAt: string, initiatorUser?: { __typename?: 'User', bridgeCustomerId?: string | null, walletAddress: string, profile?: { __typename?: 'Profile', avatar?: string | null, bio?: string | null, displayName?: string | null, displayNameChanged?: string | null, email?: string | null, location?: string | null, thumbnail?: string | null, website?: string | null, preferredCurrency?: SupportedCurrencies | null, isAutoOfframpEnabled?: boolean | null, meta?: { __typename?: 'ProfileMetadata', metatransactionsEnabled?: boolean | null, decentralizedModeEnabled?: boolean | null, customRpc?: string | null } | null } | null, privateBetaInviteCode?: { __typename?: 'PrivateBetaInviteCode', id: string, shareableInvites?: number | null } | null, notificationsData?: { __typename?: 'NotificationsData', magicbellUserId: string, notificationsDisabled: boolean, mutedColonyAddresses: Array, paymentNotificationsDisabled: boolean, mentionNotificationsDisabled: boolean, adminNotificationsDisabled: boolean } | null } | null } | null> } | null, objectionAnnotation?: { __typename?: 'Annotation', createdAt: string, message: string } | null, action?: { __typename?: 'ColonyAction', type: ColonyActionType } | null } | null, colony: { __typename?: 'Colony', name: string, colonyAddress: string, nativeToken: { __typename?: 'Token', name: string, nativeTokenDecimals: number, nativeTokenSymbol: string, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } }, tokens?: { __typename?: 'ModelColonyTokensConnection', items: Array<{ __typename?: 'ColonyTokens', colonyTokensId: string, token: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } } | null> } | null, metadata?: { __typename?: 'ColonyMetadata', displayName: string, avatar?: string | null, description?: string | null, thumbnail?: string | null, externalLinks?: Array<{ __typename?: 'ExternalLink', name: ExternalLinks, link: string }> | null, objective?: { __typename?: 'ColonyObjective', title: string, description: string, progress: number } | null, changelog?: Array<{ __typename?: 'ColonyMetadataChangelog', transactionHash: string, newDisplayName: string, oldDisplayName: string, hasAvatarChanged: boolean, hasDescriptionChanged?: boolean | null, haveExternalLinksChanged?: boolean | null, hasObjectiveChanged?: boolean | null, newSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null, oldSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null }> | null, safes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null } | null }, pendingDomainMetadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null, pendingColonyMetadata?: { __typename?: 'ColonyMetadata', displayName: string, avatar?: string | null, description?: string | null, thumbnail?: string | null, externalLinks?: Array<{ __typename?: 'ExternalLink', name: ExternalLinks, link: string }> | null, objective?: { __typename?: 'ColonyObjective', title: string, description: string, progress: number } | null, changelog?: Array<{ __typename?: 'ColonyMetadataChangelog', transactionHash: string, newDisplayName: string, oldDisplayName: string, hasAvatarChanged: boolean, hasDescriptionChanged?: boolean | null, haveExternalLinksChanged?: boolean | null, hasObjectiveChanged?: boolean | null, newSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null, oldSafes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null }> | null, safes?: Array<{ __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }> | null } | null, annotation?: { __typename?: 'Annotation', createdAt: string, message: string } | null, decisionData?: { __typename?: 'ColonyDecision', title: string, description: string, motionDomainId: number, walletAddress: string, createdAt: string, actionId: string, colonyAddress: string } | null, safeTransaction?: { __typename?: 'SafeTransaction', id: string, safe: { __typename?: 'Safe', name: string, address: string, chainId: string, moduleContractAddress: string }, transactions?: { __typename?: 'ModelSafeTransactionDataConnection', items: Array<{ __typename?: 'SafeTransactionData', transactionType: SafeTransactionType, amount?: string | null, rawAmount?: string | null, data?: string | null, abi?: string | null, contractFunction?: string | null, token?: { __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } | null, recipient?: { __typename?: 'SimpleTarget', id: string, walletAddress: string, profile: { __typename?: 'SimpleTargetProfile', avatarHash?: string | null, displayName?: string | null } } | null, contract?: { __typename?: 'SimpleTarget', id: string, walletAddress: string, profile: { __typename?: 'SimpleTargetProfile', avatarHash?: string | null, displayName?: string | null } } | null, nft?: { __typename?: 'NFT', id: string, walletAddress: string, profile: { __typename?: 'NFTProfile', displayName: string } } | null, nftData?: { __typename?: 'NFTData', address: string, description?: string | null, id: string, imageUri?: string | null, logoUri: string, name?: string | null, tokenName: string, tokenSymbol: string, uri: string } | null, functionParams?: Array<{ __typename?: 'FunctionParam', name: string, type: string, value: string } | null> | null } | null> } | null } | null, metadata?: { __typename?: 'ColonyActionMetadata', customTitle: string, arbitraryTxAbis?: Array<{ __typename?: 'ArbitraryTxAbi', contractAddress: string, jsonAbi: string }> | null } | null, multiSigData?: { __typename?: 'ColonyMultiSig', id: string, nativeMultiSigId: string, createdAt: string, multiSigDomainId: string, nativeMultiSigDomainId: string, requiredPermissions: number, transactionHash: string, isExecuted: boolean, hasActionCompleted: boolean, isRejected: boolean, isDecision: boolean, executedAt?: string | null, executedBy?: string | null, rejectedAt?: string | null, rejectedBy?: string | null, multiSigDomain: { __typename?: 'Domain', id: string, nativeId: number, isRoot: boolean, nativeFundingPotId: number, nativeSkillId: string, reputation?: string | null, reputationPercentage?: string | null, metadata?: { __typename?: 'DomainMetadata', name: string, color: DomainColor, description?: string | null, id: string, changelog?: Array<{ __typename?: 'DomainMetadataChangelog', transactionHash: string, oldName: string, newName: string, oldColor: DomainColor, newColor: DomainColor, oldDescription?: string | null, newDescription?: string | null }> | null } | null }, signatures?: { __typename?: 'ModelMultiSigUserSignatureConnection', items: Array<{ __typename?: 'MultiSigUserSignature', id: string, role: number, userAddress: string, multiSigId: string, vote: MultiSigVote, createdAt: string, updatedAt: string, user: { __typename?: 'User', bridgeCustomerId?: string | null, walletAddress: string, profile?: { __typename?: 'Profile', avatar?: string | null, bio?: string | null, displayName?: string | null, displayNameChanged?: string | null, email?: string | null, location?: string | null, thumbnail?: string | null, website?: string | null, preferredCurrency?: SupportedCurrencies | null, isAutoOfframpEnabled?: boolean | null, meta?: { __typename?: 'ProfileMetadata', metatransactionsEnabled?: boolean | null, decentralizedModeEnabled?: boolean | null, customRpc?: string | null } | null } | null, privateBetaInviteCode?: { __typename?: 'PrivateBetaInviteCode', id: string, shareableInvites?: number | null } | null, notificationsData?: { __typename?: 'NotificationsData', magicbellUserId: string, notificationsDisabled: boolean, mutedColonyAddresses: Array, paymentNotificationsDisabled: boolean, mentionNotificationsDisabled: boolean, adminNotificationsDisabled: boolean } | null } } | null> } | null, executedByUser?: { __typename?: 'User', walletAddress: string, profile?: { __typename?: 'Profile', displayName?: string | null, displayNameChanged?: string | null, avatar?: string | null, thumbnail?: string | null } | null } | null, rejectedByUser?: { __typename?: 'User', walletAddress: string, profile?: { __typename?: 'Profile', displayName?: string | null, displayNameChanged?: string | null, avatar?: string | null, thumbnail?: string | null } | null } | null } | null, approvedTokenChanges?: { __typename?: 'ApprovedTokenChanges', added: Array, removed: Array, unaffected: Array } | null, expenditure?: { __typename?: 'Expenditure', isStaked: boolean, type: ExpenditureType, metadata?: { __typename?: 'ExpenditureMetadata', distributionType?: SplitPaymentDistributionType | null } | null, creatingActions?: { __typename?: 'ModelColonyActionConnection', items: Array<{ __typename?: 'ColonyAction', transactionHash: string } | null> } | null } | null, arbitraryTransactions?: Array<{ __typename?: 'ColonyActionArbitraryTransaction', contractAddress: string, encodedFunction: string }> | null } | null } | null> } | null }; export type GetTokenByAddressQueryVariables = Exact<{ address: Scalars['ID']; }>; -export type GetTokenByAddressQuery = { __typename?: 'Query', getTokenByAddress?: { __typename?: 'ModelTokenConnection', items: Array<{ __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } | null> } | null }; +export type GetTokenByAddressQuery = { __typename?: 'Query', getTokenByAddress?: { __typename?: 'ModelTokenConnection', items: Array<{ __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } | null> } | null }; export type GetTokenFromEverywhereQueryVariables = Exact<{ input: TokenFromEverywhereArguments; }>; -export type GetTokenFromEverywhereQuery = { __typename?: 'Query', getTokenFromEverywhere?: { __typename?: 'TokenFromEverywhereReturn', items?: Array<{ __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } | null> | null } | null }; +export type GetTokenFromEverywhereQuery = { __typename?: 'Query', getTokenFromEverywhere?: { __typename?: 'TokenFromEverywhereReturn', items?: Array<{ __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } | null> | null } | null }; export type GetUserTokenBalanceQueryVariables = Exact<{ input: GetUserTokenBalanceInput; @@ -10983,7 +11505,7 @@ export type GetTokensListQueryVariables = Exact<{ }>; -export type GetTokensListQuery = { __typename?: 'Query', listTokens?: { __typename?: 'ModelTokenConnection', nextToken?: string | null, items: Array<{ __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string } | null> } | null }; +export type GetTokensListQuery = { __typename?: 'Query', listTokens?: { __typename?: 'ModelTokenConnection', nextToken?: string | null, items: Array<{ __typename?: 'Token', decimals: number, name: string, symbol: string, type?: TokenType | null, avatar?: string | null, thumbnail?: string | null, tokenAddress: string, chainMetadata: { __typename?: 'ChainMetadata', chainId: string } } | null> } | null }; export type GetUserTransactionsQueryVariables = Exact<{ userAddress: Scalars['ID']; @@ -11186,6 +11708,9 @@ export const TokenFragmentDoc = gql` type avatar thumbnail + chainMetadata { + chainId + } } `; export const NotificationColonyFragmentDoc = gql` @@ -11722,6 +12247,20 @@ export const LiquidationAddressFragmentDoc = gql` liquidationAddress } ${UserFragmentDoc}`; +export const ProxyColonyFragmentDoc = gql` + fragment ProxyColony on ProxyColony { + id + colonyAddress + chainId + isActive +} + `; +export const SupportedChainFragmentDoc = gql` + fragment SupportedChain on SupportedChain { + id + isActive +} + `; export const ColonyUserRoleFragmentDoc = gql` fragment ColonyUserRole on ColonyRole { id @@ -11848,6 +12387,10 @@ export const ColonyFragmentDoc = gql` fragment Colony on Colony { colonyAddress: id name + colonyCreateEvent { + blockNumber + creationSalt + } nativeToken { ...Token } @@ -11900,6 +12443,12 @@ export const ColonyFragmentDoc = gql` invitesRemaining } lastUpdatedContributorsWithReputation + proxyColonies { + items { + chainId + isActive + } + } } ${TokenFragmentDoc} ${NativeTokenStatusFragmentDoc} @@ -12137,6 +12686,9 @@ export const ColonyActionFragmentDoc = gql` nativeTokenSymbol: symbol tokenAddress: id name + chainMetadata { + chainId + } } tokens { ...ColonyTokensConnection @@ -12195,6 +12747,7 @@ export const ColonyActionFragmentDoc = gql` contractAddress encodedFunction } + targetChainId } ${UserDisplayFragmentDoc} ${PublicColonyFragmentDoc} @@ -15136,6 +15689,79 @@ export function useGetProfileByEmailLazyQuery(baseOptions?: Apollo.LazyQueryHook export type GetProfileByEmailQueryHookResult = ReturnType; export type GetProfileByEmailLazyQueryHookResult = ReturnType; export type GetProfileByEmailQueryResult = Apollo.QueryResult; +export const GetProxyColoniesDocument = gql` + query GetProxyColonies($colonyAddress: ID!) { + getProxyColoniesByColonyAddress(colonyAddress: $colonyAddress) { + items { + ...ProxyColony + } + } +} + ${ProxyColonyFragmentDoc}`; + +/** + * __useGetProxyColoniesQuery__ + * + * To run a query within a React component, call `useGetProxyColoniesQuery` and pass it any options that fit your needs. + * When your component renders, `useGetProxyColoniesQuery` returns an object from Apollo Client that contains loading, error, and data properties + * you can use to render your UI. + * + * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options; + * + * @example + * const { data, loading, error } = useGetProxyColoniesQuery({ + * variables: { + * colonyAddress: // value for 'colonyAddress' + * }, + * }); + */ +export function useGetProxyColoniesQuery(baseOptions: Apollo.QueryHookOptions) { + const options = {...defaultOptions, ...baseOptions} + return Apollo.useQuery(GetProxyColoniesDocument, options); + } +export function useGetProxyColoniesLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) { + const options = {...defaultOptions, ...baseOptions} + return Apollo.useLazyQuery(GetProxyColoniesDocument, options); + } +export type GetProxyColoniesQueryHookResult = ReturnType; +export type GetProxyColoniesLazyQueryHookResult = ReturnType; +export type GetProxyColoniesQueryResult = Apollo.QueryResult; +export const GetSupportedChainsDocument = gql` + query GetSupportedChains { + listSupportedChains { + items { + ...SupportedChain + } + } +} + ${SupportedChainFragmentDoc}`; + +/** + * __useGetSupportedChainsQuery__ + * + * To run a query within a React component, call `useGetSupportedChainsQuery` and pass it any options that fit your needs. + * When your component renders, `useGetSupportedChainsQuery` returns an object from Apollo Client that contains loading, error, and data properties + * you can use to render your UI. + * + * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options; + * + * @example + * const { data, loading, error } = useGetSupportedChainsQuery({ + * variables: { + * }, + * }); + */ +export function useGetSupportedChainsQuery(baseOptions?: Apollo.QueryHookOptions) { + const options = {...defaultOptions, ...baseOptions} + return Apollo.useQuery(GetSupportedChainsDocument, options); + } +export function useGetSupportedChainsLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) { + const options = {...defaultOptions, ...baseOptions} + return Apollo.useLazyQuery(GetSupportedChainsDocument, options); + } +export type GetSupportedChainsQueryHookResult = ReturnType; +export type GetSupportedChainsLazyQueryHookResult = ReturnType; +export type GetSupportedChainsQueryResult = Apollo.QueryResult; export const GetColonyHistoricRoleRolesDocument = gql` query GetColonyHistoricRoleRoles($id: ID!) { getColonyHistoricRole(id: $id) { diff --git a/src/graphql/queries/proxyColonies.graphql b/src/graphql/queries/proxyColonies.graphql new file mode 100644 index 00000000000..41b8f2cf00a --- /dev/null +++ b/src/graphql/queries/proxyColonies.graphql @@ -0,0 +1,15 @@ +query GetProxyColonies($colonyAddress: ID!) { + getProxyColoniesByColonyAddress(colonyAddress: $colonyAddress) { + items { + ...ProxyColony + } + } +} + +query GetSupportedChains { + listSupportedChains { + items { + ...SupportedChain + } + } +} diff --git a/src/hooks/proxyColonies/useDeployedChainIds.ts b/src/hooks/proxyColonies/useDeployedChainIds.ts new file mode 100644 index 00000000000..359c6cc25c3 --- /dev/null +++ b/src/hooks/proxyColonies/useDeployedChainIds.ts @@ -0,0 +1,24 @@ +import { useColonyContext } from '~context/ColonyContext/ColonyContext.ts'; +import { type ProxyColony, useGetProxyColoniesQuery } from '~gql'; +import { notNull } from '~utils/arrays/index.ts'; + +export const useDeployedChainIds = ({ + filterFn = notNull, +}: { + filterFn: (x: ProxyColony) => boolean; +}) => { + const { colony } = useColonyContext(); + const { data } = useGetProxyColoniesQuery({ + variables: { + colonyAddress: colony.colonyAddress, + }, + fetchPolicy: 'network-only', + }); + const deployedProxyColonies = + data?.getProxyColoniesByColonyAddress?.items || []; + const deployedChainIds = deployedProxyColonies + .filter(filterFn) + .map((deployedProxyColony) => deployedProxyColony?.chainId); + + return deployedChainIds; +}; diff --git a/src/hooks/useColonyFundsClaims.ts b/src/hooks/useColonyFundsClaims.ts index 02aefe5134b..6ba6961b7fb 100644 --- a/src/hooks/useColonyFundsClaims.ts +++ b/src/hooks/useColonyFundsClaims.ts @@ -24,14 +24,20 @@ const useColonyFundsClaims = (): ColonyClaims[] => { return []; } - const chainClaimWithToken: ColonyChainClaimWithToken | null = chainFundsClaim - ? { - ...chainFundsClaim, - token: tokens?.items?.find( - (token) => token?.token?.tokenAddress === ADDRESS_ZERO, - )?.token, - } - : null; + const chainClaimWithToken: ColonyChainClaimWithToken[] = chainFundsClaim + ? chainFundsClaim.filter(notNull).map((item): ColonyChainClaimWithToken => { + const chainId = item.id.split('_')[0]; + + return { + ...item, + token: tokens?.items?.find( + (token) => + token?.token?.tokenAddress === ADDRESS_ZERO && + token?.token?.chainMetadata.chainId === chainId, + )?.token, + }; + }) + : []; /* * Claims data needs to be merged, both ERC20's and Native Chain Tokens @@ -41,7 +47,7 @@ const useColonyFundsClaims = (): ColonyClaims[] => { * to do the sorting / merging here, rather than at the time we fetch data. * This kinda sucks! */ - return [...claims, chainClaimWithToken] + return [...claims, ...chainClaimWithToken] .filter(notNull) .sort( (first, second) => diff --git a/src/hooks/useTeamsOptions.ts b/src/hooks/useTeamsOptions.ts index 9f71de76e14..c7a4a48884a 100644 --- a/src/hooks/useTeamsOptions.ts +++ b/src/hooks/useTeamsOptions.ts @@ -3,6 +3,7 @@ import { type Domain, DomainColor } from '~types/graphql.ts'; import { notNull } from '~utils/arrays/index.ts'; import { getDomainNameFallback } from '~utils/domains.ts'; import { + type TeamOption, type SearchSelectOption, type SearchSelectOptionProps, } from '~v5/shared/SearchSelect/types.ts'; @@ -23,8 +24,8 @@ const sortByReputationAndName = (a: Domain, b: Domain) => { }; const useTeamsOptions = ( - filterOptionsFn?: (option: SearchSelectOption) => boolean, -): SearchSelectOptionProps['options'] => { + filterOptionsFn?: (option: SearchSelectOption) => boolean, +): SearchSelectOptionProps['options'] => { const { colony: { domains }, } = useColonyContext(); diff --git a/src/i18n/en-actions.ts b/src/i18n/en-actions.ts index 270b1dc049d..a6328b33241 100644 --- a/src/i18n/en-actions.ts +++ b/src/i18n/en-actions.ts @@ -58,6 +58,12 @@ const actionsMessageDescriptors = { ${ColonyActionType.ManageTokensMultisig} {Manage tokens by {initiator}} ${ColonyActionType.FundExpenditureMotion} {Payment to {recipientsNumber} {recipientsNumber, plural, one {recipient} other {recipients}} with {tokensNumber} {tokensNumber, plural, one {token} other {tokens}} by {initiator}} ${ColonyActionType.MakeArbitraryTransaction} {Custom transactions by {initiator}} + ${ColonyActionType.AddProxyColony} {Add support for {chain} chain by {initiator}} + ${ColonyActionType.AddProxyColonyMotion} {Add support for {chain} chain by {initiator}} + ${ColonyActionType.AddProxyColonyMultisig} {Add support for {chain} chain by {initiator}} + ${ColonyActionType.RemoveProxyColony} {Remove support for {chain} chain by {initiator}} + ${ColonyActionType.RemoveProxyColonyMotion} {Remove support for {chain} chain by {initiator}} + ${ColonyActionType.RemoveProxyColonyMultisig} {Remove support for {chain} chain by {initiator}} ${ExtendedColonyActionType.AddSafe} {Add Safe from {chainName}} ${ExtendedColonyActionType.RemoveSafe} {Remove Safe} ${ExtendedColonyActionType.SafeMultipleTransactions} ${safeActionTitle} @@ -122,6 +128,12 @@ const actionsMessageDescriptors = { ${ColonyActionType.ManageTokens} {Manage tokens} ${ColonyActionType.ManageTokensMotion} {Manage tokens} ${ColonyActionType.ManageTokensMultisig} {Manage tokens} + ${ColonyActionType.AddProxyColony} {Manage supported chains} + ${ColonyActionType.AddProxyColonyMotion} {Manage supported chains} + ${ColonyActionType.AddProxyColonyMultisig} {Manage supported chains} + ${ColonyActionType.RemoveProxyColony} {Manage supported chains} + ${ColonyActionType.RemoveProxyColonyMotion} {Manage supported chains} + ${ColonyActionType.RemoveProxyColonyMultisig} {Manage supported chains} ${ExtendedColonyActionType.StagedPayment} {Staged payment} ${ExtendedColonyActionType.AddSafe} {Add Safe} ${ExtendedColonyActionType.RemoveSafe} {Remove Safe} diff --git a/src/i18n/en.json b/src/i18n/en.json index dbfa60d5f25..0c80fa8f21a 100644 --- a/src/i18n/en.json +++ b/src/i18n/en.json @@ -184,6 +184,9 @@ "button.addFunds": "Add funds", "button.apply": "Apply", "button.confirmDeletion": "Yes, confirm deletion", + "button.manageChains": "Manage chains", + "button.addChain": "Add chain", + "button.removeChain": "Remove chain", "input.resetText": "Cancel", "label.amount": "Amount", "label.username": "Username", @@ -337,6 +340,8 @@ "transaction.group.tokenUnlockAction.description": "Unlocking native Token", "transaction.group.releaseExpenditure.title": "Release Expenditure", "transaction.group.releaseExpenditure.description": "Releasing expenditure", + "transaction.group.createProxyColony.title": "Add Chain Support", + "transaction.group.removeProxyColony.title": "Remove Chain Support", "transaction.group.arbitraryTxs.title": "Custom Transactions", "transaction.group.arbitraryTxs.description": "Custom Transactions", @@ -378,6 +383,8 @@ "transaction.ColonyClient.unlockToken.title": "Unlocking Token", "transaction.ColonyClient.upgrade.title": "Colony Version Upgrade", "transaction.ColonyClient.upgradeExtension.title": "Upgrade Colony Extension", + "transaction.ColonyClient.createProxyColony.title": "Add Chain Support", + "transaction.ColonyClient.removeProxyColony.title": "Remove Chain Support", "transaction.NetworkClient.createColonyForFrontend.title": "Create Colony", @@ -935,6 +942,8 @@ "actions.description.managePermissions": "Manage authority for members to take actions", "actions.editColonyDetails": "Edit colony details", "actions.description.editColonyDetails": "Update details about the colony", + "actions.manageSupportedChains": "Manage supported chains", + "actions.description.manageSupportedChains": "Add and remove chain support for the colony", "actions.upgradeColonyVersion": "Upgrade colony version", "actions.description.upgradeColonyVersion": "Access new features and security updates", "actions.manageVerifiedMembers": "Manage verified members", @@ -1182,6 +1191,12 @@ "actionSidebar.externalLinks": "External links", "actionSidebar.approvedTokens": "Approved tokens", "actionSidebar.advancedPayments": "Advanced Payments", + "actionSidebar.manageSupportedChains": "Add/remove", + "actionSidebar.manageSupportedChains.placeholder": "Select option", + "actionSidebar.manageSupportedChains.title": "Select chain support option", + "actionSidebar.chain": "Chain", + "actionSidebar.chain.placeholder": "Select chain", + "actionSidebar.chain.title": "Available chains", "actionSidebar.manageVerifiedMembers.table.title": "Selected members", "actionSidebar.manageVerifiedMembers.table.column.members": "Members", "actionSidebar.emptyTitle": "No results to display", @@ -1191,6 +1206,8 @@ "actionSidebar.changeActionModal.title": "Do you wish to change the action?", "actionSidebar.option.addMembers": "Add members", "actionSidebar.option.removeMembers": "Remove members", + "actionSidebar.option.addSupportedChain": "Add chain support", + "actionSidebar.option.removeSupportedChain": "Remove chain support", "actionSidebar.mint.token.permission.error": "You don't have the right permissions to create this action type. Please choose another action type.", "actionSidebar.placeholder.teamName": "Enter team name", "actionSidebar.placeholder.purpose": "Enter short description", @@ -1203,6 +1220,10 @@ "actionSidebar.tooltip.actionType": "Identifies the type of action.", "actionSidebar.tooltip.decisionMethod": "Mechanism behind the decision-making process.", "actionSidebar.tooltip.manageMembers": "Whether members are being added or removed.", + "actionSidebar.tooltip.manageSupportedChains": "Whether support for chains are being added or removed.", + "actionSidebar.tooltip.chain.notSelected": "Chain in which support should be added or removed.", + "actionSidebar.tooltip.chain.add": "Chain you want to add support for.", + "actionSidebar.tooltip.chain.remove": "Chain you want to remove support for.", "actionSidebar.tooltip.createdIn": "Team responsible for decision-making and action execution.", "actionSidebar.tooltip.description": "Provide a description for why this action is being performed including any relevant details.", "actionSidebar.tooltip.simplePayment.from": "Team source of the funds.", @@ -1680,6 +1701,8 @@ "errors.milestone.required": "Name is required in {paymentIndex, selectordinal, one {#st} two {#nd} few {#rd} other {#th}} milestone", "errors.milestone.characters": "{paymentIndex, selectordinal, one {#st} two {#nd} few {#rd} other {#th}} milestone exceeds limit of 80 characters.", "errors.fundFrom.required": "Fund from field is required", + "errors.chain.required": "Please select a chain", + "errors.manageSupportedChain.required": "Please select an operation", "editColony.socialLinks.custom": "Custom URL", "editColony.socialLinks.discord": "Discord URL", "editColony.socialLinks.github": "Github URL", diff --git a/src/redux/actionTypes.ts b/src/redux/actionTypes.ts index cdffe62a45c..6a9032ec4ba 100644 --- a/src/redux/actionTypes.ts +++ b/src/redux/actionTypes.ts @@ -2,9 +2,6 @@ export enum ActionTypes { /* * Colony Related (create, recovery, etc) */ - CLAIM_TOKEN = 'CLAIM_TOKEN', - CLAIM_TOKEN_ERROR = 'CLAIM_TOKEN_ERROR', - CLAIM_TOKEN_SUCCESS = 'CLAIM_TOKEN_SUCCESS', CREATE = 'CREATE', CREATE_CANCEL = 'CREATE_CANCEL', CREATE_ERROR = 'CREATE_ERROR', @@ -181,6 +178,12 @@ export enum ActionTypes { MOTION_ARBITRARY_TRANSACTION = 'MOTION_ARBITRARY_TRANSACTION', MOTION_ARBITRARY_TRANSACTION_SUCCESS = 'MOTION_ARBITRARY_TRANSACTION_SUCCESS', MOTION_ARBITRARY_TRANSACTION_ERROR = 'MOTION_ARBITRARY_TRANSACTION_ERROR', + MOTION_PROXY_COLONY_CREATE = 'MOTION_PROXY_COLONY_CREATE ', + MOTION_PROXY_COLONY_CREATE_SUCCESS = 'MOTION_PROXY_COLONY_CREATE_SUCCESS ', + MOTION_PROXY_COLONY_CREATE_ERROR = 'MOTION_PROXY_COLONY_CREATE_ERROR', + MOTION_PROXY_COLONY_ENABLE_DISABLE = 'MOTION_PROXY_COLONY_ENABLE_DISABLE', + MOTION_PROXY_COLONY_ENABLE_DISABLE_SUCCESS = 'MOTION_PROXY_COLONY_ENABLE_DISABLE_SUCCESS', + MOTION_PROXY_COLONY_ENABLE_DISABLE_ERROR = 'MOTION_PROXY_COLONY_ENABLE_DISABLE_ERROR', // Multisig MULTISIG_VOTE = 'MULTISIG_VOTE', @@ -325,4 +328,20 @@ export enum ActionTypes { CREATE_ARBITRARY_TRANSACTION = 'CREATE_ARBITRARY_TRANSACTION', CREATE_ARBITRARY_TRANSACTION_SUCCESS = 'CREATE_ARBITRARY_TRANSACTION_SUCCESS', CREATE_ARBITRARY_TRANSACTION_ERROR = 'CREATE_ARBITRARY_TRANSACTION_ERROR', + /* + * Proxy colonies + */ + PROXY_COLONY_CREATE = 'PROXY_COLONY_CREATE', + PROXY_COLONY_CREATE_SUCCESS = 'PROXY_COLONY_CREATE_SUCCESS', + PROXY_COLONY_CREATE_ERROR = 'PROXY_COLONY_CREATE_ERROR', + PROXY_COLONY_REMOVE = 'PROXY_COLONY_REMOVE', + PROXY_COLONY_REMOVE_SUCCESS = 'PROXY_COLONY_REMOVE_SUCCESS', + PROXY_COLONY_REMOVE_ERROR = 'PROXY_COLONY_REMOVE_ERROR', + PROXY_COLONY_ENABLE = 'PROXY_COLONY_ENABLE', + PROXY_COLONY_ENABLE_SUCCESS = 'PROXY_COLONY_ENABLE_SUCCESS', + PROXY_COLONY_ENABLE_ERROR = 'PROXY_COLONY_ENABLE_ERROR', + + CLAIM_TOKENS_ON_CHAINS = 'CLAIM_TOKENS_ON_CHAINS', + CLAIM_TOKENS_ON_CHAINS_ERROR = 'CLAIM_TOKENS_ON_CHAINS_ERROR', + CLAIM_TOKENS_ON_CHAINS_SUCCESS = 'CLAIM_TOKENS_ON_CHAINS_SUCCESS', } diff --git a/src/redux/sagas/colony/colonyClaimFunds.ts b/src/redux/sagas/colony/colonyClaimFunds.ts new file mode 100644 index 00000000000..da0907a24ed --- /dev/null +++ b/src/redux/sagas/colony/colonyClaimFunds.ts @@ -0,0 +1,136 @@ +import { ClientType } from '@colony/colony-js'; +import { all, fork, put, takeEvery } from 'redux-saga/effects'; + +import { DEFAULT_NETWORK_INFO } from '~constants'; +import { colonyFundingAbi } from '~constants/abis.ts'; +import type ColonyManager from '~context/ColonyManager.ts'; +import { ActionTypes } from '~redux/actionTypes.ts'; +import { type AllActions, type Action } from '~redux/types/actions/index.ts'; +import { TRANSACTION_METHODS } from '~types/transactions.ts'; + +import { + type ChannelDefinition, + createTransaction, + createTransactionChannels, + waitForTxResult, + type TransactionChannelMap, +} from '../transactions/index.ts'; +import { + getColonyManager, + initiateTransaction, + putError, + takeFrom, +} from '../utils/index.ts'; + +function* colonyClaimFunds({ + payload: { colonyAddress, tokenAddressesGroupedByChain }, + meta: { id: metaId }, + meta, +}: Action) { + const txChannels: TransactionChannelMap = {}; + + const batchKey = TRANSACTION_METHODS.ClaimColonyFunds; + + const { claimFundsMulticall }: Record = + yield createTransactionChannels(metaId, ['claimFundsMulticall']); + + const allUniqueTokenAddresses = [ + ...new Set( + tokenAddressesGroupedByChain.flatMap((group) => group.tokenAddresses), + ), + ]; + + try { + const colonyManager: ColonyManager = yield getColonyManager(); + + const colonyFundingContract = colonyManager.getCustomContract( + colonyAddress, + colonyFundingAbi, + ); + + const encodedTransactions = yield all( + tokenAddressesGroupedByChain.flatMap((group) => { + const { chainId, tokenAddresses } = group; + const uniqueTokenAddresses = [...new Set(tokenAddresses)]; + + const isOnMainChain = + !chainId || chainId === DEFAULT_NETWORK_INFO.chainId; + + if (isOnMainChain) { + return uniqueTokenAddresses.map((tokenAddress) => + colonyFundingContract + // This is necessary because there are multiple claimColonyFunds functions with different signatures + // and the custom contract cannot determine which one to choose. + .createTxCreator('claimColonyFunds(address)' as any, [ + tokenAddress, + ]) + .tx() + .encode(), + ); + } + + return uniqueTokenAddresses.map((tokenAddress) => + colonyFundingContract + // This is necessary because there are multiple claimColonyFunds functions with different signatures + // and the custom contract cannot determine which one to choose. + .createTxCreator('claimColonyFunds(uint256,address)' as any, [ + BigInt(chainId), + tokenAddress, + ]) + .tx() + .encode(), + ); + }), + ); + + yield fork(createTransaction, claimFundsMulticall.id, { + context: ClientType.ColonyClient, + methodName: 'multicall', + identifier: colonyAddress, + group: { + key: batchKey, + id: meta.id, + index: 0, + }, + ready: false, + params: [encodedTransactions], + }); + + yield takeFrom( + claimFundsMulticall.channel, + ActionTypes.TRANSACTION_CREATED, + ); + + yield initiateTransaction(claimFundsMulticall.id); + + const { + payload: { + receipt: { transactionHash: txHash }, + }, + } = yield waitForTxResult(claimFundsMulticall.channel); + + // eslint-disable-next-line no-console + console.log('Claim funds multi call txHash', txHash); + + yield put({ + type: ActionTypes.CLAIM_TOKENS_ON_CHAINS_SUCCESS, + payload: { params: { tokenAddresses: allUniqueTokenAddresses } }, + meta, + }); + } catch (error) { + return yield putError( + ActionTypes.CLAIM_TOKENS_ON_CHAINS_ERROR, + error, + meta, + ); + } finally { + for (const { channel: txChannel } of Object.values(txChannels)) { + txChannel.close(); + } + } + return null; +} + +export default function* colonyClaimFundsSagas() { + yield takeEvery(ActionTypes.CLAIM_TOKENS_ON_CHAINS, colonyClaimFunds); +} diff --git a/src/redux/sagas/colony/index.ts b/src/redux/sagas/colony/index.ts deleted file mode 100644 index e72323bb28c..00000000000 --- a/src/redux/sagas/colony/index.ts +++ /dev/null @@ -1,78 +0,0 @@ -import { ClientType } from '@colony/colony-js'; -import { all, call, fork, put, takeEvery } from 'redux-saga/effects'; - -import { ActionTypes } from '~redux/actionTypes.ts'; -import { type AllActions, type Action } from '~redux/types/actions/index.ts'; -import { TRANSACTION_METHODS } from '~types/transactions.ts'; - -import { - type TransactionChannelMap, - createTransaction, - createTransactionChannels, - waitForTxResult, -} from '../transactions/index.ts'; -import { initiateTransaction, putError, takeFrom } from '../utils/index.ts'; - -export { default as colonyCreateSaga } from './colonyCreate.ts'; -export { default as colonyFinishCreate } from './colonyFinishCreate.ts'; - -function* colonyClaimToken({ - payload: { colonyAddress, tokenAddresses }, - meta, -}: Action) { - let txChannels: TransactionChannelMap = {}; - - const batchKey = TRANSACTION_METHODS.ClaimColonyFunds; - - const uniqueTokenAddresses = [...new Set(tokenAddresses)]; - try { - txChannels = yield call( - createTransactionChannels, - meta.id, - uniqueTokenAddresses, - ); - - yield all( - uniqueTokenAddresses.map((tokenAddress, index) => - fork(createTransaction, txChannels[tokenAddress].id, { - context: ClientType.ColonyClient, - methodName: 'claimColonyFunds', - identifier: colonyAddress, - params: [tokenAddress], - group: { - key: batchKey, - id: meta.id, - index, - }, - }), - ), - ); - - for (const tokenAddress of uniqueTokenAddresses) { - const { channel: txChannel, id } = txChannels[tokenAddress]; - - yield takeFrom(txChannel, ActionTypes.TRANSACTION_CREATED); - - yield initiateTransaction(id); - - yield waitForTxResult(txChannel); - } - - yield put({ - type: ActionTypes.CLAIM_TOKEN_SUCCESS, - payload: { params: { tokenAddresses: uniqueTokenAddresses } }, - meta, - }); - } catch (error) { - return yield putError(ActionTypes.CLAIM_TOKEN_ERROR, error, meta); - } finally { - for (const { channel: txChannel } of Object.values(txChannels)) { - txChannel.close(); - } - } - return null; -} - -export default function* colonySagas() { - yield takeEvery(ActionTypes.CLAIM_TOKEN, colonyClaimToken); -} diff --git a/src/redux/sagas/motions/index.ts b/src/redux/sagas/motions/index.ts index d1192b438b6..2e7b2241b08 100644 --- a/src/redux/sagas/motions/index.ts +++ b/src/redux/sagas/motions/index.ts @@ -24,6 +24,10 @@ import manageTokensMotionSaga from './manageTokens.ts'; import manageVerifiedMembersMotionSaga from './manageVerifiedMembers.ts'; import moveFundsMotionSaga from './moveFundsMotion.ts'; import paymentMotionSaga from './paymentMotion.ts'; +import { + createProxyColonyMotionSaga, + enableDisableProxyColonyMotionSaga, +} from './proxyColonies/index.ts'; import revealVoteMotionSaga from './revealVoteMotion.ts'; import rootMotionSaga from './rootMotion.ts'; import stakeMotionSaga from './stakeMotion.ts'; @@ -57,5 +61,7 @@ export default function* actionsSagas() { call(initiateSafeTransactionMotionSaga), call(manageTokensMotionSaga), call(arbitraryTxMotionSaga), + call(createProxyColonyMotionSaga), + call(enableDisableProxyColonyMotionSaga), ]); } diff --git a/src/redux/sagas/motions/proxyColonies/createProxyColony.ts b/src/redux/sagas/motions/proxyColonies/createProxyColony.ts new file mode 100644 index 00000000000..38cfad6371e --- /dev/null +++ b/src/redux/sagas/motions/proxyColonies/createProxyColony.ts @@ -0,0 +1,230 @@ +import { ClientType, Id } from '@colony/colony-js'; +import { type CustomContract } from '@colony/sdk'; +import { AddressZero } from '@ethersproject/constants'; +import { BigNumber } from 'ethers'; +import { call, fork, put, takeEvery } from 'redux-saga/effects'; + +import { ADDRESS_ZERO } from '~constants'; +import { colonyAbi } from '~constants/abis.ts'; +import { PERMISSIONS_NEEDED_FOR_ACTION } from '~constants/actions.ts'; +import { type ColonyManager } from '~context/index.ts'; +import { ActionTypes } from '~redux/actionTypes.ts'; +import { + createTransaction, + createTransactionChannels, + getTxChannel, + waitForTxResult, +} from '~redux/sagas/transactions/index.ts'; +import { + putError, + takeFrom, + getColonyManager, + uploadAnnotation, + initiateTransaction, + createActionMetadataInDB, + getChildIndexLocal, + getPermissionProofsLocal, +} from '~redux/sagas/utils/index.ts'; +import { type AllActions, type Action } from '~redux/types/actions/index.ts'; +import { TRANSACTION_METHODS } from '~types/transactions.ts'; + +function* createProxyColonyMotionSaga({ + payload: { + colonyAddress, + creationSalt, + foreignChainId, + customActionTitle, + annotationMessage, + colonyRoles, + colonyDomains, + isMultiSig = false, + }, + meta: { id: metaId, setTxHash }, + meta, +}: Action) { + let txChannel; + try { + const colonyManager: ColonyManager = yield getColonyManager(); + + const colonyClient = yield colonyManager.getClient( + ClientType.ColonyClient, + colonyAddress, + ); + + const proxyColonyContract: CustomContract = + colonyManager.getCustomContract(colonyAddress, colonyAbi); + + const encodedAction = yield proxyColonyContract + .createTxCreator('createProxyColony', [ + BigInt(foreignChainId), + creationSalt, + ] as any) + .tx() + .encode(); + + txChannel = yield call(getTxChannel, metaId); + + // setup batch ids and channels + const batchKey = TRANSACTION_METHODS.CreateMotion; + + const { createMotion, annotateRootMotion } = + yield createTransactionChannels(metaId, [ + 'createMotion', + 'annotateRootMotion', + ]); + + // eslint-disable-next-line no-inner-declarations + function* getCreateMotionParams() { + if (isMultiSig) { + const initiatorAddress = yield colonyClient.signer.getAddress(); + + // Permission proofs for the user creating the multi-sig motion + const [, childSkillIndex] = yield call(getPermissionProofsLocal, { + networkClient: colonyClient.networkClient, + colonyRoles, + colonyDomains, + requiredDomainId: Id.RootDomain, + requiredColonyRoles: + PERMISSIONS_NEEDED_FOR_ACTION.ManageSupportedChains, + // The address of the user creating the multi-sig motion + permissionAddress: initiatorAddress, + // The user must have multi-sig permissions + isMultiSig: true, + }); + + return { + context: ClientType.MultisigPermissionsClient, + methodName: TRANSACTION_METHODS.CreateMotion, + identifier: colonyAddress, + params: [ + Id.RootDomain, + childSkillIndex, + [ADDRESS_ZERO], + [encodedAction], + ], + group: { + key: batchKey, + id: metaId, + index: 0, + }, + ready: false, + }; + } + + const rootDomain = colonyDomains.find((domain) => + BigNumber.from(domain.nativeId).eq(Id.RootDomain), + ); + + if (!rootDomain) { + throw new Error('Cannot find rootDomain in colony domains'); + } + + const childSkillIndex = yield call(getChildIndexLocal, { + networkClient: colonyClient.networkClient, + parentDomainNativeId: rootDomain.nativeId, + parentDomainSkillId: rootDomain.nativeSkillId, + domainNativeId: rootDomain.nativeId, + domainSkillId: rootDomain.nativeSkillId, + }); + const { skillId } = yield call( + [colonyClient, colonyClient.getDomain], + Id.RootDomain, + ); + + const { key, value, branchMask, siblings } = yield call( + colonyClient.getReputation, + skillId, + AddressZero, + ); + + return { + context: ClientType.VotingReputationClient, + methodName: 'createMotion', + identifier: colonyAddress, + params: [ + Id.RootDomain, + childSkillIndex, + AddressZero, + encodedAction, + key, + value, + branchMask, + siblings, + ], + group: { + key: batchKey, + id: metaId, + index: 0, + }, + ready: false, + }; + } + + const transactionParams = yield getCreateMotionParams(); + // create transactions + yield fork(createTransaction, createMotion.id, transactionParams); + + if (annotationMessage) { + yield fork(createTransaction, annotateRootMotion.id, { + context: ClientType.ColonyClient, + methodName: 'annotateTransaction', + identifier: colonyAddress, + params: [], + group: { + key: batchKey, + id: metaId, + index: 1, + }, + ready: false, + }); + } + + yield takeFrom(createMotion.channel, ActionTypes.TRANSACTION_CREATED); + if (annotationMessage) { + yield takeFrom( + annotateRootMotion.channel, + ActionTypes.TRANSACTION_CREATED, + ); + } + + yield initiateTransaction(createMotion.id); + + const { + payload: { + receipt: { transactionHash: txHash }, + }, + } = yield waitForTxResult(createMotion.channel); + + yield createActionMetadataInDB(txHash, { customTitle: customActionTitle }); + + if (annotationMessage) { + yield uploadAnnotation({ + txChannel: annotateRootMotion, + message: annotationMessage, + txHash, + }); + } + + setTxHash?.(txHash); + + yield put({ + type: ActionTypes.MOTION_PROXY_COLONY_CREATE_SUCCESS, + meta, + }); + } catch (caughtError) { + yield putError( + ActionTypes.MOTION_PROXY_COLONY_CREATE_ERROR, + caughtError, + meta, + ); + } finally { + txChannel.close(); + } +} + +export default function* createProxyColonyMotion() { + yield takeEvery( + ActionTypes.MOTION_PROXY_COLONY_CREATE, + createProxyColonyMotionSaga, + ); +} diff --git a/src/redux/sagas/motions/proxyColonies/enableDisableProxyColony.ts b/src/redux/sagas/motions/proxyColonies/enableDisableProxyColony.ts new file mode 100644 index 00000000000..2ba48c01577 --- /dev/null +++ b/src/redux/sagas/motions/proxyColonies/enableDisableProxyColony.ts @@ -0,0 +1,220 @@ +import { ClientType, Id } from '@colony/colony-js'; +import { AddressZero } from '@ethersproject/constants'; +import { BigNumber } from 'ethers'; +import { call, fork, put, takeEvery } from 'redux-saga/effects'; + +import { PERMISSIONS_NEEDED_FOR_ACTION } from '~constants/actions.ts'; +import { type ColonyManager } from '~context/index.ts'; +import { ActionTypes } from '~redux/actionTypes.ts'; +import { + createTransaction, + createTransactionChannels, + getTxChannel, + waitForTxResult, +} from '~redux/sagas/transactions/index.ts'; +import getMultiSigMotionParams from '~redux/sagas/utils/getMultiSigMotionParams.ts'; +import { + putError, + takeFrom, + getColonyManager, + uploadAnnotation, + initiateTransaction, + createActionMetadataInDB, + getChildIndexLocal, +} from '~redux/sagas/utils/index.ts'; +import { + getDisableProxyColonyOperation, + getEnableProxyColonyOperation, +} from '~redux/sagas/utils/metadataDelta.ts'; +import { type AllActions, type Action } from '~redux/types/actions/index.ts'; +import { TRANSACTION_METHODS } from '~types/transactions.ts'; +import { ManageEntityOperation } from '~v5/common/ActionSidebar/consts.ts'; + +function* enableDisableProxyColonyMotionSaga({ + payload: { + colonyAddress, + foreignChainId, + customActionTitle, + annotationMessage, + colonyDomains, + operation, + colonyRoles, + isMultiSig, + }, + meta: { id: metaId, setTxHash }, + meta, +}: Action) { + let txChannel; + + const isEnableOperation = operation === ManageEntityOperation.Add; + + try { + const colonyManager: ColonyManager = yield getColonyManager(); + + const colonyClient = yield colonyManager.getClient( + ClientType.ColonyClient, + colonyAddress, + ); + + const editColonyByDeltaOperation = isEnableOperation + ? getEnableProxyColonyOperation + : getDisableProxyColonyOperation; + + const encodedAction = colonyClient.interface.encodeFunctionData( + TRANSACTION_METHODS.EditColonyByDelta, + [JSON.stringify(editColonyByDeltaOperation([foreignChainId.toString()]))], + ); + + txChannel = yield call(getTxChannel, metaId); + + const batchKey = TRANSACTION_METHODS.CreateMotion; + + const { manageProxyColonyMotion, annotateManageProxyColonyMotion } = + yield createTransactionChannels(metaId, [ + 'manageProxyColonyMotion', + 'annotateManageProxyColonyMotion', + ]); + + // eslint-disable-next-line no-inner-declarations + function* getCreateMotionParams() { + if (isMultiSig) { + return yield call(getMultiSigMotionParams, { + colonyClient, + colonyRoles, + colonyAddress, + colonyDomains, + encodedAction, + requiredColonyRoles: + PERMISSIONS_NEEDED_FOR_ACTION.ManageSupportedChains, + group: { + key: batchKey, + id: metaId, + index: 0, + }, + }); + } + + const rootDomain = colonyDomains.find((domain) => + BigNumber.from(domain.nativeId).eq(Id.RootDomain), + ); + + if (!rootDomain) { + throw new Error('Cannot find rootDomain in colony domains'); + } + + const childSkillIndex = yield call(getChildIndexLocal, { + networkClient: colonyClient.networkClient, + parentDomainNativeId: rootDomain.nativeId, + parentDomainSkillId: rootDomain.nativeSkillId, + domainNativeId: rootDomain.nativeId, + domainSkillId: rootDomain.nativeSkillId, + }); + const { skillId } = yield call( + [colonyClient, colonyClient.getDomain], + Id.RootDomain, + ); + + const { key, value, branchMask, siblings } = yield call( + colonyClient.getReputation, + skillId, + AddressZero, + ); + + return { + context: ClientType.VotingReputationClient, + methodName: 'createMotion', + identifier: colonyAddress, + params: [ + Id.RootDomain, + childSkillIndex, + AddressZero, + encodedAction, + key, + value, + branchMask, + siblings, + ], + group: { + key: batchKey, + id: metaId, + index: 0, + }, + ready: false, + }; + } + + const transactionParams = yield getCreateMotionParams(); + + yield fork( + createTransaction, + manageProxyColonyMotion.id, + transactionParams, + ); + + if (annotationMessage) { + yield fork(createTransaction, annotateManageProxyColonyMotion.id, { + context: ClientType.ColonyClient, + methodName: 'annotateTransaction', + identifier: colonyAddress, + params: [], + group: { + key: batchKey, + id: metaId, + index: 1, + }, + ready: false, + }); + } + + yield takeFrom( + manageProxyColonyMotion.channel, + ActionTypes.TRANSACTION_CREATED, + ); + if (annotationMessage) { + yield takeFrom( + annotateManageProxyColonyMotion.channel, + ActionTypes.TRANSACTION_CREATED, + ); + } + + yield initiateTransaction(manageProxyColonyMotion.id); + + const { + payload: { + receipt: { transactionHash: txHash }, + }, + } = yield waitForTxResult(manageProxyColonyMotion.channel); + + yield createActionMetadataInDB(txHash, { customTitle: customActionTitle }); + + if (annotationMessage) { + yield uploadAnnotation({ + txChannel: annotateManageProxyColonyMotion, + message: annotationMessage, + txHash, + }); + } + + setTxHash?.(txHash); + + yield put({ + type: ActionTypes.MOTION_PROXY_COLONY_ENABLE_DISABLE_SUCCESS, + meta, + }); + } catch (caughtError) { + yield putError( + ActionTypes.MOTION_PROXY_COLONY_ENABLE_DISABLE_ERROR, + caughtError, + meta, + ); + } finally { + txChannel.close(); + } +} + +export default function* createProxyColonyMotion() { + yield takeEvery( + ActionTypes.MOTION_PROXY_COLONY_ENABLE_DISABLE, + enableDisableProxyColonyMotionSaga, + ); +} diff --git a/src/redux/sagas/motions/proxyColonies/index.ts b/src/redux/sagas/motions/proxyColonies/index.ts new file mode 100644 index 00000000000..1dc32be7394 --- /dev/null +++ b/src/redux/sagas/motions/proxyColonies/index.ts @@ -0,0 +1,2 @@ +export { default as createProxyColonyMotionSaga } from './createProxyColony.ts'; +export { default as enableDisableProxyColonyMotionSaga } from './enableDisableProxyColony.ts'; diff --git a/src/redux/sagas/proxyColonies/createProxyColony.ts b/src/redux/sagas/proxyColonies/createProxyColony.ts new file mode 100644 index 00000000000..5e5bf776c1c --- /dev/null +++ b/src/redux/sagas/proxyColonies/createProxyColony.ts @@ -0,0 +1,162 @@ +import { ClientType } from '@colony/colony-js'; +import { type CustomContract } from '@colony/sdk'; +import { utils } from 'ethers'; +import { call, fork, put, takeEvery } from 'redux-saga/effects'; + +import { colonyAbi } from '~constants/abis.ts'; +import { ContextModule, getContext } from '~context/index.ts'; +import { type Action, ActionTypes, type AllActions } from '~redux'; +import { + transactionHashReceived, + transactionReceiptReceived, + transactionSent, + transactionSucceeded, +} from '~redux/actionCreators/transactions.ts'; +import { addTransactionToDb } from '~state/transactionState.ts'; +import { TransactionStatus } from '~types/graphql.ts'; +import { TRANSACTION_METHODS } from '~types/transactions.ts'; + +import { + createTransaction, + createTransactionChannels, + getTxChannel, +} from '../transactions/createTransaction.ts'; +import { + createActionMetadataInDB, + getColonyManager, + putError, + takeFrom, + uploadAnnotation, +} from '../utils/index.ts'; + +export type CreateProxyColonyPayload = + Action['payload']; + +// @TODO if metatx are enabled sent a metaTx instead of tx +function* createProxyColony({ + payload: { + colonyAddress, + creationSalt, + foreignChainId, + customActionTitle, + annotationMessage, + }, + meta: { id: metaId, setTxHash }, + meta, +}: Action) { + let txChannel; + const batchKey = TRANSACTION_METHODS.CreateProxyColony; + + const { annotateCreateProxyColony } = yield createTransactionChannels( + metaId, + ['annotateCreateProxyColony'], + ); + + const colonyManager = yield getColonyManager(); + const { address } = getContext(ContextModule.Wallet); + + const walletAddress = utils.getAddress(address); + + try { + txChannel = yield call(getTxChannel, metaId); + + const proxyColonyContract: CustomContract = + colonyManager.getCustomContract(colonyAddress, colonyAbi); + const params = [foreignChainId, creationSalt]; + + yield addTransactionToDb(metaId, { + context: ClientType.ColonyClient, // @NOTE we want to add a new context type + createdAt: new Date(), + methodName: 'createProxyColony', + from: walletAddress, + params, + status: TransactionStatus.Ready, + group: { + key: batchKey, + id: metaId, + index: 0, + }, + }); + + if (annotationMessage) { + yield fork(createTransaction, annotateCreateProxyColony.id, { + context: ClientType.ColonyClient, + methodName: 'annotateTransaction', + identifier: colonyAddress, + params: [], + group: { + key: batchKey, + id: metaId, + index: 1, + }, + ready: false, + }); + } + + const [transaction, waitForMined] = yield proxyColonyContract + .createTxCreator('createProxyColony', [ + BigInt(foreignChainId), + creationSalt, + ]) + .tx() + .send({ + gasLimit: BigInt(10_000_000), + }); + + put(transactionSent(metaId)); + + if (!transaction || !transaction.blockHash || !transaction.blockNumber) { + throw new Error('Invalid transaction'); // @TODO add more info + } + + put( + transactionHashReceived(metaId, { + hash: transaction.hash, + blockNumber: transaction.blockNumber, + blockHash: transaction.blockHash, + params, + }), + ); + // eslint-disable-next-line no-console + console.log('PROXY COLONY TXHASH', transaction.hash); + + const [eventData, receipt] = yield waitForMined(); + + put(transactionReceiptReceived(metaId, { params, receipt })); + put(transactionSucceeded(metaId, { eventData, receipt, params })); + + if (annotationMessage) { + yield takeFrom( + annotateCreateProxyColony.channel, + ActionTypes.TRANSACTION_CREATED, + ); + } + + yield createActionMetadataInDB(transaction.hash, { + customTitle: customActionTitle, + }); + + if (annotationMessage) { + yield uploadAnnotation({ + txChannel: annotateCreateProxyColony, + message: annotationMessage, + txHash: transaction.hash, + }); + } + setTxHash?.(transaction.hash); + + yield put({ + type: ActionTypes.PROXY_COLONY_CREATE_SUCCESS, + payload: {}, + meta, + }); + } catch (error) { + yield putError(ActionTypes.PROXY_COLONY_CREATE_ERROR, error, meta); + } finally { + txChannel.close(); + } +} + +export default function* createProxyColonySaga() { + yield takeEvery(ActionTypes.PROXY_COLONY_CREATE, createProxyColony); +} diff --git a/src/redux/sagas/proxyColonies/disableProxyColony.ts b/src/redux/sagas/proxyColonies/disableProxyColony.ts new file mode 100644 index 00000000000..32027ff9811 --- /dev/null +++ b/src/redux/sagas/proxyColonies/disableProxyColony.ts @@ -0,0 +1,129 @@ +import { ClientType } from '@colony/colony-js'; +import { fork, put, takeEvery } from 'redux-saga/effects'; + +import { type Action, ActionTypes, type AllActions } from '~redux'; +import { transactionSetParams } from '~state/transactionState.ts'; +import { TRANSACTION_METHODS } from '~types/transactions.ts'; +import { takeFrom } from '~utils/saga/effects.ts'; + +import { + createTransaction, + createTransactionChannels, + waitForTxResult, +} from '../transactions/createTransaction.ts'; +import { + createActionMetadataInDB, + initiateTransaction, + putError, + uploadAnnotation, +} from '../utils/index.ts'; +import { getDisableProxyColonyOperation } from '../utils/metadataDelta.ts'; + +export type RemoveProxyColonyPayload = + Action['payload']; + +// @TODO if metatx are enabled sent a metaTx instead of tx +function* disableProxyColonyAction({ + payload: { + colonyAddress, + foreignChainId, + customActionTitle, + annotationMessage, + }, + meta: { id: metaId, setTxHash }, + meta, +}: Action) { + const batchKey = TRANSACTION_METHODS.RemoveProxyColony; + + const { disableProxyColony, annotateDisableProxyColony } = + yield createTransactionChannels(metaId, [ + 'disableProxyColony', + 'annotateDisableProxyColony', + ]); + + if (!colonyAddress) { + throw new Error( + 'No colony address set for disableProxyColonyAction transaction', + ); + } + + try { + yield fork(createTransaction, disableProxyColony.id, { + context: ClientType.ColonyClient, + methodName: 'editColonyByDelta', + identifier: colonyAddress, + params: [], + group: { + key: batchKey, + id: metaId, + index: 0, + }, + ready: false, + }); + + if (annotationMessage) { + yield fork(createTransaction, annotateDisableProxyColony.id, { + context: ClientType.ColonyClient, + methodName: 'annotateTransaction', + identifier: colonyAddress, + params: [], + group: { + key: batchKey, + id: metaId, + index: 1, + }, + ready: false, + }); + } + + yield takeFrom(disableProxyColony.channel, ActionTypes.TRANSACTION_CREATED); + if (annotationMessage) { + yield takeFrom( + annotateDisableProxyColony.channel, + ActionTypes.TRANSACTION_CREATED, + ); + } + + yield transactionSetParams(disableProxyColony.id, [ + JSON.stringify( + getDisableProxyColonyOperation([foreignChainId.toString()]), + ), + ]); + + yield initiateTransaction(disableProxyColony.id); + + const { + payload: { + receipt: { transactionHash: txHash }, + }, + } = yield waitForTxResult(disableProxyColony.channel); + + yield createActionMetadataInDB(txHash, { customTitle: customActionTitle }); + + if (annotationMessage) { + yield uploadAnnotation({ + txChannel: annotateDisableProxyColony, + message: annotationMessage, + txHash, + }); + } + + setTxHash?.(txHash); + + yield put({ + type: ActionTypes.PROXY_COLONY_REMOVE_SUCCESS, + payload: {}, + meta, + }); + } catch (error) { + yield putError(ActionTypes.PROXY_COLONY_REMOVE_ERROR, error, meta); + } finally { + [disableProxyColony, annotateDisableProxyColony].forEach((channel) => + channel.channel.close(), + ); + } +} + +export default function* disableProxyColonySaga() { + yield takeEvery(ActionTypes.PROXY_COLONY_REMOVE, disableProxyColonyAction); +} diff --git a/src/redux/sagas/proxyColonies/enableProxyColony.ts b/src/redux/sagas/proxyColonies/enableProxyColony.ts new file mode 100644 index 00000000000..c44428e86a0 --- /dev/null +++ b/src/redux/sagas/proxyColonies/enableProxyColony.ts @@ -0,0 +1,132 @@ +import { ClientType } from '@colony/colony-js'; +import { fork, put, takeEvery } from 'redux-saga/effects'; + +import { type Action, ActionTypes, type AllActions } from '~redux'; +import { transactionSetParams } from '~state/transactionState.ts'; +import { TRANSACTION_METHODS } from '~types/transactions.ts'; +import { takeFrom } from '~utils/saga/effects.ts'; + +import { + createTransaction, + createTransactionChannels, + waitForTxResult, +} from '../transactions/createTransaction.ts'; +import { + createActionMetadataInDB, + initiateTransaction, + putError, + uploadAnnotation, +} from '../utils/index.ts'; +import { getEnableProxyColonyOperation } from '../utils/metadataDelta.ts'; + +export type EnableProxyColonyPayload = + Action['payload']; + +// @TODO if metatx are enabled sent a metaTx instead of tx +function* enableProxyColonyAction({ + payload: { + colonyAddress, + foreignChainId, + customActionTitle, + annotationMessage, + }, + meta: { id: metaId, setTxHash }, + meta, +}: Action) { + const batchKey = TRANSACTION_METHODS.CreateProxyColony; + + const { enableProxyColony, annotateEnableProxyColony } = + yield createTransactionChannels(metaId, [ + 'enableProxyColony', + 'annotateEnableProxyColony', + ]); + + if (!colonyAddress) { + throw new Error( + 'No colony address set for enableProxyColonyAction transaction', + ); + } + + try { + yield fork(createTransaction, enableProxyColony.id, { + context: ClientType.ColonyClient, + methodName: 'editColonyByDelta', + identifier: colonyAddress, + params: [], + group: { + key: batchKey, + id: metaId, + index: 0, + }, + ready: false, + }); + + if (annotationMessage) { + yield fork(createTransaction, annotateEnableProxyColony.id, { + context: ClientType.ColonyClient, + methodName: 'annotateTransaction', + identifier: colonyAddress, + params: [], + group: { + key: batchKey, + id: metaId, + index: 1, + }, + ready: false, + }); + } + + yield takeFrom(enableProxyColony.channel, ActionTypes.TRANSACTION_CREATED); + if (annotationMessage) { + yield takeFrom( + annotateEnableProxyColony.channel, + ActionTypes.TRANSACTION_CREATED, + ); + } + + yield transactionSetParams(enableProxyColony.id, [ + JSON.stringify( + getEnableProxyColonyOperation([foreignChainId.toString()]), + ), + ]); + + yield initiateTransaction(enableProxyColony.id); + + const { + payload: { + receipt: { transactionHash: txHash }, + }, + } = yield waitForTxResult(enableProxyColony.channel); + + // eslint-disable-next-line no-console + console.log('PROXY COLONY ENABLE TXHASH', txHash, customActionTitle); + + yield createActionMetadataInDB(txHash, { customTitle: customActionTitle }); + + if (annotationMessage) { + yield uploadAnnotation({ + txChannel: annotateEnableProxyColony, + message: annotationMessage, + txHash, + }); + } + + setTxHash?.(txHash); + + yield put({ + type: ActionTypes.PROXY_COLONY_ENABLE_SUCCESS, + payload: {}, + meta, + }); + } catch (error) { + yield putError(ActionTypes.PROXY_COLONY_ENABLE_ERROR, error, meta); + } finally { + [enableProxyColony, annotateEnableProxyColony].forEach((channel) => + channel.channel.close(), + ); + } +} + +export default function* enableProxyColonySaga() { + yield takeEvery(ActionTypes.PROXY_COLONY_ENABLE, enableProxyColonyAction); +} diff --git a/src/redux/sagas/proxyColonies/index.ts b/src/redux/sagas/proxyColonies/index.ts new file mode 100644 index 00000000000..2ec60dca6d1 --- /dev/null +++ b/src/redux/sagas/proxyColonies/index.ts @@ -0,0 +1,13 @@ +import { all, call } from 'redux-saga/effects'; + +import createProxyColonySaga from './createProxyColony.ts'; +import disableProxyColonySaga from './disableProxyColony.ts'; +import enableProxyColonySaga from './enableProxyColony.ts'; + +export default function* proxyColonySagas() { + yield all([ + call(createProxyColonySaga), + call(enableProxyColonySaga), + call(disableProxyColonySaga), + ]); +} diff --git a/src/redux/sagas/setupUserContext.ts b/src/redux/sagas/setupUserContext.ts index b547177cc56..6222f430a8b 100644 --- a/src/redux/sagas/setupUserContext.ts +++ b/src/redux/sagas/setupUserContext.ts @@ -13,14 +13,16 @@ import { ActionTypes } from '../actionTypes.ts'; import { type AllActions } from '../types/actions/index.ts'; import actionsSagas from './actions/index.ts'; +import colonyClaimFundsSagas from './colony/colonyClaimFunds.ts'; +import colonyCreateSaga from './colony/colonyCreate.ts'; import colonyFinishCreateSaga from './colony/colonyFinishCreate.ts'; -import colonySagas, { colonyCreateSaga } from './colony/index.ts'; import decisionsSagas from './decisions/index.ts'; import expendituresSagas from './expenditures/index.ts'; import extensionSagas from './extensions/index.ts'; import motionSagas from './motions/index.ts'; import multiSigSagas from './multiSig/index.ts'; // import { setupUserBalanceListener } from './setupUserBalanceListener'; +import proxyColoniesSagas from './proxyColonies/index.ts'; import setupTransactionsSaga from './transactions/transactionsToDb.ts'; import { setupUsersSagas, userLogout } from './users/index.ts'; import { getGasPrices, putError } from './utils/index.ts'; @@ -51,7 +53,7 @@ function* setupContextDependentSagas() { yield all([ call(decisionsSagas), call(actionsSagas), - call(colonySagas), + call(colonyClaimFundsSagas), call(colonyCreateSaga), call(colonyFinishCreateSaga), call(extensionSagas), @@ -61,6 +63,7 @@ function* setupContextDependentSagas() { call(setupUsersSagas), call(expendituresSagas), call(setupTransactionsSaga), + call(proxyColoniesSagas), /** * We've loaded all the context sagas, so we can proceed with redering * all the app's routes diff --git a/src/redux/sagas/utils/getMultiSigMotionParams.ts b/src/redux/sagas/utils/getMultiSigMotionParams.ts new file mode 100644 index 00000000000..82180791257 --- /dev/null +++ b/src/redux/sagas/utils/getMultiSigMotionParams.ts @@ -0,0 +1,89 @@ +import { + ClientType, + type ColonyRole, + Id, + type AnyColonyClient, +} from '@colony/colony-js'; +import { call } from 'redux-saga/effects'; + +import { ADDRESS_ZERO } from '~constants'; +import { type ColonyRoleFragment } from '~gql'; +import { type Domain } from '~types/graphql.ts'; +import { TRANSACTION_METHODS } from '~types/transactions.ts'; + +import { getPermissionProofsLocal } from './proofs.ts'; + +interface IGetMultiSigMotionParams { + permissionAddress?: string; + colonyClient: AnyColonyClient; + colonyAddress: string; + colonyRoles: ColonyRoleFragment[]; + colonyDomains: Domain[]; + requiredColonyRoles: ColonyRole[][]; + encodedAction: string; + isMultiSig?: boolean; + group: { + key: string; + id: string; + index: number; + }; + ready?: boolean; + requiredDomainId?: Id; + targetAddressOverride?: string; +} + +/** + * @TODO Sagas that can easily benefit from this: + * - editColonyMotion + * - manageTokens + * - manageVerifiedMembers + * - rootMotion + */ +function* getMultiSigMotionParams({ + permissionAddress, + colonyClient, + colonyAddress, + colonyDomains, + colonyRoles, + requiredColonyRoles, + encodedAction, + isMultiSig = true, + group, + ready = false, + requiredDomainId = Id.RootDomain, + targetAddressOverride, +}: IGetMultiSigMotionParams) { + const { networkClient, signer } = colonyClient; + + const finalPermissionAddress = + permissionAddress ?? (yield signer.getAddress()); + + const [permissionDomainId, childSkillIndex] = yield call( + getPermissionProofsLocal, + { + networkClient, + colonyRoles, + colonyDomains, + requiredDomainId, + requiredColonyRoles, + permissionAddress: finalPermissionAddress, + isMultiSig, + }, + ); + + return { + context: ClientType.MultisigPermissionsClient, + methodName: TRANSACTION_METHODS.CreateMotion, + identifier: colonyAddress, + params: [ + permissionDomainId, + childSkillIndex, + [targetAddressOverride ?? ADDRESS_ZERO], + [encodedAction], + ], + group, + ready, + }; +} + +export default getMultiSigMotionParams; diff --git a/src/redux/sagas/utils/metadataDelta.ts b/src/redux/sagas/utils/metadataDelta.ts index 524a031c538..47f8e00bce6 100644 --- a/src/redux/sagas/utils/metadataDelta.ts +++ b/src/redux/sagas/utils/metadataDelta.ts @@ -2,6 +2,8 @@ enum MetadataDeltaActionType { ADD_VERIFIED_MEMBERS = 'ADD_VERIFIED_MEMBERS', REMOVE_VERIFIED_MEMBERS = 'REMOVE_VERIFIED_MEMBERS', MANAGE_TOKENS = 'MANAGE_TOKENS', + DISABLE_PROXY_COLONY = 'DISABLE_PROXY_COLONY', + ENABLE_PROXY_COLONY = 'ENABLE_PROXY_COLONY', } type AddVerifiedMembersOperation = { @@ -19,6 +21,16 @@ type ManageTokensOperation = { payload: string[] | unknown[]; }; +type DisableProxyColonyOperation = { + type: MetadataDeltaActionType.DISABLE_PROXY_COLONY; + payload: string[] | unknown[]; +}; + +type EnableProxyColonyOperation = { + type: MetadataDeltaActionType.ENABLE_PROXY_COLONY; + payload: string[] | unknown[]; +}; + export type MetadataDeltaOperation = | AddVerifiedMembersOperation | RemoveVerifiedMembersOperation @@ -50,3 +62,21 @@ export const getManageTokensOperation = ( payload: tokenAddresses, }; }; + +export const getDisableProxyColonyOperation = ( + payload: string[], +): DisableProxyColonyOperation => { + return { + type: MetadataDeltaActionType.DISABLE_PROXY_COLONY, + payload, + }; +}; + +export const getEnableProxyColonyOperation = ( + payload: string[], +): EnableProxyColonyOperation => { + return { + type: MetadataDeltaActionType.ENABLE_PROXY_COLONY, + payload, + }; +}; diff --git a/src/redux/types/actions/colony.ts b/src/redux/types/actions/colony.ts index b36cc5583ab..8d28d9b5f57 100644 --- a/src/redux/types/actions/colony.ts +++ b/src/redux/types/actions/colony.ts @@ -17,15 +17,23 @@ import { type ActionTypeWithMeta, } from './index.ts'; +export type ClaimTokensOnChainsPayload = { + colonyAddress: Address; + tokenAddressesGroupedByChain: { + chainId?: string; + tokenAddresses: `0x${string}`[]; + }[]; +}; + export type ColonyActionTypes = | UniqueActionType< - ActionTypes.CLAIM_TOKEN, - { tokenAddresses: Address[]; colonyAddress: Address }, + ActionTypes.CLAIM_TOKENS_ON_CHAINS, + ClaimTokensOnChainsPayload, object > - | ErrorActionType + | ErrorActionType | UniqueActionType< - ActionTypes.CLAIM_TOKEN_SUCCESS, + ActionTypes.CLAIM_TOKENS_ON_CHAINS_SUCCESS, { params: { tokenAddresses: Address[] } }, object > diff --git a/src/redux/types/actions/index.ts b/src/redux/types/actions/index.ts index 1d6b9039c21..4c618d5fc28 100644 --- a/src/redux/types/actions/index.ts +++ b/src/redux/types/actions/index.ts @@ -9,6 +9,7 @@ import { type IpfsActionTypes } from './ipfs.ts'; import { type MessageActionTypes } from './message.ts'; import { type MotionActionTypes } from './motion.ts'; import { type MultiSigActionTypes } from './multiSig.ts'; +import { type ProxyColoniesActionTypes } from './proxyColonies.ts'; import { type TransactionActionTypes } from './transaction.ts'; import { type UserActionTypes } from './user.ts'; import { type MetacolonyVestingTypes } from './vesting.ts'; @@ -108,7 +109,8 @@ export type AllActions = | MetacolonyVestingTypes | WalletActionTypes | DecisionActionTypes - | ExpendituresActionTypes; + | ExpendituresActionTypes + | ProxyColoniesActionTypes; export type Action = Extract< AllActions, diff --git a/src/redux/types/actions/motion.ts b/src/redux/types/actions/motion.ts index 746f057077e..3a4ab343cfa 100644 --- a/src/redux/types/actions/motion.ts +++ b/src/redux/types/actions/motion.ts @@ -18,6 +18,7 @@ import { type Address, type ManageVerifiedMembersOperation, } from '~types/index.ts'; +import { type ManageEntityOperation } from '~v5/common/ActionSidebar/consts.ts'; import { type AddTransactionTableModel } from '~v5/common/ActionSidebar/partials/forms/ArbitraryTxsForm/types.ts'; import { type OneTxPaymentPayload } from './colonyActions.ts'; @@ -495,4 +496,45 @@ export type MotionActionTypes = | ActionTypeWithMeta< ActionTypes.MOTION_ARBITRARY_TRANSACTION_SUCCESS, MetaWithSetter + > + | UniqueActionType< + ActionTypes.MOTION_PROXY_COLONY_CREATE, + { + colonyAddress: Address; + customActionTitle: string; + annotationMessage?: string; + colonyRoles: ColonyRoleFragment[]; + colonyDomains: Domain[]; + foreignChainId: number; + creationSalt: string; + isMultiSig: boolean; + }, + MetaWithSetter + > + | ErrorActionType + | ActionTypeWithMeta< + ActionTypes.MOTION_PROXY_COLONY_CREATE_SUCCESS, + MetaWithSetter + > + | UniqueActionType< + ActionTypes.MOTION_PROXY_COLONY_ENABLE_DISABLE, + { + colonyAddress: Address; + customActionTitle: string; + annotationMessage?: string; + colonyDomains: Domain[]; + foreignChainId: number; + operation: ManageEntityOperation; + colonyRoles: ColonyRoleFragment[]; + isMultiSig?: boolean; + }, + MetaWithSetter + > + | ErrorActionType< + ActionTypes.MOTION_PROXY_COLONY_ENABLE_DISABLE_ERROR, + object + > + | ActionTypeWithMeta< + ActionTypes.MOTION_PROXY_COLONY_ENABLE_DISABLE_SUCCESS, + MetaWithSetter >; diff --git a/src/redux/types/actions/proxyColonies.ts b/src/redux/types/actions/proxyColonies.ts new file mode 100644 index 00000000000..5c8458f1d6f --- /dev/null +++ b/src/redux/types/actions/proxyColonies.ts @@ -0,0 +1,48 @@ +import { type ActionTypes } from '~redux/actionTypes.ts'; +import { type Address } from '~types/index.ts'; + +import { + type MetaWithSetter, + type ErrorActionType, + type UniqueActionType, +} from './index.ts'; + +export type ProxyColoniesActionTypes = + | UniqueActionType< + ActionTypes.PROXY_COLONY_CREATE, + { + colonyAddress: Address; + foreignChainId: number; + creationSalt: `0x${string}`; + annotationMessage?: string; + customActionTitle: string; + }, + MetaWithSetter + > + | ErrorActionType + | UniqueActionType + | UniqueActionType< + ActionTypes.PROXY_COLONY_REMOVE, + { + colonyAddress: Address; + foreignChainId: number; + annotationMessage?: string; + customActionTitle: string; + }, + MetaWithSetter + > + | ErrorActionType + | UniqueActionType + | UniqueActionType< + ActionTypes.PROXY_COLONY_ENABLE, + { + colonyAddress: Address; + foreignChainId: number; + annotationMessage?: string; + customActionTitle: string; + }, + MetaWithSetter + > + | ErrorActionType + | UniqueActionType + | UniqueActionType; diff --git a/src/types/network.ts b/src/types/network.ts index 80aa7498fb0..afe0798bea0 100644 --- a/src/types/network.ts +++ b/src/types/network.ts @@ -10,6 +10,8 @@ export enum Network { Amoy = 'amoy', ArbitrumOne = 'arbitrumOne', ArbitrumSepolia = 'arbitrumSepolia', + DevProxyChain1 = 'devProxyChain1', + DevProxyChain2 = 'devProxyChain2', } export const ColonyJSNetworkMapping = { diff --git a/src/types/proxyColonies.ts b/src/types/proxyColonies.ts new file mode 100644 index 00000000000..b5a556a1ac1 --- /dev/null +++ b/src/types/proxyColonies.ts @@ -0,0 +1,8 @@ +import { type Icon } from '@phosphor-icons/react'; + +export interface SupportedChain { + name: string; + chainId: number; + icon: Icon; + isDisabled?: boolean; +} diff --git a/src/types/transactions.ts b/src/types/transactions.ts index 988a3246678..758052e0c27 100644 --- a/src/types/transactions.ts +++ b/src/types/transactions.ts @@ -114,4 +114,8 @@ export enum TRANSACTION_METHODS { Upgrade = 'upgrade', UpgradeExtension = 'upgradeExtension', VoteOnMultiSig = 'voteOnMultiSig', + // Proxy colonies + CreateProxyColony = 'createProxyColony', + RemoveProxyColony = 'removeProxyColony', + ProxyColonyClaimFunds = 'proxyColonyClaimFunds', } diff --git a/src/utils/claims.ts b/src/utils/claims.ts new file mode 100644 index 00000000000..61df667fe1f --- /dev/null +++ b/src/utils/claims.ts @@ -0,0 +1,31 @@ +import { type ColonyClaims } from '~types/graphql.ts'; + +export const getGroupedUnclaimedClaimsByChain = ( + unclaimedClaims: ColonyClaims[], +) => { + const groupedUnclaimedClaims = unclaimedClaims.reduce( + (acc, claim) => { + if (!claim || !claim.token) return acc; + + const { chainId } = claim.token?.chainMetadata ?? {}; + const { tokenAddress } = claim.token; + + // Ensure the chainId group exists + if (!acc[chainId]) { + acc[chainId] = new Set(); + } + + acc[chainId].add(tokenAddress); + + return acc; + }, + {} as Record>, + ); + + return Object.entries(groupedUnclaimedClaims).map( + ([chainId, addressesSet]) => ({ + chainId, + tokenAddresses: Array.from(addressesSet), + }), + ); +}; diff --git a/src/utils/currency/config.ts b/src/utils/currency/config.ts index 4e5299ac335..0f02fc79b67 100644 --- a/src/utils/currency/config.ts +++ b/src/utils/currency/config.ts @@ -46,6 +46,8 @@ const coinGeckoAssetPlatforms: { [key in Network]: string } = { [Network.Goerli]: 'ethereum', [Network.Mainnet]: 'ethereum', [Network.Polygon]: 'polygon-pos', + [Network.DevProxyChain1]: 'arbitrum-one', + [Network.DevProxyChain2]: 'arbitrum-one', }; export const coinGeckoMappings = { diff --git a/src/utils/multiSig/index.ts b/src/utils/multiSig/index.ts index 5c9fc30f1a4..fc9a70cf5ee 100644 --- a/src/utils/multiSig/index.ts +++ b/src/utils/multiSig/index.ts @@ -75,6 +75,10 @@ export const getRolesNeededForMultiSigAction = ({ case ColonyActionType.MakeArbitraryTransactionsMultisig: permissions = PERMISSIONS_NEEDED_FOR_ACTION.ArbitraryTxs; break; + case ColonyActionType.AddProxyColonyMultisig: + case ColonyActionType.RemoveProxyColonyMultisig: + permissions = PERMISSIONS_NEEDED_FOR_ACTION.ManageSupportedChains; + break; default: permissions = undefined; break; diff --git a/src/utils/proxyColonies.ts b/src/utils/proxyColonies.ts new file mode 100644 index 00000000000..2f973594739 --- /dev/null +++ b/src/utils/proxyColonies.ts @@ -0,0 +1,12 @@ +import { SUPPORTED_CHAINS } from '~constants/proxyColonies.ts'; + +import { isNil } from './lodash.ts'; + +export const findSupportedChain = (chainId: number | undefined | null) => { + if (isNil(chainId)) { + return null; + } + return SUPPORTED_CHAINS.find( + (supportedChain) => supportedChain.chainId === chainId.toString(), + ); +}; diff --git a/src/utils/tokens.ts b/src/utils/tokens.ts index dd6cfa1099f..93f68a76dc0 100644 --- a/src/utils/tokens.ts +++ b/src/utils/tokens.ts @@ -19,20 +19,32 @@ import { type Address } from '~types/index.ts'; import { notNull } from './arrays/index.ts'; import { convertToDecimal } from './convertToDecimal.ts'; -export const getBalanceForTokenAndDomain = ( - balances: ColonyBalances | null | undefined, - tokenAddress: Address, - domainId: number = COLONY_TOTAL_BALANCE_DOMAIN_ID, -) => { +export const getBalanceForTokenAndDomain = ({ + balances, + tokenAddress, + tokenChainId, + domainId = COLONY_TOTAL_BALANCE_DOMAIN_ID, +}: { + balances: ColonyBalances | null | undefined; + tokenAddress: Address; + tokenChainId: string; + domainId?: number | ''; +}) => { const currentDomainBalance = balances?.items ?.filter((domainBalance) => - domainId === COLONY_TOTAL_BALANCE_DOMAIN_ID + domainId === COLONY_TOTAL_BALANCE_DOMAIN_ID || domainId === '' ? domainBalance?.domain === null : domainBalance?.domain?.nativeId === domainId, ) - .find( - (domainBalance) => domainBalance?.token?.tokenAddress === tokenAddress, - ); + .find((domainBalance) => { + const isMatchingChainId = + domainBalance?.token?.chainMetadata?.chainId === tokenChainId; + + const isMatchTokenAddress = + domainBalance?.token?.tokenAddress === tokenAddress; + + return isMatchingChainId && isMatchTokenAddress; + }); return BigNumber.from(currentDomainBalance?.balance ?? 0); }; @@ -143,6 +155,9 @@ export const getNativeTokenByChainId = (chainId: string): Token => { return { tokenAddress: ADDRESS_ZERO, ...selectedNetwork.nativeToken, + chainMetadata: { + chainId: selectedNetwork.chainId, + }, }; }; diff --git a/src/utils/validation/hasEnoughFundsValidation.ts b/src/utils/validation/hasEnoughFundsValidation.ts index 68dd389d8b4..eb1537faaa8 100644 --- a/src/utils/validation/hasEnoughFundsValidation.ts +++ b/src/utils/validation/hasEnoughFundsValidation.ts @@ -50,11 +50,12 @@ export const hasEnoughFundsValidation = ({ return false; } - const tokenBalance = getBalanceForTokenAndDomain( - colony.balances, - selectedToken.tokenAddress, - domainId || Id.RootDomain, - ); + const tokenBalance = getBalanceForTokenAndDomain({ + balances: colony.balances, + tokenAddress: selectedToken.tokenAddress, + tokenChainId: selectedToken.chainMetadata.chainId, + domainId: domainId || Id.RootDomain, + }); const tokenDecimals = getTokenDecimalsWithFallback(selectedToken.decimals); diff --git a/wagmi.config.ts b/wagmi.config.ts new file mode 100644 index 00000000000..3ff760a3580 --- /dev/null +++ b/wagmi.config.ts @@ -0,0 +1,66 @@ +import { defineConfig } from '@wagmi/cli'; +import { fetch } from '@wagmi/cli/plugins'; +import { type Address } from 'viem'; + +interface Contract { + name: string; + address: Address; + path: string; +} + +const contracts: Contract[] = [ + { + name: 'ColonyNetwork', + // This is a little weird as the fetch plugin really requires an address, which is a bit too limiting + // Just change this to something unique for every contract ABI we need (made up or actual address) + address: '0x777760996135F0791E2e1a74aFAa060711197777', + path: 'colonyNetwork/ColonyNetwork.sol/ColonyNetwork.json', + }, + { + name: 'Colony', + // I just incremented the EtherRouter address by one. This is fake. Do not refer to it + address: '0x777760996135F0791E2e1a74aFAa060711197778', + path: 'colony/Colony.sol/Colony.json', + }, + { + name: 'ColonyFunding', + path: 'colony/ColonyFunding.sol/ColonyFunding.json', + address: '0x777760996135F0791E2e1a74aFAa060711197779', + }, + { + name: 'ProxyColony', + address: '0x777760996135F0791E2e1a74aFAa060711197781', + path: 'bridging/ProxyColony.sol/ProxyColony.json', + }, +]; + +export default defineConfig({ + out: 'src/constants/abis.ts', + contracts: [], + plugins: [ + fetch({ + contracts, + async parse({ response }) { + const { abi } = await response.json(); + return abi; + }, + request(contract) { + if (!contract.address) { + throw new Error('Contract address is required'); + } + const contractDefinition = contracts.find( + ({ address }) => address === contract.address, + ); + if (!contractDefinition) { + throw new Error( + `Could not find contract with address ${contract.address}`, + ); + } + return { + // Anyone remember trufflepig? + url: `http://localhost:3006/artifacts/contracts/${contractDefinition.path}`, + }; + }, + }), + ], +});