స్మార్ట్ కాంట్రాక్ట్లను పరీక్షించడం
ఎథీరియం వంటి పబ్లిక్ బ్లాక్చైన్లు మార్చలేనివి, కాబట్టి డిప్లాయ్మెంట్ తర్వాత స్మార్ట్ కాంట్రాక్ట్ కోడ్ను మార్చడం కష్టం. "వర్చువల్ అప్గ్రేడ్లు" చేయడానికి కాంట్రాక్ట్ అప్గ్రేడ్ ప్యాటర్న్లు ఉన్నాయి, కానీ వీటిని అమలు చేయడం కష్టం మరియు సామాజిక ఏకాభిప్రాయం అవసరం. అంతేకాకుండా, ఒక లోపాన్ని కనుగొన్న తర్వాత మాత్రమే అప్గ్రేడ్ దాన్ని పరిష్కరించగలదు—ఒకవేళ దాడి చేసే వ్యక్తి ముందుగా ఆ దుర్బలత్వాన్ని కనుగొంటే, మీ స్మార్ట్ కాంట్రాక్ట్ దోపిడీకి గురయ్యే ప్రమాదం ఉంది.
ఈ కారణాల వల్ల, మెయిన్నెట్కు డిప్లాయ్ చేయడానికి ముందు స్మార్ట్ కాంట్రాక్ట్లను పరీక్షించడం భద్రత కోసం కనీస అవసరం. కాంట్రాక్ట్లను పరీక్షించడానికి మరియు కోడ్ ఖచ్చితత్వాన్ని అంచనా వేయడానికి అనేక పద్ధతులు ఉన్నాయి; మీరు ఎంచుకునేది మీ అవసరాలపై ఆధారపడి ఉంటుంది. అయినప్పటికీ, కాంట్రాక్ట్ కోడ్లోని చిన్న మరియు పెద్ద భద్రతా లోపాలను పట్టుకోవడానికి వివిధ సాధనాలు మరియు విధానాలతో కూడిన టెస్ట్ సూట్ అనువైనది.
ముందస్తు అవసరాలు
ఎథీరియం నెట్వర్క్లో డిప్లాయ్ చేయడానికి ముందు స్మార్ట్ కాంట్రాక్ట్లను ఎలా పరీక్షించాలో ఈ పేజీ వివరిస్తుంది. మీకు స్మార్ట్ కాంట్రాక్ట్ల గురించి తెలుసని ఇది భావిస్తుంది.
స్మార్ట్ కాంట్రాక్ట్ టెస్టింగ్ అంటే ఏమిటి?
స్మార్ట్ కాంట్రాక్ట్ టెస్టింగ్ అనేది స్మార్ట్ కాంట్రాక్ట్ కోడ్ ఆశించిన విధంగా పనిచేస్తుందో లేదో ధృవీకరించే ప్రక్రియ. ఒక నిర్దిష్ట స్మార్ట్ కాంట్రాక్ట్ విశ్వసనీయత, వినియోగం మరియు భద్రత కోసం అవసరాలను తీరుస్తుందో లేదో తనిఖీ చేయడానికి టెస్టింగ్ ఉపయోగపడుతుంది.
విధానాలు మారుతూ ఉన్నప్పటికీ, చాలా టెస్టింగ్ పద్ధతులకు స్మార్ట్ కాంట్రాక్ట్ నిర్వహించాల్సిన డేటా యొక్క చిన్న నమూనాతో దాన్ని అమలు చేయడం అవసరం. నమూనా డేటా కోసం కాంట్రాక్ట్ సరైన ఫలితాలను ఇస్తే, అది సరిగ్గా పనిచేస్తుందని భావించబడుతుంది. కాంట్రాక్ట్ అమలు ఆశించిన ఫలితాలతో సరిపోలుతుందో లేదో తనిఖీ చేయడానికి టెస్ట్ కేసులను (కొత్త ట్యాబ్లో తెరవబడుతుంది) వ్రాయడానికి మరియు అమలు చేయడానికి చాలా టెస్టింగ్ సాధనాలు వనరులను అందిస్తాయి.
స్మార్ట్ కాంట్రాక్ట్లను పరీక్షించడం ఎందుకు ముఖ్యం?
స్మార్ట్ కాంట్రాక్ట్లు తరచుగా అధిక-విలువైన ఆర్థిక ఆస్తులను నిర్వహిస్తాయి కాబట్టి, చిన్న ప్రోగ్రామింగ్ లోపాలు వినియోగదారులకు భారీ నష్టాలకు (కొత్త ట్యాబ్లో తెరవబడుతుంది) దారితీయవచ్చు మరియు తరచుగా దారితీస్తాయి. అయితే, కఠినమైన టెస్టింగ్ స్మార్ట్ కాంట్రాక్ట్ కోడ్లోని లోపాలు మరియు సమస్యలను ముందుగానే కనుగొనడంలో మరియు మెయిన్నెట్లో ప్రారంభించడానికి ముందే వాటిని పరిష్కరించడంలో మీకు సహాయపడుతుంది.
బగ్ను కనుగొంటే కాంట్రాక్ట్ను అప్గ్రేడ్ చేయడం సాధ్యమే అయినప్పటికీ, అప్గ్రేడ్లు సంక్లిష్టమైనవి మరియు సరిగ్గా నిర్వహించకపోతే లోపాలకు దారితీయవచ్చు (కొత్త ట్యాబ్లో తెరవబడుతుంది). కాంట్రాక్ట్ను అప్గ్రేడ్ చేయడం మార్చలేనితనం సూత్రాన్ని మరింత దెబ్బతీస్తుంది మరియు అదనపు విశ్వాస ఉపకల్పనలతో వినియోగదారులపై భారం మోపుతుంది. దీనికి విరుద్ధంగా, మీ కాంట్రాక్ట్ను పరీక్షించడానికి ఒక సమగ్ర ప్రణాళిక స్మార్ట్ కాంట్రాక్ట్ భద్రతా ప్రమాదాలను తగ్గిస్తుంది మరియు డిప్లాయ్ చేసిన తర్వాత సంక్లిష్టమైన లాజిక్ అప్గ్రేడ్లను చేయాల్సిన అవసరాన్ని తగ్గిస్తుంది.
స్మార్ట్ కాంట్రాక్ట్లను పరీక్షించే పద్ధతులు
ఎథీరియం స్మార్ట్ కాంట్రాక్ట్లను పరీక్షించే పద్ధతులు రెండు విస్తృత వర్గాల కిందకు వస్తాయి: ఆటోమేటెడ్ టెస్టింగ్ మరియు మాన్యువల్ టెస్టింగ్. ఆటోమేటెడ్ టెస్టింగ్ మరియు మాన్యువల్ టెస్టింగ్ ప్రత్యేక ప్రయోజనాలు మరియు ట్రేడ్ఆఫ్లను అందిస్తాయి, అయితే మీ కాంట్రాక్ట్లను విశ్లేషించడానికి బలమైన ప్రణాళికను రూపొందించడానికి మీరు రెండింటినీ కలపవచ్చు.
ఆటోమేటెడ్ టెస్టింగ్
ఆటోమేటెడ్ టెస్టింగ్ అమలులో లోపాల కోసం స్మార్ట్ కాంట్రాక్ట్ కోడ్ను స్వయంచాలకంగా తనిఖీ చేసే సాధనాలను ఉపయోగిస్తుంది. కాంట్రాక్ట్ కార్యాచరణల మూల్యాంకనానికి మార్గనిర్దేశం చేయడానికి స్క్రిప్ట్లను (కొత్త ట్యాబ్లో తెరవబడుతుంది) ఉపయోగించడం ద్వారా ఆటోమేటెడ్ టెస్టింగ్ ప్రయోజనం లభిస్తుంది. స్క్రిప్ట్ చేయబడిన పరీక్షలను కనీస మానవ జోక్యంతో పదేపదే అమలు చేయడానికి షెడ్యూల్ చేయవచ్చు, ఇది మాన్యువల్ టెస్టింగ్ విధానాల కంటే ఆటోమేటెడ్ టెస్టింగ్ను మరింత సమర్థవంతంగా చేస్తుంది.
పరీక్షలు పునరావృతమయ్యేవి మరియు సమయం తీసుకునేవి అయినప్పుడు; మాన్యువల్గా నిర్వహించడం కష్టమైనప్పుడు; మానవ తప్పిదాలకు గురయ్యే అవకాశం ఉన్నప్పుడు; లేదా క్లిష్టమైన కాంట్రాక్ట్ ఫంక్షన్లను మూల్యాంకనం చేయాల్సి వచ్చినప్పుడు ఆటోమేటెడ్ టెస్టింగ్ ప్రత్యేకంగా ఉపయోగపడుతుంది. కానీ ఆటోమేటెడ్ టెస్టింగ్ సాధనాలకు లోపాలు ఉండవచ్చు—అవి కొన్ని బగ్లను కోల్పోవచ్చు మరియు అనేక ఫాల్స్ పాజిటివ్లను (కొత్త ట్యాబ్లో తెరవబడుతుంది) ఉత్పత్తి చేయవచ్చు. అందువల్ల, స్మార్ట్ కాంట్రాక్ట్ల కోసం ఆటోమేటెడ్ టెస్టింగ్ను మాన్యువల్ టెస్టింగ్తో జత చేయడం అనువైనది.
మాన్యువల్ టెస్టింగ్
మాన్యువల్ టెస్టింగ్ అనేది మానవ-సహాయకమైనది మరియు స్మార్ట్ కాంట్రాక్ట్ ఖచ్చితత్వాన్ని విశ్లేషించేటప్పుడు మీ టెస్ట్ సూట్లోని ప్రతి టెస్ట్ కేసును ఒకదాని తర్వాత ఒకటి అమలు చేయడం ఇందులో ఉంటుంది. ఇది ఆటోమేటెడ్ టెస్టింగ్ లాగా ఉండదు, ఇక్కడ మీరు ఒకేసారి కాంట్రాక్ట్పై బహుళ వివిక్త పరీక్షలను అమలు చేయవచ్చు మరియు విఫలమైన మరియు ఉత్తీర్ణమైన అన్ని పరీక్షలను చూపే నివేదికను పొందవచ్చు.
విభిన్న పరీక్షా దృశ్యాలను కవర్ చేసే వ్రాతపూర్వక పరీక్షా ప్రణాళికను అనుసరించి ఒకే వ్యక్తి మాన్యువల్ టెస్టింగ్ను నిర్వహించవచ్చు. మాన్యువల్ టెస్టింగ్లో భాగంగా మీరు బహుళ వ్యక్తులు లేదా సమూహాలను ఒక నిర్దిష్ట వ్యవధిలో స్మార్ట్ కాంట్రాక్ట్తో ఇంటరాక్ట్ అయ్యేలా చేయవచ్చు. టెస్టర్లు కాంట్రాక్ట్ యొక్క వాస్తవ ప్రవర్తనను ఆశించిన ప్రవర్తనతో పోల్చి చూస్తారు, ఏదైనా వ్యత్యాసాన్ని బగ్గా ఫ్లాగ్ చేస్తారు.
సమర్థవంతమైన మాన్యువల్ టెస్టింగ్కు గణనీయమైన వనరులు (నైపుణ్యం, సమయం, డబ్బు మరియు కృషి) అవసరం, మరియు పరీక్షలను అమలు చేస్తున్నప్పుడు మానవ తప్పిదాల వల్ల కొన్ని లోపాలను కోల్పోయే అవకాశం ఉంది. కానీ మాన్యువల్ టెస్టింగ్ కూడా ప్రయోజనకరంగా ఉంటుంది—ఉదాహరణకు, ఒక మానవ టెస్టర్ (ఉదా., ఆడిటర్) ఆటోమేటెడ్ టెస్టింగ్ సాధనం కోల్పోయే ఎడ్జ్ కేసులను గుర్తించడానికి అంతర్ దృష్టిని ఉపయోగించవచ్చు.
స్మార్ట్ కాంట్రాక్ట్ల కోసం ఆటోమేటెడ్ టెస్టింగ్
యూనిట్ టెస్టింగ్
యూనిట్ టెస్టింగ్ కాంట్రాక్ట్ ఫంక్షన్లను విడిగా అంచనా వేస్తుంది మరియు ప్రతి భాగం సరిగ్గా పనిచేస్తుందో లేదో తనిఖీ చేస్తుంది. మంచి యూనిట్ పరీక్షలు సరళంగా ఉండాలి, త్వరగా అమలు కావాలి మరియు పరీక్షలు విఫలమైతే ఏమి తప్పు జరిగిందో స్పష్టమైన ఆలోచనను అందించాలి.
ఫంక్షన్లు ఆశించిన విలువలను అందిస్తాయో లేదో మరియు ఫంక్షన్ అమలు తర్వాత కాంట్రాక్ట్ నిల్వ సరిగ్గా నవీకరించబడిందో లేదో తనిఖీ చేయడానికి యూనిట్ పరీక్షలు ఉపయోగపడతాయి. అంతేకాకుండా, కాంట్రాక్ట్ కోడ్బేస్లో మార్పులు చేసిన తర్వాత యూనిట్ పరీక్షలను అమలు చేయడం వల్ల కొత్త లాజిక్ను జోడించడం వల్ల లోపాలు రాకుండా చూసుకోవచ్చు. సమర్థవంతమైన యూనిట్ పరీక్షలను అమలు చేయడానికి కొన్ని మార్గదర్శకాలు క్రింద ఉన్నాయి:
స్మార్ట్ కాంట్రాక్ట్ల యూనిట్ టెస్టింగ్ కోసం మార్గదర్శకాలు
1. మీ కాంట్రాక్ట్ వ్యాపార లాజిక్ మరియు వర్క్ఫ్లోను అర్థం చేసుకోండి
యూనిట్ పరీక్షలను వ్రాయడానికి ముందు, స్మార్ట్ కాంట్రాక్ట్ ఏ కార్యాచరణలను అందిస్తుందో మరియు వినియోగదారులు ఆ ఫంక్షన్లను ఎలా యాక్సెస్ చేస్తారో మరియు ఉపయోగిస్తారో తెలుసుకోవడం సహాయపడుతుంది. చెల్లుబాటు అయ్యే వినియోగదారు ఇన్పుట్ల కోసం కాంట్రాక్ట్లోని ఫంక్షన్లు సరైన అవుట్పుట్ను అందిస్తాయో లేదో నిర్ణయించే హ్యాపీ పాత్ పరీక్షలను (కొత్త ట్యాబ్లో తెరవబడుతుంది) అమలు చేయడానికి ఇది ప్రత్యేకంగా ఉపయోగపడుతుంది. వేలం కాంట్రాక్ట్ (కొత్త ట్యాబ్లో తెరవబడుతుంది) యొక్క ఈ (సంక్షిప్త) ఉదాహరణను ఉపయోగించి మేము ఈ భావనను వివరిస్తాము
constructor(
uint biddingTime,
address payable beneficiaryAddress
) {
beneficiary = beneficiaryAddress;
auctionEndTime = block.timestamp + biddingTime;
}
function bid() external payable {
if (block.timestamp > auctionEndTime)
revert AuctionAlreadyEnded();
if (msg.value <= highestBid)
revert BidNotHighEnough(highestBid);
if (highestBid != 0) {
pendingReturns[highestBidder] += highestBid;
}
highestBidder = msg.sender;
highestBid = msg.value;
emit HighestBidIncreased(msg.sender, msg.value);
}
function withdraw() external returns (bool) {
uint amount = pendingReturns[msg.sender];
if (amount > 0) {
pendingReturns[msg.sender] = 0;
if (!payable(msg.sender).send(amount)) {
pendingReturns[msg.sender] = amount;
return false;
}
}
return true;
}
function auctionEnd() external {
if (block.timestamp < auctionEndTime)
revert AuctionNotYetEnded();
if (ended)
revert AuctionEndAlreadyCalled();
ended = true;
emit AuctionEnded(highestBidder, highestBid);
beneficiary.transfer(highestBid);
}
}
ఇది బిడ్డింగ్ వ్యవధిలో బిడ్లను స్వీకరించడానికి రూపొందించబడిన ఒక సాధారణ వేలం కాంట్రాక్ట్. highestBid పెరిగితే, మునుపటి అత్యధిక బిడ్డర్ వారి డబ్బును పొందుతారు; బిడ్డింగ్ వ్యవధి ముగిసిన తర్వాత, beneficiary వారి డబ్బును పొందడానికి కాంట్రాక్ట్ను పిలుస్తారు.
ఇలాంటి కాంట్రాక్ట్ కోసం యూనిట్ పరీక్షలు కాంట్రాక్ట్తో ఇంటరాక్ట్ అయ్యేటప్పుడు వినియోగదారు కాల్ చేయగల విభిన్న ఫంక్షన్లను కవర్ చేస్తాయి. వేలం కొనసాగుతున్నప్పుడు వినియోగదారు బిడ్ వేయగలరో లేదో తనిఖీ చేసే యూనిట్ పరీక్ష (అంటే, bid() కు కాల్లు విజయవంతమవుతాయి) లేదా ప్రస్తుత highestBid కంటే వినియోగదారు ఎక్కువ బిడ్ వేయగలరో లేదో తనిఖీ చేసే పరీక్ష దీనికి ఉదాహరణ.
కాంట్రాక్ట్ కార్యాచరణ వర్క్ఫ్లోను అర్థం చేసుకోవడం అమలు అవసరాలకు అనుగుణంగా ఉందో లేదో తనిఖీ చేసే యూనిట్ పరీక్షలను వ్రాయడంలో కూడా సహాయపడుతుంది. ఉదాహరణకు, వేలం ముగిసినప్పుడు (అంటే, auctionEndTime block.timestamp కంటే తక్కువగా ఉన్నప్పుడు) వినియోగదారులు బిడ్లు వేయలేరని వేలం కాంట్రాక్ట్ నిర్దేశిస్తుంది. అందువల్ల, వేలం ముగిసినప్పుడు (అంటే, auctionEndTime > block.timestamp ఉన్నప్పుడు) bid() ఫంక్షన్కు కాల్లు విజయవంతమవుతాయా లేదా విఫలమవుతాయా అని తనిఖీ చేసే యూనిట్ పరీక్షను డెవలపర్ అమలు చేయవచ్చు.
2. కాంట్రాక్ట్ అమలుకు సంబంధించిన అన్ని ఉపకల్పనలను అంచనా వేయండి
కాంట్రాక్ట్ అమలు గురించి ఏవైనా ఉపకల్పనలను డాక్యుమెంట్ చేయడం మరియు ఆ ఉపకల్పనల చెల్లుబాటును ధృవీకరించడానికి యూనిట్ పరీక్షలను వ్రాయడం ముఖ్యం. ఊహించని అమలు నుండి రక్షణ కల్పించడమే కాకుండా, నిర్ధారణలను పరీక్షించడం స్మార్ట్ కాంట్రాక్ట్ భద్రతా నమూనాను విచ్ఛిన్నం చేసే కార్యకలాపాల గురించి ఆలోచించేలా చేస్తుంది. "హ్యాపీ యూజర్ టెస్ట్ల"కు మించి వెళ్లి, తప్పు ఇన్పుట్ల కోసం ఫంక్షన్ విఫలమవుతుందో లేదో తనిఖీ చేసే నెగటివ్ పరీక్షలను వ్రాయడం ఒక ఉపయోగకరమైన చిట్కా.
అనేక యూనిట్ టెస్టింగ్ ఫ్రేమ్వర్క్లు నిర్ధారణలను సృష్టించడానికి మిమ్మల్ని అనుమతిస్తాయి—కాంట్రాక్ట్ ఏమి చేయగలదో మరియు ఏమి చేయలేదో తెలిపే సాధారణ ప్రకటనలు—మరియు అమలులో ఆ నిర్ధారణలు నిలబడతాయో లేదో చూడటానికి పరీక్షలను అమలు చేస్తాయి. ఇంతకు ముందు వివరించిన వేలం కాంట్రాక్ట్పై పనిచేస్తున్న డెవలపర్ నెగటివ్ పరీక్షలను అమలు చేయడానికి ముందు దాని ప్రవర్తన గురించి ఈ క్రింది నిర్ధారణలను చేయవచ్చు:
-
వేలం ముగిసినప్పుడు లేదా ప్రారంభం కానప్పుడు వినియోగదారులు బిడ్లు వేయలేరు.
-
బిడ్ ఆమోదయోగ్యమైన పరిమితి కంటే తక్కువగా ఉంటే వేలం కాంట్రాక్ట్ రివర్ట్ అవుతుంది.
-
బిడ్ను గెలుచుకోవడంలో విఫలమైన వినియోగదారులకు వారి నిధులు జమ చేయబడతాయి
గమనిక: ఉపకల్పనలను పరీక్షించడానికి మరొక మార్గం కాంట్రాక్ట్లో ఫంక్షన్ మాడిఫైయర్లను (కొత్త ట్యాబ్లో తెరవబడుతుంది), ముఖ్యంగా require, assert, మరియు if…else స్టేట్మెంట్లను ట్రిగ్గర్ చేసే పరీక్షలను వ్రాయడం.
3. కోడ్ కవరేజీని కొలవండి
కోడ్ కవరేజ్ (కొత్త ట్యాబ్లో తెరవబడుతుంది) అనేది పరీక్షల సమయంలో అమలు చేయబడిన మీ కోడ్లోని బ్రాంచ్లు, లైన్లు మరియు స్టేట్మెంట్ల సంఖ్యను ట్రాక్ చేసే టెస్టింగ్ మెట్రిక్. పరీక్షించని దుర్బలత్వాల ప్రమాదాన్ని తగ్గించడానికి పరీక్షలు మంచి కోడ్ కవరేజీని కలిగి ఉండాలి. తగినంత కవరేజ్ లేకుండా, అన్ని పరీక్షలు ఉత్తీర్ణత సాధించినందున మీ కాంట్రాక్ట్ సురక్షితమైనదని మీరు తప్పుగా భావించవచ్చు, అయితే పరీక్షించని కోడ్ మార్గాల్లో దుర్బలత్వాలు ఇంకా ఉండవచ్చు. అయితే, అధిక కోడ్ కవరేజీని రికార్డ్ చేయడం వల్ల స్మార్ట్ కాంట్రాక్ట్లోని అన్ని స్టేట్మెంట్లు/ఫంక్షన్లు ఖచ్చితత్వం కోసం తగినంతగా పరీక్షించబడ్డాయనే భరోసా లభిస్తుంది.
4. బాగా అభివృద్ధి చెందిన టెస్టింగ్ ఫ్రేమ్వర్క్లను ఉపయోగించండి
మీ స్మార్ట్ కాంట్రాక్ట్ల కోసం యూనిట్ పరీక్షలను అమలు చేయడంలో ఉపయోగించే సాధనాల నాణ్యత కీలకం. ఆదర్శవంతమైన టెస్టింగ్ ఫ్రేమ్వర్క్ అనేది క్రమం తప్పకుండా నిర్వహించబడేది; ఉపయోగకరమైన లక్షణాలను (ఉదా., లాగింగ్ మరియు రిపోర్టింగ్ సామర్థ్యాలు) అందించేది; మరియు ఇతర డెవలపర్లచే విస్తృతంగా ఉపయోగించబడి మరియు పరిశీలించబడి ఉండాలి.
Solidity స్మార్ట్ కాంట్రాక్ట్ల కోసం యూనిట్ టెస్టింగ్ ఫ్రేమ్వర్క్లు విభిన్న భాషలలో (ఎక్కువగా JavaScript, Python మరియు Rust) వస్తాయి. విభిన్న టెస్టింగ్ ఫ్రేమ్వర్క్లతో యూనిట్ పరీక్షలను అమలు చేయడం ఎలా ప్రారంభించాలో సమాచారం కోసం క్రింది కొన్ని మార్గదర్శకాలను చూడండి:
- Brownie తో యూనిట్ పరీక్షలను అమలు చేయడం (కొత్త ట్యాబ్లో తెరవబడుతుంది)
- Foundry తో యూనిట్ పరీక్షలను అమలు చేయడం (కొత్త ట్యాబ్లో తెరవబడుతుంది)
- Waffle తో యూనిట్ పరీక్షలను అమలు చేయడం (కొత్త ట్యాబ్లో తెరవబడుతుంది)
- Remix తో యూనిట్ పరీక్షలను అమలు చేయడం (కొత్త ట్యాబ్లో తెరవబడుతుంది)
- Ape తో యూనిట్ పరీక్షలను అమలు చేయడం (కొత్త ట్యాబ్లో తెరవబడుతుంది)
- Hardhat తో యూనిట్ పరీక్షలను అమలు చేయడం (కొత్త ట్యాబ్లో తెరవబడుతుంది)
- Wake తో యూనిట్ పరీక్షలను అమలు చేయడం (కొత్త ట్యాబ్లో తెరవబడుతుంది)
- Moccasin తో యూనిట్ పరీక్షలను అమలు చేయడం (కొత్త ట్యాబ్లో తెరవబడుతుంది)
ఇంటిగ్రేషన్ టెస్టింగ్
యూనిట్ టెస్టింగ్ కాంట్రాక్ట్ ఫంక్షన్లను విడిగా డీబగ్ చేస్తుంది, అయితే ఇంటిగ్రేషన్ పరీక్షలు స్మార్ట్ కాంట్రాక్ట్ భాగాలను మొత్తంగా అంచనా వేస్తాయి. క్రాస్-కాంట్రాక్ట్ కాల్స్ లేదా ఒకే స్మార్ట్ కాంట్రాక్ట్లోని విభిన్న ఫంక్షన్ల మధ్య పరస్పర చర్యల వల్ల తలెత్తే సమస్యలను ఇంటిగ్రేషన్ టెస్టింగ్ గుర్తించగలదు. ఉదాహరణకు, వారసత్వం (కొత్త ట్యాబ్లో తెరవబడుతుంది) మరియు డిపెండెన్సీ ఇంజెక్షన్ వంటివి సరిగ్గా పనిచేస్తాయో లేదో తనిఖీ చేయడానికి ఇంటిగ్రేషన్ పరీక్షలు సహాయపడతాయి.
మీ కాంట్రాక్ట్ మాడ్యులర్ ఆర్కిటెక్చర్ను అవలంబిస్తే లేదా అమలు సమయంలో ఇతర ఆన్చైన్ కాంట్రాక్ట్లతో ఇంటర్ఫేస్ అయితే ఇంటిగ్రేషన్ టెస్టింగ్ ఉపయోగపడుతుంది. ఇంటిగ్రేషన్ పరీక్షలను అమలు చేయడానికి ఒక మార్గం ఏమిటంటే, ఒక నిర్దిష్ట ఎత్తులో (Forge (కొత్త ట్యాబ్లో తెరవబడుతుంది) లేదా Hardhat (కొత్త ట్యాబ్లో తెరవబడుతుంది) వంటి సాధనాన్ని ఉపయోగించి) మరియు మీ కాంట్రాక్ట్ మరియు డిప్లాయ్ చేయబడిన కాంట్రాక్ట్ల మధ్య పరస్పర చర్యలను అనుకరించడం.
ఫోర్క్ చేయబడిన బ్లాక్చైన్ మెయిన్నెట్ మాదిరిగానే ప్రవర్తిస్తుంది మరియు అనుబంధిత స్థితులు మరియు బ్యాలెన్స్లతో ఖాతాలను కలిగి ఉంటుంది. కానీ ఇది శాండ్బాక్స్ చేయబడిన స్థానిక అభివృద్ధి వాతావరణంగా మాత్రమే పనిచేస్తుంది, అంటే ఉదాహరణకు లావాదేవీల కోసం మీకు నిజమైన ETH అవసరం లేదు, లేదా మీ మార్పులు నిజమైన ఎథీరియం ప్రోటోకాల్ను ప్రభావితం చేయవు.
ప్రాపర్టీ-ఆధారిత టెస్టింగ్
ప్రాపర్టీ-ఆధారిత టెస్టింగ్ అనేది స్మార్ట్ కాంట్రాక్ట్ కొన్ని నిర్వచించబడిన ప్రాపర్టీని సంతృప్తి పరుస్తుందో లేదో తనిఖీ చేసే ప్రక్రియ. ప్రాపర్టీలు కాంట్రాక్ట్ ప్రవర్తన గురించి వాస్తవాలను నొక్కి చెబుతాయి, ఇవి విభిన్న దృశ్యాలలో నిజంగా ఉంటాయని భావిస్తారు—స్మార్ట్ కాంట్రాక్ట్ ప్రాపర్టీకి ఉదాహరణ "కాంట్రాక్ట్లోని అంకగణిత కార్యకలాపాలు ఎప్పుడూ ఓవర్ఫ్లో లేదా అండర్ఫ్లో కావు."
స్టాటిక్ అనాలిసిస్ మరియు డైనమిక్ అనాలిసిస్ రెండు సాధారణ పద్ధతులు ప్రాపర్టీ-ఆధారిత టెస్టింగ్ను అమలు చేయడానికి, మరియు ప్రోగ్రామ్ (ఈ సందర్భంలో స్మార్ట్ కాంట్రాక్ట్) కోసం కోడ్ కొన్ని ముందే నిర్వచించబడిన ప్రాపర్టీని సంతృప్తి పరుస్తుందని రెండూ ధృవీకరించగలవు. కొన్ని ప్రాపర్టీ-ఆధారిత టెస్టింగ్ సాధనాలు ఆశించిన కాంట్రాక్ట్ ప్రాపర్టీల గురించి ముందే నిర్వచించబడిన నియమాలతో వస్తాయి మరియు ఆ నియమాలకు వ్యతిరేకంగా కోడ్ను తనిఖీ చేస్తాయి, మరికొన్ని స్మార్ట్ కాంట్రాక్ట్ కోసం అనుకూల ప్రాపర్టీలను సృష్టించడానికి మిమ్మల్ని అనుమతిస్తాయి.
స్టాటిక్ అనాలిసిస్
స్టాటిక్ ఎనలైజర్ స్మార్ట్ కాంట్రాక్ట్ సోర్స్ కోడ్ను ఇన్పుట్గా తీసుకుంటుంది మరియు కాంట్రాక్ట్ ప్రాపర్టీని సంతృప్తి పరుస్తుందో లేదో ప్రకటించే ఫలితాలను అవుట్పుట్ చేస్తుంది. డైనమిక్ అనాలిసిస్ వలె కాకుండా, స్టాటిక్ అనాలిసిస్లో ఖచ్చితత్వం కోసం విశ్లేషించడానికి కాంట్రాక్ట్ను అమలు చేయడం ఉండదు. బదులుగా స్టాటిక్ అనాలిసిస్ అమలు సమయంలో స్మార్ట్ కాంట్రాక్ట్ తీసుకోగల అన్ని సాధ్యమైన మార్గాల గురించి తర్కిస్తుంది (అంటే, రన్టైమ్లో కాంట్రాక్ట్ ఆపరేషన్కు దీని అర్థం ఏమిటో నిర్ణయించడానికి సోర్స్ కోడ్ నిర్మాణాన్ని పరిశీలించడం ద్వారా).
కాంట్రాక్ట్లపై స్టాటిక్ అనాలిసిస్ను అమలు చేయడానికి లింటింగ్ (కొత్త ట్యాబ్లో తెరవబడుతుంది) మరియు స్టాటిక్ టెస్టింగ్ (కొత్త ట్యాబ్లో తెరవబడుతుంది) సాధారణ పద్ధతులు. కంపైలర్ ద్వారా అవుట్పుట్ చేయబడిన అబ్స్ట్రాక్ట్ సింటాక్స్ ట్రీలు (కొత్త ట్యాబ్లో తెరవబడుతుంది) మరియు కంట్రోల్ ఫ్లో గ్రాఫ్ల (కొత్త ట్యాబ్లో తెరవబడుతుంది) వంటి కాంట్రాక్ట్ అమలు యొక్క తక్కువ-స్థాయి ప్రాతినిధ్యాలను విశ్లేషించడం రెండింటికీ అవసరం.
చాలా సందర్భాలలో, అసురక్షిత నిర్మాణాల వినియోగం, సింటాక్స్ లోపాలు లేదా కాంట్రాక్ట్ కోడ్లో కోడింగ్ ప్రమాణాల ఉల్లంఘన వంటి భద్రతా సమస్యలను గుర్తించడానికి స్టాటిక్ అనాలిసిస్ ఉపయోగపడుతుంది. అయినప్పటికీ, స్టాటిక్ ఎనలైజర్లు లోతైన దుర్బలత్వాలను గుర్తించడంలో సాధారణంగా అస్థిరంగా ఉంటాయని తెలుసు, మరియు అధిక ఫాల్స్ పాజిటివ్లను ఉత్పత్తి చేయవచ్చు.
డైనమిక్ అనాలిసిస్
ఏదైనా అమలు ట్రేస్(లు) నిర్దిష్ట ప్రాపర్టీలను ఉల్లంఘిస్తుందో లేదో చూడటానికి డైనమిక్ అనాలిసిస్ స్మార్ట్ కాంట్రాక్ట్ ఫంక్షన్లకు సింబాలిక్ ఇన్పుట్లను (ఉదా., సింబాలిక్ ఎగ్జిక్యూషన్ (కొత్త ట్యాబ్లో తెరవబడుతుంది) లో) లేదా కాంక్రీట్ ఇన్పుట్లను (ఉదా., ఫజ్జింగ్ (కొత్త ట్యాబ్లో తెరవబడుతుంది) లో) ఉత్పత్తి చేస్తుంది. ఈ రకమైన ప్రాపర్టీ-ఆధారిత టెస్టింగ్ యూనిట్ పరీక్షల నుండి భిన్నంగా ఉంటుంది, ఇందులో టెస్ట్ కేసులు బహుళ దృశ్యాలను కవర్ చేస్తాయి మరియు ప్రోగ్రామ్ టెస్ట్ కేసుల ఉత్పత్తిని నిర్వహిస్తుంది.
స్మార్ట్ కాంట్రాక్ట్లలో ఏకపక్ష ప్రాపర్టీలను ధృవీకరించడానికి డైనమిక్ అనాలిసిస్ టెక్నిక్కు ఫజ్జింగ్ (కొత్త ట్యాబ్లో తెరవబడుతుంది) ఒక ఉదాహరణ. ఫజ్జర్ నిర్వచించబడిన ఇన్పుట్ విలువ యొక్క యాదృచ్ఛిక లేదా తప్పుగా రూపొందించబడిన వైవిధ్యాలతో లక్ష్య కాంట్రాక్ట్లోని ఫంక్షన్లను ప్రేరేపిస్తుంది. స్మార్ట్ కాంట్రాక్ట్ ఎర్రర్ స్థితికి ప్రవేశిస్తే (ఉదా., నిర్ధారణ విఫలమయ్యే చోట), సమస్య ఫ్లాగ్ చేయబడుతుంది మరియు దుర్బలమైన మార్గం వైపు అమలును నడిపించే ఇన్పుట్లు నివేదికలో ఉత్పత్తి చేయబడతాయి.
ఊహించని ఇన్పుట్లను సరిగ్గా నిర్వహించకపోవడం అనాలోచిత అమలుకు దారితీయవచ్చు మరియు ప్రమాదకరమైన ప్రభావాలను చూపుతుంది కాబట్టి స్మార్ట్ కాంట్రాక్ట్ ఇన్పుట్ ధ్రువీకరణ యంత్రాంగాన్ని అంచనా వేయడానికి ఫజ్జింగ్ ఉపయోగపడుతుంది. ఈ రకమైన ప్రాపర్టీ-ఆధారిత టెస్టింగ్ అనేక కారణాల వల్ల అనువైనది కావచ్చు:
-
అనేక దృశ్యాలను కవర్ చేయడానికి టెస్ట్ కేసులను వ్రాయడం కష్టం. ప్రాపర్టీ పరీక్షకు మీరు ప్రవర్తనను మరియు ప్రవర్తనను పరీక్షించడానికి డేటా పరిధిని నిర్వచించడం మాత్రమే అవసరం—ప్రోగ్రామ్ నిర్వచించిన ప్రాపర్టీ ఆధారంగా స్వయంచాలకంగా టెస్ట్ కేసులను ఉత్పత్తి చేస్తుంది.
-
మీ టెస్ట్ సూట్ ప్రోగ్రామ్లోని అన్ని సాధ్యమైన మార్గాలను తగినంతగా కవర్ చేయకపోవచ్చు. 100% కవరేజీతో కూడా, ఎడ్జ్ కేసులను కోల్పోయే అవకాశం ఉంది.
-
నమూనా డేటా కోసం కాంట్రాక్ట్ సరిగ్గా అమలు అవుతుందని యూనిట్ పరీక్షలు నిరూపిస్తాయి, అయితే నమూనా వెలుపల ఉన్న ఇన్పుట్ల కోసం కాంట్రాక్ట్ సరిగ్గా అమలు అవుతుందా అనేది తెలియదు. నిర్ధారణ వైఫల్యాలకు కారణమయ్యే అమలు ట్రేస్లను కనుగొనడానికి ప్రాపర్టీ పరీక్షలు ఇచ్చిన ఇన్పుట్ విలువ యొక్క బహుళ వైవిధ్యాలతో లక్ష్య కాంట్రాక్ట్ను అమలు చేస్తాయి. అందువల్ల, విస్తృత తరగతి ఇన్పుట్ డేటా కోసం కాంట్రాక్ట్ సరిగ్గా అమలు అవుతుందని ప్రాపర్టీ పరీక్ష మరిన్ని హామీలను అందిస్తుంది.
స్మార్ట్ కాంట్రాక్ట్ల కోసం ప్రాపర్టీ-ఆధారిత టెస్టింగ్ను అమలు చేయడానికి మార్గదర్శకాలు
ప్రాపర్టీ-ఆధారిత టెస్టింగ్ను అమలు చేయడం సాధారణంగా మీరు స్మార్ట్ కాంట్రాక్ట్లో ధృవీకరించాలనుకుంటున్న ప్రాపర్టీని (ఉదా., ఇంటిజర్ ఓవర్ఫ్లోలు (కొత్త ట్యాబ్లో తెరవబడుతుంది) లేకపోవడం) లేదా ప్రాపర్టీల సేకరణను నిర్వచించడంతో ప్రారంభమవుతుంది. ప్రాపర్టీ పరీక్షలను వ్రాసేటప్పుడు లావాదేవీ ఇన్పుట్ల కోసం ప్రోగ్రామ్ డేటాను ఉత్పత్తి చేయగల విలువల పరిధిని కూడా మీరు నిర్వచించాల్సి ఉంటుంది.
సరిగ్గా కాన్ఫిగర్ చేసిన తర్వాత, ప్రాపర్టీ టెస్టింగ్ సాధనం యాదృచ్ఛికంగా రూపొందించబడిన ఇన్పుట్లతో మీ స్మార్ట్ కాంట్రాక్ట్ ఫంక్షన్లను అమలు చేస్తుంది. ఏవైనా నిర్ధారణ ఉల్లంఘనలు ఉంటే, మూల్యాంకనంలో ఉన్న ప్రాపర్టీని ఉల్లంఘించే కాంక్రీట్ ఇన్పుట్ డేటాతో మీరు నివేదికను పొందాలి. విభిన్న సాధనాలతో ప్రాపర్టీ-ఆధారిత టెస్టింగ్ను అమలు చేయడం ప్రారంభించడానికి క్రింది కొన్ని మార్గదర్శకాలను చూడండి:
- స్లిదర్ తో స్మార్ట్ కాంట్రాక్ట్ల స్టాటిక్ అనాలిసిస్ (కొత్త ట్యాబ్లో తెరవబడుతుంది)
- Wake తో స్మార్ట్ కాంట్రాక్ట్ల స్టాటిక్ అనాలిసిస్ (కొత్త ట్యాబ్లో తెరవబడుతుంది)
- Brownie తో ప్రాపర్టీ-ఆధారిత టెస్టింగ్ (కొత్త ట్యాబ్లో తెరవబడుతుంది)
- Foundry తో కాంట్రాక్ట్లను ఫజ్జింగ్ చేయడం (కొత్త ట్యాబ్లో తెరవబడుతుంది)
- ఎకిడ్నా తో కాంట్రాక్ట్లను ఫజ్జింగ్ చేయడం (కొత్త ట్యాబ్లో తెరవబడుతుంది)
- Wake తో కాంట్రాక్ట్లను ఫజ్జింగ్ చేయడం (కొత్త ట్యాబ్లో తెరవబడుతుంది)
- మాంటికోర్ తో స్మార్ట్ కాంట్రాక్ట్ల సింబాలిక్ ఎగ్జిక్యూషన్ (కొత్త ట్యాబ్లో తెరవబడుతుంది)
- Mythril తో స్మార్ట్ కాంట్రాక్ట్ల సింబాలిక్ ఎగ్జిక్యూషన్ (కొత్త ట్యాబ్లో తెరవబడుతుంది)
స్మార్ట్ కాంట్రాక్ట్ల కోసం మాన్యువల్ టెస్టింగ్
స్మార్ట్ కాంట్రాక్ట్ల మాన్యువల్ టెస్టింగ్ తరచుగా ఆటోమేటెడ్ పరీక్షలను అమలు చేసిన తర్వాత అభివృద్ధి చక్రంలో వస్తుంది. ఈ రకమైన టెస్టింగ్ స్మార్ట్ కాంట్రాక్ట్ను ఒక పూర్తి సమీకృత ఉత్పత్తిగా అంచనా వేస్తుంది, ఇది సాంకేతిక అవసరాలలో పేర్కొన్న విధంగా పనిచేస్తుందో లేదో చూడటానికి.
స్థానిక బ్లాక్చైన్లో కాంట్రాక్ట్లను పరీక్షించడం
స్థానిక అభివృద్ధి వాతావరణంలో నిర్వహించబడే ఆటోమేటెడ్ టెస్టింగ్ ఉపయోగకరమైన డీబగ్గింగ్ సమాచారాన్ని అందించగలిగినప్పటికీ, ఉత్పత్తి వాతావరణంలో మీ స్మార్ట్ కాంట్రాక్ట్ ఎలా ప్రవర్తిస్తుందో మీరు తెలుసుకోవాలనుకుంటారు. అయితే, ప్రధాన ఎథీరియం చైన్కు డిప్లాయ్ చేయడానికి గ్యాస్ ఫీజులు చెల్లించాల్సి ఉంటుంది—మీ స్మార్ట్ కాంట్రాక్ట్లో ఇంకా బగ్లు ఉంటే మీరు లేదా మీ వినియోగదారులు నిజమైన డబ్బును కోల్పోవచ్చని ప్రత్యేకంగా చెప్పనవసరం లేదు.
స్థానిక బ్లాక్చైన్లో (దీనిని డెవలప్మెంట్ నెట్వర్క్ అని కూడా పిలుస్తారు) మీ కాంట్రాక్ట్ను పరీక్షించడం మెయిన్నెట్లో పరీక్షించడానికి సిఫార్సు చేయబడిన ప్రత్యామ్నాయం. స్థానిక బ్లాక్చైన్ అనేది మీ కంప్యూటర్లో స్థానికంగా నడుస్తున్న ఎథీరియం బ్లాక్చైన్ యొక్క కాపీ, ఇది ఎథీరియం యొక్క అమలు పొర ప్రవర్తనను అనుకరిస్తుంది. అందువల్ల, మీరు గణనీయమైన ఓవర్హెడ్ లేకుండా కాంట్రాక్ట్తో ఇంటరాక్ట్ అవ్వడానికి లావాదేవీలను ప్రోగ్రామ్ చేయవచ్చు.
స్థానిక బ్లాక్చైన్లో కాంట్రాక్ట్లను అమలు చేయడం మాన్యువల్ ఇంటిగ్రేషన్ టెస్టింగ్ రూపంగా ఉపయోగపడుతుంది. స్మార్ట్ కాంట్రాక్ట్లు అత్యంత కూర్చదగినవి, ఇవి ఇప్పటికే ఉన్న ప్రోటోకాల్లతో ఏకీకృతం కావడానికి మిమ్మల్ని అనుమతిస్తాయి—కానీ అటువంటి సంక్లిష్టమైన ఆన్చైన్ పరస్పర చర్యలు సరైన ఫలితాలను ఇస్తాయని మీరు ఇంకా నిర్ధారించుకోవాలి.
డెవలప్మెంట్ నెట్వర్క్ల గురించి మరింత.
టెస్ట్నెట్లలో కాంట్రాక్ట్లను పరీక్షించడం
టెస్ట్ నెట్వర్క్ లేదా టెస్ట్నెట్ ఎథీరియం మెయిన్నెట్ లాగానే పనిచేస్తుంది, అయితే ఇది వాస్తవ-ప్రపంచ విలువ లేని ఈథర్ (ETH) ను ఉపయోగిస్తుంది. మీ కాంట్రాక్ట్ను టెస్ట్నెట్ లో డిప్లాయ్ చేయడం అంటే నిధులను ప్రమాదంలో పడేయకుండా ఎవరైనా దానితో ఇంటరాక్ట్ అవ్వవచ్చు (ఉదా., dapp ఫ్రంటెండ్ ద్వారా).
వినియోగదారు కోణం నుండి మీ అప్లికేషన్ యొక్క ఎండ్-టు-ఎండ్ ఫ్లోను అంచనా వేయడానికి ఈ రకమైన మాన్యువల్ టెస్టింగ్ ఉపయోగపడుతుంది. ఇక్కడ, బీటా టెస్టర్లు ట్రయల్ రన్లను కూడా చేయవచ్చు మరియు కాంట్రాక్ట్ వ్యాపార లాజిక్ మరియు మొత్తం కార్యాచరణతో ఏవైనా సమస్యలను నివేదించవచ్చు.
స్థానిక బ్లాక్చైన్లో పరీక్షించిన తర్వాత టెస్ట్నెట్లో డిప్లాయ్ చేయడం అనువైనది ఎందుకంటే ఇది ఈథీరియం వర్చువల్ మెషీన్ (EVM) ప్రవర్తనకు దగ్గరగా ఉంటుంది. అందువల్ల, వాస్తవ-ప్రపంచ పరిస్థితులలో స్మార్ట్ కాంట్రాక్ట్ ఆపరేషన్ను అంచనా వేయడానికి అనేక ఎథీరియం-స్థానిక ప్రాజెక్ట్లు టెస్ట్నెట్లలో dappలను డిప్లాయ్ చేయడం సాధారణం.
ఎథీరియం టెస్ట్నెట్ల గురించి మరింత.
టెస్టింగ్ వర్సెస్ నియత ధృవీకరణ
కొన్ని డేటా ఇన్పుట్ల కోసం కాంట్రాక్ట్ ఆశించిన ఫలితాలను అందిస్తుందని నిర్ధారించడానికి టెస్టింగ్ సహాయపడినప్పటికీ, పరీక్షల సమయంలో ఉపయోగించని ఇన్పుట్ల కోసం ఇది ఖచ్చితంగా నిరూపించదు. అందువల్ల, స్మార్ట్ కాంట్రాక్ట్ను పరీక్షించడం "కార్యాచరణ ఖచ్చితత్వానికి" హామీ ఇవ్వదు (అంటే, ఇన్పుట్ విలువల యొక్క అన్ని సెట్లకు ప్రోగ్రామ్ అవసరమైన విధంగా ప్రవర్తిస్తుందని ఇది చూపదు).
నియత ధృవీకరణ అనేది ప్రోగ్రామ్ యొక్క ఫార్మల్ మోడల్ ఫార్మల్ స్పెసిఫికేషన్తో సరిపోలుతుందో లేదో తనిఖీ చేయడం ద్వారా సాఫ్ట్వేర్ ఖచ్చితత్వాన్ని అంచనా వేసే విధానం. ఫార్మల్ మోడల్ అనేది ప్రోగ్రామ్ యొక్క నైరూప్య గణిత ప్రాతినిధ్యం, అయితే ఫార్మల్ స్పెసిఫికేషన్ ప్రోగ్రామ్ యొక్క లక్షణాలను నిర్వచిస్తుంది (అంటే, ప్రోగ్రామ్ అమలు గురించి తార్కిక నిర్ధారణలు).
ప్రాపర్టీలు గణిత పరంగా వ్రాయబడినందున, సిస్టమ్ యొక్క ఫార్మల్ (గణిత) మోడల్ తార్కిక అనుమితి నియమాలను ఉపయోగించి స్పెసిఫికేషన్ను సంతృప్తి పరుస్తుందని ధృవీకరించడం సాధ్యమవుతుంది. అందువల్ల, నియత ధృవీకరణ సాధనాలు సిస్టమ్ ఖచ్చితత్వం యొక్క 'గణిత రుజువు'ను ఉత్పత్తి చేస్తాయని చెబుతారు.
టెస్టింగ్ వలె కాకుండా, నమూనా డేటాతో అమలు చేయాల్సిన అవసరం లేకుండా అన్ని అమలుల కోసం (అంటే, దానికి బగ్లు లేవు) స్మార్ట్ కాంట్రాక్ట్ అమలు ఫార్మల్ స్పెసిఫికేషన్ను సంతృప్తి పరుస్తుందని ధృవీకరించడానికి నియత ధృవీకరణను ఉపయోగించవచ్చు. ఇది డజన్ల కొద్దీ యూనిట్ పరీక్షలను అమలు చేయడానికి వెచ్చించే సమయాన్ని తగ్గించడమే కాకుండా, దాచిన దుర్బలత్వాలను పట్టుకోవడంలో కూడా మరింత ప్రభావవంతంగా ఉంటుంది. అయినప్పటికీ, నియత ధృవీకరణ పద్ధతులు వాటి అమలు కష్టం మరియు ఉపయోగం ఆధారంగా ఒక స్పెక్ట్రమ్లో ఉంటాయి.
స్మార్ట్ కాంట్రాక్ట్ల కోసం నియత ధృవీకరణ గురించి మరింత.
టెస్టింగ్ వర్సెస్ ఆడిట్లు మరియు బగ్ బౌంటీలు
చెప్పినట్లుగా, కఠినమైన టెస్టింగ్ కాంట్రాక్ట్లో బగ్లు లేవని అరుదుగా హామీ ఇస్తుంది; నియత ధృవీకరణ విధానాలు ఖచ్చితత్వం యొక్క బలమైన హామీలను అందించగలవు కానీ ప్రస్తుతం ఉపయోగించడం కష్టం మరియు గణనీయమైన ఖర్చులను కలిగి ఉంటాయి.
అయినప్పటికీ, స్వతంత్ర కోడ్ సమీక్షను పొందడం ద్వారా కాంట్రాక్ట్ దుర్బలత్వాలను పట్టుకునే అవకాశాన్ని మీరు మరింత పెంచుకోవచ్చు. స్మార్ట్ కాంట్రాక్ట్ ఆడిట్లు (కొత్త ట్యాబ్లో తెరవబడుతుంది) మరియు బగ్ బౌంటీలు (కొత్త ట్యాబ్లో తెరవబడుతుంది) మీ కాంట్రాక్ట్లను ఇతరులు విశ్లేషించేలా చేయడానికి రెండు మార్గాలు.
స్మార్ట్ కాంట్రాక్ట్లలో భద్రతా లోపాలు మరియు పేలవమైన అభివృద్ధి పద్ధతులను కనుగొనడంలో అనుభవజ్ఞులైన ఆడిటర్లచే ఆడిట్లు నిర్వహించబడతాయి. ఆడిట్లో సాధారణంగా టెస్టింగ్ (మరియు బహుశా నియత ధృవీకరణ) అలాగే మొత్తం కోడ్బేస్ యొక్క మాన్యువల్ సమీక్ష ఉంటుంది.
దీనికి విరుద్ధంగా, బగ్ బౌంటీ ప్రోగ్రామ్లో సాధారణంగా స్మార్ట్ కాంట్రాక్ట్లో దుర్బలత్వాన్ని కనుగొని డెవలపర్లకు వెల్లడించే వ్యక్తికి (సాధారణంగా వైట్హాట్ హ్యాకర్లు (కొత్త ట్యాబ్లో తెరవబడుతుంది) అని పిలుస్తారు) ఆర్థిక బహుమతిని అందించడం ఉంటుంది. స్మార్ట్ కాంట్రాక్ట్లలో లోపాలను కనుగొనడంలో సహాయం చేయమని ఇతరులను అడగడం ఇందులో ఉంటుంది కాబట్టి బగ్ బౌంటీలు ఆడిట్ల మాదిరిగానే ఉంటాయి.
ప్రధాన వ్యత్యాసం ఏమిటంటే, బగ్ బౌంటీ ప్రోగ్రామ్లు విస్తృత డెవలపర్/హ్యాకర్ కమ్యూనిటీకి తెరిచి ఉంటాయి మరియు ప్రత్యేక నైపుణ్యాలు మరియు అనుభవం ఉన్న విస్తృత తరగతి ఎథికల్ హ్యాకర్లు మరియు స్వతంత్ర భద్రతా నిపుణులను ఆకర్షిస్తాయి. పరిమిత లేదా ఇరుకైన నైపుణ్యం కలిగి ఉండే బృందాలపై ప్రధానంగా ఆధారపడే స్మార్ట్ కాంట్రాక్ట్ ఆడిట్ల కంటే ఇది ఒక ప్రయోజనం కావచ్చు.
టెస్టింగ్ సాధనాలు మరియు లైబ్రరీలు
యూనిట్ టెస్టింగ్ సాధనాలు
-
solidity-coverage (కొత్త ట్యాబ్లో తెరవబడుతుంది) - Solidity లో వ్రాయబడిన స్మార్ట్ కాంట్రాక్ట్ల కోసం కోడ్ కవరేజ్ సాధనం.
-
Waffle (కొత్త ట్యాబ్లో తెరవబడుతుంది) - అధునాతన స్మార్ట్ కాంట్రాక్ట్ అభివృద్ధి మరియు టెస్టింగ్ కోసం ఫ్రేమ్వర్క్ (Ethers.js ఆధారంగా).
-
Remix Tests (కొత్త ట్యాబ్లో తెరవబడుతుంది) - Solidity స్మార్ట్ కాంట్రాక్ట్లను పరీక్షించే సాధనం. కాంట్రాక్ట్ కోసం టెస్ట్ కేసులను వ్రాయడానికి మరియు అమలు చేయడానికి ఉపయోగించే Remix IDE "Solidity Unit Testing" ప్లగిన్ కింద పనిచేస్తుంది.
-
ఓపెన్జెప్పెలిన్ టెస్ట్ హెల్పర్స్ (కొత్త ట్యాబ్లో తెరవబడుతుంది) - ఎథీరియం స్మార్ట్ కాంట్రాక్ట్ టెస్టింగ్ కోసం అసెర్షన్ లైబ్రరీ. మీ కాంట్రాక్ట్లు ఆశించిన విధంగా ప్రవర్తించేలా చూసుకోండి!
-
Brownie యూనిట్ టెస్టింగ్ ఫ్రేమ్వర్క్ (కొత్త ట్యాబ్లో తెరవబడుతుంది) - Brownie Pytest ను ఉపయోగిస్తుంది, ఇది ఫీచర్-రిచ్ టెస్ట్ ఫ్రేమ్వర్క్, ఇది కనీస కోడ్తో చిన్న పరీక్షలను వ్రాయడానికి మిమ్మల్ని అనుమతిస్తుంది, పెద్ద ప్రాజెక్ట్ల కోసం బాగా స్కేల్ అవుతుంది మరియు అత్యంత విస్తరించదగినది.
-
Foundry Tests (కొత్త ట్యాబ్లో తెరవబడుతుంది) - Foundry Forge ను అందిస్తుంది, ఇది సాధారణ యూనిట్ పరీక్షలు, గ్యాస్ ఆప్టిమైజేషన్ తనిఖీలు మరియు కాంట్రాక్ట్ ఫజ్జింగ్ను అమలు చేయగల వేగవంతమైన మరియు సౌకర్యవంతమైన ఎథీరియం టెస్టింగ్ ఫ్రేమ్వర్క్.
-
Hardhat Tests (కొత్త ట్యాబ్లో తెరవబడుతుంది) - Ethers.js, Mocha మరియు Chai ఆధారంగా స్మార్ట్ కాంట్రాక్ట్లను పరీక్షించే ఫ్రేమ్వర్క్.
-
ApeWorx (కొత్త ట్యాబ్లో తెరవబడుతుంది) - ఈథీరియం వర్చువల్ మెషీన్ (EVM) ను లక్ష్యంగా చేసుకుని స్మార్ట్ కాంట్రాక్ట్ల కోసం Python-ఆధారిత అభివృద్ధి మరియు టెస్టింగ్ ఫ్రేమ్వర్క్.
-
Wake (కొత్త ట్యాబ్లో తెరవబడుతుంది) - ఉత్తమ వినియోగదారు అనుభవం మరియు పనితీరు కోసం pytest మరియు Anvil ను ఉపయోగించి, బలమైన డీబగ్గింగ్ సామర్థ్యాలు మరియు క్రాస్-చైన్ టెస్టింగ్ మద్దతుతో యూనిట్ టెస్టింగ్ మరియు ఫజ్జింగ్ కోసం Python-ఆధారిత ఫ్రేమ్వర్క్.
ప్రాపర్టీ-ఆధారిత టెస్టింగ్ సాధనాలు
స్టాటిక్ అనాలిసిస్ సాధనాలు
-
స్లిదర్ (కొత్త ట్యాబ్లో తెరవబడుతుంది) - దుర్బలత్వాలను కనుగొనడానికి, కోడ్ గ్రహణశక్తిని పెంచడానికి మరియు స్మార్ట్ కాంట్రాక్ట్ల కోసం అనుకూల విశ్లేషణలను వ్రాయడానికి Python-ఆధారిత Solidity స్టాటిక్ అనాలిసిస్ ఫ్రేమ్వర్క్.
-
Ethlint (కొత్త ట్యాబ్లో తెరవబడుతుంది) - Solidity స్మార్ట్ కాంట్రాక్ట్ ప్రోగ్రామింగ్ భాష కోసం శైలి మరియు భద్రతా ఉత్తమ పద్ధతులను అమలు చేయడానికి లింటర్.
-
Cyfrin Aderyn (కొత్త ట్యాబ్లో తెరవబడుతుంది) - Web3 స్మార్ట్ కాంట్రాక్ట్ భద్రత మరియు అభివృద్ధి కోసం ప్రత్యేకంగా రూపొందించబడిన Rust-ఆధారిత స్టాటిక్ ఎనలైజర్.
-
Wake (కొత్త ట్యాబ్లో తెరవబడుతుంది) - దుర్బలత్వం మరియు కోడ్ నాణ్యత డిటెక్టర్లు, కోడ్ నుండి ఉపయోగకరమైన సమాచారాన్ని సేకరించే ప్రింటర్లు మరియు అనుకూల సబ్మాడ్యూల్లను వ్రాయడానికి మద్దతుతో Python-ఆధారిత స్టాటిక్ అనాలిసిస్ ఫ్రేమ్వర్క్.
-
Slippy (కొత్త ట్యాబ్లో తెరవబడుతుంది) - Solidity కోసం సరళమైన మరియు శక్తివంతమైన లింటర్.
డైనమిక్ అనాలిసిస్ సాధనాలు
-
ఎకిడ్నా (కొత్త ట్యాబ్లో తెరవబడుతుంది) - ప్రాపర్టీ-ఆధారిత టెస్టింగ్ ద్వారా స్మార్ట్ కాంట్రాక్ట్లలో దుర్బలత్వాలను గుర్తించడానికి వేగవంతమైన కాంట్రాక్ట్ ఫజ్జర్.
-
Diligence Fuzzing (కొత్త ట్యాబ్లో తెరవబడుతుంది) - స్మార్ట్ కాంట్రాక్ట్ కోడ్లో ప్రాపర్టీ ఉల్లంఘనలను గుర్తించడానికి ఉపయోగపడే ఆటోమేటెడ్ ఫజ్జింగ్ సాధనం.
-
మాంటికోర్ (కొత్త ట్యాబ్లో తెరవబడుతుంది) - EVM బైట్కోడ్ను విశ్లేషించడానికి డైనమిక్ సింబాలిక్ ఎగ్జిక్యూషన్ ఫ్రేమ్వర్క్.
-
Mythril (కొత్త ట్యాబ్లో తెరవబడుతుంది) - టెయింట్ అనాలిసిస్, కాంకోలిక్ అనాలిసిస్ మరియు కంట్రోల్ ఫ్లో చెకింగ్ ఉపయోగించి కాంట్రాక్ట్ దుర్బలత్వాలను గుర్తించడానికి EVM బైట్కోడ్ అసెస్మెంట్ సాధనం.
-
Diligence Scribble (కొత్త ట్యాబ్లో తెరవబడుతుంది) - Scribble అనేది స్పెసిఫికేషన్ లాంగ్వేజ్ మరియు రన్టైమ్ వెరిఫికేషన్ సాధనం, ఇది Diligence Fuzzing లేదా MythX వంటి సాధనాలతో కాంట్రాక్ట్లను స్వయంచాలకంగా పరీక్షించడానికి మిమ్మల్ని అనుమతించే ప్రాపర్టీలతో స్మార్ట్ కాంట్రాక్ట్లను ఉల్లేఖించడానికి మిమ్మల్ని అనుమతిస్తుంది.
సంబంధిత ట్యుటోరియల్స్
- విభిన్న టెస్టింగ్ ఉత్పత్తుల యొక్క అవలోకనం మరియు పోలిక _
- స్మార్ట్ కాంట్రాక్ట్లను పరీక్షించడానికి ఎకిడ్నాను ఎలా ఉపయోగించాలి
- స్మార్ట్ కాంట్రాక్ట్ బగ్లను కనుగొనడానికి మాంటికోర్ను ఎలా ఉపయోగించాలి
- స్మార్ట్ కాంట్రాక్ట్ బగ్లను కనుగొనడానికి స్లిదర్ను ఎలా ఉపయోగించాలి
- టెస్టింగ్ కోసం Solidity కాంట్రాక్ట్లను ఎలా మాక్ చేయాలి
- Foundry ని ఉపయోగించి Solidity లో యూనిట్ పరీక్షలను ఎలా అమలు చేయాలి (కొత్త ట్యాబ్లో తెరవబడుతుంది)
తదుపరి పఠనం
- ఎథీరియం స్మార్ట్ కాంట్రాక్ట్లను పరీక్షించడానికి లోతైన గైడ్ (కొత్త ట్యాబ్లో తెరవబడుతుంది)
- ఎథీరియం స్మార్ట్ కాంట్రాక్ట్లను ఎలా పరీక్షించాలి (కొత్త ట్యాబ్లో తెరవబడుతుంది)
- డెవలపర్ల కోసం MolochDAO యొక్క యూనిట్ టెస్టింగ్ గైడ్ (కొత్త ట్యాబ్లో తెరవబడుతుంది)
- రాక్స్టార్ లాగా స్మార్ట్ కాంట్రాక్ట్లను ఎలా పరీక్షించాలి (కొత్త ట్యాబ్లో తెరవబడుతుంది)
ట్యుటోరియల్స్: ఎథీరియంలో స్మార్ట్ కాంట్రాక్ట్ టెస్టింగ్
- స్థానిక, బహుళ-క్లయింట్ టెస్ట్నెట్లో dApp ని ఎలా అభివృద్ధి చేయాలి మరియు పరీక్షించాలి – స్థానిక టెస్ట్నెట్కు స్మార్ట్ కాంట్రాక్ట్ను డిప్లాయ్ చేయడం మరియు పరీక్షలు చేయడం యొక్క వాక్త్రూ.
- టెస్టింగ్ కోసం Solidity స్మార్ట్ కాంట్రాక్ట్లను ఎలా మాక్ చేయాలి – మాక్ డేటాను ఎలా ఉపయోగించాలి మరియు యూనిట్ టెస్టింగ్ను ఎలా అమలు చేయాలి అనే దానిపై ఇంటర్మీడియట్ ట్యుటోరియల్.
- స్మార్ట్ కాంట్రాక్ట్లను పరీక్షించడానికి ఎకిడ్నాను ఎలా ఉపయోగించాలి – ఫజ్జింగ్ మరియు స్మార్ట్ కాంట్రాక్ట్ టెస్టింగ్కు అధునాతన విధానం.