Skip to content

Commit

Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
lets use only callHandlers for predicates
Browse files Browse the repository at this point in the history
nemani committed Jul 15, 2023
1 parent 2eceef3 commit ecdbb16
Showing 5 changed files with 53 additions and 87 deletions.
Original file line number Diff line number Diff line change
@@ -258,10 +258,9 @@ templates:
file: ./abis/Prices/Uniswap/Factory.json
- name: UniswapPair
file: ./abis/Prices/Uniswap/Pair.json
eventHandlers:
- event: LockedERC20(indexed address,indexed address,indexed address,uint256)
handler: handleERC20Lock
callHandlers:
- function: lockTokens(address,address,address,bytes)
handler: handleLockTokens
- function: exitTokens(address,address,bytes)
handler: handleExitTokens
file: ./src/mappings/predicate.ts
17 changes: 10 additions & 7 deletions subgraphs/polygon-bridge/src/mappings/fx-erc20.ts
Original file line number Diff line number Diff line change
@@ -22,7 +22,10 @@ import { getUsdPricePerToken, getUsdPrice } from "../prices";
import { Versions } from "../versions";
import { ERC20 } from "../../generated/FxERC20Events/ERC20";
import { RootChainManager } from "../../generated/FxERC20Events/RootChainManager";
import { BIGDECIMAL_ZERO } from "../prices/common/constants";
import {
BIGDECIMAL_ZERO,
UNKNOWN_TOKEN_VALUE,
} from "../prices/common/constants";
import { ETH_ADDRESS } from "../sdk/util/constants";

export const conf = new BridgeConfig(
@@ -48,7 +51,7 @@ export class Pricer implements TokenPricer {

export class TokenInit implements TokenInitializer {
getTokenParams(address: Address): TokenParams {
if (address.toHexString() == ETH_ADDRESS) {
if (Address.fromString(ETH_ADDRESS).equals(address)) {
return {
name: "ETH",
symbol: "ETH",
@@ -67,8 +70,8 @@ export class TokenInit implements TokenInitializer {
]);

return {
name: "invalid",
symbol: "invalid",
name: UNKNOWN_TOKEN_VALUE,
symbol: UNKNOWN_TOKEN_VALUE,
decimals: 18,
};
}
@@ -87,7 +90,7 @@ export function handleTokenMappedERC20(event: TokenMappedERC20): void {

const pool = sdk.Pools.loadPool<string>(event.params.rootToken);
const rootToken = sdk.Tokens.getOrCreateToken(event.params.rootToken);
if (rootToken.name == "invalid") {
if (rootToken.name == UNKNOWN_TOKEN_VALUE) {
return;
}

@@ -122,7 +125,7 @@ export function handleFxDepositERC20(event: FxDepositERC20): void {

const pool = sdk.Pools.loadPool<string>(event.params.rootToken);
const token = sdk.Tokens.getOrCreateToken(event.params.rootToken);
if (token.name == "invalid") {
if (token.name == UNKNOWN_TOKEN_VALUE) {
return;
}

@@ -181,7 +184,7 @@ export function handleFxWithdrawERC20(event: FxWithdrawERC20): void {

const pool = sdk.Pools.loadPool<string>(poolAddr);
const token = sdk.Tokens.getOrCreateToken(event.params.rootToken);
if (token.name == "invalid") {
if (token.name == UNKNOWN_TOKEN_VALUE) {
return;
}

111 changes: 34 additions & 77 deletions subgraphs/polygon-bridge/src/mappings/predicate.ts
Original file line number Diff line number Diff line change
@@ -8,101 +8,51 @@ import {
} from "@graphprotocol/graph-ts";

import { Token } from "../../generated/schema";
import {
ExitedEther,
LockedEther,
} from "../../generated/FxERC20Events/EtherPredicate";

import {
ExitTokensCall,
LockedERC20,
LockTokensCall,
} from "../../generated/FxERC20Events/ERC20Predicate";
import { NetworkConfigs } from "../../configurations/configure";

import { bigIntToBigDecimal } from "../sdk/util/numbers";
import { BridgeConfig } from "../sdk/protocols/bridge/config";
import { SDK } from "../sdk/protocols/bridge";
import { TokenPricer } from "../sdk/protocols/config";
import { TokenInitializer, TokenParams } from "../sdk/protocols/bridge/tokens";
import {
BridgePermissionType,
BridgePoolType,
CrosschainTokenType,
} from "../sdk/protocols/bridge/enums";
import { getUsdPricePerToken, getUsdPrice } from "../prices";
import { Versions } from "../versions";
import { ERC20 } from "../../generated/FxERC20Events/ERC20";
import { RootChainManager } from "../../generated/FxERC20Events/RootChainManager";
import { BIGDECIMAL_ZERO } from "../prices/common/constants";
import { UNKNOWN_TOKEN_VALUE } from "../prices/common/constants";
import { conf, Pricer, TokenInit } from "./fx-erc20";
import { ETH_ADDRESS } from "../sdk/util/constants";

export function handleEtherLock(event: LockedEther): void {
export function handleLockTokens(call: LockTokensCall): void {
// poolAddress == RootToken Address
const poolAddr = Address.fromString(ETH_ADDRESS);
const amount = event.params.amount;
const crosschainID = BigInt.fromI32(137);

const sdk = SDK.initialize(conf, new Pricer(), new TokenInit(), event);

const pool = sdk.Pools.loadPool<string>(poolAddr);
const token = sdk.Tokens.getOrCreateToken(poolAddr);
if (token.name == "unknown") {
return;
}

if (!pool.isInitialized) {
pool.initialize(
token.name,
token.symbol,
BridgePoolType.LOCK_RELEASE,
token
);
}

const rootChainManger = RootChainManager.bind(
Address.fromString(conf.getID())
);
const poolAddr = call.inputs.rootToken;
const depositData = call.inputs.depositData;

const crosschainTokenAddr_call =
rootChainManger.try_rootToChildToken(poolAddr);

if (crosschainTokenAddr_call.reverted) {
log.warning(
"[handleSwapIn] No crosschainToken for network: {} poolID: {} token: {}",
[crosschainID.toString(), poolAddr.toHexString(), poolAddr.toHexString()]
);
const decoded = ethereum.decode("uint256", depositData);

if (!decoded) {
log.critical("[DECODE ERROR] {} {}", [
call.transaction.hash.toHexString(),
depositData.toHexString(),
]);
return;
}

const crosschainTokenAddr = crosschainTokenAddr_call.value;

const crosschainToken = sdk.Tokens.getOrCreateCrosschainToken(
crosschainID,
crosschainTokenAddr,
CrosschainTokenType.WRAPPED,
Address.fromBytes(token.id)
);

pool.addDestinationToken(crosschainToken);
const route = pool.getDestinationTokenRoute(crosschainToken);

const account = sdk.Accounts.loadAccount(event.params.depositor);
account.transferOut(pool, route!, event.params.depositReceiver, amount);
}
const amount = decoded.toBigInt();
log.info("[DECODE SUCCESS] txhash = {}, depositData = {} amount = {}", [
call.transaction.hash.toHexString(),
depositData.toHexString(),
amount.toString(),
]);

export function handleERC20Lock(event: LockedERC20): void {
// poolAddress == RootToken Address
const poolAddr = event.params.rootToken;
const amount = event.params.amount;
const crosschainID = BigInt.fromI32(137);

const sdk = SDK.initialize(conf, new Pricer(), new TokenInit(), event);
const sdk = SDK.initialize(conf, new Pricer(), new TokenInit(), call);

const pool = sdk.Pools.loadPool<string>(poolAddr);
const token = sdk.Tokens.getOrCreateToken(poolAddr);
if (token.name == "unknown") {
const token = sdk.Tokens.getOrCreateToken(call.inputs.rootToken);
if (token.name == UNKNOWN_TOKEN_VALUE) {
return;
}

@@ -119,32 +69,36 @@ export function handleERC20Lock(event: LockedERC20): void {
Address.fromString(conf.getID())
);

const crosschainTokenAddr_call =
rootChainManger.try_rootToChildToken(poolAddr);
const crosschainTokenAddr_call = rootChainManger.try_rootToChildToken(
call.inputs.rootToken
);

if (crosschainTokenAddr_call.reverted) {
log.warning(
"[handleSwapIn] No crosschainToken for network: {} poolID: {} token: {}",
[crosschainID.toString(), poolAddr.toHexString(), poolAddr.toHexString()]
[
crosschainID.toString(),
poolAddr.toHexString(),
call.inputs.rootToken.toHexString(),
]
);

return;
}

const crosschainTokenAddr = crosschainTokenAddr_call.value;

const crosschainToken = sdk.Tokens.getOrCreateCrosschainToken(
crosschainID,
crosschainTokenAddr,
CrosschainTokenType.WRAPPED,
CrosschainTokenType.CANONICAL,
Address.fromBytes(token.id)
);

pool.addDestinationToken(crosschainToken);
const route = pool.getDestinationTokenRoute(crosschainToken);

const account = sdk.Accounts.loadAccount(event.params.depositor);
account.transferOut(pool, route!, event.params.depositReceiver, amount);
const account = sdk.Accounts.loadAccount(call.inputs.depositor);
account.transferOut(pool, route!, call.inputs.depositReceiver, amount);
}

export function handleExitTokens(call: ExitTokensCall): void {
@@ -184,6 +138,9 @@ export function handleExitTokens(call: ExitTokensCall): void {

const pool = sdk.Pools.loadPool<string>(poolAddr);
const token = sdk.Tokens.getOrCreateToken(call.inputs.rootToken);
if (token.name == UNKNOWN_TOKEN_VALUE) {
return;
}

if (!pool.isInitialized) {
pool.initialize(token.name, token.symbol, BridgePoolType.BURN_MINT, token);
5 changes: 5 additions & 0 deletions subgraphs/polygon-bridge/src/mappings/rootchain-manager.ts
Original file line number Diff line number Diff line change
@@ -10,6 +10,7 @@ import {
} from "../sdk/protocols/bridge/enums";
import { conf, Pricer, TokenInit } from "./fx-erc20";
import { Predicate as PredicateTemplate } from "../../generated/templates";
import { UNKNOWN_TOKEN_VALUE } from "../prices/common/constants";

export function handlePredicateRegistered(event: PredicateRegistered): void {
log.debug(
@@ -31,6 +32,10 @@ export function handlePOSTokenMapped(event: TokenMapped): void {
const pool = sdk.Pools.loadPool<string>(event.params.rootToken);
const rootToken = sdk.Tokens.getOrCreateToken(event.params.rootToken);

if (rootToken.name == UNKNOWN_TOKEN_VALUE) {
return;
}

if (!pool.isInitialized) {
pool.initialize(
rootToken.name,
2 changes: 2 additions & 0 deletions subgraphs/polygon-bridge/src/prices/common/constants.ts
Original file line number Diff line number Diff line change
@@ -26,3 +26,5 @@ export const BIGDECIMAL_USD_PRICE = BigDecimal.fromString("1000000");
export const AAVE_ORACLE_DECIMALS = 8;
export const DEFAULT_USDC_DECIMALS = 6;
export const DEFAULT_DECIMALS = BigInt.fromI32(18);

export const UNKNOWN_TOKEN_VALUE = "unknown";

0 comments on commit ecdbb16

Please sign in to comment.