ERC-1363 செலுத்தக்கூடிய வில்லை தரநிலை
அறிமுகம்
ERC-1363 என்றால் என்ன?
ERC-1363 என்பது ERC-20 வில்லைகளுக்கான நீட்டிப்பு இடைமுகமாகும், இது பரிமாற்றங்களுக்குப் பிறகு பெறுநர் ஒப்பந்தத்தில் அல்லது ஒப்புதல்களுக்குப் பிறகு செலவழிப்பவர் ஒப்பந்தத்தில் தனிப்பயன் தர்க்கத்தை இயக்க ஆதரிக்கிறது, இவை அனைத்தும் ஒரே பரிவர்த்தனைக்குள் நடக்கும்.
ERC-20 இலிருந்து வேறுபாடுகள்
நிலையான ERC-20 செயல்பாடுகளான transfer, transferFrom மற்றும் approve போன்றவை, தனிப் பரிவர்த்தனை இல்லாமல் பெறுநர் அல்லது செலவழிப்பவர் ஒப்பந்தத்தில் குறியீட்டை இயக்க அனுமதிக்காது.
பயனர்கள் முதல் பரிவர்த்தனை செயல்படுத்தப்படும் வரை காத்திருந்து, பின்னர் இரண்டாவதைச் சமர்ப்பிக்க வேண்டியிருப்பதால், இது UI மேம்பாட்டில் சிக்கலையும் தத்தெடுப்பதில் உராய்வையும் அறிமுகப்படுத்துகிறது.
அவர்கள் எரிவாயுவை இரண்டு முறை செலுத்த வேண்டும்.
ERC-1363 ஆனது பூஞ்சையக்கூடிய வில்லைகளை (fungible tokens) செயல்களை எளிதாகச் செய்யவும், எந்தவொரு புறச்சங்கிலி (offchain) கேட்பானையும் பயன்படுத்தாமல் செயல்படவும் உதவுகிறது. இது ஒரு பரிமாற்றம் அல்லது ஒப்புதலுக்குப் பிறகு, பெறுநர் அல்லது செலவழிப்பவர் ஒப்பந்தத்தில் ஒரே பரிவர்த்தனையில் திரும்ப அழைப்பை (callback) மேற்கொள்ள அனுமதிக்கிறது.
முன்நிபந்தனைகள்
இந்தப் பக்கத்தை நன்கு புரிந்துகொள்ள, முதலில் இவற்றைப் பற்றிப் படிக்குமாறு பரிந்துரைக்கிறோம்:
உள்ளடக்கம்
ERC-1363 ஆனது transfer, transferFrom அல்லது approve ஆகியவற்றிற்குப் பிறகு திறன் ஒப்பந்தங்களுடன் தொடர்புகொள்வதற்கு ERC-20 வில்லைகளுக்கான நிலையான API-ஐ அறிமுகப்படுத்துகிறது.
இந்தத் தரநிலையானது வில்லைகளைப் பரிமாற்றம் செய்வதற்கான அடிப்படைச் செயல்பாட்டை வழங்குகிறது, அத்துடன் வில்லைகளுக்கு ஒப்புதல் அளிப்பதன் மூலம் அவற்றை மற்றொரு சங்கிலிசார் மூன்றாம் தரப்பினரால் செலவழிக்க அனுமதிக்கிறது, பின்னர் பெறுநர் அல்லது செலவழிப்பவர் ஒப்பந்தத்தில் திரும்ப அழைப்பை மேற்கொள்ளவும் அனுமதிக்கிறது.
ERC-1363 திரும்ப அழைப்புகளை ஏற்கக்கூடிய திறன் ஒப்பந்தங்களின் பல முன்மொழியப்பட்ட பயன்பாடுகள் உள்ளன.
எடுத்துக்காட்டுகள்:
- கூட்டவிற்பனைகள் (Crowdsales): அனுப்பப்படும் வில்லைகள் உடனடி வெகுமதி ஒதுக்கீட்டைத் தூண்டுகின்றன.
- சேவைகள்: கட்டணம் செலுத்துதல் ஒரே படியில் சேவை அணுகலைச் செயல்படுத்துகிறது.
- விலைப்பட்டியல்கள்: வில்லைகள் விலைப்பட்டியல்களைத் தானாகவே தீர்க்கின்றன.
- சந்தாக்கள்: வருடாந்திர விகிதத்தை அங்கீகரிப்பது முதல் மாதக் கட்டணத்திலேயே சந்தாவைச் செயல்படுத்துகிறது.
இந்தக் காரணங்களுக்காக இது முதலில் "செலுத்தக்கூடிய வில்லை (Payable Token)" என்று பெயரிடப்பட்டது.
திரும்ப அழைக்கும் நடத்தை அதன் பயன்பாட்டை மேலும் விரிவுபடுத்துகிறது, இது போன்ற தடையற்ற தொடர்புகளைச் செயல்படுத்துகிறது:
- பங்குவைத்தல்: பரிமாற்றம் செய்யப்பட்ட வில்லைகள் பங்குவைத்தல் ஒப்பந்தத்தில் தானியங்கிப் பூட்டுதலைத் தூண்டுகின்றன.
- வாக்களிப்பு: பெறப்பட்ட வில்லைகள் ஆளுகை அமைப்பில் வாக்குகளைப் பதிவு செய்கின்றன.
- பரிமாற்றம் (Swapping): வில்லை ஒப்புதல்கள் ஒரே படியில் பரிமாற்றத் தர்க்கத்தைச் செயல்படுத்துகின்றன.
ஒரு பரிமாற்றம் அல்லது ஒப்புதல் பெறப்பட்ட பிறகு திரும்ப அழைப்பைச் செயல்படுத்தத் தேவையான அனைத்து நிகழ்வுகளிலும் குறிப்பிட்ட பயன்பாடுகளுக்கு ERC-1363 வில்லைகளைப் பயன்படுத்தலாம். வில்லைகளைக் கையாளும் பெறுநரின் திறனைச் சரிபார்ப்பதன் மூலம் திறன் ஒப்பந்தங்களில் வில்லை இழப்பு அல்லது வில்லைப் பூட்டப்படுவதைத் தவிர்க்கவும் ERC-1363 பயனுள்ளதாக இருக்கும்.
பிற ERC-20 நீட்டிப்பு முன்மொழிவுகளைப் போலல்லாமல், ERC-1363 ஆனது ERC-20 இன் transfer மற்றும் transferFrom முறைகளை மேலெழுதாது, மேலும் ERC-20 உடன் பின்தங்கிய இணக்கத்தன்மையைப் பராமரித்துச் செயல்படுத்த வேண்டிய இடைமுக ஐடிகளை (IDs) வரையறுக்கிறது.
EIP-1363 (opens in a new tab) இலிருந்து:
முறைகள்
ERC-1363 தரநிலையைச் செயல்படுத்தும் திறன் ஒப்பந்தங்கள் கட்டாயமாக ERC1363 இடைமுகத்தில் உள்ள அனைத்துச் செயல்பாடுகளையும், அத்துடன் ERC20 மற்றும் ERC165 இடைமுகங்களையும் செயல்படுத்த வேண்டும்.
pragma solidity ^0.8.0;
/**
* @title ERC1363
* @dev `transfer` அல்லது `transferFrom`-க்குப் பிறகு பெறுநர் ஒப்பந்தத்தில் குறியீட்டை இயக்குவதை, அல்லது ஒரே பரிவர்த்தனையில் `approve`-க்குப் பிறகு செலவழிப்பவர் ஒப்பந்தத்தில் குறியீட்டை இயக்குவதை ஆதரிக்கும் ERC-20 வில்லைகளுக்கான நீட்டிப்பு இடைமுகம்.
*/
interface ERC1363 is ERC20, ERC165 {
/*
* குறிப்பு: இந்த இடைமுகத்திற்கான ERC-165 அடையாளங்காட்டி 0xb0202a11 ஆகும்.
* 0xb0202a11 ===
* bytes4(keccak256('transferAndCall(address,uint256)')) ^
* bytes4(keccak256('transferAndCall(address,uint256,bytes)')) ^
* bytes4(keccak256('transferFromAndCall(address,address,uint256)')) ^
* bytes4(keccak256('transferFromAndCall(address,address,uint256,bytes)')) ^
* bytes4(keccak256('approveAndCall(address,uint256)')) ^
* bytes4(keccak256('approveAndCall(address,uint256,bytes)'))
*/
/**
* @dev அழைப்பாளரின் கணக்கிலிருந்து `to`-க்கு `value` அளவு வில்லைகளை நகர்த்துகிறது
* பின்னர் `to`-வில் `ERC1363Receiver::onTransferReceived`-ஐ அழைக்கிறது.
* @param to வில்லைகள் பரிமாற்றம் செய்யப்படும் முகவரி.
* @param value பரிமாற்றம் செய்யப்பட வேண்டிய வில்லைகளின் அளவு.
* @return பிழை எறியப்படாவிட்டால் செயல்பாடு வெற்றிகரமாக முடிந்தது என்பதைக் குறிக்கும் பூலியன் மதிப்பு.
*/
function transferAndCall(address to, uint256 value) external returns (bool);
/**
* @dev அழைப்பாளரின் கணக்கிலிருந்து `to`-க்கு `value` அளவு வில்லைகளை நகர்த்துகிறது
* பின்னர் `to`-வில் `ERC1363Receiver::onTransferReceived`-ஐ அழைக்கிறது.
* @param to வில்லைகள் பரிமாற்றம் செய்யப்படும் முகவரி.
* @param value பரிமாற்றம் செய்யப்பட வேண்டிய வில்லைகளின் அளவு.
* @param data `to`-க்கான அழைப்பில் அனுப்பப்படும், குறிப்பிட்ட வடிவமைப்பு இல்லாத கூடுதல் தரவு.
* @return பிழை எறியப்படாவிட்டால் செயல்பாடு வெற்றிகரமாக முடிந்தது என்பதைக் குறிக்கும் பூலியன் மதிப்பு.
*/
function transferAndCall(address to, uint256 value, bytes calldata data) external returns (bool);
/**
* @dev கொடுப்பனவு (allowance) பொறிமுறையைப் பயன்படுத்தி `from`-லிருந்து `to`-க்கு `value` அளவு வில்லைகளை நகர்த்துகிறது
* பின்னர் `to`-வில் `ERC1363Receiver::onTransferReceived`-ஐ அழைக்கிறது.
* @param from வில்லைகளை அனுப்ப வேண்டிய முகவரி.
* @param to வில்லைகள் பரிமாற்றம் செய்யப்படும் முகவரி.
* @param value பரிமாற்றம் செய்யப்பட வேண்டிய வில்லைகளின் அளவு.
* @return பிழை எறியப்படாவிட்டால் செயல்பாடு வெற்றிகரமாக முடிந்தது என்பதைக் குறிக்கும் பூலியன் மதிப்பு.
*/
function transferFromAndCall(address from, address to, uint256 value) external returns (bool);
/**
* @dev கொடுப்பனவு (allowance) பொறிமுறையைப் பயன்படுத்தி `from`-லிருந்து `to`-க்கு `value` அளவு வில்லைகளை நகர்த்துகிறது
* பின்னர் `to`-வில் `ERC1363Receiver::onTransferReceived`-ஐ அழைக்கிறது.
* @param from வில்லைகளை அனுப்ப வேண்டிய முகவரி.
* @param to வில்லைகள் பரிமாற்றம் செய்யப்படும் முகவரி.
* @param value பரிமாற்றம் செய்யப்பட வேண்டிய வில்லைகளின் அளவு.
* @param data `to`-க்கான அழைப்பில் அனுப்பப்படும், குறிப்பிட்ட வடிவமைப்பு இல்லாத கூடுதல் தரவு.
* @return பிழை எறியப்படாவிட்டால் செயல்பாடு வெற்றிகரமாக முடிந்தது என்பதைக் குறிக்கும் பூலியன் மதிப்பு.
*/
function transferFromAndCall(address from, address to, uint256 value, bytes calldata data) external returns (bool);
/**
* @dev அழைப்பாளரின் வில்லைகளில் `spender`-க்கான கொடுப்பனவாக `value` அளவு வில்லைகளை அமைக்கிறது
* பின்னர் `spender`-இல் `ERC1363Spender::onApprovalReceived`-ஐ அழைக்கிறது.
* @param spender நிதியைச் செலவழிக்கும் முகவரி.
* @param value செலவழிக்கப்பட வேண்டிய வில்லைகளின் அளவு.
* @return பிழை எறியப்படாவிட்டால் செயல்பாடு வெற்றிகரமாக முடிந்தது என்பதைக் குறிக்கும் பூலியன் மதிப்பு.
*/
function approveAndCall(address spender, uint256 value) external returns (bool);
/**
* @dev அழைப்பாளரின் வில்லைகளில் `spender`-க்கான கொடுப்பனவாக `value` அளவு வில்லைகளை அமைக்கிறது
* பின்னர் `spender`-இல் `ERC1363Spender::onApprovalReceived`-ஐ அழைக்கிறது.
* @param spender நிதியைச் செலவழிக்கும் முகவரி.
* @param value செலவழிக்கப்பட வேண்டிய வில்லைகளின் அளவு.
* @param data `spender`-க்கான அழைப்பில் அனுப்பப்படும், குறிப்பிட்ட வடிவமைப்பு இல்லாத கூடுதல் தரவு.
* @return பிழை எறியப்படாவிட்டால் செயல்பாடு வெற்றிகரமாக முடிந்தது என்பதைக் குறிக்கும் பூலியன் மதிப்பு.
*/
function approveAndCall(address spender, uint256 value, bytes calldata data) external returns (bool);
}
interface ERC20 {
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
function transfer(address to, uint256 value) external returns (bool);
function transferFrom(address from, address to, uint256 value) external returns (bool);
function approve(address spender, uint256 value) external returns (bool);
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function allowance(address owner, address spender) external view returns (uint256);
}
interface ERC165 {
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
transferAndCall அல்லது transferFromAndCall வழியாக ERC-1363 வில்லைகளை ஏற்க விரும்பும் திறன் ஒப்பந்தம் கட்டாயமாக ERC1363Receiver இடைமுகத்தைச் செயல்படுத்த வேண்டும்:
/**
* @title ERC1363Receiver
* @dev ERC-1363 வில்லை ஒப்பந்தங்களிலிருந்து `transferAndCall` அல்லது `transferFromAndCall`-ஐ ஆதரிக்க விரும்பும் எந்தவொரு ஒப்பந்தத்திற்குமான இடைமுகம்.
*/
interface ERC1363Receiver {
/**
* @dev `operator` மூலம் `from`-லிருந்து `ERC1363::transferAndCall` அல்லது `ERC1363::transferFromAndCall` வழியாக இந்த ஒப்பந்தத்திற்கு ERC-1363 வில்லைகள் பரிமாற்றம் செய்யப்படும்போதெல்லாம், இந்தச் செயல்பாடு அழைக்கப்படுகிறது.
*
* குறிப்பு: பரிமாற்றத்தை ஏற்க, இது
* `bytes4(keccak256("onTransferReceived(address,address,uint256,bytes)"))`
* (அதாவது 0x88a7ca5c, அல்லது அதன் சொந்த செயல்பாடு தேர்வி) என்பதை வழங்க வேண்டும்.
*
* @param operator `transferAndCall` அல்லது `transferFromAndCall` செயல்பாட்டை அழைத்த முகவரி.
* @param from வில்லைகள் எங்கிருந்து பரிமாற்றம் செய்யப்படுகின்றனவோ அந்த முகவரி.
* @param value பரிமாற்றம் செய்யப்பட்ட வில்லைகளின் அளவு.
* @param data குறிப்பிட்ட வடிவமைப்பு இல்லாத கூடுதல் தரவு.
* @return பிழை எறியப்படாமல் பரிமாற்றம் அனுமதிக்கப்பட்டால் `bytes4(keccak256("onTransferReceived(address,address,uint256,bytes)"))`.
*/
function onTransferReceived(address operator, address from, uint256 value, bytes calldata data) external returns (bytes4);
}
approveAndCall வழியாக ERC-1363 வில்லைகளை ஏற்க விரும்பும் திறன் ஒப்பந்தம் கட்டாயமாக ERC1363Spender இடைமுகத்தைச் செயல்படுத்த வேண்டும்:
/**
* @title ERC1363Spender
* @dev ERC-1363 வில்லை ஒப்பந்தங்களிலிருந்து `approveAndCall`-ஐ ஆதரிக்க விரும்பும் எந்தவொரு ஒப்பந்தத்திற்குமான இடைமுகம்.
*/
interface ERC1363Spender {
/**
* @dev ஒரு ERC-1363 வில்லைகளின் `owner` தங்களது வில்லைகளைச் செலவழிக்க `ERC1363::approveAndCall` வழியாக இந்த ஒப்பந்தத்திற்கு ஒப்புதல் அளிக்கும்போதெல்லாம், இந்தச் செயல்பாடு அழைக்கப்படுகிறது.
*
* குறிப்பு: ஒப்புதலை ஏற்க, இது
* `bytes4(keccak256("onApprovalReceived(address,uint256,bytes)"))`
* (அதாவது 0x7b04a2d0, அல்லது அதன் சொந்த செயல்பாடு தேர்வி) என்பதை வழங்க வேண்டும்.
*
* @param owner `approveAndCall` செயல்பாட்டை அழைத்த மற்றும் முன்பு வில்லைகளைச் சொந்தமாகக் கொண்டிருந்த முகவரி.
* @param value செலவழிக்கப்பட வேண்டிய வில்லைகளின் அளவு.
* @param data குறிப்பிட்ட வடிவமைப்பு இல்லாத கூடுதல் தரவு.
* @return பிழை எறியப்படாமல் ஒப்புதல் அனுமதிக்கப்பட்டால் `bytes4(keccak256("onApprovalReceived(address,uint256,bytes)"))`.
*/
function onApprovalReceived(address owner, uint256 value, bytes calldata data) external returns (bytes4);
}
மேலும் படிக்க
- ERC-1363: செலுத்தக்கூடிய வில்லை தரநிலை (opens in a new tab)
- ERC-1363: GitHub களஞ்சியம் (opens in a new tab)
பக்கம் கடைசியாகப் புதுப்பிக்கப்பட்டது: 4 ஏப்ரல், 2025