Tiknoolajiyadu waa inay ku jirtaa adeegga aadanaha. Tiknoolajiyada loo yaqaan 'Blockchain technology', oo horey u beddeshay qaybo badan, waxay sidoo kale bedeli kartaa beerta. Si aan u keenno tignoolajiyadan baahsan ee habka korsashada caadiga ah, waa in aan fududeeyno si aan u gaarno dadweynaha si aan u galno isticmaalayaasha ballaaran, ugu dambeyntii kordhinta kiisaska isticmaalka.
Tababarkan, waxaan ku dhisi doonaa arji baahsan (dApp) kaas oo u ogolaanaya isticmaalayaasha inay iibsadaan oo ay ku iibiyaan wax soo saarka beeraha ee Rootstock (RSK) ee shabakada blockchain. Ujeedada ugu weyn waa in la dhiso dApp ka shaqeeya shabakada blockchain. Nooc kasta oo isticmaaleyaal ah ayaa si fudud ugu dari kara alaabooyin si ay u kasbadaan iyagoo iibinaya wax soo saarkooda beeraha iyada oo aan faragelin bini'aadmi ah oo xad dhaaf ah la helin.
Markii hore, abka waxa lagu tijaabiyay Rootstock's testnet, oo waxa ay ku dhawdahay xaalad wax soo saar u diyaarsan (waxa loo baahday wax ka bedel yar si loogu wareego shabakada guud ee Rootstock). Mashruucu mar hore ayaa lagu shubay GitHub si aad kaliya u xidhi karto kaydka si aad naftaada u tijaabiso.
Tan, waxaan doorbidayaa Readme.md
on GitHub . Laakin, casharradan, waxaan isku dayeynaa inaan si qoto dheer u hagno si nooc kasta oo isticmaale ah uu u dhisi karo dApp-kiisa iyadoo ay fududahay in la fahmo casharrada si tallaabo ah. Waxaa laga yaabaa inaan kuu soo jeedino inaad ka soo dejiso koodka Frontend kaydka GitHub, oo aad ku darto hagaha habboon. Waxaan dabooli doonaa wax walba laga bilaabo dejinta mashruuca ilaa geynta qandaraasyada smart iyo abuurista Frontend is dhexgal leh oo leh astaamo-waqtiga dhabta ah.
Kahor intaanan bilaabin, waxaan hiigsaneynaa inaan dhisno dApp lagu magacaabo AgriMarket kaas oo la filayo inuu yeesho sifooyinka soo socda:
👉Samee Hagaha Mashruuca
Fadlan hubi inaad door bidayso buug-tusaha mashruuca ugu weyn inta lagu jiro dhammaan habkayaga horumarinta iyo tijaabinta.
👉Bilow Hagaha Mashruuca
U samee hage cusub mashruucaaga adoo ku socodsiinaya amarada soo socda terminalka:
mkdir rsk-agri-marketplace cd rsk-agri-marketplace
👉Bilow mashruuc cusub oo npm:
npm init -y
👉Bilow Mashruuca Truffle
Waxaan u isticmaaleynaa Truffle si aan u ururinno oo u horumarino qandaraaska caqliga leh si aad ugu bilowdid hagaha xididka:
truffle init
Tani waxay abuurtaa qaab dhismeedka aasaasiga ah: • contracts/
- Waxa ku jira heshiisyo adag • migrations/
- Qoraallada hawlgelinta • test/
- Tijaabada qandaraasyadaada • truffle-config.js
- faylka qaabeynta Truffle
Macluumaadka xasaasiga ah sida furayaasha gaarka ah, Pimata API Key, iwm waa in lagu kaydiyaa faylka .env.
👉Ku rakib dotenv
npm install dotenv
👉Samee faylka .env
Hagaha xididka, ku samee faylka .env oo leh qaabkan soo socda:
REACT_APP_PINATA_API_KEY=Your API Key REACT_APP_PINATA_SECRET_API_KEY=Secret API Key MNEMONIC=12 words mnemonic key RSK_TESTNET_URL=https://public-node.testnet.rsk.co REACT_APP_CONTRACT_ADDRESS=Contract Address
Fadlan samee faylka .env
la'aanteed boosas dheeri ah ama dabeecad xumo haddii kale waxaad la kulmi doontaa dhibaatooyin hadhow. Fadlan, xasuuso Tallaabadan sababtoo ah waxaad cusbooneysiineysaa qandaraaska caqliga leh hadhow. Ka hel Pinata API halkan .
👉Cusbooneysii truffle-config.js
Waxaad ku arki kartaa truffle-config.js-ka la sameeyay ee hagaha mashruucaaga. Kaliya cusboonaysii koodka si aan ula falgeli karno testnetka RSK iyada oo loo marayo.
require('dotenv').config(); const HDWalletProvider = require('@truffle/hdwallet-provider'); module.exports = { networks: { development: { host: "127.0.0.1", port: 8545, network_id: "*", }, rskTestnet: { provider: () => new HDWalletProvider({ mnemonic: { phrase: process.env.MNEMONIC, }, providerOrUrl: `https://public-node.testnet.rsk.co`, chainId: 31, // RSK Testnet ID pollingInterval: 15000, }), network_id: 31, gas: 2500000, gasPrice: 60000000, confirmations: 2, timeoutBlocks: 60000, skipDryRun: true, }, }, compilers: { solc: { version: "0.8.20", }, }, db: { enabled: false, }, };
👉Rakib Bixiyaha HDWallet
npm install @truffle/hdwallet-provider
Waxaan abuuri doonaa qandaraas suuqa.
👉Rakib qandaraasyada OpenZeppelin
Waxaan u isticmaaleynaa qandaraasyada OpenZeppelin si aan u wanaajino amniga iyo habsami u socodka qandaraaskeena smart, markaa ku rakib adiga oo ku socodsiinaya amarka soo socda ee terminalka:
npm install @openzeppelin/contracts
👉Ku samee Marketplace.sol
contracts/
tusaha:
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "@openzeppelin/contracts/utils/ReentrancyGuard.sol"; import "@openzeppelin/contracts/utils/Pausable.sol"; contract Marketplace is ReentrancyGuard, Pausable { uint public productCount = 0; struct Product { uint id; address payable seller; string name; string description; string imageHash; // IPFS hash uint price; // Price in tRBTC bool active; } mapping(uint => Product) public products; event ProductCreated( uint id, address seller, string name, string description, string imageHash, uint price, bool active ); event ProductPurchased( uint id, address seller, address buyer, uint price ); event ProductRemoved(uint id, address seller); function createProduct( string memory _name, string memory _description, string memory _imageHash, uint _price ) public whenNotPaused { require(bytes(_name).length > 0, "Name is required"); require(_price > 0, "Price must be positive"); // Price is expected in tRBTC productCount++; products[productCount] = Product( productCount, payable(msg.sender), _name, _description, _imageHash, _price, true ); emit ProductCreated( productCount, msg.sender, _name, _description, _imageHash, _price, true ); } function purchaseProducts(uint[] memory _ids) public payable nonReentrant whenNotPaused { uint totalCost = 0; for (uint i = 0; i < _ids.length; i++) { Product storage _product = products[_ids[i]]; require(_product.id > 0 && _product.id <= productCount, "Invalid product ID"); require(_product.active, "Product is not active"); require(_product.seller != msg.sender, "Seller cannot buy their own product"); totalCost += _product.price; } require(msg.value >= totalCost, "Insufficient funds"); for (uint i = 0; i < _ids.length; i++) { Product storage _product = products[_ids[i]]; (bool success, ) = _product.seller.call{value: _product.price}(""); require(success, "Transfer failed to the seller"); // Emit purchase event (product can be bought again) emit ProductPurchased( _product.id, _product.seller, msg.sender, _product.price ); } } function removeProduct(uint _id) public { Product storage _product = products[_id]; require(_product.id > 0 && _product.id <= productCount, "Invalid product ID"); require(_product.seller == msg.sender, "Only the seller can remove the product"); _product.active = false; // Mark the product as inactive emit ProductRemoved(_id, msg.sender); } function getProduct(uint _id) public view returns (Product memory) { require(_id > 0 && _id <= productCount, "Invalid product ID"); Product memory product = products[_id]; require(product.active, "Product is not available"); return product; } function pause() public { _pause(); } function unpause() public { _unpause(); } }
👉Ku qor qoraalka socdaalka migrations/2_deploy_contracts.js
const Marketplace = artifacts.require("Marketplace"); module.exports = function (deployer) { deployer.deploy(Marketplace); };
👉Uruuri oo Geli Qandaraasyada
Ku socodsii koodka soo socda si aad u ururiso heshiiska iyada oo loo marayo terminalka:
truffle compile
Haddii wax waliba si sax ah u dhacaan, waxaad ku arki kartaa wax sidan oo kale ah terminalka:
Ku socodsii amarka soo socda ee terminalka si aad u geyso Marketplace.sol
testnetka Rootstock.
truffle migrate --network rskTestnet
Waxaad u baahan tahay xoogaa tRBTC ah boorsada jeebka ka hor intaadan darin heshiiskaaga. Ka hel qasabada RSK halkan .
Habka guusha ka dib, waxaad ku arki doontaa fariinta terminalka soo socda:
Waxaad ka heli doontaa faylka Marketplace.json
gudaha \build\contracts\Marketplace.json
xusuusnow, waxaad nuqul ka samayn doontaa faylkan hage kale.
Horumarinta Hore ee Suuqa Suuqa dApp
Hadda oo aanu geynay qandaraasyada casriga ah, waxaan u dhisi doonaa suuq soo jiidasho leh oo u oggolaanaya isticmaaleyaasha inay la falgalaan. Qaybta hore waxay yeelan doontaa sifooyin sida liisaska alaabta, ku darista alaabada, gadashada, ku darista/saarida alaabta gaadhiga, la socodka macaamilka, iyo bixinta jawaab celinta wakhtiga dhabta ah sida ogeysiisyada iyo bar horumarka.
👉Bilow Codsiga Falcelinta
Waxaan u isticmaali doonaa React dhanka hore.
Ku billow abka cusub ee React tusaha mashruuca.
npx create-react-app client
U gudub hagaha macmiilka.
cd client
Ku rakib Web3 iyo Bootstrap UI
npm install web3 bootstrap
👉Qaabka Mashruuca
Waxaad u baahan doontaa qaab dhismeedka geesta hore sida ku cad sawirka 1.
👉Web3 ku samee src/utils/Marketplace.json
Si loola macaamilo qandaraaska caqliga leh, waxaanu soo dejin doonaa ABI (Codsiga Binary Interface).
Marketplace.json
ABI hagahaaga build/contracts
ee Truffle galka client/src/utils/
folder sida ku xusan Tallaabada .
App.js
Ka soo deji GitHub oo dhig tusaha ku habboon sida ku cad sawirka 1.
👉 Ogeysiinta waqtiga-dhabta ah iyo Baararka Horumarka
Ogeysiinta-waqtiga-dhabta ah, waxaanu isku dari doonaa react-toastify
u eg maktabad. Waxa kale oo aad isticmaali kartaa react-bootstrap
ee baararka horumarka.
Ku rakib React Toastify tusaha client
npm install react-toastify
👉Ku rakib Axios codsiyada HTTP (ee Pinata's API):
npm install axios
Hagaag, hadda fadlan kala soo bax dhammaan qaybaha Frontend galka macmiilka (oo ay ku jiraan gal+faylalka) ee kaydka GitHub . Oo geli tusaha ku habboon.
👉Hadda, waxaad la falgali kartaa dApp-kaaga. Waxaad ku socodsiin kartaa app-ka falcelinta adiga oo isticmaalaya amarka soo socda ee terminalka:
npm start
Waxay si toos ah u furi doontaa browserka caadiga ah. Fadlan hubi inaad haysato kordhinta biraawsarka MetMask oo si habboon loo habeeyey testnet RSK (Waxaad raaci kartaa hagaha mashruuca si aad u doorato shabakadda saxda ah halkan ).
Hadda, ka falcelinta abka waxay ku baaqaysaa kordhinta jeebka MetaMask, fadlan xaqiiji wicitaanka. Kadib waxay soo bandhigi doontaa boorsada ku xiran isdhexgalka ugu muhiimsan sida ku cad shaxanka soo socda.
Qaybta hore waxay ku siinaysaa astaamo badan. Waxaad ku dari kartaa/ka saari kartaa alaabta. Mar kasta, waxaa lagu weydiin doonaa inaad xaqiijiso wacitaanka ku jira kordhinta jeebka MetaMask. Hubi gif-ka soo socda:
Hagaag, hadda waxaad tijaabin kartaa in dAppku si sax ah u maareeyo macaamilada lagu daray gaariga iyo in kale. Waxaad arki kartaa taariikhda macaamil ganacsi oo faahfaahsan oo hoos timaada qaybta "Taariikhda Ganacsiga" oo leh dhammaan faahfaahinta farsamada. Marka iibka la dhammeeyo, sanduuqa waxaa loo diraa milkiilaha ku daray alaabta dApp-ka.
Aan si wadajir ah u tijaabinno App-ka:
Hambalyo! Waxaan si guul leh u horumarinay oo ku tijaabinay dApp-ka gudaha testnetka RSK. Waxaad u bedeli kartaa shabakada RSK adigoo ku daraya sifooyinka aad rabto. Kaliya hagaaji koodka meel kasta oo testnet lagu sheegay oo sidoo kale ka hubi dukumentiga mashruuca halkan haddii aad u yaacdo si aad u dhisto abka diyaarsan ee wax soo saarka.
Waxay noqon doontaa habka cusub ee lagu bilaabayo suuqa beeraha kaas oo ay ku jiraan dhowr habab sida keenista alaabta, soo qaadis, iwm Caqabadda kale ayaa ah in ay wali ku jirto wajigii tijaabada, mana garanayno sida ay macaamiishu u dhaqmaan tignoolajiyadan horumaraysa.
Markaa, waxbarashada iyo tabobarku waxay lama huraan u yihiin beeralayda iyo macaamiisha labadaba si ay u qaataan tignoolajiyada cusub. Sidoo kale, wada shaqayn ku filan ayaa ah arrimaha ugu muhiimsan ee lagu horumarinayo suuq-geyn baahsan oo waara ee wax soo saarka beeraha.
Waxaan si guul leh uga dhisnay goob suuq-beereed oo baahsan oo ku taal xiniinyaha Rootstock (RSK). Nabadgelyada ayaa loo qaatay mudnaanta koowaad waana sababta dhowr tillaabo loo qaaday si loo ilaaliyo koodhka qandaraasyada casriga ah iyadoo la adeegsanayo qandaraasyada OpenZeppelin. dApp-ka la tijaabiyay waxa uu ka kooban yahay ku dhawaad dhammaan sifooyinka lagama maarmaanka ah ee ay tahay in goob suuqeed fudud oo baahsani lahaato, laakiin waxaad ku wanaajin kartaa sifooyin badan haddii aad qorshaynayso in aad app ka bilowdo shabakada Rootstock's mainnet. Sidoo kale, maskaxda ku hay ammaanka si aad u hubiso in wax walba u shaqeeyaan sidii loogu talagalay oo si habsami leh.
Waxaan isku daynay in aan ka faa'iidaysanno Rootstock sifooyin wax kala beddelasho degdeg ah leh oo leh kharashyo wax kala beddelasho yar si aan u sii wadno dhammaan wax kala iibsiga taas oo xallin doonta arrinta ciriiriga ah ee Bitcoin ee caanka ah. Dabcan, noocyadan suuqyada suuqyada ah waa inay wajahaan arrimo badan, laakiin sida aan si dabiici ah u raadineyno xorriyadda, waxaan rajeyn karnaa inaan helno goob suuq ah oo baahsan mustaqbalka.