Kava 在 4 月 3 日成功上线了 BNB 桥接测试网,大大简化了用户的开发、调试和部署方式。该版本的测试网支持用户将 BNB 从币安链转移到 Kava 区块链并抵押生成稳定币 USDX。Kava 还发布了 JavaScript SDK,用于 Kava 区块链的交互功能。
Kava 创始人兼 CEO Brian Kerr 认为虽然这是一个测试网,但它更像是带有 Binance-to-Kava 转接桥的完整软件包的 alpha 发布。这个测试网的目的是更彻底地测试转接桥的漏洞,并查看其在自然环境下的性能。
Kava 开发团队还将在本月中花费大量时间测试代码库,来准备 CDP 主网启动。对于公司和整个加密行业而言,Kava CDP 主网的发布都会是一个重要的里程碑,让 DeFi 首次更容易进入更大的加密市场。
在上一篇文章 Kava 的 BNB 桥接测试网的跨链运行逻辑中,我们介绍了测试网进行跨链转移的内在机制,本篇文章我们将具体介绍一下如何将 BNB 从币安链发送到 Kava 链并使用它创建 USDX。本文中的所有代码都可以在 GitHub 上找到(点击文末”阅读原文”)。
第 1 步
创建测试网账户
我们需要在币安链和 Kava 链上都创建地址,以便在它们之间交换资产。Kava 的 JavaScript SDK 支持生成助记词,我们可以从中加载新地址,用 npm 来安装它。
npm install @kava-labs/javascript-sdk
在新的 JavaScript 文件中,导入加密库,然后创建一个新的助记词并加载关联的地址。
const kava = require(“@kava-labs/javascript-sdk”);
const crypto = kava.crypto;const mnemonic = crypto.generateMnemonic();
const addr = crypto.getAddressFromMnemonic(mnemonic);console.log(“Mnemonic:”, mnemonic);
console.log(“Address:”, addr);
要在币安链测试网上创建帐户的话,可以参考币安的教程 -> 如何在 Binance DEX 上创建钱包
https://www.binance.vision/zh/tutorials/binance-dex-creating-a-wallet
记得保存你的助记词!
第 2 步
加载测试网资金
在我们开始测试之前,请先到 Kava 水龙头申请一些 KAVA 到你的测试地址。
水龙头地址:https://faucet.kava.io/
这是必要的步骤,因为它会在区块链状态中注册您的地址。
Kava 水龙头可以用来 claim(认领)测试币 KAVA
为了创建交换,我们的新币安链账户需要 BNB 测试币。你可以去币安的水龙头上获得 200 个 BNB 测试币。
https://www.binance.vision/zh/tutorials/binance-dex-funding-your-testnet-account
跟着教程获取测试币
第 3 步
启动币安链客户端
使用币安的 JavaScript SDK 将交易发送到他们的测试网。在新目录中,安装币安链 JavaScript SDK。
npm install @binance-chain/javascript-sdk
创建一个名为 main.js 的新文件,然后设置主链的代理地址,并使用助记词和 API 端点初始化一个新客户端。
const BnbApiClient = require(“@binance-chain/javascript-sdk”);
const bnbCrypto = BnbApiClient.crypto;const BINANCE_CHAIN_API_TESTNET = “https://testnet-dex.binance.org”;
const BINANCE_CHAIN_DEPUTY = “tbnb1et8vmd0dgvswjnyaf73ez8ye0jehc8a7t7fljv”;const bnbAddress = “your binance chain testnet address”;
const bnbMnemonic = “secret words that unlock your address”;// Start Binance Chain client
const bnbClient = await new BnbApiClient(BINANCE_CHAIN_API_TESTNET);
bnbClient.chooseNetwork(“testnet”);
const privateKey = bnbCrypto.getPrivateKeyFromMnemonic(bnbMnemonic);
bnbClient.setPrivateKey(privateKey);
await bnbClient.initChain();
第 4 步
启动 Kava 客户端
使用 Kava 的 JavaScript SDK 将交易发送到测试网。同样,设置代理地址并初始化一个新客户端。
const kava = require(“@kava-labs/javascript-sdk”);
const KavaClient = kava.KavaClient;const KAVA_API_TESTNET = “http://kava-testnet-5000.kava.io:1317”;
const KAVA_DEPUTY = “kava1aphsdnz5hu2t5ty2au6znprug5kx3zpy6zwq29”;const kavaAddress = “your kava testnet-5000 address”;
const kavaMnemonic = “secret words that unlock your address”// Start Kava client
kavaClient = new KavaClient(KAVA_API_TESTNET);
kavaClient.setWallet(kavaMnemonic);
await kavaClient.initChain();
第 5 步
发送创建交换的交易到币安链
在两个区块链客户端启动并运行后,用 5 BNB 创建一个从币安链到 Kava 的交换。
由于 BNB 和 USDX 的小数位数不同,我们可能应该先加入一些转换系数常数,来保持有序。
const BNB_CONVERSION_FACTOR = 10 ** 8;
const USDX_CONVERSION_FACTOR = 10 ** 6;
接下来设置交换的常规参数。5 BNB 的交换会从我们的币安链地址发送到代理的币安链地址。稍后,一旦我们认领了交换,就会从代理的 Kava 地址向我们主网的 Kava 地址发送等量的挂钩 BNB。
// Assets involved in the swap
const asset = “BNB”;
const amount = 5 * BNB_CONVERSION_FACTOR;// Format asset parameters
const tokens = [{
denom: asset,
amount: amount
}];
const expectedIncome = [String(amount), “:”, asset].join(“”);// Addresses involved in the swap
const sender = bnbAddress;
const recipient = BINANCE_CHAIN_DEPUTY;
const senderOtherChain = KAVA_DEPUTY;
const recipientOtherChain = kavaAddress;// Number of blocks that swap will be active
const heightSpan = 10001;
使用 Kava 的 JavaScript SDK 工具生成一个十六进制编码的秘密随机数,并根据时间戳和随机数计算交换的随机数哈希值。
// Add utils from Kava’s JavaScript SDK to imports
const kavaUtils = kava.utils;const randomNumber = kavaUtils.generateRandomNumber();
const timestamp = Math.floor(Date.now() / 1000);
const randomNumberHash = kavaUtils.calculateRandomNumberHash(randomNumber, timestamp);console.log(“Secret random number:”, randomNumber);
现在准备创建交换,将交易发送给币安。
const res = await bnbClient.swap.HTLT(sender, recipient, recipientOtherChain, senderOtherChain, randomNumberHash, timestamp, tokens, expectedIncome, heightSpan, true);// Log the tx hash or log an error and return
if (res && res.status == 200) {
console.log(“Create swap tx hash: “, res.result[0].hash);
} else {
console.log(“Tx error:”, res);
return;
}
假设一切顺利,我们将在控制台中看到 tx 哈希。
Create swap tx hash: 8C424710C357E56EC75B982C95AFF3D90E45CEB3ECC9CB7CAB7AE467A7265115
我们可以使用币安的测试网区块浏览器通过哈希检查我们的交易。
币安测试网区块浏览器:https://testnet-explorer.binance.org/
币安测试网上显示的成功的交换创建记录
除了交易的状态,涉及的地址和价值外,我们还可以查看交换的数据。
币安测试网显示的我们创建的交换数据和交换 ID
第 6 步
将认领交换交易发送给 Kava
我们需要用 Kava 上的交换 ID 来认领它。它与币安链上的交换 ID 不同,因此我们必须对其进行计算。
const kavaSwapID = kavaUtils.calculateSwapID(randomNumberHash, senderOtherChain, sender);
现在,可以使用我们的秘密随机数认领交换了。
const txHashClaim = await kavaClient.claimSwap(kavaSwapID, randomNumber);
console.log(“Claim swap tx hash: “, txHashClaim);
查询一下你的 Kava 帐户的余额,确认是否收到了预期的挂钩 BNB。示例中我们使用 lodash,因此我们需要将安装包添加到我们的导入中。
const _ = require(“lodash”);
let acc = await kavaClient.getAccount(kavaClient.wallet.address);
console.log(“Address:”, _.get(acc, “value.address”));
console.log(“Balances:”, _.get(acc, “value.coins”), “\n”);// Coins should include “{ denom: ‘bnb’, amount: ‘499999000’ }”
第 7 步
将创建 CDP 的交易发送到 Kava
现在,我们的 Kava 帐户已加载锚定的 BNB,让我们通过创建新的 CDP 来生成 USDX。为了生成 USDX(我们的本金),必须用锚定的 BNB(我们的抵押品)来设置至少 200%的抵押率。因此,如果我们要创建 10 美元的 USDX,则至少需要 20 美元的锚定 BNB。
但是,尽管 USDX 稳定币始终价值 1 美元,但锚定的 BNB 应该始终保持 BNB 市场的公允价值。如果 BNB 的价值为 10 美元,我们需要 2 个锚定的 BNB 来满足最低抵押率。如果 BNB 价值 40 美元,则需要 0.5 个锚定的 BNB。
Kava 对 CDP 有最低的基本要求。我们可以查询 CDP 模块的参数并搜索 ” usdx” 来获得 USDX 参数限制。之后,可以应用我们的 USDX 转换系数并打印结果。
const paramsCDP = await kavaClient.getParamsCDP();
const debtParams = _.get(paramsCDP, “debt_params”);
const principalAmount = Number(debtParams.find(coin => coin.denom == “usdx”).debt_floor);console.log(“Minimum principal:”, principalAmount + “usdx”);
我们会看到测试网的最低本金要求为 1 千万 usdx 或 10 USDX,因为 USDX 的转换系数为 10 ** 6。
现在我们需要计算本金所需的抵押品。Kava 的喂价模块里有 BNB 的当前市场价格,可以用它来计算基本资产中的抵押品等值金额。
const bnbValuation = await kavaClient.getPrice(“bnb:usd”);
const equivalentCollateral = principalAmount / Number(bnbValuation.price);
BNB 的最低抵押率是 200%,所以我们必须采用 2 倍的乘数才能得到所需抵押品的真实金额。我们希望有一些剩余空间来避免清算,所以让我们加上 2.1 倍的乘数,抵押率为 210%。
const rawRequiredAmount = equivalentCollateral * 2.1;// Apply conversion factor and drop decimals
const adjustedAmount = (rawRequiredAmount / USDX_CONVERSION_FACTOR) * BNB_CONVERSION_FACTOR;
const collateralAmount = adjustedAmount.toFixed(0);console.log(“Required collateral:”, collateralAmount + “bnb”);
在撰写本文时,BNB 的价值为 15.09 美元,因此我们所需的抵押金额为 139165009BNB 或 1.39BNB。
下面的代码区块使用了正确的小数位数来体现我们账户中的抵押品金额,以检查我们账户中的锚定 BNB 余额。如果我们没有足够的金额,我们就无法发送创建 CDP 交易。
try {
account = await kavaClient.getAccount(kavaClient.wallet.address);
const coins = _.get(account, “value.coins”);
const bnbBalance = coins.find(coin => coin.denom == “bnb”).amount;
if (bnbBalance < collateralAmount) {
throw {
message: “Account only has ” + bnbBalance + “bnb”
};
}
} catch (err) {
console.log(“Error:”, err.message);
return;
}
我们已经计算了抵押品的金额,并确认了余额,那么剩下的就是把本金和抵押物加载成格式化的代币。
const principal = kavaUtils.formatCoins(Number(principalAmount), “usdx”);
const collateral = kavaUtils.formatCoins(Number(collateralAmount), “bnb”);
现在,我们可以使用抵押品和委托人,通过 Kava 客户端创建有效的 CDP。
const txHashCDP = await kavaClient.createCDP(principal, collateral);
console.log(“Create CDP tx hash (Kava): “, txHashCDP);// Get account balance
account = await kavaClient.getAccount(kavaClient.wallet.address);
console.log(“Address:”, _.get(account, “value.address”));
console.log(“Balances:”, _.get(account, “value.coins”), “\n”);// Coins should include “{ denom: ‘usdx’, amount: ‘10000000’ }”
以上就是我们用 BNB 来创建 USDX 的全过程。
USDX 创建脚本
我们将上面的步骤 3-7 合并成一个脚本,你可以用它在币安链上创建一个交换,在 Kava 上认领交换,然后用收到的代币打开一个 CDP。你可以在 GitHub 上找到这个脚本:
https://gist.github.com/denalimarsh/2ef52d9588a6ec387f8f1af528c861d9
脚本的输出应如下所示:
Secret random number: 1121d1c5639a6a663f1286ca3489b0de109c9cc861c8772eb9f9276de58dda4e
Create swap tx hash (Binance Chain): 8AE0CB9DEC1D52AB9A807971811F5B712B0B052B99570A430FF984157D73F1D5Claim swap tx hash (Kava): 412658B0A17ABF94ACAEB4E63ED149A218F43BBA181C8A02827A16DFC11A2998
Address: kava1sj6drj8agdplcc0t48lw5flenrxude9tqx7wy2
Balances: [ { denom: ‘bnb’, amount: ‘499999000’ },
{ denom: ‘ukava’, amount: ‘50000000’ } ]Minimum principal: 10000000usdx
Required collateral: 139257294bnb
Create CDP tx hash (Kava): B1190B67FBC64267BE3D853FE73A5AC27FCF4E99350AC6143D9D96348B72F72F
Address: kava1sj6drj8agdplcc0t48lw5flenrxude9tqx7wy2
Balances: [ { denom: ‘bnb’, amount: ‘360741706’ },
{ denom: ‘ukava’, amount: ‘50000000’ },
{ denom: ‘usdx’, amount: ‘10000000’ } ]
Kava 已经与多家钱包提供商合作,为测试网搭建用户界面。我们会及时向您更新信息,请持续关注我们的公众号!