Blockchain Smart Contracts with Solidity · درس

التفاعل مع العقود المنشورة

اكتشف كيفية التفاعل مع عقودك الذكية المنشورة باستخدام اختبارات JavaScript وأوامر وحدة التحكم.

الدرس 3 من 411 خطوة

التفاعل مع العقود المنشورة درس مجاني في Blockchain Smart Contracts with Solidity على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Blockchain Smart Contracts with Solidity، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Blockchain Smart Contracts with Solidity 4 دروس في المجموع.

بعض أجزاء هذا الدرس لم تُترجم بعد وتظهر باللغة الإنجليزية.

Why Interact with Contracts?

After deploying your smart contract, the real fun begins: interacting with it! This means calling its functions, reading its data, and sending transactions.

Interacting is crucial for:

  • Testing: Ensuring your contract behaves as expected.
  • dApp Frontends: Letting users connect and use your contract.
  • Automation: Building scripts that perform actions on the blockchain.

Your Interaction Toolkit

When working with Hardhat or Truffle, you have powerful tools to interact with deployed contracts:

  • Hardhat Console / Truffle Console: An interactive command line environment for quick tests and debugging.
  • JavaScript Tests: Automated scripts that deploy (or connect to) contracts and verify their behavior.
  • Custom Scripts: Standalone JavaScript files for more complex, repeatable interactions.

We'll focus on the console and JS tests today.

Hardhat Console: The Sandbox

The Hardhat Console provides a convenient way to interact with your contracts and the blockchain directly from your terminal. It uses a Hardhat Runtime Environment (HRE) that already has ethers.js and your compiled contract artifacts loaded.

To start the console, open your terminal in your Hardhat project directory and run:

npx hardhat console

This will launch an interactive JavaScript environment.

Connect to Your Contract

Before you can call functions, you need to "connect" to your deployed contract. This involves getting its address and creating an ethers.js Contract object that represents it.

Here's how you might do it in a Hardhat script (or directly in the console):

const { ethers } = require("hardhat");

async function main() {
  // First, get the ContractFactory for your contract
  const Counter = await ethers.getContractFactory("Counter");

  // Replace with the actual address where your contract is deployed
  const deployedAddress = "0x5FbDB2315678afecb367f032d93F642f64180aa3";

  // Attach to the deployed contract using its address
  const counter = await Counter.attach(deployedAddress);

  console.log("Connected to Counter at:", counter.address);
}

main()
  .then(() => process.exit(0))
  .catch((error) => {
    console.error(error);
    process.exit(1);
  });

Calling View Functions

Functions marked as view or pure don't change the blockchain state. They are free to call and simply return data. You can call them directly from your contract instance.

Let's read the current count from our Counter contract. Note that ethers.js returns BigNumber objects for large numbers, so we often use .toString() to display them.

const { ethers } = require("hardhat");

async function main() {
  const Counter = await ethers.getContractFactory("Counter");
  const deployedAddress = "0x5FbDB2315678afecb367f032d93F642f64180aa3";
  const counter = await Counter.attach(deployedAddress);

  // Call the getCount view function
  const currentCount = await counter.getCount();
  console.log("Current count is:", currentCount.toString());
}

main()
  .then(() => process.exit(0))
  .catch((error) => {
    console.error(error);
    process.exit(1);
  });

Sending Transactions

To change the state of your contract (e.g., update a variable, transfer tokens), you need to send a transaction. These calls cost gas and require a signer (your account).

After sending a transaction, you usually await its confirmation to ensure it's mined on the blockchain. Let's increment our counter:

const { ethers } = require("hardhat");

async function main() {
  const Counter = await ethers.getContractFactory("Counter");
  const deployedAddress = "0x5FbDB2315678afecb367f032d93F642f64180aa3";
  const counter = await Counter.attach(deployedAddress);

  console.log("Incrementing count...");
  const tx = await counter.increment();
  await tx.wait(); // Wait for the transaction to be mined

  const newCount = await counter.getCount();
  console.log("Count after increment:", newCount.toString());
}

main()
  .then(() => process.exit(0))
  .catch((error) => {
    console.error(error);
    process.exit(1);
  });

Automated Interaction Tests

While the console is great for quick checks, automated JavaScript tests are essential for robust development. They allow you to:

  • Define expected behaviors.
  • Run tests repeatedly and quickly.
  • Catch regressions when you make changes.

Hardhat integrates seamlessly with testing frameworks like Mocha and Chai, using ethers.js for contract interaction.

Writing an Interaction Test

A typical Hardhat test file uses describe for test suites and it for individual tests. Inside an it block, you'll connect to your contract and then call its functions, asserting the results.

Remember to replace the deployedAddress with your contract's actual address on your test network.

const { expect } = require("chai");
const { ethers } = require("hardhat");

describe("Counter Contract Interaction", function () {
  let counter;
  const deployedAddress = "0x5FbDB2315678afecb367f032d93F642f64180aa3"; // Your contract address

  before(async function () {
    const CounterFactory = await ethers.getContractFactory("Counter");
    counter = await CounterFactory.attach(deployedAddress);
  });

  it("should read the initial count correctly", async function () {
    const initialCount = await counter.getCount();
    expect(initialCount.toString()).to.equal("0");
  });

  it("should increment the count via transaction", async function () {
    const initialCount = await counter.getCount();
    await counter.increment();
    const finalCount = await counter.getCount();
    expect(finalCount.toString()).to.equal(initialCount.add(1).toString());
  });
});

Smart Interaction Tips

Keep these tips in mind for effective contract interaction:

  • Always Verify Addresses: Double-check the contract address you're interacting with.
  • Understand Gas: State-changing transactions consume gas. Estimate costs for mainnet deployments.
  • Handle Errors: Use try-catch blocks for transactions, as they can revert.
  • Use Events: Listen for contract events to get structured data about transactions.
  • Test Thoroughly: Write comprehensive tests for all critical functions and edge cases.

Quick Check: Interaction Types

You've learned about two main ways to interact with smart contract functions: reading state (view/pure functions) and changing state (transaction functions).

Which of the following statements about these interactions is TRUE?

Recap: Interacting with Contracts

You've successfully learned how to interact with your deployed smart contracts!

  • We explored using the Hardhat Console for immediate, interactive testing.
  • You saw how to connect to a deployed contract instance.
  • We differentiated between calling `view` functions (free, read-only) and sending transactions (costs gas, changes state).
  • Finally, we covered the importance of automated JavaScript tests for reliable contract interaction.

Next, you're ready to explore state management and storage patterns in Solidity!

البدء مجانًا

تعلم Blockchain Smart Contracts with Solidity مع معلم ذكاء اصطناعي — مجانًا

اكتب وقم بتشغيل أكوادك الفعلية في المتصفح، واحصل على مساعدة فورية من معلم ذكاء اصطناعي متاح 24/7، واستمر من حيث توقفت على الويب أو في التطبيق.

الدورات
12
الدروس
48

الأسئلة الشائعة

هل درس «التفاعل مع العقود المنشورة» مجاني؟

نعم — نص درس «التفاعل مع العقود المنشورة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Blockchain Smart Contracts with Solidity، انتقل إلى CoddyKit PRO. تتضمن دورة Blockchain Smart Contracts with Solidity 4 دروس في المجموع.

ماذا ستتعلم في «التفاعل مع العقود المنشورة»؟

اكتشف كيفية التفاعل مع عقودك الذكية المنشورة باستخدام اختبارات JavaScript وأوامر وحدة التحكم. تتمرن على Blockchain Smart Contracts with Solidity مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Blockchain Smart Contracts with Solidity؟

لا تُشترط خبرة سابقة. Blockchain Smart Contracts with Solidity على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «التفاعل مع العقود المنشورة»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Blockchain Smart Contracts with Solidity هذا؟

نعم. كل درس في Blockchain Smart Contracts with Solidity يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. إعداد Hardhat أو Truffle
  2. ترجمة العقود ونشرها
  3. التفاعل مع العقود المنشورة
  4. كتابة اختبارات العقود وتشغيلها
← العودة إلى Blockchain Smart Contracts with Solidity