Skip to content

Commit

Permalink
resolving verified assets
Browse files Browse the repository at this point in the history
  • Loading branch information
rodrigobranas committed Sep 24, 2024
1 parent f584cfb commit 3d36a96
Show file tree
Hide file tree
Showing 6 changed files with 132 additions and 3 deletions.
25 changes: 24 additions & 1 deletion packages/graphql/src/graphql/generated/mocks.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,36 @@
import type { GQLAsset, GQLBalance, GQLBalanceConnection, GQLBalanceEdge, GQLBalanceFilterInput, GQLBlock, GQLBlockConnection, GQLBlockEdge, GQLBlocksDashboard, GQLBlocksDashboardConnection, GQLBreakpoint, GQLChainInfo, GQLChangeOutput, GQLCoin, GQLCoinConnection, GQLCoinEdge, GQLCoinFilterInput, GQLCoinOutput, GQLConsensusParameters, GQLConsensusParametersPurpose, GQLContract, GQLContractBalance, GQLContractBalanceConnection, GQLContractBalanceEdge, GQLContractBalanceFilterInput, GQLContractConnection, GQLContractCreated, GQLContractOutput, GQLContractParameters, GQLDryRunFailureStatus, GQLDryRunSuccessStatus, GQLDryRunTransactionExecutionStatus, GQLEstimateGasPrice, GQLExcludeInput, GQLFailureStatus, GQLFeeParameters, GQLGasCosts, GQLGenesis, GQLGroupedInputCoin, GQLGroupedInputContract, GQLGroupedInputMessage, GQLGroupedOutputChanged, GQLGroupedOutputCoin, GQLGroupedOutputContractCreated, GQLHeader, GQLHeavyOperation, GQLInputCoin, GQLInputContract, GQLInputMessage, GQLLatestGasPrice, GQLLightOperation, GQLMerkleProof, GQLMessage, GQLMessageCoin, GQLMessageConnection, GQLMessageEdge, GQLMessageProof, GQLMessageStatus, GQLMutation, GQLNodeInfo, GQLOperation, GQLOperationReceipt, GQLOperationsFilterInput, GQLOutputBreakpoint, GQLPageInfo, GQLParsedTime, GQLPeerInfo, GQLPoAConsensus, GQLPolicies, GQLPredicateItem, GQLPredicateParameters, GQLProgramState, GQLQuery, GQLReceipt, GQLRelayedTransactionFailed, GQLRunResult, GQLScriptParameters, GQLSearchAccount, GQLSearchBlock, GQLSearchContract, GQLSearchResult, GQLSearchTransaction, GQLSpendQueryElementInput, GQLSqueezedOutStatus, GQLStateTransitionPurpose, GQLSubmittedStatus, GQLSubscription, GQLSuccessStatus, GQLTps, GQLTpsConnection, GQLTransaction, GQLTransactionConnection, GQLTransactionEdge, GQLTransactionGasCosts, GQLTxParameters, GQLUtxoItem, GQLVariableOutput, GQLBlockVersion, GQLConsensusParametersVersion, GQLContractParametersVersion, GQLFeeParametersVersion, GQLGasCostsVersion, GQLGroupedInputType, GQLGroupedOutputType, GQLHeaderVersion, GQLMessageState, GQLOperationType, GQLPredicateParametersVersion, GQLReceiptType, GQLReturnType, GQLRunState, GQLScriptParametersVersion, GQLTxParametersVersion } from './sdk';
import type { GQLAsset, GQLAssetNetworkEthereum, GQLAssetNetworkFuel, GQLBalance, GQLBalanceConnection, GQLBalanceEdge, GQLBalanceFilterInput, GQLBlock, GQLBlockConnection, GQLBlockEdge, GQLBlocksDashboard, GQLBlocksDashboardConnection, GQLBreakpoint, GQLChainInfo, GQLChangeOutput, GQLCoin, GQLCoinConnection, GQLCoinEdge, GQLCoinFilterInput, GQLCoinOutput, GQLConsensusParameters, GQLConsensusParametersPurpose, GQLContract, GQLContractBalance, GQLContractBalanceConnection, GQLContractBalanceEdge, GQLContractBalanceFilterInput, GQLContractConnection, GQLContractCreated, GQLContractOutput, GQLContractParameters, GQLDryRunFailureStatus, GQLDryRunSuccessStatus, GQLDryRunTransactionExecutionStatus, GQLEstimateGasPrice, GQLExcludeInput, GQLFailureStatus, GQLFeeParameters, GQLGasCosts, GQLGenesis, GQLGroupedInputCoin, GQLGroupedInputContract, GQLGroupedInputMessage, GQLGroupedOutputChanged, GQLGroupedOutputCoin, GQLGroupedOutputContractCreated, GQLHeader, GQLHeavyOperation, GQLInputCoin, GQLInputContract, GQLInputMessage, GQLLatestGasPrice, GQLLightOperation, GQLMerkleProof, GQLMessage, GQLMessageCoin, GQLMessageConnection, GQLMessageEdge, GQLMessageProof, GQLMessageStatus, GQLMutation, GQLNodeInfo, GQLOperation, GQLOperationReceipt, GQLOperationsFilterInput, GQLOutputBreakpoint, GQLPageInfo, GQLParsedTime, GQLPeerInfo, GQLPoAConsensus, GQLPolicies, GQLPredicateItem, GQLPredicateParameters, GQLProgramState, GQLQuery, GQLReceipt, GQLRelayedTransactionFailed, GQLRunResult, GQLScriptParameters, GQLSearchAccount, GQLSearchBlock, GQLSearchContract, GQLSearchResult, GQLSearchTransaction, GQLSpendQueryElementInput, GQLSqueezedOutStatus, GQLStateTransitionPurpose, GQLSubmittedStatus, GQLSubscription, GQLSuccessStatus, GQLTps, GQLTpsConnection, GQLTransaction, GQLTransactionConnection, GQLTransactionEdge, GQLTransactionGasCosts, GQLTxParameters, GQLUtxoItem, GQLVariableOutput, GQLBlockVersion, GQLConsensusParametersVersion, GQLContractParametersVersion, GQLFeeParametersVersion, GQLGasCostsVersion, GQLGroupedInputType, GQLGroupedOutputType, GQLHeaderVersion, GQLMessageState, GQLOperationType, GQLPredicateParametersVersion, GQLReceiptType, GQLReturnType, GQLRunState, GQLScriptParametersVersion, GQLTxParametersVersion } from './sdk';

export const anAsset = (overrides?: Partial<GQLAsset>): { __typename: 'Asset' } & GQLAsset => {
return {
__typename: 'Asset',
assetId: overrides && overrides.hasOwnProperty('assetId') ? overrides.assetId! : 'laboriosam',
contractId: overrides && overrides.hasOwnProperty('contractId') ? overrides.contractId! : 'corrupti',
decimals: overrides && overrides.hasOwnProperty('decimals') ? overrides.decimals! : '0x4',
icon: overrides && overrides.hasOwnProperty('icon') ? overrides.icon! : 'explicabo',
name: overrides && overrides.hasOwnProperty('name') ? overrides.name! : 'dolorem',
networks: overrides && overrides.hasOwnProperty('networks') ? overrides.networks! : [anAssetNetworkEthereum()],
symbol: overrides && overrides.hasOwnProperty('symbol') ? overrides.symbol! : 'quaerat',
verified: overrides && overrides.hasOwnProperty('verified') ? overrides.verified! : false,
};
};

export const anAssetNetworkEthereum = (overrides?: Partial<GQLAssetNetworkEthereum>): { __typename: 'AssetNetworkEthereum' } & GQLAssetNetworkEthereum => {
return {
__typename: 'AssetNetworkEthereum',
address: overrides && overrides.hasOwnProperty('address') ? overrides.address! : 'porro',
decimals: overrides && overrides.hasOwnProperty('decimals') ? overrides.decimals! : '0xf',
type: overrides && overrides.hasOwnProperty('type') ? overrides.type! : 'commodi',
};
};

export const anAssetNetworkFuel = (overrides?: Partial<GQLAssetNetworkFuel>): { __typename: 'AssetNetworkFuel' } & GQLAssetNetworkFuel => {
return {
__typename: 'AssetNetworkFuel',
assetId: overrides && overrides.hasOwnProperty('assetId') ? overrides.assetId! : 'placeat',
chainId: overrides && overrides.hasOwnProperty('chainId') ? overrides.chainId! : '0x8',
contractId: overrides && overrides.hasOwnProperty('contractId') ? overrides.contractId! : 'maiores',
decimals: overrides && overrides.hasOwnProperty('decimals') ? overrides.decimals! : '0x2',
type: overrides && overrides.hasOwnProperty('type') ? overrides.type! : 'minima',
};
};

Expand Down
21 changes: 21 additions & 0 deletions packages/graphql/src/graphql/generated/sdk-provider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,29 @@ export type GQLAsset = {
assetId?: Maybe<Scalars['String']['output']>;
contractId?: Maybe<Scalars['String']['output']>;
decimals?: Maybe<Scalars['U64']['output']>;
icon?: Maybe<Scalars['String']['output']>;
name?: Maybe<Scalars['String']['output']>;
networks?: Maybe<Array<Maybe<GQLAssetNetwork>>>;
symbol?: Maybe<Scalars['String']['output']>;
verified?: Maybe<Scalars['Boolean']['output']>;
};

export type GQLAssetNetwork = GQLAssetNetworkEthereum | GQLAssetNetworkFuel;

export type GQLAssetNetworkEthereum = {
__typename: 'AssetNetworkEthereum';
address?: Maybe<Scalars['String']['output']>;
decimals?: Maybe<Scalars['U64']['output']>;
type?: Maybe<Scalars['String']['output']>;
};

export type GQLAssetNetworkFuel = {
__typename: 'AssetNetworkFuel';
assetId?: Maybe<Scalars['String']['output']>;
chainId?: Maybe<Scalars['U64']['output']>;
contractId?: Maybe<Scalars['String']['output']>;
decimals?: Maybe<Scalars['U64']['output']>;
type?: Maybe<Scalars['String']['output']>;
};

export type GQLBalance = {
Expand Down
25 changes: 24 additions & 1 deletion packages/graphql/src/graphql/generated/sdk.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,29 @@ export type GQLAsset = {
assetId?: Maybe<Scalars['String']['output']>;
contractId?: Maybe<Scalars['String']['output']>;
decimals?: Maybe<Scalars['U64']['output']>;
icon?: Maybe<Scalars['String']['output']>;
name?: Maybe<Scalars['String']['output']>;
networks?: Maybe<Array<Maybe<GQLAssetNetwork>>>;
symbol?: Maybe<Scalars['String']['output']>;
verified?: Maybe<Scalars['Boolean']['output']>;
};

export type GQLAssetNetwork = GQLAssetNetworkEthereum | GQLAssetNetworkFuel;

export type GQLAssetNetworkEthereum = {
__typename: 'AssetNetworkEthereum';
address?: Maybe<Scalars['String']['output']>;
decimals?: Maybe<Scalars['U64']['output']>;
type?: Maybe<Scalars['String']['output']>;
};

export type GQLAssetNetworkFuel = {
__typename: 'AssetNetworkFuel';
assetId?: Maybe<Scalars['String']['output']>;
chainId?: Maybe<Scalars['U64']['output']>;
contractId?: Maybe<Scalars['String']['output']>;
decimals?: Maybe<Scalars['U64']['output']>;
type?: Maybe<Scalars['String']['output']>;
};

export type GQLBalance = {
Expand Down Expand Up @@ -1487,7 +1508,7 @@ export type GQLAssetQueryVariables = Exact<{
}>;


export type GQLAssetQuery = { __typename: 'Query', asset?: { __typename: 'Asset', assetId?: string | null, contractId?: string | null, name?: string | null, symbol?: string | null, decimals?: string | null } | null };
export type GQLAssetQuery = { __typename: 'Query', asset?: { __typename: 'Asset', assetId?: string | null, contractId?: string | null, name?: string | null, symbol?: string | null, decimals?: string | null, icon?: string | null, verified?: boolean | null } | null };

export type GQLBalanceItemFragment = { __typename: 'Balance', amount: string, assetId: string, owner: string, utxos?: Array<{ __typename: 'UtxoItem', amount: string, blockCreated?: string | null, txCreatedIdx?: string | null, utxoId: string } | null> | null };

Expand Down Expand Up @@ -2091,6 +2112,8 @@ export const AssetDocument = gql`
name
symbol
decimals
icon
verified
}
}
`;
Expand Down
2 changes: 2 additions & 0 deletions packages/graphql/src/graphql/queries/sdk/asset.graphql
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,7 @@ query asset($assetId: String!){
name
symbol
decimals
icon
verified
}
}
41 changes: 40 additions & 1 deletion packages/graphql/src/graphql/resolvers/PublicResolver.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import { Provider } from 'fuels';
import { env } from '~/config';
import type { GQLAsset } from '~/graphql/generated/sdk-provider';
import AssetDAO from '~/infra/dao/AssetDAO';

Expand All @@ -18,6 +20,43 @@ export class PublicResolver {

async asset(_: Source, _params: Params['asset']) {
const assetDAO = new AssetDAO();
return assetDAO.getByAssetId(_params.assetId);
const provider = await Provider.create(env.get('FUEL_PROVIDER'));
const chainId = provider.getChainId();
const response = await fetch(
'https://verified-assets.fuel.network/assets.json',
);
const verifiedAssets = await response.json();
for (const verifiedAsset of verifiedAssets) {
for (const network of verifiedAsset.networks) {
if (network.type === 'fuel') {
network.__typename = 'AssetNetworkFuel';
}
if (network.type === 'ethereum') {
network.__typename = 'AssetNetworkEthereum';
}
}
}
for (const verifiedAsset of verifiedAssets) {
for (const network of verifiedAsset.networks) {
if (
network.chainId === chainId &&
network.assetId === _params.assetId
) {
console.log(verifiedAsset);
const asset = Object.assign(verifiedAsset, {
assetId: _params.assetId,
contractId: network.contractId,
decimals: network.decimals,
verified: true,
});
return asset;
}
}
}
const asset = await assetDAO.getByAssetId(_params.assetId);
if (!asset) return;
return Object.assign(asset, {
verified: false,
});
}
}
21 changes: 21 additions & 0 deletions packages/graphql/src/graphql/schemas/explorer.graphql
Original file line number Diff line number Diff line change
Expand Up @@ -256,4 +256,25 @@ type Asset {
name: String
symbol: String
decimals: U64
icon: String
verified: Boolean
networks: [AssetNetwork]
}

union AssetNetwork =
| AssetNetworkFuel
| AssetNetworkEthereum

type AssetNetworkFuel {
type: String
decimals: U64
assetId: String
contractId: String
chainId: U64
}

type AssetNetworkEthereum {
type: String
decimals: U64
address: String
}

0 comments on commit 3d36a96

Please sign in to comment.