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 |
bignumber.jsEnvironment{
"local_name": "bignumber.js",
"alias": false,
"peer_metadata": null
} | ^9.0.2 | 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-aPd4EfRV75HcHpZpahUTbKP82e89is7Own3cyQ+o9i058o0C6fq74JduHFohhRHrJePTNdjizpZhxZp2YmstkA==",
"shasum": "c5ec2aeee11096d4bc87ed9895341f502dd58116",
"tarball": "https://registry.npmjs.org/3swap-sdk/-/3swap-sdk-1.0.7.tgz",
"fileCount": 26,
"unpackedSize": 51606,
"npm-signature": "-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiMmAcACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoPIQ//bae5bp6RZY8428DqE8K17TJVlZsgXhqivCEktIE0q7wexLMF\r\nE8OPVsNcNE0fp0kRpBb9FGhFMNKIyzw1bhIDID6DomBKxoLgsMQzWX9bB1mU\r\nBvDy2SAeosEcjcz2YoC6k6nZODKyavSphE38E5140bwtfn8rdrG5COLGCiZu\r\nbaSavR1tp3Q42gwi88bnyJse57AZzz0blWTr0u87RFG5qvGvShYGslK9WqIi\r\n4BazX/rHBD5N38wTe6Ren6+K5wKhVT53JoC0dId+jYR+HWBK1BCaDcNxhoIG\r\nRTh4O9Q2XOs2ENGvA1TBd2fAfKThVJ0GivOKVSe8t/CzSVBsyRdIa+wUW5Bz\r\nSsQbrcTNyQ3QxDAbR8RCDeKWO2rzlAGx3mTS1hyxi94nuai0hGre6F+b6mSi\r\nluYdmKFscE7tcgQhicNCmFCqtk2RnJzV2gF9s+/3l5cWVWbxflkzy5N8cViu\r\nuSyHAADdFZ8m1+jLlsSGL25cnxKkJoYMGBP02Czxmr6m1RJbxotu++kF/eeb\r\nxU5dzYAIDtDaAZKD3hcGEejmvtYUlThefxCnNPS0+T55fI0PropwSeuv29mM\r\nRSnEx+9fokJx9Wvv5NytmQU2caUAaMBwal9H6nUj8LxYj/afGUHd/sjqnyN4\r\nvmaIgC+XD7iN+yGuTo7BJVG7LSlVuWyJd5k=\r\n=lBih\r\n-----END PGP SIGNATURE-----\r\n",
"signatures": [
{
"keyid": "SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA",
"sig": "MEYCIQDTspYyZM1GPkncyFj1yvhXO048sEzL3h/qK3ZdMsZY5QIhAKr2oAWvDRfp93IjEIxTEHSOdQ9kwos0Fpf2nwLqkaw0"
}
]
}Observed since 20 Oct, 19:52 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package_version:2e40db6378236857cc68a27dfa3f7a9b8903580f18e00a2ae9f5e075f464678d