diff --git a/web/packages/operations/src/global_transfer_history.ts b/web/packages/operations/src/global_transfer_history.ts index 44a74e4a0d..b56d9d22ff 100644 --- a/web/packages/operations/src/global_transfer_history.ts +++ b/web/packages/operations/src/global_transfer_history.ts @@ -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" @@ -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, @@ -48,6 +46,7 @@ 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, @@ -55,11 +54,11 @@ const monitor = async () => { 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") @@ -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() diff --git a/web/packages/operations/src/monitor.ts b/web/packages/operations/src/monitor.ts index e9ba21b9c2..2b8ff3ebc1 100644 --- a/web/packages/operations/src/monitor.ts +++ b/web/packages/operations/src/monitor.ts @@ -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" @@ -18,17 +18,21 @@ export const monitor = async (): Promise => { 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, @@ -45,7 +49,7 @@ export const monitor = async (): Promise => { }) console.log("Bridge Status:", bridgeStatus) - const assethub = await status.channelStatusInfo( + const assethubChannelStatus = await status.channelStatusInfo( context, utils.paraIdToChannelId(config.ASSET_HUB_PARAID), { @@ -53,8 +57,8 @@ export const monitor = async (): Promise => { 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, @@ -78,10 +82,12 @@ export const monitor = async (): Promise => { 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 @@ -89,16 +95,16 @@ export const monitor = async (): Promise => { ) 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) @@ -108,13 +114,13 @@ export const monitor = async (): Promise => { 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 @@ -127,7 +133,7 @@ export const monitor = async (): Promise => { relayers.push(relayer) } - const channels = [assethub, primaryGov, secondaryGov] + const channels = [assethubChannelStatus, primaryGov, secondaryGov] let sovereigns: status.Sovereign[] = [ { @@ -139,7 +145,7 @@ export const monitor = async (): Promise => { { name: "AssetHubAgent", account: utils.paraIdToAgentId( - context.polkadot.api.bridgeHub.registry, + bridgeHub.registry, config.ASSET_HUB_PARAID ), balance: assetHubAgentBalance, @@ -157,7 +163,7 @@ export const monitor = async (): Promise => { await sendMetrics(allMetrics) - await destroyContext(context) + await context.destroyContext() return allMetrics } diff --git a/web/packages/operations/src/transfer_to_ethereum.ts b/web/packages/operations/src/transfer_to_ethereum.ts index eb894ff044..f6eedbc257 100644 --- a/web/packages/operations/src/transfer_to_ethereum.ts +++ b/web/packages/operations/src/transfer_to_ethereum.ts @@ -1,8 +1,7 @@ import "dotenv/config" import { Keyring } from "@polkadot/keyring" import { - contextFactory, - destroyContext, + Context, environment, toEthereum, } from "@snowbridge/api" @@ -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, @@ -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 @@ -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) { diff --git a/web/packages/operations/src/transfer_to_polkadot.ts b/web/packages/operations/src/transfer_to_polkadot.ts index 9d72ccc006..65610e988c 100644 --- a/web/packages/operations/src/transfer_to_polkadot.ts +++ b/web/packages/operations/src/transfer_to_polkadot.ts @@ -1,8 +1,7 @@ import "dotenv/config" import { Keyring } from "@polkadot/keyring" import { - contextFactory, - destroyContext, + Context, environment, toPolkadot, } from "@snowbridge/api" @@ -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, @@ -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 @@ -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) {