"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Sui TypeScript SDK를 사용하는 방법

Sui TypeScript SDK를 사용하는 방법

2024-11-03에 게시됨
검색:143

Sui는 현재의 체인이며 Move는 Sui에서 스마트 계약을 작성하기 위한 성배이지만 TypeScript 지원은 중요합니다. TypeScript를 사용하면 생태계에 있는 Sui 및 대부분의 DeFi 앱과 상호 작용하고 사용할 수 있습니다.

이 튜토리얼에서는 TypeScript를 통해 Sui 네트워크와 상호 작용하는 방법을 가르쳐 드리겠습니다. 블록체인 상태를 읽고 TypeScript 프로그램에서 체인에 트랜잭션을 쓰는 방법을 배웁니다.

Sui와 TypeScript 시작하기

유일한 전제 조건은 이 튜토리얼을 원활하게 실행하기 위해 기본적인 JS/TS 지식이 필요하다는 것입니다. 다른 모든 사항은 제가 안내해 드리겠습니다.

먼저 터미널에서 새 TypeScript 프로젝트를 만들고 새 Node.js 프로젝트를 초기화합니다.

mkdir SuiTS
cd SuiTS
npm init -y

TypeScript가 아직 없는 경우 개발 종속성으로 설치하세요.

npm install typescript --save-dev
npm install ts-node //runs TS without the need for transpiling

이제 새 TypeScript 프로젝트를 초기화할 수 있습니다. 이 명령은 프로젝트에 맞게 사용자 지정할 수 있는 기본 옵션이 포함된 tsconfig.json 파일을 생성합니다.

npx tsc --init

tsconfig.json을 열고 다음 구성을 붙여넣습니다.

{
  "compilerOptions": {
    "target": "ES2020",
    "module": "CommonJS",
    "outDir": "./dist",
    "rootDir": "./src",
    "strict": true,
    "esModuleInterop": true,
    "types": ["node"],
    "resolveJsonModule": true
  },
  "exclude": ["node_modules"],

  "scripts": {
    "build": "tsc",
    "start": "node dist/index.js"
  }
}

TypeScript 파일을 추가할 src 디렉터리를 만듭니다.

mkdir src
touch src/index.ts

마지막으로 이 명령을 사용하여 Sui TypeScript SDK를 설치합니다.

npm i @mysten/sui.js

모든 설정이 완료되었습니다. Sui 블록체인과 상호 작용하는 TypeScript 프로그램 작성을 시작할 수 있습니다.

Sui 블록체인에 연결

체인과 상호작용하려면 Sui 블록체인에 연결해야 합니다.

먼저 SDK 클라이언트 모듈에서 getFullnodeUrl 및 SuiClient를 가져옵니다.

import { getFullnodeUrl, SuiClient } from '@mysten/sui/client';

이제 원하는 연결에 따라 getFullnodeUrl을 사용하여 Sui 테스트넷, 메인넷, 로컬넷 또는 devnet의 전체 노드 URL을 검색할 수 있습니다. 그런 다음 SuiClient를 사용하여 클라이언트 인스턴스에 연결합니다.

import { getFullnodeUrl, SuiClient } from '@mysten/sui/client';

const rpcUrl = getFullnodeUrl('mainnet');

const client = new SuiClient({ url: rpcUrl });

연결을 테스트하려면 getLatestSuiSystemState를 사용하여 네트워크의 최신 상태를 검색할 수 있습니다.

// index.ts
import { getFullnodeUrl, SuiClient } from '@mysten/sui/client';

const rpcUrl = getFullnodeUrl("mainnet");

const client = new SuiClient({ url: rpcUrl });

async function getNetworkStatus() {
    const currentEpoch = await client.getLatestSuiSystemState();
    console.log(currentEpoch)
}

getNetworkStatus();

이제 TypeScript 코드를 JavaScript로 변환하고 다음 명령을 사용하여 실행하세요.

ts-node index.ts

명령을 실행하면 이와 유사한 출력이 나타납니다.

How to Use the Sui TypeScript SDK

Sui 지갑 만들기

지갑을 만드는 것은 Sui 네트워크를 구축하는 경우 유용할 수 있는 또 다른 인기 있는 작업입니다.

Sui 지갑 키 쌍을 생성하고 키 쌍에서 개인 및 공개 키를 검색하는 방법은 다음과 같습니다.

import { Ed25519Keypair } from '@mysten/sui/keypairs/ed25519';
import { getFullnodeUrl, SuiClient } from '@mysten/sui/client';

const rpcUrl = getFullnodeUrl("mainnet");

const client = new SuiClient({ url: rpcUrl });

// random Keypair
const keypair = new Ed25519Keypair();

const publicKey = keypair.getPublicKey();
const privatekey = keypair.getSecretKey();

console.log(privatekey.toString());
console.log(publicKey.toSuiAddress());

Ed25519Keypair 함수는 새로운 키 쌍을 생성합니다. getPublicKey 및 getPrivateKey 메소드는 각각 공개 키와 개인 키에 대한 액세스를 제공합니다.

다음은 프로그램으로 생성한 개인 키와 공개 키의 문자열 출력입니다.

suiprivkey1qq9r6rkysny207t5vr7m5025swh7w0wzra9p0553paprhn8zshqsx2rz64r
New Sui Address: 0xbd46d7582ced464ef369114252704b10317436ef70f196a33fcf2c724991fcba

저는 다음 작업을 위해 0.25 Sui로 이 지갑에 자금을 조달하고 있습니다. 자유롭게 지갑을 확인하고 스캔하세요. 자금을 보내지 마십시오. 그냥 더미 지갑이에요.

Sui 지갑 잔액 읽기

클라이언트 인스턴스에서 getCoins 함수를 사용하여 지갑 주소의 코인에 대한 세부 정보를 검색할 수 있습니다.

import { getFullnodeUrl, SuiClient } from '@mysten/sui/client';

// use getFullnodeUrl to define the Devnet RPC location
const rpcUrl = getFullnodeUrl('mainnet');

// create a client connected to devnet
const client = new SuiClient({ url: rpcUrl });

async function getOwnedCoins() {
    const coins = await client.getCoins({
        owner: '0xbd46d7582ced464ef369114252704b10317436ef70f196a33fcf2c724991fcba',
    });
    console.log(coins);
}

getOwnedCoins();

수이코인 단독에 대한 세부정보와 세부정보를 반환하는 함수입니다. 출력은 Sui 가스 토큰인 MIST에 있습니다. 1 SUI는 10억 MIST와 같습니다.

How to Use the Sui TypeScript SDK

getAllCoins 함수는 지갑에 있는 모든 코인의 목록을 가져오는 데 동일한 방식으로 사용할 수 있습니다.

async function getAllCoins() {
    // Get the list of owned coins (tokens) for the given owner address
    const ownedCoins = await client.getAllCoins({ owner: "0xbd46d7582ced464ef369114252704b10317436ef70f196a33fcf2c724991fcba" });

    // Access the coin data
    const coins = ownedCoins.data;

    // Iterate through the coins and print their details
    for (const coin of coins) {
        console.log(`Coin Type: ${coin.coinType}`);
        console.log(`Coin Object ID: ${coin.coinObjectId}`);
        console.log(`Balance: ${coin.balance}`);
        console.log('--------------------');
    }

    // If there is more data, handle pagination
    if (ownedCoins.hasNextPage) {
        console.log('More data available. Fetching next page...');
        // You can handle the next page using ownedCoins.nextCursor if needed
    }
}

getAllCoins();

이 예에서는 Hop Aggregator에서 일부 Sui를 $FUD로 교환했으며, 프로그램을 실행한 후의 출력은 다음과 같습니다.

How to Use the Sui TypeScript SDK

코인이나 물건 보내기

마지막으로 흥미로운 부분은 블록체인에서 거래를 보내는 방법을 배우게 된다는 것입니다.

$FUD 토큰을 다른 지갑으로 보내보겠습니다. 이는 Sui Network의 모든 코인에 적용됩니다.

import {getFullnodeUrl, SuiClient} from '@mysten/sui/client';
import {Ed25519Keypair} from '@mysten/sui/keypairs/ed25519';
import {Transaction} from '@mysten/sui/transactions';

// Set the RPC URL to connect to the Sui mainnet
const rpcUrl = getFullnodeUrl("mainnet");

const client = new SuiClient({url: rpcUrl});

// Create the keypair using the private key
const keypair = Ed25519Keypair.fromSecretKey("suiprivkey1qq9r6rkysny207t5vr7m5025swh7w0wzra9p0553paprhn8zshqsx2rz64r");

// FUD coin type
const FUD_TYPE = '0x76cb819b01abed502bee8a702b4c2d547532c12f25001c9dea795a5e631c26f1::fud::FUD';

async function sendFUD() {
    const tx = new Transaction();

    // Fetch FUD coins owned by the sender
    const coins = await client.getCoins({owner: keypair.getPublicKey().toSuiAddress(), coinType: FUD_TYPE});

    if (coins.data.length === 0) {
        console.log("No FUD coins found in the wallet.");
        return;
    }

    // Choose the first available FUD coin and split it for the transfer (adjust amount if needed)
    const [coin] = tx.splitCoins(coins.data[0].coinObjectId, [100000000]); 

    tx.transferObjects([coin], '0xb0042cf2c5a16d0a240fc1391d570cd5fe06548f860583f1878c327db70f2a22');

    const result = await client.signAndExecuteTransaction({signer: keypair, transaction: tx});
    await client.waitForTransaction({digest: result.digest});

    console.log("Transaction successful. Digest:", result.digest);
}

sendFUD().then(console.log).catch(console.error);

먼저 지갑에 $FUD가 있는지 확인하고 분할하여 송금했습니다. tx.transferObjects는 분할된 코인을 지정된 주소로 전송합니다.

마지막으로 client.signAndExecuteTransaction을 사용하여 트랜잭션에 서명해야 하며 waitForTransaction을 사용하여 트랜잭션이 완료될 때까지 기다릴 수 있습니다.

결론

공식 TypeScript SDK를 사용하여 Sui 블록체인과 상호작용하는 방법을 배웠습니다. 지갑 및 봇 구축과 같이 새로 습득한 지식으로 Sui를 기반으로 구축할 수 있는 것이 너무 많습니다.

Sui에서 Move 계약과 상호 작용하여 보다 정교한 dApp을 구축하는 방법을 배우면 더 발전할 수 있습니다.

릴리스 선언문 이 글은 https://dev.to/goodylili/how-to-use-the-sui-typescript-sdk-2dep?1에서 복제됩니다.1 침해 내용이 있는 경우, [email protected]으로 연락하여 삭제하시기 바랍니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3