استاندارد توکنسازی TRC-20، استانداردی برای انتشار توکن در شبکه ترون (TRON) است. این استاندارد از نظر فنی بسیار شبیه استاندارد ERC-20 است با این تفاوت که ERC-20 استاندارد توسعه توکن بر شبکه بلاکچین اتریوم است؛ اما TRC-20 برای انتشار توکن بر بستر شبکه بلاکچینی ترون کاربرد دارد.
در ادامه با آکادمی مزدکس همراه باشید تا اطلاعات بیشتری در مورد این استاندارد کسب کنیم.
TRC-20 چیست؟
TRC-20 یک استاندارد توکنسازی برای پیادهسازی قراردادهای هوشمند بر بستر شبکه بلاکچینی ترون است. استاندارد TRC20 قوانینی را تعریف میکند که هر توکن در شبکه ترون باید از آنها پیروی کند. درواقع استانداردهای توکن، توابع و دستوراتی لازم برای پیادهسازی قراردادهای هوشمند در شبکه بلاکچینی کاربرد دارد، از جمله این دستورات میتوان به توابع صدور توکنهای جدید، تأیید صدور توکنهای جدید، ارسال، دریافت و معاوضه توکنها و غیره اشاره کرد.
شبکه ترون بهعنوان رقیب شبکه اتریوم که مزیت خود را در سرعت بیشتر، کارمزد کمتر و عملکرد بهینهتر در پردازش تراکنشها میداند، استانداردی همانند ERC-20 نیز برای خود توسعه داده تا بتواند در تمامی جنبهها منجمله پشتیبانی از قراردادهای هوشمند، شانهبهشانه رقیب خود جلو بیاید.
تمامی توکنهای تعریفشده در شبکه ترون، توسط کیفپول رسمی این شبکه پشتیبانی میشود. همانند شبکه اتریوم، توابع اجباری موجود در این شبکه شامل totalSupply ،balanceOf ،transfer ،approve،
transferFrom و allowance است و در کنار این موارد، فیلدهای اختیاری همانند نام توکن و سمبل توکن و میزان خردشوندگی توکن نیز وجود دارد. درواقع TRON بهعنوان یک نسخه بهشدت مشابه شبکه اتریوم، مزیت خود را در کارمزدهای کمتر و سرعت بالاتر تراکنشها نسبت به شبکه اتریوم میداند.
ازآنجاییکه ماشین مجازی TRON یا همان سامانه اجرای قرارداد هوشمند ترون، از همان زبان توسعه قراردادهای هوشمند شبکه اتریوم به نام سالیدیتی استفاده میکند، تمامی توکنها و قراردادهای هوشمند موجود در شبکه ترون بهصورت کامل با شبکه اتریوم سازوکار هستند.
ماشین مجازی ترون در واقع یک نمونه مشابه از EVM شبکه اتریوم است که قدری بهینهسازی شده است. هدف از توسعه TVM، ارائه بستری برای توسعه dApp بهصورتی آسان، امن و قابل توسعه به میلیونهای توسعهدهنده بلاکچینی است.
پیش از راهاندازی TVM در سال 2018 نیز این شبکه بر روی توسعه توابعی برای بهبود امنیت و کاربردپذیری پروتکل خود کار میکرد. TVM، شبکه ترون را با حفظ TPS) Transaction per second) بالای خود، امنتر و مقاومتر کرد. همچنین ماشین مجازی ترون، این شبکه را با شبکه اتریوم، سازگار کرد.
این شبکه رمزارز بومی خود به نام TRX را داشته که امکان استفاده بسیاری از خدمات این پلتفرم را محیا میکند. کاربران این شبکه، بایستی کارمزد استفاده از این خدمات را در قالب TRX پرداخت کنند.
استاندارد TRC-20، به مجموعه قواعد و دستورالعملهایی اشاره دارد که برای انتشار توکن جدید در شبکه ترون باید از آنها پیروی کرد. ازآنجاییکه شبکه ترون، یک شبکه بلاکچینی عمومی است، همه افراد میتوانند نسبت به تولید و عرضه توکن منطبق بر استاندارد TRC-20 اقدام کنند. تمامی توکنهای TRC-20 میتوانند به آسانی با کلیه توکنها و برنامههای کاربردی توزیع شده در شبکه ترون، تعامل داشته باشند.
برخلاف شبکه اتریوم که مدتی است از الگوریتم اجماع اثبات کار یا همان PoW به الگوریتم اثبات سهام یا همان PoS مهاجرت کرده، شبکه ترون همچنان از نوعی از اثبات سهام به نام DPoS استفاده میکند. متوسط زمان ثبت هر بلاک در شبکه ترون در حدود 3 ثانیه است.
توسعه توکن منطبق بر استاندارد TRC-20
میتوان توکنهای جدید TRC-20 را بر روی وبسایت ترون به آدرس https://developers.tron.network/ ایجاد کرد. برای این منظور توسعهدهندگان بایستی کد قرارداد هوشمند TRC-20 را آماده کنند که این امر نیاز به مهارت برنامهنویسی به زبان سالیدیتی دارد. بعد از توسعه و ایجاد قرارداد هوشمند توکن، قرارداد بر روی شبکه ترون مستقر شده و توکنها منتشر میشوند.
به منظور انتشار، معاوضه، انتقال و نگهداری توکن در شبکه ترون و کیفپول این شبکه، تمامی توکنهای TRC20 از 6 مشخصه و نیازمندی الزامی و 3 مورد اختیاری پیروی میکنند.
در ادامه ابتدا 3 تابع اختیاری و سپس 6 تابع الزامی و نحوه کارکرد آنها به همراه کد توسعه آن آورده شده است:
نام توکن یا Token Name
string public constant name = “TRONEuropeRewardCoin”;
سمبل و نام مخفف توکن
برای مثال، TERC مخفف نام توکن TRONEuropeRewardCoin است. با اینکه TERC و TRONEuropeRewardCoin به یک توکن واحد اشاره دارند، اما نام TERC سادهتر و رایجتر است.
string public constant symbol = “TERC”;
اعشار توکن (میزان خردشوندگی توکن)
اعشار توکن در واقع کمترین میزانی را نشان میدهد که یک توکن میتواند خرد شود. برای نمونه اعشار صفر بدان معناست که کمتر از یک واحد از آن توکن نداریم اما اعشار 2 بدان معناست که توکن تا دو رقم اعشار (مثلاً ۰.۰۱) میتواند خرد شود. حداکثر این میزان 18 در نظر گرفته شده است.
uint8 public constant decimals = 6;
کد زیر، نسخه خلاصه شده کد قرارداد هوشمند TRC20 است:
contract TRC20 {
function totalSupply() constant returns (uint theTotalSupply);
function balanceOf(address _owner) constant returns (uint balance);
function transfer(address _to, uint _value) returns (bool success);
function transferFrom(address _from, address _to, uint _value) returns (bool success);
function approve(address _spender, uint _value) returns (bool success);
function allowance(address _owner, address _spender) constant returns (uint remaining);
event Transfer(address indexed _from, address indexed _to, uint _value);
event Approval(address indexed _owner, address indexed _spender, uint _value);}
تابع totalSupply
این تابع تعداد کل توکنهای قابل عرضه را تعیین میکند. برای نمونه این عدد در شبکه بیت کوین 21 میلیون واحد است.
contract MyTRCToken {
uint256 _totalSupply = 1000000;
function totalSupply() constant returns (uint256 theTotalSuppl{
theTotalSupply = _totalSupply;
return theTotalSupply;
}
}
تابع balanceOf
این تابع موجودی یک آدرس خاص را برمیگرداند.
contract MyTRCToken {
mapping(address => uint256) balances;
address public owner; // Owner of this contract function balanceOf(address _owner) constant returns (uint256 balance) {
return balances[_owner];
}
}
تابع transfer
از این تابع برای انتقال مقداری توکن از یک قرارداد هوشمند به یک آدرس مشخص استفاده میشود.
contract MyTRCToken {
mapping(address => uint256) balances;
function transfer(address _to, uint256 _amount) returns (bool success) {
if (balances[msg.sender] >= _amount && _amount > 0 && balances[_to] + _amount > balances[_to]) {
balances[msg.sender] -= _amount;
balances[_to] += _amount;
Transfer(msg.sender, _to, _amount); // trigger event
return true;
} else {
return false;
}
}
}
تابع approve
این تابع برای اعطای مجوز به یک واسطه و نهاد ثالث همانند یک قرارداد هوشمند یا یک dApp برای برداشت از یک حساب کاربرد دارد.
contract MyTRCToken {
mapping(address => mapping (address => uint256)) allowed;
function approve(address _spender, uint256 _amount) returns (bool success) {
allowed[msg.sender][_spender] = _amount;
// msg.sender is the third party's account
Approval(msg.sender, _spender, _amount);
// trigger event return true;
}
}
تابع transferFrom
این تابع برای انتقال توکن از یک حساب به حسابی دیگر توسط عاملی غیر از مالک حساب کاربرد دارد. حساب مالک بایستی ابتداً عامل سوم را برای برداشت از حساب خود تایید کند.
contract MyTRCToken {
mapping(address => uint256) balances;
function transferFrom(address _from, address _to, uint256 _amount) returns (bool success) {
if (balances[_from] >= _amount && allowed[_from][msg.sender] >= _amount && _amount > 0 && balances[_to] + _amount > balances[_to]) {
balances[_from] -= _amount;
balances[_to] += _amount;
Transfer(_from, _to, _amount);
return true;
} else {
return false;
}
}
}
تابع allowance
این تابع برای به دست آوردن باقیمانده توکنهایی است که عامل سوم میتواند از حساب مالک برداشت کند. تابع Approve() به یک نهاد سوم اجازه برداشت از یک حساب میدهد و پسازآن، عامل سوم با استفاده از تابع transferFrom() میتواند از آن آدرس که متعلق به فرد دیگری است، برداشت کند و به کمک تابع allowance() میتوان از موجودی آن حساب اطلاع به دست آورد.
کلام آخر
توکنهای منطبق بر استاندارد TRC-20 از بسیاری از ابعاد فنی، مشابه توکنهای ERC-20 هستند. بااینحال، با توجه به اینکه شبکه بلاکچین اتریوم اغلب با مشکل تراکم، ترافیک و ازدحام تراکنش روبروست و به همین دلیل عموماً شبکه از کارمزدهای بالا و در نتیجه تجربه کاربری ضعیف رنج میبرد، توکنهای مبتنی بر Tron از حیث سرعت و هزینه، راهحل مناسبی را ارائه میدهند که در بین بسیاری از کاربران محبوب شده است، بهویژه برای کسانی که با استیبل کوین فعالیت میکنند.
لینک کوتاه کپی شد https://mazdax.ir/academy/?p=8238