Observed since 20 Oct, 19:52 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
3swap-sdk
3Swap-SDK ===========================================
The 3Swap SDK is a convenience library for querying chain state relevant to 3Swap DEX. Leveraging the SDK, you can compute parameters with which to interact with the 3Swap smart contract.
Examples:
You can query the chain for token info using the chain ID and the token address.
import { Fetcher, ChainId } from '3swap-sdk';
Fetcher.fetchTokenData(
ChainId.BINANCE_TESTNET,'0x57c84e7bcbab211761a0cb91484ae896aa897ae9'
)
.then(token => {
console.log('Name: %s, Decimals: %d', token.name(), token.decimals()); // 3Swap 0x, SAPX
});
// or use custom provider
Fetcher.fetchTokenData(
ChainId.BINANCE_TESTNET,'0x57c84e7bcbab211761a0cb91484ae896aa897ae9', 'PROVIDER_URL'
)
.then(token => {
console.log('Name: %s, Decimals: %d', token.name(), token.decimals()); // 3Swap 0x, SAPX
});
You can also set a number as the chain id:
Fetcher.fetchTokenData(
97,'0x57c84e7bcbab211761a0cb91484ae896aa897ae9' // '97' is the chain ID for Binance Testnet
)
.then(token => {
console.log('Name: %s, Decimals: %d', token.name(), token.decimals()); // 3Swap 0x, SAPX
});
The Fetcher.fetchTokenData function returns a Promise<Token>.
Fields in the token class include:
| Name | Type |
|---|---|
| _address | string |
| _chainId | ChainId or number |
| _decimals | number or string |
| _name | string |
| _symbol | string |
Triad information can be fetched on-chain using a static helper method that returns a Promise<Triad>.
import { Fetcher, ChainId } from '3swap-sdk';
async function fetchTriad() {
const tokenA = await Fetcher.fetchTokenData(
ChainId.BINANCE_TESTNET, '0x57c84e7bcbab211761a0cb91484ae896aa897ae9'
);
//...2 other tokens
const triad = await Fetcher.fetchTriadData(tokenA, tokenB, tokenC);
}
// or use custom provider url
const triad = await Fetcher.fetchTriadData(tokenA, tokenB, tokenC, 'PROVIDER_URL');
Fields in the triad class include:
| Name | Type |
|---|---|
| liquidityToken | Token |
| tokenAmounts | [TokenAmount, TokenAmount, TokenAmount] |
Computing trades:
The SDK also provides the effective computation of trades through the Router class.
import { Router } from '3swap-sdk';
Router.swapCallParameter(trade, chainId, options);
The static swapCallParameter method of the Router class takes in a trade, a chain ID and a trade options object and then computes a SwapParams object which contains the method name, the arguments for the method and the hex encoded value of Ether to be sent in the transaction (this is 0 for transactions that do not involve Ether).
Constructing a Trade
A trade class is useful in the actual computation by the router class. The Trade constructor takes in three TokenAmount objects and a TradeType enum.
new Trade(input1amount, input2amount, outputamount, tradetype);
The TokenAmount constructor takes in a big number (the amount) and a token.
new TokenAmount(JSBI.BigInt(4000000000000000000), token);
The TradeType enum:
enum TradeType {
EXACT_INPUT,
EXACT_OUTPUT
}
The trade type is useful in determining how slippage is spread. EXACT_INPUT means no slippage tolerance is computed on the input amount while EXACT_OUTPUT means no slippage tolerance is applied on the output amount.
The TradeOptions interface:
/**
* Trade options.
*/
export interface TradeOptions {
/**
* Price difference during latency in transaction submission and block confirmation
*/
slippage: number;
/**
* How long the transaction should last before it becomes invalid (in seconds)
*/
deadline: number;
/**
* The account that should receive the swap output
*/
recipient: string;
}
Router.swapCallParameters returns a SwapParams object.
export interface SwapParams {
/**
* The method to send to the 3Swap router
*/
methodName: string;
/**
* Arguments to pass to the method (all hex-encoded)
*/
args: Array<string | string[]>;
/**
* Amount of wei to send in hex
*/
value: string;
}
Download counts and popularity will appear here as the collector receives them.
| Package / target | Requirement | Relationship |
|---|---|---|
3swap-v1-coreEnvironment{
"local_name": "3swap-v1-core",
"alias": false,
"peer_metadata": null
} | ^1.0.13 | runtime |
@ethersproject/abiEnvironment{
"local_name": "@ethersproject/abi",
"alias": false,
"peer_metadata": null
} | ^5.5.0 | runtime |
@ethersproject/addressEnvironment{
"local_name": "@ethersproject/address",
"alias": false,
"peer_metadata": null
} | ^5.5.0 | runtime |
@ethersproject/solidityEnvironment{
"local_name": "@ethersproject/solidity",
"alias": false,
"peer_metadata": null
} | ^5.5.0 | runtime |
axiosEnvironment{
"local_name": "axios",
"alias": false,
"peer_metadata": null
} | ^0.25.0 | runtime |
jsbiEnvironment{
"local_name": "jsbi",
"alias": false,
"peer_metadata": null
} | ^4.1.0 | runtime |
tiny-invariantEnvironment{
"local_name": "tiny-invariant",
"alias": false,
"peer_metadata": null
} | ^1.2.0 | runtime |
tiny-warningEnvironment{
"local_name": "tiny-warning",
"alias": false,
"peer_metadata": null
} | ^1.0.3 | runtime |
@jest/typesEnvironment{
"local_name": "@jest/types",
"alias": false,
"peer_metadata": null
} | ^27.5.1 | development |
@types/jestEnvironment{
"local_name": "@types/jest",
"alias": false,
"peer_metadata": null
} | ^27.4.0 | development |
jestEnvironment{
"local_name": "jest",
"alias": false,
"peer_metadata": null
} | ^27.5.1 | development |
ts-jestEnvironment{
"local_name": "ts-jest",
"alias": false,
"peer_metadata": null
} | ^27.1.3 | development |
ts-nodeEnvironment{
"local_name": "ts-node",
"alias": false,
"peer_metadata": null
} | ^10.5.0 | development |
typescriptEnvironment{
"local_name": "typescript",
"alias": false,
"peer_metadata": null
} | ^4.5.5 | development |
Source distribution
{
"integrity": "sha512-PZl2yot8Vn2xn5zEAPq3xKf/XVHFtHDmGUy800vpSXnqjEyBVXHq0bETZH6N5yfZ870AGKNHToouin5rmxkx7Q==",
"shasum": "8bcff62d3f87ef9ac2d78ad668fa520db29e6635",
"tarball": "https://registry.npmjs.org/3swap-sdk/-/3swap-sdk-1.0.1.tgz",
"fileCount": 26,
"unpackedSize": 50968,
"npm-signature": "-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiDpvyACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmpojw/9G+XMHmuF7IJ/CFgdkRw+mKVn8zLO2xMqsteqWSaBu5qknVQf\r\nBqc/Ccvvf80KgCxEJ3b/QpG9h0AYeVDAgHDBJuIdcdRebM3p8czx1aCWCgRL\r\ndwZWzcY/R/l3PwI5vq0MudpTwEzSEJY0K2y/3wl50Sep2tyh0SJKBdNuraxI\r\nzYbbj9CugJAzuzb72EXfQbZZIbiFotSn8Bw+TTcTiQ1Ac/FnsiR1JTf1SCUn\r\nRUrgVKIQ9DK3EtRkVH/IAGrMkntutfq9ZN9Ep5cWp+UbP6/rnyMXZx+6uGmI\r\nH2H1Pvxb4mrSCqU0H/vzC8Xv3HGiq6VFbpCe0Hvzf+YodmflcN48TW45fbTu\r\n5qcjOFmdunHfsX8fy1RAcA6tPmQPAUzzD0u7tFeqmMHi9P+3kLOyKvM2EPx0\r\nrsaXmpebzRizfi8pM89Xrf3kmysktyUb8yhJGjGMMAh+cuJmdL4PvX4aFevV\r\nZEsakBIA8RnvldQCRoQBjxTca0xfVspTZ2aivtUsecQvUFt8Nbe+Ldp5QA0a\r\nRZaP+d1/0HnwplRwNyyiTuGMJ/y1zngT319igT3OUne7WJ+OJ6X+Nr8ZB7O4\r\n53osZzWQjP6N3EI6kefECZWxBF4HggfrdxZUk4IYm93maiDM0WnyzvjcPC0n\r\nQ+P+EUc1j3Vdf+zfzeZBZFg9ojfx2xqj9JY=\r\n=BNcr\r\n-----END PGP SIGNATURE-----\r\n",
"signatures": [
{
"keyid": "SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA",
"sig": "MEYCIQCkO6UHh0m32RbhuybEu4Xld5Jp8zH60aY/JgOTPiytXAIhAOBKdiuMyU2GjPgJ5VVE9NEweAiE8h2/qRaFEA4WASD4"
}
]
}Observed since 20 Oct, 19:52 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package_version:c895cf809aae0cdd008b389aaa36335df16bad6d03f9d65a77f432ca99aacabb