در دنیای بلاکچین و قراردادهای هوشمند، ارتباط بین frontend و smart contract یکی از جنبه‌ های حیاتی توسعه برنامه‌های غیرمتمرکز (DApps) است. “تعامل جاوااسکریپت در سالیدیتی” به فرآیند ارتباط گرفتن و ارسال داده‌ها به و از قراردادهای هوشمند نوشته‌شده در سالیدیتی اشاره دارد. این تعامل غالباً از طریق کتابخانه‌ هایی مانند Web3.js و Ethers.js انجام می‌شود. در این مقاله، به چگونگی برقراری این ارتباط خواهیم پرداخت.

نیازمندی‌ها

برای شروع، شما به تعدادی ابزار و بسته نیاز دارید:

  1. نود اتریوم: برای تعامل با بلاکچین، می‌توانید از خدماتی مانند Infura یا Alchemy استفاده کنید.
  2. کتابخانه Web3.js یا Ethers.js: این کتابخانه‌ها به شما این امکان را می‌دهند که با قراردادهای هوشمند خود ارتباط برقرار کنید.

نصب Web3.js

اگر از NPM استفاده می‌کنید، می‌توانید Web3.js را با اجرای دستور زیر نصب کنید:

npm install web3

یا برای Ethers.js:

npm install ethers

ایجاد ارتباط با بلاکچین

ابتدا، باید به بلاکچین متصل شوید. در مثال زیر، از Web3.js برای ایجاد یک ارتباط استفاده می‌کنیم:

// ایجاد ارتباط با بلاکچین
const Web3 = require('web3');

// اتصال به یک نود
const web3 = new Web3(new Web3.providers.HttpProvider('https://YOUR_INFURA_URL'));

آموزش سالیدیتی + 5 پروژه عملی

بارگذاری قرارداد

پس از اتصال به بلاکچین، باید ABI (Application Binary Interface) و آدرس قرارداد هوشمند خود را برای ایجاد یک نمونه از قرارداد بارگذاری کنید:

const contractAddress = 'YOUR_CONTRACT_ADDRESS';
const abi = [ /* ABI قرارداد شما */ ];

const contract = new web3.eth.Contract(abi, contractAddress);

خواندن داده‌ها از قرارداد

برای خواندن داده‌ها از قرارداد، می‌توانید از توابع قرارداد استفاده کنید. فرض کنید یک تابع getValue در قرارداد دارید که مقداری را برمی‌گرداند:

contract.methods.getValue().call()
    .then(result => {
        console.log('Value from contract:', result);
    })
    .catch(error => {
        console.error('Error fetching value:', error);
    });

نوشتن داده‌ها به قرارداد

برای نوشتن داده‌ها به قرارداد، نیاز به ارسال یک تراکنش دارید. به طور مثال، فرض کنید تابع setValue در قرارداد شما وجود دارد:

const account = 'YOUR_WALLET_ADDRESS';
const privateKey = 'YOUR_PRIVATE_KEY';

const valueToSet = 42;

const tx = {
    to: contractAddress,
    data: contract.methods.setValue(valueToSet).encodeABI(),
    gas: 200000,
    gasPrice: await web3.eth.getGasPrice(),
};

const signTransaction = async () => {
    const signedTx = await web3.eth.accounts.signTransaction(tx, privateKey);
    await web3.eth.sendSignedTransaction(signedTx.rawTransaction)
        .on('receipt', receipt => {
            console.log('Transaction receipt:', receipt);
        })
        .on('error', error => {
            console.error('Error sending transaction:', error);
        });
};

signTransaction();

نتیجه‌ گیری

تعامل بین جاوااسکریپت در سالیدیتی از طریق کتابخانه‌های Web3.js و Ethers.js بسیار ساده و درعین‌حال قدرتمند است. با دانستن نحوه اتصال به بلاکچین و تعامل با قراردادهای هوشمند، می‌توانید DApp‌های پیچیده‌تری ایجاد کنید که از قابلیت‌های بلاکچین به بهترین شکل استفاده کنند.

اگر به سالیدیتی علاقه مند هستید پیشنهاد میشه حتما حتما جاوا اسکریپت رو یاد بگیرید، در کل اگه js و بلد نباشین یه جای کارتون میلنگه معمولا تو نوشتن قراردادهای هوشمند