Skip to content

Commit

Permalink
Save supertokens in db (#165)
Browse files Browse the repository at this point in the history
* register & fetch all registered super tokens

* bump version
  • Loading branch information
0xSulpiride authored Sep 14, 2022
1 parent ddb6a7f commit 34d27f0
Show file tree
Hide file tree
Showing 8 changed files with 147 additions and 7 deletions.
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "etherspot",
"version": "1.35.4",
"version": "1.35.5",
"description": "Etherspot SDK",
"keywords": [
"ether",
Expand Down
28 changes: 27 additions & 1 deletion src/sdk/sdk.ts
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ import {
} from './payments';
import { CurrentProject, Project, Projects, ProjectService } from './project';
import { Session, SessionService } from './session';
import { Transactions, Transaction, TransactionsService, NftList, StreamTransactionPayload, StreamList } from './transactions';
import { Transactions, Transaction, TransactionsService, NftList, StreamTransactionPayload, StreamList, KnownContract } from './transactions';
import { State, StateService } from './state';
import { WalletService, isWalletProvider, WalletProviderLike } from './wallet';

Expand Down Expand Up @@ -2233,19 +2233,45 @@ export class Sdk {
*/
async findSuperERC20WrapperOnChain(
underlyingToken: string,
chainId?: number,
underlyingDecimals?: number,
name?: string,
symbol?: string,
): Promise<string> {
return this.services.transactionsService
.findSuperERC20WrapperOnChain(
underlyingToken,
chainId,
underlyingDecimals,
name,
symbol
);
}

/**
* register super token wrapper
* @return Promise<KnownContract | null>
*/
async registerERC20WrapperToken(
wrapperAddress: string,
chainId?: number
): Promise<KnownContract | null> {
return this.services.transactionsService
.registerERC20WrapperToken(
wrapperAddress,
chainId
);
}

/**
* get all registered super token wrappers
* @return Promise<KnownContracts>
*/
async getRegisteredERC20WrapperTokens() {
return this.services.transactionsService
.getRegisteredERC20WrapperTokens();
}

// utils

/**
Expand Down
2 changes: 2 additions & 0 deletions src/sdk/transactions/classes/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,5 @@ export * from './transaction-log-decoded';
export * from './transactions';
export * from './stream-transaction-payload';
export * from './streamList';
export * from './known-contract';
export * from './known-contracts';
21 changes: 21 additions & 0 deletions src/sdk/transactions/classes/known-contract.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import { TokenTypes } from "../constants";

export class KnownContract {
id: number;

chainId: number;

contractName: string;

contractSymbol: string;

contractAddress: string;

tokenType: TokenTypes;

nftVersion: string;

decimals: number;

underlyingToken: string;
}
8 changes: 8 additions & 0 deletions src/sdk/transactions/classes/known-contracts.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import { NetworkNames } from "../../network/constants";
import { KnownContract } from "./known-contract";

export class KnownContracts {
items: KnownContract[];

chains: NetworkNames[];
}
1 change: 1 addition & 0 deletions src/sdk/transactions/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,5 @@ export enum TokenTypes {
Erc721 = 'Erc721',
Erc1155 = 'Erc1155',
Native = 'Native',
WrappedSupertoken = 'WrappedSupertoken',
}
88 changes: 85 additions & 3 deletions src/sdk/transactions/transactions.service.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { gql } from '@apollo/client/core';
import { BigNumber } from 'ethers';
import { Service } from '../common';
import { NftList, StreamList, StreamTransactionPayload, Transaction, Transactions } from './classes';
import { KnownContract, KnownContracts, NftList, StreamList, StreamTransactionPayload, Transaction, Transactions } from './classes';

export class TransactionsService extends Service {
async getTransaction(hash: string): Promise<Transaction> {
Expand Down Expand Up @@ -366,6 +366,7 @@ export class TransactionsService extends Service {

async findSuperERC20WrapperOnChain(
underlyingToken: string,
chainId: number,
underlyingDecimals: number,
name: string,
symbol: string
Expand All @@ -376,7 +377,13 @@ export class TransactionsService extends Service {
result: string;
}>(
gql`
query($chainId: Int!, $underlyingToken: String!, $underlyingDecimals: Int, $name: String, $symbol: String) {
query(
$chainId: Int!,
$underlyingToken: String!,
$underlyingDecimals: Int,
$name: String,
$symbol: String
) {
result: findSuperERC20WrapperOnChain(
chainId: $chainId,
underlyingToken: $underlyingToken,
Expand All @@ -388,7 +395,7 @@ export class TransactionsService extends Service {
`,
{
variables: {
chainId: this.services.networkService.chainId,
chainId: chainId || this.services.networkService.chainId,
underlyingToken,
underlyingDecimals,
name,
Expand All @@ -398,4 +405,79 @@ export class TransactionsService extends Service {
);
return result;
}

async registerERC20WrapperToken(
wrapperAddress: string,
chainId?: number
): Promise<KnownContract | null> {
const { apiService } = this.services;

const { result } = await apiService.query<{
result: KnownContract;
}>(
gql`
query($chainId: Int!, $wrapperAddress: String!) {
result: registerERC20WrapperToken(
chainId: $chainId,
wrapperAddress: $wrapperAddress,
) {
id,
chainId,
contractName,
contractSymbol,
contractAddress,
tokenType,
nftVersion,
decimals,
underlyingToken
}
}
`,
{
variables: {
chainId: chainId || this.services.networkService.chainId,
wrapperAddress,
},
models: {
result: KnownContract
}
},
);

return result;
}

async getRegisteredERC20WrapperTokens(): Promise<KnownContracts> {
const { apiService } = this.services;

const { result } = await apiService.query<{
result: KnownContracts;
}>(
gql`
query {
result: getRegisteredERC20WrapperTokens {
chains,
items {
id,
chainId,
contractName,
contractSymbol,
contractAddress,
tokenType,
nftVersion,
decimals,
underlyingToken
}
}
}
`,
{
models: {
result: KnownContracts
}
},
);

return result;
}
}

0 comments on commit 34d27f0

Please sign in to comment.