ดีพลอยสัญญาอัจฉริยะด้วย Foundry หรือ Hardhat
ดีพลอย Hello.sol บนเครือข่าย EVM ด้วย Foundry หรือ Hardhat 2, ตรวจสอบ chain ID และตรวจสอบ transaction receipt ตลอดจนการตอบกลับของสัญญา
เลือกเครือข่าย
ทำตามคู่มือการเชื่อมต่อเครือข่ายเป้าหมาย (เข้าถึงได้ผ่าน เชนที่รองรับ) เพื่อสร้าง network.mjs และส่งออก RPC_URL และ CHAIN_ID คู่มือของเชนจะอ่าน chain ID และนโยบายเมธอดจาก GET /v1/chains ตลอดจนอธิบายเกี่ยวกับ gas token, ความจำเป็นในการใช้ RPC สำหรับการบรอดแคสต์แยกต่างหากหรือไม่ และการตั้งค่าการดีพลอยเฉพาะของแต่ละเชน
เลือกเครื่องมือหนึ่งรายการด้านล่างนี้ ทั้งสองตัวเลือกจะดีพลอยสัญญาขนาดเล็กเดียวกันโดยไม่มีอาร์กิวเมนต์ constructor
เติมโทเค็น gas พื้นเมืองของเครือข่ายที่เลือกลงในกระเป๋าเงินผู้ดีพลอย ตั้งค่า DEPLOYER_PRIVATE_KEY อย่างปลอดภัยในสภาพแวดล้อมภายในเครื่องของคุณ; ห้ามคอมมิตคีย์เด็ดขาด คำสั่งต่อไปนี้จะทำการบรอดแคสต์ธุรกรรมและใช้จ่าย gas
สร้าง Hello.sol โดยไม่มีอาร์กิวเมนต์ constructor:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;
contract Hello {
event Ping(address indexed sender);
function ping() external { emit Ping(msg.sender); }
function hello() external pure returns (string memory) {
return "hello";
}
}Foundry
ในโปรเจกต์ Foundry ที่เริ่มต้นไว้แล้ว ให้วางสัญญาไว้ที่ src/Hello.sol และใช้ foundry.toml ดังนี้:
[profile.default]
src = "src"
out = "out"
libs = ["lib"]
solc_version = "0.8.24"
evm_version = "paris"
[rpc_endpoints]
target = "${RPC_URL}": "${RPC_URL:?Set RPC_URL}" "${CHAIN_ID:?Set CHAIN_ID}" "${DEPLOYER_PRIVATE_KEY:?Set deployer key}"
test "$(cast chain-id --rpc-url "$RPC_URL")" = "$CHAIN_ID" || exit 1
forge build
forge create src/Hello.sol:Hello --rpc-url target \
--chain "$CHAIN_ID" --private-key "$DEPLOYER_PRIVATE_KEY" --broadcastเก็บแฮชของธุรกรรมและแอดเดรสที่ถูกดีพลอยไว้ ใช้ cast receipt "$TX_HASH" --rpc-url "$RPC_URL" เพื่อตรวจสอบการรวมลงในบล็อกและสถานะ จากนั้นใช้ cast call "$CONTRACT_ADDRESS" "hello()(string)" --rpc-url "$RPC_URL" เพื่ออ่านค่าจากสัญญา กำหนดค่าของตัวแปรทั้งสองนี้จากผลลัพธ์ของการดีพลอย
Hardhat 2 ร่วมกับ ethers 6
ในโปรเจกต์ CommonJS แยกต่างหาก (npm init -y) ให้ติดตั้ง npm install --save-dev hardhat@2 @nomicfoundation/hardhat-ethers@3 ethers@6 วางสัญญาเดียวกันไว้ที่ contracts/Hello.sol และบันทึกไฟล์นี้เป็น hardhat.config.cjs:
require('@nomicfoundation/hardhat-ethers');
const { RPC_URL, CHAIN_ID, DEPLOYER_PRIVATE_KEY } = process.env;
if (!RPC_URL || !/^[1-9][0-9]*$/.test(CHAIN_ID ?? '') || !DEPLOYER_PRIVATE_KEY) {
throw new Error('Set RPC_URL, CHAIN_ID and DEPLOYER_PRIVATE_KEY');
}
module.exports = {
solidity: { version: '0.8.24', settings: { evmVersion: 'paris' } },
networks: {
target: { url: RPC_URL, chainId: Number(CHAIN_ID), accounts: [DEPLOYER_PRIVATE_KEY] },
},
};สร้างไดเรกทอรี scripts และบันทึกเป็น scripts/deploy.cjs:
const { ethers } = require('hardhat');
async function main() {
const contract = await ethers.deployContract('Hello');
console.log(contract.deploymentTransaction().hash);
await contract.waitForDeployment();
console.log(await contract.getAddress());
}
main().catch(error => { console.error(error); process.exitCode = 1; });npx hardhat compile
npx hardhat run scripts/deploy.cjs --network targetchainId ของเครือข่ายจะได้รับการตรวจสอบเทียบกับ RPC ดู การตั้งค่าเครือข่าย Hardhat 2 และ การตั้งค่า Foundry (เข้าถึงเมื่อ: 2026-10-07)
อ่านเหตุการณ์
ตั้งค่า LOG_ADDRESS เป็นแอดเดรสที่ถูกดีพลอย ทำตามวิธีการอ่านเหตุการณ์ในคู่มือของเชนเป้าหมาย (การสมัครสมาชิก WebSocket หรือการโพลล์ HTTP แบบแบ่งช่วง ขึ้นอยู่กับฟิลด์ ws ของเชนใน /v1/chains) เพื่ออ่านเหตุการณ์ Ping หลังจากเรียกใช้ ping()
อัปเดตล่าสุด:
การดึงข้อมูลย้อนหลังและการโพลล์ HyperEVM
บน BlockVectra คำขอ eth_getLogs ที่มีการยืนยันตัวตนของ HyperEVM ครอบคลุมสูงสุด 1,000 บล็อก โดยนับรวมจุดสิ้นสุดทั้งสองฝั่ง; ให้แบ่งช่วงเวลาที่ยาวขึ้นและบันทึกบล็อกล่าสุดที่เสร็จสมบูรณ์เพื่อกลับมาดำเนินการต่อ
หนึ่งคีย์ หลากหลายเชน
API key เดียวกันใช้ได้กับทุกเชนที่รองรับ เรียนรู้วิธีการจัดโครงสร้าง URL, วิธีการค้นหาเชนโดยใช้โปรแกรม และการรวมยอดคงเหลือตลอดจนขีดจำกัดต่างๆ เข้าด้วยกัน