Refactor bridge-sdk library (#104)

* moved bridge interaction to bridge-sdk library

* typo
This commit is contained in:
Juan Diego García 2021-04-30 18:50:27 -05:00 committed by GitHub
parent 39b1fa63ef
commit 9f2ceaafb5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
58 changed files with 97 additions and 78 deletions

View File

@ -1,16 +1,30 @@
{ {
"name": "@solana/bridge-sdk", "name": "@solana/bridge-sdk",
"version": "0.0.1", "version": "0.0.1",
"description": "Bridge common sdk utilities",
"main": "dist/lib/index.js",
"types": "dist/lib/index.d.ts",
"exports": {
".": "./dist/lib/"
},
"license": "Apache-2.0",
"publishConfig": {
"access": "public"
},
"engines": {
"node": ">=10"
},
"dependencies": { "dependencies": {
"@solana/wallet-base": "0.0.1", "@babel/preset-typescript": "^7.13.0",
"@solana/wallet-ledger": "0.0.1",
"@oyster/common": "0.0.1", "@oyster/common": "0.0.1",
"@solana/spl-token": "0.0.13", "@solana/spl-token": "0.0.13",
"@solana/spl-token-swap": "0.1.0", "@solana/spl-token-swap": "0.1.0",
"@solana/wallet-base": "0.0.1",
"@solana/wallet-ledger": "0.0.1",
"@solana/web3.js": "^1.5.0", "@solana/web3.js": "^1.5.0",
"bn.js": "^5.1.3", "bn.js": "^5.1.3",
"bs58": "^4.0.1", "bs58": "^4.0.1",
"buffer-layout": "^1.2.0", "buffer-layout": "^1.2.1",
"ethers": "^4.0.48", "ethers": "^4.0.48",
"eventemitter3": "^4.0.7", "eventemitter3": "^4.0.7",
"lodash": "^4.17.20", "lodash": "^4.17.20",
@ -18,9 +32,20 @@
"web3": "^1.3.0" "web3": "^1.3.0"
}, },
"scripts": { "scripts": {
"build": "tsc",
"start": "npm-run-all --parallel watch watch-css watch-css-src",
"watch-css": "less-watch-compiler src/ dist/lib/",
"watch-css-src": "less-watch-compiler src/ src/",
"watch": "tsc --watch",
"test": "jest test",
"clean": "rm -rf dist",
"prepare": "run-s clean build",
"format:fix": "prettier --write \"**/*.+(js|jsx|ts|tsx|json|css|md)\"", "format:fix": "prettier --write \"**/*.+(js|jsx|ts|tsx|json|css|md)\"",
"ethers": "typechain --target ethers-v4 --outDir src/contracts 'contracts/*.json'" "ethers": "typechain --target ethers-v4 --outDir src/contracts 'contracts/*.json'"
}, },
"files": [
"dist"
],
"browserslist": { "browserslist": {
"production": [ "production": [
">0.2%", ">0.2%",
@ -37,6 +62,14 @@
"type": "git", "type": "git",
"url": "https://github.com/solana-labs/oyster" "url": "https://github.com/solana-labs/oyster"
}, },
"peerDependencies": {
"react": "*",
"react-dom": "*"
},
"resolutions": {
"react": "16.13.1",
"react-dom": "16.13.1"
},
"homepage": ".", "homepage": ".",
"devDependencies": { "devDependencies": {
"@typechain/ethers-v4": "^1.0.0", "@typechain/ethers-v4": "^1.0.0",

View File

@ -1,10 +1,10 @@
// 44 - bridge config // 44 - bridge config
import { Layout } from '@oyster/common'; import { publicKey } from '@oyster/common/dist/lib/utils/layout';
import * as BufferLayout from 'buffer-layout'; import * as BufferLayout from 'buffer-layout';
export const BridgeLayout: typeof BufferLayout.Structure = BufferLayout.struct([ export const BridgeLayout = BufferLayout.struct([
BufferLayout.u32('guardianSetIndex'), BufferLayout.u32('guardianSetIndex'),
BufferLayout.u8('guardianSetExpirationTime'), BufferLayout.u8('guardianSetExpirationTime'),
Layout.publicKey('tokenProgram'), publicKey('tokenProgram'),
BufferLayout.u8('isInitialized'), BufferLayout.u8('isInitialized'),
]); ]);

View File

@ -1,7 +1,7 @@
import { programIds, sendTransactionWithRetry } from '@oyster/common'; import { programIds, sendTransactionWithRetry } from '@oyster/common';
import { WalletAdapter } from '@solana/wallet-base'; import { WalletAdapter } from '@solana/wallet-base';
import { ethers } from 'ethers'; import { ethers } from 'ethers';
import { WormholeFactory } from '../../../contracts/WormholeFactory'; import { WormholeFactory } from '../../contracts/WormholeFactory';
import { bridgeAuthorityKey } from './../helpers'; import { bridgeAuthorityKey } from './../helpers';
import { Connection, PublicKey, SystemProgram } from '@solana/web3.js'; import { Connection, PublicKey, SystemProgram } from '@solana/web3.js';
import { Token } from '@solana/spl-token'; import { Token } from '@solana/spl-token';
@ -9,7 +9,7 @@ import { ProgressUpdate, TransferRequest } from './interface';
import BN from 'bn.js'; import BN from 'bn.js';
import { createLockAssetInstruction } from '../lock'; import { createLockAssetInstruction } from '../lock';
import { TransferOutProposalLayout } from '../transferOutProposal'; import { TransferOutProposalLayout } from '../transferOutProposal';
import { SolanaBridge } from '../../../core'; import { SolanaBridge } from '../../core';
export const fromSolana = async ( export const fromSolana = async (
connection: Connection, connection: Connection,

View File

@ -1,5 +1,3 @@
import BN from 'bn.js';
import { ethers } from 'ethers';
import { BigNumber } from 'ethers/utils'; import { BigNumber } from 'ethers/utils';
import { ASSET_CHAIN } from '../constants'; import { ASSET_CHAIN } from '../constants';

View File

@ -8,8 +8,8 @@ import {
createAssociatedTokenAccountInstruction, createAssociatedTokenAccountInstruction,
} from '@oyster/common'; } from '@oyster/common';
import { ethers } from 'ethers'; import { ethers } from 'ethers';
import { ERC20Factory } from '../../../contracts/ERC20Factory'; import { ERC20Factory } from '../../contracts/ERC20Factory';
import { WormholeFactory } from '../../../contracts/WormholeFactory'; import { WormholeFactory } from '../../contracts/WormholeFactory';
import { AssetMeta, createWrappedAssetInstruction } from './../meta'; import { AssetMeta, createWrappedAssetInstruction } from './../meta';
import { bridgeAuthorityKey, wrappedAssetMintKey } from './../helpers'; import { bridgeAuthorityKey, wrappedAssetMintKey } from './../helpers';
import { import {

View File

@ -5,7 +5,7 @@ import assert from 'assert';
// @ts-ignore // @ts-ignore
import * as BufferLayout from 'buffer-layout'; import * as BufferLayout from 'buffer-layout';
import * as bs58 from 'bs58'; import * as bs58 from 'bs58';
import { AssetMeta } from '../models/bridge'; import { AssetMeta } from '../bridge';
export interface Lockup { export interface Lockup {
lockupAddress: PublicKey; lockupAddress: PublicKey;

View File

@ -1 +1,10 @@
// TODO: move bridge interaction code to this library export * as bridge from './bridge';
export * from './bridge';
export * as core from './core';
export * from './core';
export * from './contracts/ERC20Factory';
export * from './contracts/IERC20Factory';
export * from './contracts/WETHFactory';
export * from './contracts/WormholeFactory';
export * from './contracts/WrappedAssetFactory';

View File

@ -0,0 +1,4 @@
declare module 'buffer-layout' {
const bl: any;
export = bl;
}

View File

@ -1,22 +1,23 @@
{ {
"compilerOptions": { "compilerOptions": {
"target": "es5", "module": "commonjs",
"lib": ["dom", "dom.iterable", "esnext"], "target": "es2019",
"allowJs": true, "moduleResolution": "node",
"skipLibCheck": true, "skipLibCheck": true,
"esModuleInterop": true, "esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"strict": true, "strict": true,
"allowJs": true,
"allowSyntheticDefaultImports": true,
"forceConsistentCasingInFileNames": true, "forceConsistentCasingInFileNames": true,
"noFallthroughCasesInSwitch": true,
"module": "esnext",
"moduleResolution": "node",
"resolveJsonModule": true, "resolveJsonModule": true,
"isolatedModules": true,
"downlevelIteration": true,
"noEmit": true,
"jsx": "react", "jsx": "react",
"typeRoots": ["types", "../../types", "../../node_modules/@types"] "typeRoots": ["types", "../../types", "../../node_modules/@types"],
"outDir": "./dist/lib",
"rootDir": "./src",
"composite": true,
"declaration": true,
"declarationMap": true,
"sourceMap": true
}, },
"include": ["src"] "include": ["src/**/*"]
} }

View File

@ -14,6 +14,7 @@
"@solana/spl-token-swap": "0.1.0", "@solana/spl-token-swap": "0.1.0",
"@solana/wallet-base": "0.0.1", "@solana/wallet-base": "0.0.1",
"@solana/wallet-ledger": "0.0.1", "@solana/wallet-ledger": "0.0.1",
"@solana/bridge-sdk": "0.0.1",
"@solana/web3.js": "^1.5.0", "@solana/web3.js": "^1.5.0",
"@testing-library/jest-dom": "^4.2.4", "@testing-library/jest-dom": "^4.2.4",
"@testing-library/react": "^9.5.0", "@testing-library/react": "^9.5.0",

View File

@ -8,9 +8,8 @@ import {
useWallet, useWallet,
} from '@oyster/common'; } from '@oyster/common';
import './style.less'; import './style.less';
import { ASSET_CHAIN } from '../../models/bridge/constants';
import { TokenSelectModal } from '../TokenSelectModal'; import { TokenSelectModal } from '../TokenSelectModal';
import { chainToName } from '../../utils/assets'; import { ASSET_CHAIN, chainToName } from '../../utils/assets';
import { TokenChain } from '../TokenDisplay/tokenChain'; import { TokenChain } from '../TokenDisplay/tokenChain';
import { EthereumConnect } from '../EthereumConnect'; import { EthereumConnect } from '../EthereumConnect';
import { CurrentUserWalletBadge } from '../CurrentUserWalletBadge'; import { CurrentUserWalletBadge } from '../CurrentUserWalletBadge';

View File

@ -21,8 +21,8 @@ import { TokenChain } from '../TokenDisplay/tokenChain';
import bs58 from 'bs58'; import bs58 from 'bs58';
import { SyncOutlined } from '@ant-design/icons'; import { SyncOutlined } from '@ant-design/icons';
import { typeToIcon } from '../Transfer'; import { typeToIcon } from '../Transfer';
import { ProgressUpdate } from '../../models/bridge'; import { ProgressUpdate } from '@solana/bridge-sdk';
import { WormholeFactory } from '../../contracts/WormholeFactory'; import { WormholeFactory } from '@solana/bridge-sdk';
import { useEthereum } from '../../contexts'; import { useEthereum } from '../../contexts';
import { useBridge } from '../../contexts/bridge'; import { useBridge } from '../../contexts/bridge';

View File

@ -3,7 +3,7 @@ import { TokenInfo } from '@solana/spl-token-registry';
import { debug } from 'console'; import { debug } from 'console';
import React from 'react'; import React from 'react';
import { useEthereum } from '../../contexts'; import { useEthereum } from '../../contexts';
import { ASSET_CHAIN } from '../../models/bridge/constants'; import { ASSET_CHAIN } from '../../utils/assets';
import './style.less'; import './style.less';
import { TokenChain } from './tokenChain'; import { TokenChain } from './tokenChain';

View File

@ -1,5 +1,5 @@
import React from 'react'; import React from 'react';
import { ASSET_CHAIN } from '../../models/bridge/constants'; import { ASSET_CHAIN } from '../../utils/assets';
export const TokenChain = (props: { export const TokenChain = (props: {
chain?: ASSET_CHAIN; chain?: ASSET_CHAIN;

View File

@ -6,7 +6,7 @@ import './style.less';
import { Input, Modal } from 'antd'; import { Input, Modal } from 'antd';
import { useEthereum } from '../../contexts'; import { useEthereum } from '../../contexts';
import { TokenDisplay } from '../TokenDisplay'; import { TokenDisplay } from '../TokenDisplay';
import { ASSET_CHAIN } from '../../models/bridge/constants'; import { ASSET_CHAIN } from '../../utils/assets';
import { useConnectionConfig } from '@oyster/common'; import { useConnectionConfig } from '@oyster/common';
import { filterModalEthTokens, filterModalSolTokens } from '../../utils/assets'; import { filterModalEthTokens, filterModalSolTokens } from '../../utils/assets';

View File

@ -11,7 +11,7 @@ import {
ProgressUpdate, ProgressUpdate,
toSolana, toSolana,
TransferRequest, TransferRequest,
} from '../../models/bridge'; } from '@solana/bridge-sdk';
import { useEthereum } from '../../contexts'; import { useEthereum } from '../../contexts';
import { TokenDisplay } from '../TokenDisplay'; import { TokenDisplay } from '../TokenDisplay';
import { useTokenChainPairState } from '../../contexts/chainPair'; import { useTokenChainPairState } from '../../contexts/chainPair';

View File

@ -1,5 +1,5 @@
import React, { createContext, FunctionComponent, useContext } from 'react'; import React, { createContext, FunctionComponent, useContext } from 'react';
import { SolanaBridge } from '../core'; import { SolanaBridge } from '@solana/bridge-sdk';
import { import {
useConnection, useConnection,
useConnectionConfig, useConnectionConfig,

View File

@ -21,13 +21,13 @@ import {
} from '../utils/assets'; } from '../utils/assets';
import { useEthereum } from './ethereum'; import { useEthereum } from './ethereum';
import { BigNumber } from 'ethers/utils'; import { BigNumber } from 'ethers/utils';
import { WrappedAssetFactory } from '../contracts/WrappedAssetFactory'; import { WrappedAssetFactory } from '@solana/bridge-sdk';
import { WormholeFactory } from '../contracts/WormholeFactory'; import { WormholeFactory } from '@solana/bridge-sdk';
import { import {
bridgeAuthorityKey, bridgeAuthorityKey,
TransferRequestInfo, TransferRequestInfo,
wrappedAssetMintKey, wrappedAssetMintKey,
} from '../models/bridge'; } from '@solana/bridge-sdk';
import { useBridge } from './bridge'; import { useBridge } from './bridge';
import { PublicKey } from '@solana/web3.js'; import { PublicKey } from '@solana/web3.js';

View File

@ -1,30 +0,0 @@
import { useCallback, useEffect, useRef, useState } from 'react';
import {
useConnection,
useConnectionConfig,
MintParser,
cache,
getMultipleAccounts,
ParsedAccount,
TokenAccountParser,
} from '@oyster/common';
import { WORMHOLE_PROGRAM_ID } from '../utils/ids';
import { ASSET_CHAIN } from '../utils/assets';
import { useEthereum } from '../contexts';
import { Connection, PublicKey } from '@solana/web3.js';
import { models } from '@oyster/common';
import { AccountInfo, MintInfo, TOKEN_PROGRAM_ID } from '@solana/spl-token';
import { WrappedMetaLayout } from './../models/bridge';
import bs58 from 'bs58';
import {
COINGECKO_COIN_PRICE_API,
COINGECKO_POOL_INTERVAL,
useCoingecko,
} from '../contexts/coingecko';
export const useEthUserAccount = () => {
const [address, setAddress] = useState('');
// const { web3 } = useEthereum();
return address;
};

View File

@ -20,7 +20,7 @@ import {
bridgeAuthorityKey, bridgeAuthorityKey,
wrappedAssetMintKey, wrappedAssetMintKey,
WrappedMetaLayout, WrappedMetaLayout,
} from './../models/bridge'; } from '@solana/bridge-sdk';
import bs58 from 'bs58'; import bs58 from 'bs58';
import { import {

View File

@ -21,7 +21,7 @@ import {
import { import {
bridgeAuthorityKey, bridgeAuthorityKey,
TransferOutProposalLayout, TransferOutProposalLayout,
} from './../models/bridge'; } from '@solana/bridge-sdk';
import bs58 from 'bs58'; import bs58 from 'bs58';
import { import {
@ -30,17 +30,16 @@ import {
useCoingecko, useCoingecko,
} from '../contexts/coingecko'; } from '../contexts/coingecko';
import { BN } from 'bn.js'; import { BN } from 'bn.js';
import { WormholeFactory } from '../contracts/WormholeFactory'; import { WormholeFactory } from '@solana/bridge-sdk';
import { ethers } from 'ethers'; import { ethers } from 'ethers';
import { useBridge } from '../contexts/bridge'; import { useBridge } from '../contexts/bridge';
import { SolanaBridge } from '../core'; import { SolanaBridge } from '@solana/bridge-sdk';
type WrappedTransferMeta = { type WrappedTransferMeta = {
chain: number; chain: number;
decimals: number; decimals: number;
address: string; address: string;
publicKey: PublicKey; publicKey: PublicKey;
coinId?: string; coinId?: string;
price?: number; price?: number;
explorer?: any; explorer?: any;

View File

@ -1,6 +1,7 @@
{ {
"compilerOptions": { "compilerOptions": {
"target": "es5", "module": "esnext",
"target": "es2019",
"lib": ["dom", "dom.iterable", "esnext"], "lib": ["dom", "dom.iterable", "esnext"],
"allowJs": true, "allowJs": true,
"skipLibCheck": true, "skipLibCheck": true,
@ -9,14 +10,13 @@
"strict": true, "strict": true,
"forceConsistentCasingInFileNames": true, "forceConsistentCasingInFileNames": true,
"noFallthroughCasesInSwitch": true, "noFallthroughCasesInSwitch": true,
"module": "esnext",
"moduleResolution": "node",
"resolveJsonModule": true, "resolveJsonModule": true,
"isolatedModules": true, "isolatedModules": true,
"downlevelIteration": true, "downlevelIteration": true,
"noEmit": true, "noEmit": true,
"jsx": "react", "jsx": "react",
"typeRoots": ["types", "../../types", "../../node_modules/@types"] "typeRoots": ["types", "../../types", "../../node_modules/@types"],
"moduleResolution": "node"
}, },
"include": ["src"] "include": ["src"]
} }

View File

@ -1185,7 +1185,7 @@
"@babel/helper-plugin-utils" "^7.8.3" "@babel/helper-plugin-utils" "^7.8.3"
"@babel/plugin-transform-typescript" "^7.9.0" "@babel/plugin-transform-typescript" "^7.9.0"
"@babel/preset-typescript@^7.12.13": "@babel/preset-typescript@^7.12.13", "@babel/preset-typescript@^7.13.0":
version "7.13.0" version "7.13.0"
resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.13.0.tgz#ab107e5f050609d806fbb039bec553b33462c60a" resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.13.0.tgz#ab107e5f050609d806fbb039bec553b33462c60a"
integrity sha512-LXJwxrHy0N3f6gIJlYbLta1D9BDtHpQeqwzM0LIfjDlr6UE/D5Mc7W4iDiQzaE+ks0sTjT26ArcHWnJVt0QiHw== integrity sha512-LXJwxrHy0N3f6gIJlYbLta1D9BDtHpQeqwzM0LIfjDlr6UE/D5Mc7W4iDiQzaE+ks0sTjT26ArcHWnJVt0QiHw==
@ -6417,6 +6417,11 @@ buffer-layout@^1.2.0:
resolved "https://registry.yarnpkg.com/buffer-layout/-/buffer-layout-1.2.0.tgz#ee1f5ef05a8afd5db6b3a8fe2056c111bc69c737" resolved "https://registry.yarnpkg.com/buffer-layout/-/buffer-layout-1.2.0.tgz#ee1f5ef05a8afd5db6b3a8fe2056c111bc69c737"
integrity sha512-iiyRoho/ERzBUv6kFvfsrLNgTlVwOkqQcSQN7WrO3Y+c5SeuEhCn6+y1KwhM0V3ndptF5mI/RI44zkw0qcR5Jg== integrity sha512-iiyRoho/ERzBUv6kFvfsrLNgTlVwOkqQcSQN7WrO3Y+c5SeuEhCn6+y1KwhM0V3ndptF5mI/RI44zkw0qcR5Jg==
buffer-layout@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/buffer-layout/-/buffer-layout-1.2.1.tgz#17b6db7abea303cab35eebd77919b89de026297d"
integrity sha512-RUTGEYG1vX0Zp1dStQFl8yeU/LEBPXVtHwzzDbPWkE5zq+Prt9fkFLKNiwmaeHg6BBiRMcQAgj4cynazO6eekw==
buffer-to-arraybuffer@^0.0.5: buffer-to-arraybuffer@^0.0.5:
version "0.0.5" version "0.0.5"
resolved "https://registry.yarnpkg.com/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz#6064a40fa76eb43c723aba9ef8f6e1216d10511a" resolved "https://registry.yarnpkg.com/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz#6064a40fa76eb43c723aba9ef8f6e1216d10511a"