Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fixes for operational scripts #1373

Merged
merged 2 commits into from
Feb 4, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 13 additions & 14 deletions web/packages/operations/src/global_transfer_history.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import "dotenv/config"
import { contextFactory, destroyContext, environment, subscan, history } from "@snowbridge/api"
import { environment, subscan, history, Context } from "@snowbridge/api"
import { BeefyClient__factory, IGateway__factory } from "@snowbridge/contract-types"
import { AlchemyProvider } from "ethers"

Expand All @@ -19,18 +19,16 @@ const monitor = async () => {
if (!config.SUBSCAN_API) throw Error(`Environment ${env} does not support subscan.`)

const ethereumProvider = new AlchemyProvider(ethChainId, process.env.REACT_APP_ALCHEMY_KEY)
const context = await contextFactory({
const context = new Context({
ethereum: {
execution_url: ethereumProvider,
beacon_url: config.BEACON_HTTP_API,
},
polkadot: {
url: {
bridgeHub: config.BRIDGE_HUB_URL,
assetHub: config.ASSET_HUB_URL,
relaychain: config.RELAY_CHAIN_URL,
parachains: config.PARACHAINS,
},
assetHubParaId: config.ASSET_HUB_PARAID,
bridgeHubParaId: config.BRIDGE_HUB_PARAID,
relaychain: config.RELAY_CHAIN_URL,
parachains: config.PARACHAINS,
},
appContracts: {
gateway: config.GATEWAY_CONTRACT,
Expand All @@ -48,18 +46,19 @@ const monitor = async () => {
const relaychainScan = subscan.createApi(config.SUBSCAN_API.RELAY_CHAIN_URL, subscanKey)
const skipLightClientUpdates = true

const [assetHub, bridgeHub] = await Promise.all([context.assetHub(), context.bridgeHub()])
const [
ethNowBlock,
assetHubNowBlock,
bridgeHubNowBlock,
bridgeHubParaIdCodec,
assetHubParaIdCodec,
] = await Promise.all([
context.ethereum.api.getBlock("latest"),
context.polkadot.api.assetHub.rpc.chain.getHeader(),
context.polkadot.api.bridgeHub.rpc.chain.getHeader(),
context.polkadot.api.bridgeHub.query.parachainInfo.parachainId(),
context.polkadot.api.assetHub.query.parachainInfo.parachainId(),
context.ethereum().getBlock("latest"),
assetHub.rpc.chain.getHeader(),
bridgeHub.rpc.chain.getHeader(),
bridgeHub.query.parachainInfo.parachainId(),
assetHub.query.parachainInfo.parachainId(),
])

if (ethNowBlock == null) throw Error("Cannot fetch block")
Expand Down Expand Up @@ -123,7 +122,7 @@ const monitor = async () => {
transfers.sort((a, b) => b.info.when.getTime() - a.info.when.getTime())
console.log(JSON.stringify(transfers, null, 2))

await destroyContext(context)
await context.destroyContext()
}

monitor()
Expand Down
48 changes: 27 additions & 21 deletions web/packages/operations/src/monitor.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { u8aToHex } from "@polkadot/util"
import { blake2AsU8a } from "@polkadot/util-crypto"
import { contextFactory, destroyContext, environment, status, utils } from "@snowbridge/api"
import { Context, environment, status, utils } from "@snowbridge/api"
import { sendMetrics } from "./alarm"
import { BlockLatencyThreshold } from "./alarm"

Expand All @@ -18,17 +18,21 @@ export const monitor = async (): Promise<status.AllMetrics> => {

const infuraKey = process.env.REACT_APP_INFURA_KEY || ""

const context = await contextFactory({
const parachains: { [paraId: string]: string } = {}
parachains[config.BRIDGE_HUB_PARAID.toString()] =
process.env["BRIDGE_HUB_URL"] ?? config.PARACHAINS[config.BRIDGE_HUB_PARAID.toString()]
parachains[config.ASSET_HUB_PARAID.toString()] =
process.env["ASSET_HUB_URL"] ?? config.PARACHAINS[config.ASSET_HUB_PARAID.toString()]
const context = new Context({
ethereum: {
execution_url: process.env["EXECUTION_NODE_URL"] || config.ETHEREUM_API(infuraKey),
beacon_url: process.env["BEACON_NODE_URL"] || config.BEACON_HTTP_API,
},
polkadot: {
url: {
bridgeHub: process.env["BRIDGE_HUB_URL"] || config.BRIDGE_HUB_URL,
assetHub: process.env["ASSET_HUB_URL"] || config.ASSET_HUB_URL,
relaychain: process.env["RELAY_CHAIN_URL"] || config.RELAY_CHAIN_URL,
},
assetHubParaId: config.ASSET_HUB_PARAID,
bridgeHubParaId: config.BRIDGE_HUB_PARAID,
parachains: parachains,
relaychain: process.env["RELAY_CHAIN_URL"] || config.RELAY_CHAIN_URL,
},
appContracts: {
gateway: config.GATEWAY_CONTRACT,
Expand All @@ -45,16 +49,16 @@ export const monitor = async (): Promise<status.AllMetrics> => {
})
console.log("Bridge Status:", bridgeStatus)

const assethub = await status.channelStatusInfo(
const assethubChannelStatus = await status.channelStatusInfo(
context,
utils.paraIdToChannelId(config.ASSET_HUB_PARAID),
{
toPolkadotCheckIntervalInBlock: BlockLatencyThreshold.ToPolkadot,
toEthereumCheckIntervalInBlock: BlockLatencyThreshold.ToEthereum,
}
)
assethub.name = status.ChannelKind.AssetHub
console.log("Asset Hub Channel:", assethub)
assethubChannelStatus.name = status.ChannelKind.AssetHub
console.log("Asset Hub Channel:", assethubChannelStatus)

const primaryGov = await status.channelStatusInfo(
context,
Expand All @@ -78,27 +82,29 @@ export const monitor = async (): Promise<status.AllMetrics> => {
secondaryGov.name = status.ChannelKind.Secondary
console.log("Secondary Governance Channel:", secondaryGov)

const [assetHub, bridgeHub] = await Promise.all([context.assetHub(), context.bridgeHub()])

let assetHubSovereign = BigInt(
(
(
await context.polkadot.api.bridgeHub.query.system.account(
await bridgeHub.query.system.account(
utils.paraIdToSovereignAccount("sibl", config.ASSET_HUB_PARAID)
)
).toPrimitive() as any
).data.free
)
console.log("Asset Hub Sovereign balance on bridgehub:", assetHubSovereign)

let assetHubAgentBalance = await context.ethereum.api.getBalance(
await context.ethereum.contracts.gateway.agentOf(
utils.paraIdToAgentId(context.polkadot.api.bridgeHub.registry, config.ASSET_HUB_PARAID)
let assetHubAgentBalance = await context.ethereum().getBalance(
await context.gateway().agentOf(
utils.paraIdToAgentId(bridgeHub.registry, config.ASSET_HUB_PARAID)
)
)
console.log("Asset Hub Agent balance:", assetHubAgentBalance)

const bridgeHubAgentId = u8aToHex(blake2AsU8a("0x00", 256))
let bridgeHubAgentBalance = await context.ethereum.api.getBalance(
await context.ethereum.contracts.gateway.agentOf(bridgeHubAgentId)
let bridgeHubAgentBalance = await context.ethereum().getBalance(
await context.gateway().agentOf(bridgeHubAgentId)
)
console.log("Bridge Hub Agent balance:", bridgeHubAgentBalance)

Expand All @@ -108,13 +114,13 @@ export const monitor = async (): Promise<status.AllMetrics> => {
let balance = 0n
switch (relayer.type) {
case "ethereum":
balance = await context.ethereum.api.getBalance(relayer.account)
balance = await context.ethereum().getBalance(relayer.account)
break
case "substrate":
balance = BigInt(
(
(
await context.polkadot.api.bridgeHub.query.system.account(
await bridgeHub.query.system.account(
relayer.account
)
).toPrimitive() as any
Expand All @@ -127,7 +133,7 @@ export const monitor = async (): Promise<status.AllMetrics> => {
relayers.push(relayer)
}

const channels = [assethub, primaryGov, secondaryGov]
const channels = [assethubChannelStatus, primaryGov, secondaryGov]

let sovereigns: status.Sovereign[] = [
{
Expand All @@ -139,7 +145,7 @@ export const monitor = async (): Promise<status.AllMetrics> => {
{
name: "AssetHubAgent",
account: utils.paraIdToAgentId(
context.polkadot.api.bridgeHub.registry,
bridgeHub.registry,
config.ASSET_HUB_PARAID
),
balance: assetHubAgentBalance,
Expand All @@ -157,7 +163,7 @@ export const monitor = async (): Promise<status.AllMetrics> => {

await sendMetrics(allMetrics)

await destroyContext(context)
await context.destroyContext()

return allMetrics
}
25 changes: 14 additions & 11 deletions web/packages/operations/src/transfer_to_ethereum.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
import "dotenv/config"
import { Keyring } from "@polkadot/keyring"
import {
contextFactory,
destroyContext,
Context,
environment,
toEthereum,
} from "@snowbridge/api"
Expand All @@ -21,17 +20,21 @@ const transfer = async () => {

const { config } = snowbridgeEnv

const context = await contextFactory({
const parachains: { [paraId: string]: string } = {}
parachains[config.BRIDGE_HUB_PARAID.toString()] =
process.env["BRIDGE_HUB_URL"] ?? config.PARACHAINS[config.BRIDGE_HUB_PARAID.toString()]
parachains[config.ASSET_HUB_PARAID.toString()] =
process.env["ASSET_HUB_URL"] ?? config.PARACHAINS[config.ASSET_HUB_PARAID.toString()]
const context = new Context({
ethereum: {
execution_url: process.env["EXECUTION_NODE_URL"] || config.ETHEREUM_API(process.env.REACT_APP_INFURA_KEY || ""),
beacon_url: process.env["BEACON_NODE_URL"] || config.BEACON_HTTP_API,
},
polkadot: {
url: {
bridgeHub: process.env["BRIDGE_HUB_URL"] || config.BRIDGE_HUB_URL,
assetHub: process.env["ASSET_HUB_URL"] || config.ASSET_HUB_URL,
relaychain: process.env["RELAY_CHAIN_URL"] || config.RELAY_CHAIN_URL,
},
assetHubParaId: config.ASSET_HUB_PARAID,
bridgeHubParaId: config.BRIDGE_HUB_PARAID,
parachains: parachains,
relaychain: process.env["RELAY_CHAIN_URL"] || config.RELAY_CHAIN_URL,
},
appContracts: {
gateway: config.GATEWAY_CONTRACT,
Expand All @@ -42,10 +45,10 @@ const transfer = async () => {

const ETHEREUM_ACCOUNT = new Wallet(
process.env["ETHEREUM_KEY"] || "0x5e002a1af63fd31f1c25258f3082dc889762664cb8f218d86da85dff8b07b342",
context.ethereum.api
context.ethereum()
)
const ETHEREUM_ACCOUNT_PUBLIC = await ETHEREUM_ACCOUNT.getAddress()
const POLKADOT_ACCOUNT = process.env["SUBSTRATE_KEY"]?polkadot_keyring.addFromUri(process.env["SUBSTRATE_KEY"]):polkadot_keyring.addFromUri("//Ferdie")
const POLKADOT_ACCOUNT = process.env["SUBSTRATE_KEY"] ? polkadot_keyring.addFromUri(process.env["SUBSTRATE_KEY"]) : polkadot_keyring.addFromUri("//Ferdie")

const amount = 2_000_000_000_000n

Expand All @@ -67,7 +70,7 @@ const transfer = async () => {
const result = await toEthereum.send(context, POLKADOT_ACCOUNT, plan)
console.log("Execute:", result)
}
await destroyContext(context)
await context.destroyContext()
}

if (process.argv.length != 3) {
Expand Down
25 changes: 14 additions & 11 deletions web/packages/operations/src/transfer_to_polkadot.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
import "dotenv/config"
import { Keyring } from "@polkadot/keyring"
import {
contextFactory,
destroyContext,
Context,
environment,
toPolkadot,
} from "@snowbridge/api"
Expand All @@ -22,17 +21,21 @@ const transfer = async () => {

const { config } = snowbridgeEnv

const context = await contextFactory({
const parachains: { [paraId: string]: string } = {}
parachains[config.BRIDGE_HUB_PARAID.toString()] =
process.env["BRIDGE_HUB_URL"] ?? config.PARACHAINS[config.BRIDGE_HUB_PARAID.toString()]
parachains[config.ASSET_HUB_PARAID.toString()] =
process.env["ASSET_HUB_URL"] ?? config.PARACHAINS[config.ASSET_HUB_PARAID.toString()]
const context = new Context({
ethereum: {
execution_url: process.env["EXECUTION_NODE_URL"] || config.ETHEREUM_API(process.env.REACT_APP_INFURA_KEY || ""),
beacon_url: process.env["BEACON_NODE_URL"] || config.BEACON_HTTP_API,
},
polkadot: {
url: {
bridgeHub: process.env["BRIDGE_HUB_URL"] || config.BRIDGE_HUB_URL,
assetHub: process.env["ASSET_HUB_URL"] || config.ASSET_HUB_URL,
relaychain: process.env["RELAY_CHAIN_URL"] || config.RELAY_CHAIN_URL,
},
assetHubParaId: config.ASSET_HUB_PARAID,
bridgeHubParaId: config.BRIDGE_HUB_PARAID,
parachains: parachains,
relaychain: process.env["RELAY_CHAIN_URL"] || config.RELAY_CHAIN_URL,
},
appContracts: {
gateway: config.GATEWAY_CONTRACT,
Expand All @@ -43,9 +46,9 @@ const transfer = async () => {

const ETHEREUM_ACCOUNT = new Wallet(
process.env["ETHEREUM_KEY"] || "0x5e002a1af63fd31f1c25258f3082dc889762664cb8f218d86da85dff8b07b342",
context.ethereum.api
context.ethereum()
)
const POLKADOT_ACCOUNT = process.env["SUBSTRATE_KEY"]?polkadot_keyring.addFromUri(process.env["SUBSTRATE_KEY"]):polkadot_keyring.addFromUri("//Ferdie")
const POLKADOT_ACCOUNT = process.env["SUBSTRATE_KEY"] ? polkadot_keyring.addFromUri(process.env["SUBSTRATE_KEY"]) : polkadot_keyring.addFromUri("//Ferdie")
const POLKADOT_ACCOUNT_PUBLIC = POLKADOT_ACCOUNT.address

const amount = 2_000_000_000_000n
Expand Down Expand Up @@ -81,7 +84,7 @@ const transfer = async () => {
let result = await toPolkadot.send(context, ETHEREUM_ACCOUNT, plan)
console.log("Execute:", result)
}
await destroyContext(context)
await context.destroyContext()
}

if (process.argv.length != 3) {
Expand Down