Sui는 현재의 체인이며 Move는 Sui에서 스마트 계약을 작성하기 위한 성배이지만 TypeScript 지원은 중요합니다. TypeScript를 사용하면 생태계에 있는 Sui 및 대부분의 DeFi 앱과 상호 작용하고 사용할 수 있습니다.
이 튜토리얼에서는 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 블록체인에 연결해야 합니다.
먼저 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
명령을 실행하면 이와 유사한 출력이 나타납니다.
지갑을 만드는 것은 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로 이 지갑에 자금을 조달하고 있습니다. 자유롭게 지갑을 확인하고 스캔하세요. 자금을 보내지 마십시오. 그냥 더미 지갑이에요.
클라이언트 인스턴스에서 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와 같습니다.
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로 교환했으며, 프로그램을 실행한 후의 출력은 다음과 같습니다.
마지막으로 흥미로운 부분은 블록체인에서 거래를 보내는 방법을 배우게 된다는 것입니다.
$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을 구축하는 방법을 배우면 더 발전할 수 있습니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3