EIP-1271: స్మార్ట్ కాంట్రాక్ట్ సంతకాలపై సంతకం చేయడం మరియు వాటిని ధృవీకరించడం
EIP-1271 (opens in a new tab) ప్రమాణం స్మార్ట్ కాంట్రాక్ట్లను సంతకాలను ధృవీకరించడానికి అనుమతిస్తుంది.
ఈ ట్యుటోరియల్లో, మేము డిజిటల్ సంతకాలపై అవలోకనాన్ని, EIP-1271 యొక్క నేపథ్యం, మరియు Safe (opens in a new tab) (గతంలో Gnosis Safe) ఉపయోగించే EIP-1271 యొక్క నిర్దిష్ట అమలు గురించి వివరిస్తాము. అన్నీ కలిపి, మీ స్వంత కాంట్రాక్ట్లలో EIP-1271ని అమలు చేయడానికి ఇది ఒక ప్రారంభ స్థానంగా ఉపయోగపడుతుంది.
సంతకం అంటే ఏమిటి?
ఈ సందర్భంలో, ఒక సంతకం (మరింత ఖచ్చితంగా, ఒక "డిజిటల్ సంతకం") అనేది ఒక సందేశంతో పాటు, ఆ సందేశం ఒక నిర్దిష్ట వ్యక్తి/పంపినవారు/చిరునామా నుండి వచ్చిందని నిరూపించే ఒక రకమైన రుజువు.
ఉదాహరణకు, ఒక డిజిటల్ సంతకం ఈ విధంగా ఉండవచ్చు:
- సందేశం: “నేను నా ఇతీరియం వాలెట్తో ఈ వెబ్సైట్లోకి లాగిన్ అవ్వాలనుకుంటున్నాను.”
- సంతకం చేసినవారు: నా చిరునామా
0x000… - రుజువు: నేను,
0x000…, ఈ మొత్తం సందేశాన్ని వాస్తవానికి సృష్టించానని చెప్పడానికి ఇక్కడ కొంత రుజువు ఉంది (ఇది సాధారణంగా క్రిప్టోగ్రాఫిక్కు సంబంధించినది).
ఒక డిజిటల్ సంతకంలో "సందేశం" మరియు "సంతకం" రెండూ ఉంటాయని గమనించడం ముఖ్యం.
ఎందుకు? ఉదాహరణకు, మీరు నాకు సంతకం చేయడానికి ఒక కాంట్రాక్ట్ ఇస్తే, ఆపై నేను సంతకం పేజీని కత్తిరించి మిగిలిన కాంట్రాక్ట్ లేకుండా నా సంతకాలను మాత్రమే మీకు తిరిగి ఇస్తే, ఆ కాంట్రాక్ట్ చెల్లుబాటు కాదు.
అదే విధంగా, అనుబంధ సందేశం లేకుండా డిజిటల్ సంతకానికి అర్థం ఉండదు!
EIP-1271 ఎందుకు ఉంది?
ఇథీరియం-ఆధారిత బ్లాక్చెయిన్లపై ఉపయోగించడానికి ఒక డిజిటల్ సంతకాన్ని సృష్టించడానికి, మీకు సాధారణంగా మరెవ్వరికీ తెలియని ఒక రహస్య ప్రైవేట్ కీ అవసరం. ఇదే మీ సంతకాన్ని, మీదిగా చేస్తుంది (రహస్య కీ గురించి తెలియకుండా మరెవరూ అదే సంతకాన్ని సృష్టించలేరు).
మీ ఇతీరియం ఖాతాకు (అంటే, మీ బాహ్య-యాజమాన్య ఖాతా/EOA) ఒక ప్రైవేట్ కీ అనుబంధించబడి ఉంటుంది, మరియు ఒక వెబ్సైట్ లేదా డాప్ మిమ్మల్ని సంతకం కోసం అడిగినప్పుడు (ఉదాహరణకు, “ఇథీరియంతో లాగిన్ అవ్వండి” కోసం) సాధారణంగా ఈ ప్రైవేట్ కీ ఉపయోగించబడుతుంది.
ఒక యాప్, ethers.js వంటి మూడవ-పక్ష లైబ్రరీని ఉపయోగించి, మీ ప్రైవేట్ కీ తెలియకుండానే (opens in a new tab) మీరు సృష్టించిన సంతకాన్ని ధృవీకరించగలదు (opens in a new tab) మరియు సంతకాన్ని సృష్టించింది మీరే అని నమ్మకంగా ఉండవచ్చు.
వాస్తవానికి, EOA డిజిటల్ సంతకాలు పబ్లిక్-కీ క్రిప్టోగ్రఫీని ఉపయోగిస్తాయి కాబట్టి, వాటిని ఆఫ్చైన్లో ఉత్పత్తి చేసి, ధృవీకరించవచ్చు! గ్యాస్లేని DAO ఓటింగ్ ఇలాగే పనిచేస్తుంది — ఆన్చైన్లో ఓట్లను సమర్పించడానికి బదులుగా, క్రిప్టోగ్రాఫిక్ లైబ్రరీలను ఉపయోగించి డిజిటల్ సంతకాలను ఆఫ్చైన్లో సృష్టించి ధృవీకరించవచ్చు.
EOA ఖాతాలకు ప్రైవేట్ కీ ఉన్నప్పటికీ, స్మార్ట్ కాంట్రాక్ట్ ఖాతాలకు ఎలాంటి ప్రైవేట్ లేదా రహస్య కీ ఉండదు (కాబట్టి "ఇథీరియంతో లాగిన్ అవ్వండి", మొదలైనవి స్మార్ట్ కాంట్రాక్ట్ ఖాతాలతో సహజంగా పనిచేయవు).
EIP-1271 పరిష్కరించాలని లక్ష్యంగా పెట్టుకున్న సమస్య: స్మార్ట్ కాంట్రాక్ట్ సంతకంలో చేర్చడానికి దాని వద్ద ఏ “రహస్యం” లేకపోతే, ఒక స్మార్ట్ కాంట్రాక్ట్ సంతకం చెల్లుబాటు అవుతుందని మనకు ఎలా తెలుస్తుంది?
EIP-1271 ఎలా పనిచేస్తుంది?
సందేశాలపై సంతకం చేయడానికి ఉపయోగించే ప్రైవేట్ కీలు స్మార్ట్ కాంట్రాక్ట్లకు ఉండవు. అలాంటప్పుడు ఒక సంతకం ప్రామాణికమైనదని మనకు ఎలా తెలుస్తుంది?
అయితే, ఒక ఆలోచన ఏంటంటే, ఒక సంతకం ప్రామాణికమైనదా కాదా అని మనం స్మార్ట్ కాంట్రాక్ట్నే అడగవచ్చు!
EIP-1271 చేసేది ఏమిటంటే, ఇచ్చిన సంతకం చెల్లుబాటు అవుతుందా అని స్మార్ట్ కాంట్రాక్ట్ను “అడగడం” అనే ఈ ఆలోచనను ఇది ప్రామాణీకరిస్తుంది.
EIP-1271ని అమలు చేసే ఒక కాంట్రాక్ట్ తప్పనిసరిగా isValidSignature అనే ఫంక్షన్ను కలిగి ఉండాలి, ఇది ఒక సందేశాన్ని మరియు ఒక సంతకాన్ని తీసుకుంటుంది. ఆ తర్వాత కాంట్రాక్ట్ కొంత ధృవీకరణ లాజిక్ను అమలు చేయగలదు (స్పెసిఫికేషన్ ఇక్కడ నిర్దిష్టంగా దేనినీ అమలు చేయదు) ఆపై సంతకం చెల్లుబాటు అవుతుందో లేదో సూచించే ఒక విలువను తిరిగి ఇవ్వగలదు.
isValidSignature ఒక చెల్లుబాటు అయ్యే ఫలితాన్ని తిరిగి ఇస్తే, అది దాదాపుగా కాంట్రాక్ట్ “అవును, నేను ఈ సంతకం + సందేశాన్ని ఆమోదిస్తున్నాను!” అని చెప్పినట్లే.
ఇంటర్ఫేస్
EIP-1271 స్పెసిఫికేషన్లోని ఖచ్చితమైన ఇంటర్ఫేస్ ఇక్కడ ఉంది (మనం కింద _hash పరామితి గురించి మాట్లాడుతాము, కానీ ప్రస్తుతానికి, దీనిని ధృవీకరించబడుతున్న సందేశంగా భావించండి):
1pragma solidity ^0.5.0;2
3contract ERC1271 {4
5 // బైట్లు4(keccak256("isValidSignature(bytes32,bytes)"))6 bytes4 constant internal MAGICVALUE = 0x1626ba7e;7
8 /**9 * @dev అందించిన సంతకం, అందించిన హాష్కు చెల్లుబాటు అవుతుందో లేదో తిరిగి ఇవ్వాలి10 * @param _hash సంతకం చేయవలసిన డేటా యొక్క హాష్11 * @param _signature _hashతో అనుబంధించబడిన సంతకం బైట్ అర్రే12 *13 * ఫంక్షన్ పాస్ అయినప్పుడు తప్పనిసరిగా బైట్లు4 మ్యాజిక్ విలువ 0x1626ba7eని తిరిగి ఇవ్వాలి.14 * స్థితిని మార్చకూడదు (solc < 0.5 కోసం STATICCALL ఉపయోగించి, solc > 0.5 కోసం వ్యూ మోడిఫైయర్)15 * బాహ్య కాల్స్ను అనుమతించాలి16 */17 function isValidSignature(18 bytes32 _hash,19 bytes memory _signature)20 public21 view22 returns (bytes4 magicValue);23}ఉదాహరణ EIP-1271 అమలు: Safe
కాంట్రాక్ట్లు isValidSignatureని అనేక విధాలుగా అమలు చేయగలవు — స్పెసిఫికేషన్ ఖచ్చితమైన అమలు గురించి పెద్దగా చెప్పదు.
EIP-1271ని అమలు చేసే ఒక ముఖ్యమైన కాంట్రాక్ట్ Safe (గతంలో Gnosis Safe).
Safe కోడ్లో, సంతకాలను రెండు విధాలుగా (opens in a new tab) సృష్టించి, ధృవీకరించగలిగేలా isValidSignature అమలు చేయబడింది (opens in a new tab):
- ఆన్చైన్ సందేశాలు
- సృష్టి: ఒక సురక్షిత యజమాని ఒక సందేశాన్ని “సంతకం చేయడానికి” ఒక కొత్త సురక్షిత లావాదేవీని సృష్టిస్తాడు, సందేశాన్ని డేటాగా లావాదేవీలోకి పంపుతాడు. మల్టీసిగ్ పరిమితిని చేరుకోవడానికి తగినంత మంది యజమానులు లావాదేవీపై సంతకం చేసిన తర్వాత, లావాదేవీ ప్రసారం చేయబడి, అమలు చేయబడుతుంది. లావాదేవీలో,
signMessage(bytes calldata _data)అని పిలువబడే ఒక సురక్షిత ఫంక్షన్ ఉంది, ఇది సందేశాన్ని "ఆమోదించబడిన" సందేశాల జాబితాకు జతచేస్తుంది. - ధృవీకరణ: Safe కాంట్రాక్ట్పై
isValidSignatureకి కాల్ చేయండి, మరియు ధృవీకరించాల్సిన సందేశాన్ని సందేశ పరామితిగా మరియు సంతకం పరామితి కోసం ఒక ఖాళీ విలువను (opens in a new tab) (అంటే,0x) పంపండి. Safe సంతకం పరామితి ఖాళీగా ఉందని చూసి, సంతకాన్ని క్రిప్టోగ్రాఫికల్గా ధృవీకరించడానికి బదులుగా, సందేశం “ఆమోదించబడిన” సందేశాల జాబితాలో ఉందో లేదో తనిఖీ చేయాలని దానికి తెలుస్తుంది.
- సృష్టి: ఒక సురక్షిత యజమాని ఒక సందేశాన్ని “సంతకం చేయడానికి” ఒక కొత్త సురక్షిత లావాదేవీని సృష్టిస్తాడు, సందేశాన్ని డేటాగా లావాదేవీలోకి పంపుతాడు. మల్టీసిగ్ పరిమితిని చేరుకోవడానికి తగినంత మంది యజమానులు లావాదేవీపై సంతకం చేసిన తర్వాత, లావాదేవీ ప్రసారం చేయబడి, అమలు చేయబడుతుంది. లావాదేవీలో,
- ఆఫ్చైన్ సందేశాలు:
- సృష్టి: ఒక సురక్షిత యజమాని ఆఫ్చైన్లో ఒక సందేశాన్ని సృష్టిస్తాడు, ఆపై మల్టీసిగ్ ఆమోద పరిమితిని అధిగమించడానికి తగినంత సంతకాలు అయ్యే వరకు ఇతర సురక్షిత యజమానులచే ఒక్కొక్కరిగా సందేశంపై సంతకం చేయిస్తాడు.
- ధృవీకరణ:
isValidSignatureకి కాల్ చేయండి. సందేశ పరామితిలో, ధృవీకరించాల్సిన సందేశాన్ని పంపండి. సంతకం పరామితిలో, ప్రతి సురక్షిత యజమాని యొక్క వ్యక్తిగత సంతకాలను ఒకదాని తర్వాత ఒకటిగా కలిపి పంపండి. Safe పరిమితిని చేరుకోవడానికి తగినంత సంతకాలు ఉన్నాయని మరియు ప్రతి సంతకం చెల్లుబాటు అవుతుందని తనిఖీ చేస్తుంది. అలా అయితే, అది విజయవంతమైన సంతకం ధృవీకరణను సూచించే ఒక విలువను తిరిగి ఇస్తుంది.
_hash పరామితి అంటే ఖచ్చితంగా ఏమిటి? మొత్తం సందేశాన్ని ఎందుకు పంపకూడదు?
EIP-1271 ఇంటర్ఫేస్ (opens in a new tab)లోని isValidSignature ఫంక్షన్ సందేశాన్ని నేరుగా కాకుండా, బదులుగా ఒక _hash పరామితిని తీసుకుంటుందని మీరు గమనించి ఉండవచ్చు. దీని అర్థం ఏమిటంటే, isValidSignatureకు పూర్తి ఏకపక్ష-పొడవు గల సందేశాన్ని పంపడానికి బదులుగా, మనం బదులుగా సందేశం యొక్క 32-బైట్ హాష్ (సాధారణంగా keccak256) ను పంపుతాము.
కాల్డేటా యొక్క ప్రతి బైట్ — అంటే, ఒక స్మార్ట్ కాంట్రాక్ట్ ఫంక్షన్కు పంపిన ఫంక్షన్ పరామితి డేటా — 16 గ్యాస్ (సున్నా బైట్ అయితే 4 గ్యాస్) ఖర్చు అవుతుంది (opens in a new tab), కాబట్టి సందేశం పొడవుగా ఉంటే ఇది చాలా గ్యాస్ను ఆదా చేస్తుంది.
మునుపటి EIP-1271 స్పెసిఫికేషన్లు
అమలులో కొన్ని EIP-1271 స్పెసిఫికేషన్లు ఉన్నాయి, వీటిలో isValidSignature ఫంక్షన్ మొదటి పరామితి bytes రకంతో (స్థిర-పొడవు bytes32కి బదులుగా, ఏకపక్ష-పొడవు) మరియు పరామితి పేరు messageతో ఉంటుంది. ఇది EIP-1271 ప్రమాణం యొక్క ఒక పాత వెర్షన్ (opens in a new tab).
నా స్వంత కాంట్రాక్ట్లలో EIP-1271ని ఎలా అమలు చేయాలి?
ఇక్కడ స్పెసిఫికేషన్ చాలా స్వేచ్ఛాయుతమైనది. Safe అమలులో కొన్ని మంచి ఆలోచనలు ఉన్నాయి:
- మీరు కాంట్రాక్ట్ యొక్క "యజమాని" నుండి వచ్చే EOA సంతకాలను చెల్లుబాటు అయ్యేవిగా పరిగణించవచ్చు.
- మీరు ఆమోదించబడిన సందేశాల జాబితాను నిల్వ చేసి, వాటిని మాత్రమే చెల్లుబాటు అయ్యేవిగా పరిగణించవచ్చు.
చివరికి, కాంట్రాక్ట్ డెవలపర్గా ఇది మీ ఇష్టం!
ముగింపు
EIP-1271 (opens in a new tab) అనేది ఒక బహుముఖ ప్రమాణం, ఇది స్మార్ట్ కాంట్రాక్ట్లను సంతకాలను ధృవీకరించడానికి అనుమతిస్తుంది. ఇది స్మార్ట్ కాంట్రాక్ట్లు EOAల వలె ఎక్కువగా ప్రవర్తించడానికి మార్గం సుగమం చేస్తుంది — ఉదాహరణకు "ఇథీరియంతో లాగిన్ అవ్వండి" స్మార్ట్ కాంట్రాక్ట్లతో పనిచేయడానికి ఒక మార్గాన్ని అందిస్తుంది — మరియు దీనిని అనేక విధాలుగా అమలు చేయవచ్చు (Safe పరిగణించదగ్గ ఒక క్లిష్టమైన, ఆసక్తికరమైన అమలును కలిగి ఉంది).
పేజీ చివరి అప్డేట్: 3 మార్చి, 2026