Sui هي سلسلة اللحظة، وعلى الرغم من أن Move هو الكأس المقدسة لكتابة العقود الذكية على Sui، إلا أن دعم TypeScript مهم. يمكنك التفاعل مع Sui واستخدامه ومعظم تطبيقات DeFi على النظام البيئي باستخدام TypeScript.
سأعلمك في هذا البرنامج التعليمي كيفية التفاعل مع شبكة Sui عبر TypeScript. ستتعلم كيفية قراءة حالة blockchain، وكتابة المعاملات إلى السلسلة من برامج 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" } }
قم بإنشاء دليل src حيث يمكنك إضافة ملفات TypeScript الخاصة بك.
mkdir src touch src/index.ts
أخيرًا، قم بتثبيت Sui TypeScript SDK باستخدام هذا الأمر.
npm i @mysten/sui.js
أنت جاهز. يمكنك البدء في كتابة برامج TypeScript التي تتفاعل مع Sui blockchain.
يجب عليك الاتصال بـ Sui blockchain للتفاعل مع السلسلة.
أولاً، قم باستيراد getFullnodeUrl وSuiClient من وحدة عميل SDK.
import { getFullnodeUrl, SuiClient } from '@mysten/sui/client';
الآن، اعتمادًا على الاتصال المطلوب، يمكنك استخدام getFullnodeUrl لاسترداد عنوان URL الكامل للعقدة الخاصة بـ Sui testnet أو mainnet أو localnet أو devnet؛ ثم استخدم 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 واسترداد المفاتيح الخاصة والعامة من Keypair.
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، رمز غاز Sui. 1 SUI يساوي 1 مليار 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();
في هذا المثال، قمت باستبدال بعض Sui مقابل $FUD على Hop Aggregator، وإليك النتيجة بعد تشغيل البرنامج.
أخيرًا، الجزء المثير للاهتمام هو أنك ستتعلم إرسال المعاملات على blockchain.
دعنا نرسل بعض رموز FUD إلى محفظة أخرى. يعمل هذا مع أي عملات معدنية على شبكة Sui.
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 لتأكيد إتمام المعاملة
لقد تعلمت كيفية التفاعل مع Sui blockchain باستخدام TypeScript SDK الرسمي. هناك الكثير مما يمكنك البناء عليه في Sui باستخدام معرفتك المكتسبة حديثًا، مثل إنشاء المحافظ والروبوتات.
يمكنك المضي قدمًا في هذا من خلال تعلم كيفية التفاعل مع عقود النقل على Sui لإنشاء تطبيقات dApps أكثر تطورًا
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3