Let'sMove从前端到web3入门教程(2)Navi竞赛奖励第4期引子最近navi又增加了一个活动相信上次参加竞赛的同学们已经拿到奖金了吧,没来得及的继续努力!开始上一个章节我们探讨了npm和nodejs的基本用法,非常初级,这次竞赛更加复杂,所用到的typescript等
<!--StartFragment-->
最近navi又增加了一个活动
相信上次参加竞赛的同学们已经拿到奖金了吧,没来得及的继续努力!
上一个章节我们探讨了npm和nodejs的基本用法,非常初级,这次竞赛更加复杂,所用到的typescript等知识更多了。 本章节不做过多的安装讲解,具体请参考官方文档资料。
这次目标就是调用sdk提供的方法把资产存入navi池子里。
这里面有个重要知识点要求一个PTB里完成 三个任务 。最后提交tx是一个id的。
以下是错误的做法,因为你无法提交正确的tx
业务清楚了我们就开始着手开发。
由于是ts工程,所以要安装ts-ndoe,启动文件改为
"start": "ts-node index2.ts"
之前构建的项目要注意不要和sdk冲突,所以tsconfig里要改为,改成别的会发生冲突
"target": "es2016"
"module": "commonjs",
调用sdk,import库
import { NAVISDKClient } from 'navi-sdk'
import {Sui, NAVX, vSui, USDT, USDC, WETH, CETUS, haSui,getConfig,pool} from 'navi-sdk/dist/address.js';
import { TransactionBlock } from "@mysten/sui.js/transactions";
import { SignAndSubmitTXB } from 'navi-sdk/dist/libs/PTB'
import { PoolConfig, Pool, CoinInfo } from 'navi-sdk/dist/types';
接着初始化sdk client
const client = new NAVISDKClient({mnemonic, networkType: "mainnet", numberOfAccounts: 5});
mnemonic是你的sui助记词。如果实在不放心就另开一个新的sui地址,用新的sui地址的助记词来操作。
const account = client.accounts[0];
接下来和上章不同的操作就是我们要操作 txb 了
let txb:any = new TransactionBlock();
const sender = account.address;
txb.setSender(sender);
操作列表...
操作列表...
操作列表...
const result2 = await SignAndSubmitTXB(txb, account.client, account.keypair);
console.log('Success 2: ', result2.confirmedLocalExecution);
let to_deposit_amount = 5000;
const to_deposit = txb.splitCoins(txb.gas, [txb.pure(to_deposit_amount)]);
const to_deposit_coin: CoinInfo = Sui;
const pool_to_deposit: PoolConfig = pool[to_deposit_coin.symbol as keyof Pool];
await txb.moveCall({
target: `${config.ProtocolPackage}::incentive_v2::entry_deposit`,
arguments: [
txb.object('0x06'),
txb.object(config.StorageId),
txb.object(pool_to_deposit.poolId),
txb.pure(pool_to_deposit.assetId),
to_deposit,
txb.pure(to_deposit_amount),
txb.object(config.Incentive),
txb.object(config.IncentiveV2),
],
typeArguments: [pool_to_deposit.type],
});
const to_borrow_navx: CoinInfo = NAVX;
const pool_to_borrow: PoolConfig = pool[to_borrow_navx.symbol as keyof Pool];
let borrowamount = 1000;
let borrowed = await txb.moveCall({
target : `${config.ProtocolPackage}::incentive_v2::borrow`,
arguments: [
txb.object('0x06'), // clock object id
txb.object(config.PriceOracle), // The object id of the price oracle
txb.object(config.StorageId), // Object id of storage
txb.object(pool_to_borrow.poolId), // pool id of the asset
txb.pure(pool_to_borrow.assetId), // The id of the asset in the protocol
txb.pure(borrowamount), // The amount you want to borrow
txb.object(config.IncentiveV2), // The incentive object v2
],
typeArguments:[pool_to_borrow.type] // type arguments, for this just the coin type
});
const extra_coin = txb.moveCall({
target: '0x2::coin::from_balance',
arguments: [borrowed],
typeArguments: [pool_to_borrow.type],
});
//3 Re-supply the borrowed asset from step 2.
await txb.moveCall({
target: `${config.ProtocolPackage}::incentive_v2::entry_deposit`,
arguments: [
txb.object('0x06'),
txb.object(config.StorageId),
txb.object(pool_to_borrow.poolId),
txb.pure(pool_to_borrow.assetId),
extra_coin,
txb.pure(borrowamount),
txb.object(config.Incentive),
txb.object(config.IncentiveV2),
],
typeArguments: [pool_to_borrow.type],
}) ;
直接使用官方的PTB
navi-sdk\src\libs\PTB\index.ts
depositCoin 存入方法
borrowCoin 借出方法
对照写好代码就行,实际就是方法1的上层调用,代码不做展开,希望同学们自行测试。
运行成功后可以到钱包里查询到操作查tx然后去suivision看。
一个tx里有3个transaction action操作就是正确了。
把Programable tx 后面的 digest 一串字符存下来,就可以愉快的到官网提交表格了。
记得截图自己的代码。 并隐藏自己的提示词! 隐藏自己的提示词! 隐藏自己的提示词!
在此鸣谢,成文给了很多帮助(排名不分先后) rzexin Ellen 星亦辰 sycute jovi
此项竞赛是考察
(未完待续)
Let's Move 中文社区
telegram: https\://t.me/move_cn
QQ群: 79489587
<!--EndFragment-->
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!