Skip to content

Commit

Permalink
Support pure proxy replication on Asset Hub for Heroic, Polytope Labs…
Browse files Browse the repository at this point in the history
…, PBA, Social editorial board (#615)
  • Loading branch information
Tbaut authored Jan 6, 2025
1 parent e0455d7 commit 5b39ac8
Show file tree
Hide file tree
Showing 11 changed files with 134 additions and 23 deletions.
3 changes: 2 additions & 1 deletion packages/ui/.env.example
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
VITE_NETWORK_NAME="kusama"
VITE_CHAIN_ID="kusama"
VITE_EXPLORER_NETWORK_NAME="kusama"
VITE_WS_PROVIDER="wss://rpc.ibp.network/kusama"
VITE_GRAPHQL_HTTP_PROVIDER="http://localhost:4350/graphql"
2 changes: 1 addition & 1 deletion packages/ui/.env.staging
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
VITE_CHAIN_ID="kusama"
VITE_NETWORK_NAME="kusama"
VITE_EXPLORER_NETWORK_NAME="kusama"
VITE_WS_PROVIDER="ws://localhost:8000"
VITE_GRAPHQL_HTTP_PROVIDER="http://localhost:4350/graphql"
3 changes: 2 additions & 1 deletion packages/ui/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,8 @@ To connect to your local indexer, you will need an env file. You can rename `.en
When you launch the front-end, for it to point to the urls specified in your `.env`, you must specify `network=local` e.g : http://localhost:3333?network=local

```bash
VITE_NETWORK_NAME="kusama" # this name is needed to build explorer links
VITE_CHAIN_ID="kusama" # it will be used for identifying accounts on the idexer
VITE_EXPLORER_NETWORK_NAME="kusama" # this name is needed to build explorer links
VITE_WS_PROVIDER="wss://rpc.ibp.network/kusama" # the front-end will connect to this blockchain node
VITE_GRAPHQL_HTTP_PROVIDER="http://localhost:4350/graphql" # url queried for the indexer queries
```
Expand Down
23 changes: 18 additions & 5 deletions packages/ui/src/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import { nodesJoystreamSVG } from './logos/joystreamSVG'
import { chainsWatrPNG } from './logos/watrPNG'
import paseoSVG from './logos/paseoSVG.svg'
import { nodesCoretimeSVG } from './logos/coretimeSVG'
import { polimecSVG } from './logos/polimecSVG'

export const DAPP_NAME = 'Multix'
export const ICON_SIZE_LARGE = 92
Expand All @@ -35,7 +36,7 @@ export interface NetworkInfo {
pplChainRpcUrls?: string[]
}

export const HTTP_GRAPHQL_URL = `https://chainsafe.squids.live/multix-arrow/v/v5/graphql`
export const HTTP_GRAPHQL_URL = `https://chainsafe.squids.live/multix-arrow@v6/api/graphql`

export const PAYMENT_INFO_ACCOUNT = '5CXQZrh1MSgnGGCdJu3tqvRfCv7t5iQXGGV9UKotrbfhkavs'

Expand Down Expand Up @@ -341,6 +342,17 @@ export const networkList: Record<string, NetworkInfo> = {
httpGraphqlUrl: HTTP_GRAPHQL_URL,
logo: nodesKiltPNG
},
polimec: {
chainId: 'polimec',
explorerNetworkName: 'polimec',
rpcUrls: [
'wss://polimec.rpc.amforc.com',
'wss://rpc.helikon.io/polimec',
'wss://polimec.ibp.network'
],
httpGraphqlUrl: HTTP_GRAPHQL_URL,
logo: polimecSVG
},
local: {
chainId: import.meta.env.VITE_CHAIN_ID,
explorerNetworkName: import.meta.env.VITE_NETWORK_NAME as 'kusama',
Expand All @@ -358,19 +370,20 @@ export const polkadotNetworksAndParachains: Partial<keyof typeof networkList>[]
// 'astar',
'bifrost-dot',
'hydration',
'interlay',
// 'interlay',
// 'kilt',
// 'moonbeam',
// 'pendulum',
'phala'
'phala',
'polimec'
// 'watr'
]
export const kusamaNetworksAndParachains: Partial<keyof typeof networkList>[] = [
'kusama',
'asset-hub-ksm',
'coretime-ksm'
// 'coretime-ksm'
// 'amplitude',
// 'khala'
'khala'
// 'moonriver'
]
export const soloChains: Partial<keyof typeof networkList>[] = [
Expand Down
2 changes: 2 additions & 0 deletions packages/ui/src/logos/polimecSVG.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
export const polimecSVG =
'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzYwIiBoZWlnaHQ9IjM2MCIgdmlld0JveD0iMCAwIDM2MCAzNjAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGQ9Ik0xODAgMzYwQzI3OS40MTEgMzYwIDM2MCAyNzkuNDExIDM2MCAxODBDMzYwIDgwLjU4ODcgMjc5LjQxMSAwIDE4MCAwQzgwLjU4ODcgMCAwIDgwLjU4ODcgMCAxODBDMCAyNzkuNDExIDgwLjU4ODcgMzYwIDE4MCAzNjBaIiBmaWxsPSIjQ0FGRkEwIi8+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8yMzQwXzEwNDkpIj4KPHBhdGggZD0iTTE4MC4wMjkgMTk5LjFWMTg5LjZDMTk1LjMgMTg5LjYgMjEwLjEwNSAxODguMzYgMjI0LjAzIDE4NS45MTVDMjM3LjQgMTgzLjU2OCAyNDkuMzc5IDE4MC4yMTkgMjU5LjYzNCAxNzUuOTYzQzI2OS41MDQgMTcxLjg2NiAyNzcuNTE3IDE2Ni45NTYgMjgyLjgwNyAxNjEuNzY2QzI4Ny44NjcgMTU2Ljc5OSAyOTAuNDMzIDE1MS42OCAyOTAuNDMzIDE0Ni41NUMyOTAuNDMzIDE0MS40MiAyODcuODY3IDEzNi4zMDEgMjgyLjgwNyAxMzEuMzM1QzI3Ny41MTggMTI2LjE0NCAyNjkuNTA2IDEyMS4yMzYgMjU5LjYzNCAxMTcuMTM3QzI0OS4zNzkgMTEyLjg4MSAyMzcuNCAxMDkuNTMyIDIyNC4wMyAxMDcuMTg1QzIxMC4xMDQgMTA0Ljc0IDE5NS4zIDEwMy41IDE4MC4wMjkgMTAzLjVDMTczLjAyOSAxMDMuNSAxNjYuMDIzIDEwMy43NjYgMTU5LjIwNCAxMDQuMjkzQzE1My41NjYgMTA0LjcyOCAxNDcuOTY5IDEwNS4zNDggMTQyLjU2NyAxMDYuMTM1TDE0MS4xOTggOTYuNzMzOEMxNDYuODExIDk1LjkxNTggMTUyLjYyMyA5NS4yNzE5IDE1OC40NzMgOTQuODIwN0MxNjUuNTM1IDk0LjI3NTcgMTcyLjc4OCA5My45OTg3IDE4MC4wMyA5My45OTg3QzIxMS4zOTkgOTMuOTk4NyAyNDAuOTY0IDk5LjA5OTYgMjYzLjI3OCAxMDguMzYyQzI4Ni45MTcgMTE4LjE3NSAyOTkuOTM2IDEzMS43MzYgMjk5LjkzNiAxNDYuNTQ5QzI5OS45MzYgMTYxLjM2MiAyODYuOTE3IDE3NC45MjMgMjYzLjI3OCAxODQuNzM2QzI0MC45NjQgMTkzLjk5OCAyMTEuMzk5IDE5OS4wOTkgMTgwLjAzIDE5OS4wOTlMMTgwLjAyOSAxOTkuMVoiIGZpbGw9IiMyNTMxMUMiLz4KPHBhdGggZD0iTTE3OS45MDQgMjY1LjI0OUMxNDguNTM1IDI2NS4yNDkgMTE4Ljk3MSAyNjAuMTQ4IDk2LjY1NjQgMjUwLjg4NUM3My4wMTg4IDI0MS4wNzMgNjAgMjI3LjUxMiA2MCAyMTIuNjk4QzYwIDE5Ny44ODUgNzMuMDE4OCAxODQuMzI0IDk2LjY1NzcgMTc0LjUxMUMxMTguOTcyIDE2NS4yNDkgMTQ4LjUzNiAxNjAuMTQ4IDE3OS45MDYgMTYwLjE0OFYxNjkuNjQ4QzE2NC42MzUgMTY5LjY0OCAxNDkuODMxIDE3MC44ODggMTM1LjkwNCAxNzMuMzMzQzEyMi41MzQgMTc1LjY4MSAxMTAuNTU1IDE3OS4wMjkgMTAwLjMwMSAxODMuMjg2QzkwLjQzIDE4Ny4zODMgODIuNDE3MSAxOTIuMjkyIDc3LjEyNzUgMTk3LjQ4M0M3Mi4wNjc1IDIwMi40NDkgNjkuNTAxMiAyMDcuNTY4IDY5LjUwMTIgMjEyLjY5OEM2OS41MDEyIDIxNy44MjggNzIuMDY3NSAyMjIuOTQ4IDc3LjEyNzUgMjI3LjkxNEM4Mi40MTU4IDIzMy4xMDUgOTAuNDI4NyAyMzguMDEzIDEwMC4zMDEgMjQyLjExMUMxMTAuNTU1IDI0Ni4zNjggMTIyLjUzNCAyNDkuNzE2IDEzNS45MDQgMjUyLjA2NEMxNDkuODMxIDI1NC41MDggMTY0LjYzNSAyNTUuNzQ5IDE3OS45MDYgMjU1Ljc0OUMxODYuOTA1IDI1NS43NDkgMTkzLjkxMSAyNTUuNDgyIDIwMC43MyAyNTQuOTU2QzIwNi4zNjggMjU0LjUyIDIxMS45NjUgMjUzLjkgMjE3LjM2NyAyNTMuMTE0TDIxOC43MzYgMjYyLjUxNUMyMTMuMTI0IDI2My4zMzMgMjA3LjMxMiAyNjMuOTc3IDIwMS40NjEgMjY0LjQyOEMxOTQuNCAyNjQuOTczIDE4Ny4xNDcgMjY1LjI1IDE3OS45MDQgMjY1LjI1VjI2NS4yNDlaIiBmaWxsPSIjMjUzMTFDIi8+CjxwYXRoIGQ9Ik0xODAuMDY0IDIzMi4xNDdDMTQ4LjY4NyAyMzIuMTQ3IDExOS4xMTQgMjI3LjA1IDk2Ljc5NjIgMjE3Ljc5NUM3My4xNDk0IDIwNy45OTEgNjAuMTI3OSAxOTQuNDM4IDYwLjEyNzkgMTc5LjYzNEM2MC4xMjc5IDE2NC44MyA3My4xNTA3IDE1MS4yNzYgOTYuNzk2MiAxNDEuNDcyQzExOS4xMTYgMTMyLjIxNyAxNDguNjg3IDEyNy4xMiAxODAuMDY0IDEyNy4xMkMyMTEuNDQxIDEyNy4xMiAyNDEuMDE0IDEzMi4yMTcgMjYzLjMzMiAxNDEuNDcyQzI4Ni45NzcgMTUxLjI3NiAzMDAgMTY0LjgzIDMwMCAxNzkuNjM0QzMwMCAxOTQuNDM4IDI4Ni45NzcgMjA3Ljk5MSAyNjMuMzMyIDIxNy43OTVDMjQxLjAxMiAyMjcuMDUgMjExLjQ0MSAyMzIuMTQ3IDE4MC4wNjQgMjMyLjE0N1pNMTgwLjA2NCAxMzYuNjJDMTY0Ljc4OCAxMzYuNjIgMTQ5Ljk4IDEzNy44NTkgMTM2LjA0OSAxNDAuMzAzQzEyMi42NzUgMTQyLjY0OSAxMTAuNjkyIDE0NS45OTUgMTAwLjQzNSAxNTAuMjQ5QzkwLjU2MTkgMTU0LjM0MyA4Mi41NDYzIDE1OS4yNDggNzcuMjU1NCAxNjQuNDM1QzcyLjE5NDEgMTY5LjM5NiA2OS42Mjc4IDE3NC41MSA2OS42Mjc4IDE3OS42MzVDNjkuNjI3OCAxODQuNzYgNzIuMTk0MSAxODkuODc0IDc3LjI1NTQgMTk0LjgzNUM4Mi41NDYzIDIwMC4wMjEgOTAuNTYwNSAyMDQuOTI3IDEwMC40MzUgMjA5LjAyMUMxMTAuNjkyIDIxMy4yNzUgMTIyLjY3NSAyMTYuNjIxIDEzNi4wNDkgMjE4Ljk2N0MxNDkuOTggMjIxLjQxMSAxNjQuNzg5IDIyMi42NSAxODAuMDY0IDIyMi42NUMxOTUuMzM5IDIyMi42NSAyMTAuMTQ4IDIyMS40MTEgMjI0LjA3OSAyMTguOTY3QzIzNy40NTIgMjE2LjYyMSAyNDkuNDM1IDIxMy4yNzUgMjU5LjY5MyAyMDkuMDIxQzI2OS41NjYgMjA0LjkyNyAyNzcuNTgyIDIwMC4wMjEgMjgyLjg3MiAxOTQuODM1QzI4Ny45MzQgMTg5Ljg3NCAyOTAuNSAxODQuNzYgMjkwLjUgMTc5LjYzNUMyOTAuNSAxNzQuNTEgMjg3LjkzNCAxNjkuMzk2IDI4Mi44NzIgMTY0LjQzNUMyNzcuNTgyIDE1OS4yNDggMjY5LjU2NyAxNTQuMzQzIDI1OS42OTMgMTUwLjI0OUMyNDkuNDM1IDE0NS45OTUgMjM3LjQ1MiAxNDIuNjQ5IDIyNC4wNzkgMTQwLjMwM0MyMTAuMTQ4IDEzNy44NTkgMTk1LjMzOSAxMzYuNjIgMTgwLjA2NCAxMzYuNjJaIiBmaWxsPSIjMjUzMTFDIi8+CjwvZz4KPGRlZnM+CjxjbGlwUGF0aCBpZD0iY2xpcDBfMjM0MF8xMDQ5Ij4KPHJlY3Qgd2lkdGg9IjI0MCIgaGVpZ2h0PSIxNzEuMjQ5IiBmaWxsPSJ3aGl0ZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoNjAgOTQpIi8+CjwvY2xpcFBhdGg+CjwvZGVmcz4KPC9zdmc+Cg=='
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#hydradx
BLOCK_START=0
PREFIX=63
RPC_WS="wss://hydradx-rpc.dwellir.com"
RPC_WS="wss://hydration.ibp.network"
GATEWAY_URL="https://v2.archive.subsquid.io/network/hydradx"
CHAIN_ID='hydradx'
2 changes: 1 addition & 1 deletion squid/assets/envs/.env.khala
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#khala
BLOCK_START=0
PREFIX=30
RPC_WS="wss://khala-api.phala.network/ws"
RPC_WS="wss://rpc.helikon.io/khala"
GATEWAY_URL="https://v2.archive.subsquid.io/network/khala"
CHAIN_ID='khala'
5 changes: 5 additions & 0 deletions squid/assets/envs/.env.polimec
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
BLOCK_START=0
PREFIX=41
RPC_WS="wss://polimec.rpc.amforc.com"
GATEWAY_URL="https://v2.archive.subsquid.io/network/polimec"
CHAIN_ID='polimec'
16 changes: 13 additions & 3 deletions squid/commands.json
Original file line number Diff line number Diff line change
Expand Up @@ -96,14 +96,14 @@
"dotenv_config_path=assets/envs/.env.asset-hub-kusama"
]
},
"start-hydradx": {
"description": "starts the indexer with hydradx",
"start-hydration": {
"description": "starts the indexer with hydration",
"cmd": [
"node",
"-r",
"dotenv/config",
"lib/main",
"dotenv_config_path=assets/envs/.env.hydradx"
"dotenv_config_path=assets/envs/.env.hydration"
]
},
"start-amplitude": {
Expand Down Expand Up @@ -229,6 +229,16 @@
"lib/main",
"dotenv_config_path=assets/envs/.env.coretime-kusama"
]
},
"start-polimec": {
"description": "starts the indexer with polimec",
"cmd": [
"node",
"-r",
"dotenv/config",
"lib/main",
"dotenv_config_path=assets/envs/.env.polimec"
]
}
}
}
20 changes: 11 additions & 9 deletions squid/squid-manifests/large-squid.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
manifestVersion: subsquid.io/v0.1
name: multix-arrow
version: 5
version: 6
description: |-
Arrow Squid for Multix
Expand Down Expand Up @@ -28,18 +28,18 @@ deploy:
cmd: ['sqd', 'start-acala']
- name: bifrost-polkadot-processor
cmd: ['sqd', 'start-bifrost-polkadot']
- name: interlay-processor
cmd: ['sqd', 'start-interlay']
# - name: interlay-processor
# cmd: ['sqd', 'start-interlay']
# - name: astar-processor
# cmd: ['sqd', 'start-astar']
- name: hydradx-processor
cmd: ['sqd', 'start-hydradx']
- name: hydration-processor
cmd: ['sqd', 'start-hydration']
# - name: moonbeam-processor
# cmd: ['sqd', 'start-moonbeam']
# - name: moonriver-processor
# cmd: ['sqd', 'start-moonriver']
# - name: khala-processor
# cmd: ['sqd', 'start-khala']
- name: khala-processor
cmd: ['sqd', 'start-khala']
- name: westend-processor
cmd: ['sqd', 'start-westend']
- name: paseo-processor
Expand All @@ -54,10 +54,12 @@ deploy:
# cmd: ['sqd', 'start-pendulum']
# - name: amplitude-processor
# cmd: ['sqd', 'start-amplitude']
- name: coretime-kusama-processor
cmd: ['sqd', 'start-coretime-kusama']
# - name: coretime-kusama-processor
# cmd: ['sqd', 'start-coretime-kusama']
- name: coretime-polkadot-processor
cmd: ['sqd', 'start-coretime-polkadot']
- name: polimec-processor
cmd: ['sqd', 'start-polimec']
# api:
# env:
# SQD_DEBUG: sqd:graphql-server
Expand Down
79 changes: 78 additions & 1 deletion squid/src/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,43 @@ import { getAccountId } from './util/getAccountId'
import { getProxyAccountIByDelegatorIds } from './util/getProxyAccountIByDelegatorIds'
import { KillPureCallInfo, getProxyKillPureArgs } from './util/getProxyKillPureArgs'
import { handleProxyKillPure } from './processorHandlers/handleProxyKillPure'
import { getProxyAccountId } from './util/getProxyAccountId'
import { ProxyType } from './model'

// Manually add asset hub pure proxies
// https://polkadot.subsquare.io/referenda/1308
const PURE_PROXIEs_MIGRATION_BLOCK = 7903349 // <-- this needs to be a block where something happens
const PURE_PROXIEs_MIGRATION_CHAIN = 'asset-hub-polkadot'
const PURE_PROXIES_MIGRATION_ARRAY = [
{
entity: 'Heroic',
who: '16Cf2SMFkWMApL7fiaiu3nSFiVk3wZoNHn7QTzTL1KvLDMcT',
pure: '12RP5AAF8TEb4qVBgiAgJXMVF8NzYZZPD8XftcKD7sM153E7',
signatories: [
'17L1abEGisdmSQamtrYvsdsEWhBQiAqSQfjuNYAADYNeivp',
'12EeAYWN52HcmCwjPmxyGBZ5H4tXnTL4CZ7z63FBZYWM64mQ',
'14H4NwJn122wNmMJaQErbNWZuyNdMAuUrh5W7BpNSDpgiWAj'
],
threshold: 2
},
{
entity: 'PBA',
who: '1kJLyFPntELGnaawpDLzidR7rXaX4wQMPbd9ShQQZ3LK1Nh',
pure: '15UQ1nhCRRJoWf1C4LBraqCVXS91qPiWLiWQfnS3k8Dk4R79'
},

{
entity: 'Polytope Labs',
who: '12w4jGrxQuWRqHr1dCoJZS8Ez8eoUdqVbCA7n1ze584umJoy',
pure: '1tCybVtS7otBAK5CnbDwJQumWmfEWTCXRaYZM9UtihTQ1Dt'
},

{
entity: 'Social Media Editorial Board',
who: '12k979BFp7JczuaHEvg7KpPwNkpHSNu5NYQRSL9cFjr7rdhh',
pure: '1VNSqFCX4Gk7R8kKBbEaYhXSioBGLrrL4kHgLwDkoTLkgqB'
}
]

const supportedMultisigCalls = [
'Multisig.as_multi',
Expand Down Expand Up @@ -87,7 +124,7 @@ processor.run(

for (const block of ctx.blocks) {
const { calls, events, header } = block
const blockNumber = block.header.height
const blockNumber = header.height

const timestamp = new Date(header.timestamp || 0)
for (const call of calls) {
Expand Down Expand Up @@ -215,6 +252,45 @@ processor.run(
}
}
}

if (
blockNumber === PURE_PROXIEs_MIGRATION_BLOCK &&
chainId === PURE_PROXIEs_MIGRATION_CHAIN
) {
const delay = 0
const type = ProxyType.Any

PURE_PROXIES_MIGRATION_ARRAY.forEach(({ who, pure, entity, signatories, threshold }) => {
ctx.log.info(`---> pure migration for ${entity}`)

if (signatories) {
ctx.log.info(`---> multisig migration for ${entity}`)
const manualMultisig = {
id: getAccountId(who, chainId),
address: who,
threshold,
newSignatories: signatories,
isMultisig: true,
isPureProxy: false
} as NewMultisigsInfo

newMultisigsInfo.push(manualMultisig)
}

const id = getProxyAccountId(who, pure, type, delay, chainId)

newPureProxies.set(id, {
id,
who,
pure,
delay,
type,
createdAt: timestamp,
creationBlockNumber: blockNumber,
extrinsicIndex: 0
})
})
}
}

// before adding any proxy we should remove the ones that were marked to be deleted
Expand All @@ -229,6 +305,7 @@ processor.run(
// and add them to the list to remove
addToProxyRemoval.forEach((id) => proxyRemovalIds.add(id))
}

proxyRemovalIds.size && (await handleProxyRemovals(ctx, Array.from(proxyRemovalIds.values())))
newMultisigsInfo.length && (await handleNewMultisigs(ctx, newMultisigsInfo, chainId))
newMultisigCalls.length && (await handleNewMultisigCalls(ctx, newMultisigCalls, chainId))
Expand Down

0 comments on commit 5b39ac8

Please sign in to comment.