در این مقاله به ساخت ۱۰۰ کیف پول تستی برای سالیدیتی خواهیم پرداخت خوب است بدانید که برای تست یک برنامه Solidity و تست پروژه خود، نیازی نیست واقعاً ۱۰۰ تا آدرس کیف پول یا بیشتر را وارد کنید.
اگر هدف شما تست بلاکچین Ethereum با استفاده از تعداد زیادی آدرس کیف پول است، میتوانید از روشهایی مانند ایجاد کلیدهای عمومی/خصوصی متعدد با استفاده از یک کتابخانه کریپتوگرافی معتبر استفاده کنید.
در محیط Solidity، شما میتوانید یک کلاس کیف پول ساده بسازید که شامل آدرسهای مجاز و برخی عملیات مربوط به آنها باشد. سپس با استفاده از این کلاس، میتوانید ۱۰۰۰ یا بیشتر آدرس کیف پول را به صورت خودکار ایجاد کنید. این روش به شما امکان میدهد تا تعداد بیشتری آدرس کیف پول را بدون نیاز به دستی وارد کردن، ایجاد کنید.
در صورت تمایل آموزش رایگان سالیدیتی ما را ملاحظه نمایید.
به عنوان مثال، در زبان Solidity، میتوانید کدی مانند زیر را برای ایجاد ۱۰۰۰ آدرس کیف پول استفاده کنید:
solidity pragma solidity ^0.8.0; contract Wallet { address[] public wallets; function createWallets(uint256 numberOfWallets) public { for(uint256 i = 0; i < numberOfWallets; i++) { address newWallet = address(uint160(uint(keccak256(abi.encodePacked(block.timestamp, block.difficulty, i))))); wallets.push(newWallet); } } }
در این مثال، تابع createWallets ۱۰۰۰ آدرس کیف پول را ایجاد میکند و در آرایه wallets ذخیره میکند. شما میتوانید این کد را تغییر داده و تعداد آدرسها را بر اساس نیاز خود افزایش دهید.
به این ترتیب، میتوانید آدرسهای مورد نیاز برای تست برنامه Solidity و پروژه خود را به صورت خودکار ایجاد کنید.
اگر میخواهید همیشه ۱۰۰ آدرس کیف پول برای سرور و ۸۰ آدرس برای کاربران تولید شود و تغییر نکند، میتوانید از seed برای تولید آدرسها استفاده کنید. Seed به عنوان ورودی به الگوریتم تولید آدرس کیف پول استفاده میشود و هر بار که همان seed را وارد کنید، آدرس متناظر با آن در خروجی تولید میشود.
با استفاده از کتابخانههای رمزنگاری معتبری مانند EthereumJS Wallet, Web3.js, یا ethers.js میتوانید این کار را انجام دهید. الگوریتمهایی مانند Hierarchical Deterministic (HD) Wallets مبتنی بر seed را پیادهسازی کرده و به شما امکان تولید بیشترین تعداد آدرس کیف پول را از یک seed مشخص میدهند.
در مثال زیر، با استفاده از کتابخانه ethers.js، ۱۰۰ آدرس برای سرور و ۸۰ آدرس برای کاربران با استفاده از یک seed تعریف شده تولید میشود:
javascript const { ethers } = require('ethers'); async function generateWallets(seed, numberOfWallets) { const wallets = []; for (let i = 0; i < numberOfWallets; i++) { const path = `m/44'/60'/0'/0/${i}`; const wallet = ethers.Wallet.fromMnemonic(seed, path); wallets.push(wallet); } return wallets; } // تعریف seed const seed = 'کلمه عبور یا عبارت رمزی شما'; // تولید آدرسهای کیف پول برای سرور const serverWallets = await generateWallets(seed, 100); console.log('آدرسهای کیف پول سرور:', serverWallets.map(wallet => wallet.address)); // تولید آدرسهای کیف پول برای کاربران const userWallets = await generateWallets(seed, 80); console.log('آدرسهای کیف پول کاربران:', userWallets.map(wallet => wallet.address));
امکان تولید مستقیم ۱۰۰ آدرس کیف پول در گاناش وجود ندارد. گاناش به طور پیشفرض برای توسعه و تست بلاکچین Ethereum استفاده میشود و تعداد آدرسهای کیف پول موجود در یک نود گاناش محدود است.
در حالت پیشفرض، گاناش برای هر حساب متصل به نود، ۱۰ آدرس کیف پول را تولید میکند. این محدودیت به منظور افزایش سرعت و کارایی در فرآیند توسعه و تست بلاکچین است. در صورتی که نیاز به بیشتر از ۱۰ آدرس کیف پول دارید، باید از روشهای جایگزین استفاده کنید.
یک راه حل ممکن این است که از کتابخانههای رمزنگاری معتبری مانند ethereumjs-wallet یا ethers.js استفاده کنید تا خودتان بتوانید تعداد مورد نیاز آدرسهای کیف پول را تولید کنید. با استفاده از این کتابخانهها، شما میتوانید آدرسهای کیف پول را بر اساس الگوریتمهای رمزنگاری موجود در Ethereum ایجاد کنید.
با توجه به محدودیتهای گاناش در تولید آدرسهای کیف پول، راه حل دیگری که میتوانید امتحان کنید، استفاده از شبکه تست Ethereum مانند Rinkeby، Ropsten، یا Kovan است. این شبکهها به شما امکان میدهند آدرسهای کیف پول بیشتری را به راحتی دریافت کنید.
برای استفاده از یک شبکه تست Ethereum، نیاز دارید:
یک کلاینت Ethereum مانند MetaMask را در مرورگر خود نصب کنید.
به یک شبکه تست Ethereum متصل شوید (مانند Rinkeby، Ropsten یا Kovan) و کیف پول تستی را بسازید.
آدرسهای کیف پول تستی را به برنامه Solidity خود اضافه کنید و از آنها برای تست استفاده کنید.
با اتصال به یک شبکه تست Ethereum، میتوانید به طور آزادانه تعداد زیادی آدرس کیف پول برای سرور و کاربران تولید کنید و بدون هیچگونه محدودیتی استفاده کنید. اما توجه داشته باشید که این آدرسها به صورت تستی است و ارزش واقعی ندارند.
در صورتی که نیاز دارید آدرسهای کیف پول بیشتری را برای تست برنامه Solidity خود در گاناش تولید کنید، میتوانید از یک تابع جایگزین برای تولید آدرسهای کیف پول استفاده کنید. به جای استفاده از تابع پیشفرض گاناش برای تولید آدرسها، میتوانید یک تابع خارجی را به عنوان یک ماژول یا کتابخانه به برنامه Solidity خود اضافه کنید و از آن استفاده کنید.
در این تابع جایگزین، میتوانید از الگوریتم تولید آدرسهای کیف پول مانند Hierarchical Deterministic (HD) Wallets یا BIP-39 استفاده کنید. با استفاده از این الگوریتمها، با یک seed مشخص میتوانید آدرسهای کیف پول بیشتری تولید کنید و آنها را به برنامه Solidity ارسال کنید.
مثال زیر نشان میدهد چگونه میتوانید از کتابخانه ethereumjs-wallet در برنامه Solidity خود استفاده کنید:
solidity pragma solidity ^0.8.0; import "./EthereumJSWallet.sol"; contract Wallet { function generateWallets(uint256 numberOfWallets) public returns (address[] memory) { address[] memory wallets = new address[](numberOfWallets); for (uint256 i = 0; i < numberOfWallets; i++) { EthereumJSWallet.Wallet memory wallet = EthereumJSWallet.generateWallet(); wallets[i] = wallet.walletAddress; } return wallets; } }
در این مثال، از تابع generateWallet() ارائه شده توسط کتابخانه ethereumjs-wallet استفاده میشود تا آدرسهای کیف پول بیشتری تولید شود. شما میتوانید تابع generateWallets() را با تعداد آدرسهای مورد نیاز فراخوانی کنید و آدرسهای تولید شده را دریافت کنید.
این روش به شما امکان میدهد آدرسهای کیف پول بیشتری را برای تست برنامه Solidity خود در گاناش تولید کنید.
یک راه دیگر برای تولید تعداد بیشتری آدرس کیف پول در گاناش، استفاده از متغیر accounts در تنظیمات گاناش است. با استفاده از این روش، میتوانید تعداد آدرسهای کیف پول مورد نیاز خود را به صورت پیکربندی در گاناش تعیین کنید.
برای انجام این کار، شما باید گاناش را از طریق خط فرمان با تنظیمات مورد نظر اجرا کنید. این تنظیمات شامل تعداد آدرسهای کیف پول مورد نیاز و آدرسهای مشخصی که میخواهید در گاناش استفاده شوند است.
مثال زیر نشان میدهد چگونه میتوانید با استفاده از تنظیمات accounts در گاناش، تعداد بیشتری آدرس کیف پول را دریافت کنید:
bash ganache-cli --accounts 100
با اجرای این دستور، گاناش با تنظیمات ۱۰۰ آدرس کیف پول اجرا میشود و شما میتوانید از آدرسهای تولید شده در برنامه Solidity خود استفاده کنید.
این روش برای تولید تعداد بیشتری آدرس کیف پول در گاناش مناسب است، اما توجه داشته باشید که تمام آدرسهای تولید شده در گاناش برای تست و شبیهسازی بلاکچین Ethereum استفاده میشوند و ارزش واقعی ندارند.
کد برای ایجاد ۱۰۰ اکانت در گاناش و ارسال اتوماتیک آدرس ها به سالیدیتی
برای ایجاد ۱۰۰ اکانت در گاناش و ارسال آدرسها به برنامه Solidity، شما میتوانید از کتابخانههای web3.js و truffle-hdwallet-provider استفاده کنید. کتابخانه truffle-hdwallet-provider امکان اتصال به یک گاناش محلی و ایجاد آدرسهای کیف پول بیشتر را فراهم میکند.
ابتدا، از طریق npm، کتابخانههای web3 و truffle-hdwallet-provider را نصب کنید:
npm install web3 truffle-hdwallet-provider
سپس در برنامه JavaScript خود، کد زیر را برای ایجاد ۱۰۰ اکانت و ارسال آدرسها به برنامه Solidity بنویسید:
javascript const HDWalletProvider = require("truffle-hdwallet-provider"); const Web3 = require("web3"); // تنظیمات گاناش const provider = new HDWalletProvider( "your mnemonic", // عبارت mnemonic کیف پول "http://localhost:8545" // آدرس گاناش ); // اتصال به شبکه const web3 = new Web3(provider); // تعداد آدرسهای مورد نیاز const numberOfAccounts = 100; // تولید آدرسهای کیف پول async function generateWallets() { const accounts = await web3.eth.getAccounts(); const wallets = accounts.slice(0, numberOfAccounts); return wallets; } generateWallets().then((wallets) => { // ارسال آدرسهای کیف پول به برنامه Solidity // ادامه کد برنامه Solidity خود را اینجا قرار دهید console.log(wallets); });
در کد بالا، باید your mnemonic را با عبارت mnemonic واقعی کیف پول خود جایگزین کنید. همچنین، مطمئن شوید که گاناش در آدرس http://localhost:8545 در حال اجرا است.
با اجرای این برنامه، شما ۱۰۰ آدرس کیف پول را در گاناش تولید کرده و آنها را به برنامه Solidity ارسال خواهید کرد. میتوانید ادامه کد برنامه Solidity خود را پس از خط // ارسال آدرسهای کیف پول به برنامه Solidity بنویسید.
با افزودن کد زیر، شما میتوانید کیف پولهای تولید شده را در برنامه JavaScript خود نمایش دهید:
javascript generateWallets().then((wallets) => { // نمایش آدرسهای کیف پول console.log("آدرسهای کیف پول:"); wallets.forEach((wallet, index) => { console.log(`کیف پول ${index + 1}: ${wallet}`); }); // ارسال آدرسهای کیف پول به برنامه Solidity // ادامه کد برنامه Solidity خود را اینجا قرار دهید });
با افزودن این قطعه کد، بعد از تولید کیف پولها، آدرسهای کیف پول به همراه شماره کیف پول نمایش داده میشود. شما میتوانید این قسمت از کد را با نمایش آدرسها در هر روش دلخواه دیگری، مانند استفاده از واسط کاربری وب یا ذخیره آدرسها در فایل، تغییر دهید.
علاقه مندان به آموزش برنامه نویسی بلاکچین، می توانند از پکیج آموزش برنامه نویسی بلاکچین ما استفاده نمایند.