关于css:BakerySwapjs如何操作

7次阅读

共计 6345 个字符,预计需要花费 16 分钟才能阅读完成。

1 编译合约
在终端进入我的项目目录,执行如下命令编译 bakeryswap 及开发包提供的测试 Token 合约:

~$ cd ~/bakeryswap.js
~/bakeryswap.js$ bin/build-contracts

执行后果如下:

在这里插入图片形容

2 部署合约
首先在另一个终端启动开发私链:

~$ ganache-cli -d

而后进入我的项目 demo 目录,执行如下命令部署合约:

~$ cd ~/bakeryswap.js/demo
~/bakeryswap.js/demo$ node deploy-contracts.js

执行后果如下:

在这里插入图片形容

留神:如果须要在 BSC 主链或测试链部署上述合约,或者应用其余参数启动 ganache-cli,须要批改 config.js 中的账号配置。

3 Token 受权
代码 demo/token-approve.js 演示了如何受权 bakeryswap 路由合约代理操作以后账号的 HAPY token 和 USDT token。

在终端进入我的项目 demo 目录,执行如下命令:

~$ cd ~/bakeryswap.js/demo
~/bakeryswap.js/demo$ node token-approve.js

执行后果如下:

在这里插入图片形容

4 BEP20/BEP20 交易对增加流动性
代码 demo/add-liquidity.js 演示了如何为 BEP20/BEP20 交易对增加流动性。

在终端进入我的项目 demo 目录,执行如下命令:

~$ cd ~/bakeryswap.js/demo
~/bakeryswap.js/demo$ node add-liquidity.js

执行后果如下:

在这里插入图片形容

bakeryswap 协定约定,第一次增加流动性将主动创立交易对,之后再次增加流动性时,演示代码将首先显示以后的仓位信息。例如再次执行如下命令:

~/bakeryswap.js/demo$ node add-liquidity.js

执行后果如下:

在这里插入图片形容

5 BEP20/BEP20 交易对移除流动性
代码 demo/remove-liquidity.js 演示了如何移除指定的 BEP20/BEP20 交易对的流动性。

在终端进入我的项目 demo 目录,执行如下命令:

~$ cd ~/bakeryswap.js/demo
~/bakeryswap.js/demo$ node remove-liquidity.js

执行后果如下:

在这里插入图片形容

6 BEP20/BEP20 兑换:以输出 token 数量为基准
代码 demo/swap-exact-tokens-for-tokens.js 演示了如何实现以输出 token 数量为基准的 BEP20/BEP20 兑换。

在终端进入我的项目 demo 目录,执行如下命令:

~$ cd ~/bakeryswap.js/demo
~/bakeryswap.js/demo$ node swap-exact-tokens-for-tokens.js

执行后果如下:

在这里插入图片形容

7 BEP20/BEP20 兑换:以输入 token 数量为基准
代码 demo/swap-tokens-for-exact-tokens.js 演示了如何实现以输入 token 数量为基准的 BEP20/BEP20 兑换。

在终端进入我的项目 demo 目录,执行如下命令:

~$ cd ~/bakeryswap.js/demo
~/bakeryswap.js/demo$ node swap-tokens-for-exact-tokens.js

执行后果如下:

在这里插入图片形容

8 BNB/BEP20 交易对增加流动性
代码 demo/add-liquidty-bnb.js 演示了如何为 BNB/BEP20 或 BEP20/BNB 交易对增加流动性。

在终端进入我的项目 demo 目录,执行如下命令:

~$ cd ~/bakeryswap.js/demo
~/bakeryswap.js/demo$ node add-liquidity-bnb.js

执行后果如下:

在这里插入图片形容

第一次增加流动性将主动创立交易对,之后再次增加将首先显示以后的持仓信息。例如再次执行如下命令:

~/bakeryswap.js/demo$ node add-liquidity-bnb.js

执行后果如下:

在这里插入图片形容

9 BNB/BEP20 交易对移除流动性
代码 demo/remove-liquidity-bnb.js 演示了如何移除 BNB/BEP20 或 BEP20/BNB 交易对的流动性。

在终端进入我的项目 demo 目录,执行如下命令:

~$ cd ~/bakeryswap.js/demo
~/bakeryswap.js/demo$ node remove-liquidity-bnb.js

执行后果如下:

在这里插入图片形容

10 BNB/BEP20 兑换:以输出 BNB 数量为基准
代码 demo/swap-exact-bnb-for-tokens.js 演示了如何将指定数量的 BNB 兑换为 BEP20 token。

在终端进入我的项目 demo 游戏目录,执行如下命令:

~$ cd ~/bakeryswap.js/demo
~/bakeryswap.js/demo$ node swap-exact-bnb-for-tokens.js

执行后果如下:

在这里插入图片形容

11 BNB/BEP20 兑换:以输入 token 数量为基准
代码 demo/swap-bnb-for-exact-tokens.js 演示了如何将 BNB 兑换为指定数量的 BEP20 token。

在终端进入我的项目 demo 目录,执行如下命令:

~$ cd ~/bakeryswap.js/demo
~/bakeryswap.js/demo$ node swap-bnb-for-exact-tokens.js

执行后果如下:

在这里插入图片形容

12 BEP20/BNB 兑换:以输出 token 数量为基准
代码 demo/swap-exact-tokens-for-bnb.js 演示了如何将指定数量的 BEP20 token 兑换为 www.cungun.comBNB。

在终端进入我的项目 demo 目录,执行如下命令:

~$ cd ~/bakeryswap.js/demo
~/bakeryswap.js/demo$ node swap-exact-tokens-for-bnb.js

执行后果如下:

在这里插入图片形容

13 BEP20/BNB 兑换:以输入 BNB 数量为基准
代码 demo/swap-tokens-for-exact-bnb.js 演示了如何将 BEP20 token 兑换为指定数量的 BNB。

在终端进入我的项目 demo 目录,执行如下命令:

~$ cd ~/bakeryswap.js/demo
~/bakeryswap.js/demo$ node swap-tokens-for-exact-bnb.js

执行后果如下:

在这里插入图片形容

14 实例化 SwapKit
SwapKit 实例化须要传入三个参数:

币安智能链节点 URL
bakeryswap 路由合约地址
用于执行合约交互的币安智能链账号的私钥。
例如,上面的代码创立一个接入 BSC 主网 bakeryswap 协定的 SwapKit 实例:

const {SwapKit} = require(‘bakeryswap.js’)

const kit = new SwapKit(
‘https://bsc-dataseed.binance…. // 币安智能链节点 URL
‘0xCDe540d7eAFE93aC5fE6233Bee57E1270D3E330F’, //BSC 主链 bakeryswap 路由合约地址
‘0x4f3e…3b1d’ // 默认执行账号的私钥
)

15 生成流动性增加 / 移除委托单
因为 bakeryswap 协定中波及到交易滑点解决以及价格预计算,因而 bakeryswap.js 提供了一个专门的类 OrderBuilder 用于生成流动性增加 / 移除委托单。OrderBuilder 的实现内置了主动价格计算与滑点计算,因而调用者只须要指定根本的数据即可生成可提交给 bakeryswap 合约的流动性增加 / 移除委托单。

应用 SwapKit 对象的 orderBuilder 属性获取预创立的 OrderBuilder 对象,并调用 OrderBuilder 的异步办法 build()生成委托单。例如:

const order = await kit.orderBuilder // 返回 OrderBuilder 对象

                ......                     // 参数设置
                .build()                   // 生成并返回委托单

OrderBuilder 对象提供了以下办法用于调整生成器的行为:

orderType(type):设置委托单类型,目前反对两种:
Order.LIQUIDITY_ADD – 流动性增加委托单
Order.LIQUIDITY_REMOVE – 流动性移除委托单
tokenA(addr) / tokenB(addr):交易对的两个 Token 地址
amountA(bn) / amountB(bn):两个 token 的增加数量,仅在增加流动时须要设置
liquidity(bn):LP token 数量,仅在移除流动性时须要设置
slippage(bn):交易滑点设置,默认值为 5,示意 0.5% 的滑点容忍区间
to(addr):委托单执行后果接管地址
例如,上面的代码生成一个流动性增加委托单:

// const {SwapKit, Order, bn} = require(‘bakeryswap.js’)

const order = await kit.orderBuilder // 获取委托单生成器对象

                .orderType(Order.LIQUIDITY_ADD)          // 增加流动性
                .tokenA('0x...')                         // 交易对 TokenA
                .tokenB('0x...')                         // 交易对 TokenB
                .amountA(bn('100000000000000000000'))    // 以 TokenA 数量为基准按市价主动计算 TokenB 数量
                .slippage(bn('10'))                      // 滑点容忍范畴 1%
                .to(kit.ownerAddress)                    // 设置 LP Token 的接管地址
                .build()                                 // 生成委托单 
         

console.log(amountA => ${order.amountA}) //TokenA 设置数量
console.log(amountB => ${order.amountB}) //TokenB 计算数量
console.log(amountAMin => ${order.amountAMin}) // 滑点解决后的 TokenA 最小可承受数量
console.log(amountBMin => ${order.amountBMin}) // 滑点解决后的 TokenB 最小可承受数量

留神:

应用非凡的 SwapKit.ETH_TOKEN 示意交易对中的 BNB,值为:0x00000000000000000000000000000000000eeeee
bn(numstr) 是 bakeryswap.js 提供的一个创立 BigNumber 对象 的快捷函数,其参数为 10 进制字符串。
token 数量均按最小单位指定
相似的,上面的代码生成一个流动性移除委托单:

// const {SwapKit, Order, bn} = require(‘bakeryswap.js’)

const order = await kit.orderBuilder // 获取委托单生成器对象

                .orderType(Order.LIQUIDITY_REMOVE)        // 移除流动性  
                .tokenA('0x...')                          // 交易对 TokenA 地址 
                .tokenB('0x...')                          // 交易对 TokenB 地址 
                .liquidity(bn('10000000000000000000'))    // 要移除的流动性数量
                .slippage(bn('10'))                       // 滑点容忍范畴 1%
                .to(kit.ownerAddress)                     //token 接管地址
                .build()                                  // 生成委托单 

console.log(amountAMin => ${order.amountAMin}) // 滑点解决后起码应收到的 TokenA 数量
console.log(amountBMin => ${order.amountAMin}) // 滑点解决后起码应收到的 TokenB 数量

Order 对象提供的以下值,有助于在执行委托单之前向用户提供更好的反馈信息:

amountA/amountB:市价计算的 tokenA 或 tokenB 现实值
amountAMin/amountAMax:滑点解决后的 tokenA 最小值 / 最大值
amountBMin/amountBMax:滑点解决后的 tokenB 最小值 / 最大值
16 执行流动性委托单
应用 SwapKit 的 executeOrder() 办法即可执行生成的流动性委托单,最终实现流动性增加 / 移除交易。例如:

const tx = await kit->executeOrder($trade); // 执行委托单
console.log(txid => ${tx.hash}) // 显示交易 ID

默认状况下,executeOrder()办法主动估算交易所需的 gas 限额与 gas 价格,但能够传入额定的参数手动设置这两个值。

例如,上面的代码以指定的 gas 参数执行流动性保护单:

// const {bn} = require(‘bakeryswap.js’)

const opts = {
gasLimit: bn(‘4000000’), //4 million
gasPrice: bn(‘200000000000’) //200 gwei
}
const tx = await kit.executeOrder(order, opts) // 执行委托单

17 查问仓位信息
应用 SwapKit 的 getLiquidityInfo() 办法能够查问指定账号在指定交易对的仓位信息。例如查问某地址的持仓状况:

const info = await kit.getLiquidityInfo(‘0x90F8…c9C1’); // 查问持仓信息

console.log(total => ${info.totalSupply}) //LP 总量
console.log(balance => ${info.balance}) // 持仓数量
console.log(share % => ${info.share}) // 持仓比例

18 生成兑换交易对象
相似于流动性的增加与移除,在 bakeryswap 中的交易对兑换也存在价格主动计算与滑点解决问题。为此,bakeryswap.js 开发包提供了一个专门的类 TradeBuilder 用来简化这一操作。TradeBuilder 内置了价格主动计算与滑点解决,因而调用者只须要设置根本的参数即可。

应用 SwapKit 对象的 tradeBuilder 属性获取预创立的 TradeBuilder 对象,例如:

const tb = await kit.tradeBuilder // 获取预创立的兑换交易生成器

        ......                             // 参数设置
        .build()                          // 生成兑换交易对象

TradeBuilder 提供了以下办法用于调整生成器的行为:

tradeType(type):兑换类型,可选值为:
Trade.EXACT_INPUT – 以 tokenIn 的数量为基准
Trade.EXACT_OUTPUT – 以 tokenOut 的数量为基准
tokenIn(addr) – 输出 Token 的地址
tokenOut(addr) – 输入 Token 的地址
amountIn(bn) – 输出数量,仅在兑换类型为 EXACT_INPUT 时须要设置
amountOut(bn) – 输入数量,仅在兑换类型为 EXACT_OUTPUT 时须要设置
slippage(bn) – 交易滑点设置,默认值 5,示意容许 0.5% 的滑点
to($addr) – 输入 token 接管地址

正文完
 0