#OperatorApproved
Explore tagged Tumblr posts
Text

Equip for Victory: Unleash the Power of Precision with Our Tactical Gear.
#TacticalAdvantage#GearUpForAction#StrategicGear#ReadyForAnything#TacticalEssentials#MissionReady#PrecisionGear#FieldReady#CombatReady#TacticalEdge#GearForHeroes#OperatorApproved#StrategicPreparedness#BattleReady#MissionCriticalGear
0 notes
Text
استاندارد توکن ERC-721 چیست و روش ایجاد توکن ساده ارز دیجیتال

استاندارد توکن ERC-721 چیست و روش ایجاد توکن ساده ارز دیجیتال:در این مطلب سعی شده توکن با استاندارد ERC-721 را مورد ارزیابی قرار داده و نبود قابلیت جایگزینی و ساخت این توکن شرح داده شود.
توکن ERC-721 چیست؟
در آغاز لازم است به معرفی توکن ERC-721 بپردازیم. استاندارد این توکن، استاندارد توکن اتریوم است و این امکان را فراهم می سازد که توکن های غیر قابل جایگزینی روی بلاک چین اتریوم ایجاد شوند. این فرایند مطابق عملکرد توکنERC-20 است که به ایجاد توکن های قابل جایگزین ��مک می کند. اگر به خاطر داشته باشید CryptoKitties نوعی بازی می باشد. این توکن غیر قابل جایگزینی است به این معنا که هر دارایی Kitty یا همان گربه شما منحصر به فرد است. قابلیت جایگزینی (Fungibility) چیست؟

پیش از اینکه به معرفی و توضیح قابلیت عدم جایگزینی بپردازیم. لازم است قابلیت جایگزینی توضیح داده شود. این قابلیت دارای دو ویژگی است که در ادامه به آن پرداخته ایم: 1. قابلیت معاوضه کردن: یک دارایی قابل معاوضه به شما این امکان را می دهد که دارایی خود را با دارایی برابری معاوضه یا جا به جا نمایید. به طور مثال: دو اسکناس ده دلاری از ارزش یکسانی برخوردار هستند، می توانید آن دو را با هم معاوضه کنید، در حالی که در ارزش آن ها تغییری ایجاد نشود. یا در مثالی: دیگر شما می توانید دو شمش طلا دو کیلوگرمی را با هم معاوضه کنید، زیرا از ارزش یکسانی برخوردار هستند. 2. مقدار: یک واحد قابل جایگزینی به شما این امکان را می دهد که واحدهای آن را ادغام کنید. این کار به افزایش ارزش دارایی شما از نظر کمیت و مقدار کمک می کند. به طور مثال: با جمع کرد تعداد زیادی غلات، تعداد زیادی از آن را دارا خواهید بود. مطالعه بیشتر :آموزش تصویری ساخت توکن ارزدیجیتال در شبکه اتریوم عدم قابلیت جایگزینی(nonfungibility) چیست؟

در این قسمت به تعریف و معرفی توکن غیر قابل جایگزینی می پردازیم. در این توکن یا توجه به منحصر بودن هر واحد امکان جمع و تفریق پذیری وجود ندارد. توکن غیر قابل جایگزین یک توکن منحصر به فرد است. به عنوان مثال: با در نظر گرفتن دو قطعه زمین منحصر به فرد با موقعیت های متفاوت، این دو زمین غیر قابل جایگزینی هستند. در اینجا سعی شده از توکن غیر قابل جایگزین، مثالی آورده شود: در دنیا گسترده توکن ها، توکن های غیر قابل جایگزین زیادی وجود دارند. از جمله: CryptoKitties، Etheremons، Crypto Bots و Blockchain Cuties همچنین شما می توانید از طریق این لینک، لیستی از توکن های ERC-72 را بررسی کنید. استاندارد ERC-721 این استاندارد، یکی از استانداردهای مهمی است و مجموعه ای از روش ها را تعریف می کند که به شناسایی و تعامل با یک توکن غیر قابل جایگزین کمک می کند. رویداد ها(Events) این رویدادها در انتقال و تأییدها صادر می شوند. عملکردهای ERC-721 این عملکرد موجودی یک آدرس را برمی گرداند. : balance of : Owner ofاین عملکرد آدرس مالک یک توکن را برمی گرداند. safeTransferFrom : این عملکرد پس از انجام بررسی و اطمینان حاصل کردن از اینکه گیرنده می تواند پذیرای توکن فرستاده شده باشد، توکن را از یک آدرس به آدرس دیگر انتقال می دهد به گونه ای که توکن منهدم یا گم نشود. transferFrom : این عملکرد نیز توکن را از آدرسی به آدرس دیگر منتقل می کند. این در حالی است که دعوت کننده این روش مسئول گذاشتن آدرس صحیح گیرنده می باشد. استفاده از این روش توصیه نمی شود. Approve : این عملکرد تمامی تراکنش هایی که برای ارسال یک تراکنش از اکانت مالک توکن به اکانت دیگر وجود دارند را تصویب می کند. setApprovalForAll : این عملکرد صادر کننده مجوز اپراتور ها(هر آدرسی، اکثرا کیف پول ها و صرافی ها) برای ارسال توکن ها از آدرسی به آدرس دیگری می باشد. getApproved : با این عملکرد شما می توانید آدرسی را که مجاز به انتقال توکن برای مالکان می باشد بر گردانید یا آدرسی را که تنظیم نشده باشد برگردانید. isApprovedForAll : این عملکرد در صورت تأیید اپراتور (آدرس) مورد نظر توسط مالک،True (درست) را بر میگرداند. pragma solidity ^0.4.20;interface ERC721 /* is ERC165 */ {event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId);event Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId);event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved);function balanceOf(address _owner) external view returns (uint256);function ownerOf(uint256 _tokenId) external view returns (address);function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes data) external payable;function safeTransferFrom(address _from, address _to, uint256 _tokenId) external payable;function transferFrom(address _from, address _to, uint256 _tokenId) external payable;function approve(address _approved, uint256 _tokenId) external payable;function setApprovalForAll(address _operator, bool _approved) external;function getApproved(uint256 _tokenId) external view returns (address);function isApprovedForAll(address _owner, address _operator) external view returns (bool);} چگونگی ساخت یک توکنERC-721 با استفاده از OpenZeppelin و Truffle

در این قسمت سعی کردیم شیوه ساخت توکن ERC-721 را با استفاده از کتابخانه Truffleو Openzeppelin آموزش دهیم. در مرحله اول به سازمان دادن Truffle می پردازیم: mkdir simple truffle init npm install openzeppelin-solidity ابتدا برای نمونه توکن مورد نظر خود، قرار داد جدیدی ایجاد می کنیم: pragma solidity ^0.4.24;import “/openzeppelin-solidity/contracts/token/ERC721/ERC721Full.sol”; import “/openzeppelin-solidity/contracts/ownership/Ownable.sol”;contract SIMPLEToken is ERC721Full, Ownable{ constructor() ERC721Full(“SIMPLE”, “SMPL”) public {}function mint(address to, uint256 tokenId) public onlyOwner { _mint(to, tokenId); }function _mint(address to) public onlyOwner{ mint(to, totalSupply().add(1)); }} با دقت به این مرحله متوجه می شوید که ما در حال دریافت دو قرارداد ERC-721FULL و Ownable هستیم. قرارداد Ownable چیست؟ این قرارداد به ما کمک خواهد کرد که به مدیریت مالکیت قراردادمان بپردازیم و با استفاده از این قرارداد تنها قادر خواهیم بود توکن ها را از اکانت مالک ایجاد کنیم. قرارداد ERC-721FULL چیست؟ این اعمال استاندارد سطح کاربری ERC-721 می باشد که پیش از این نیز به آن اشاره کردیم. در ادامه به اتفاق هایی که در طول این قرارداد روی می دهد می پردازیم: pragma solidity ^0.4.24;import “./ERC721.sol”; import “./ERC721Enumerable.sol”; import “./ERC721Metadata.sol”; contract ERC721Full is ERC721, ERC721Enumerable, ERC721Metadata { constructor(string name, string symbol) ERC721Metadata(name, symbol) public { } } قرارداد ERC-721 خود سه قرارداد دیگر را شامل می شود. با بررسی و مطالعه این قرارداد، سعی داریم تا به درک این پیاده سازی کمک کنیم: اجازه دهید مرحله به مرحله از عملکرد اصلی گذر کنیم. قبل از آن باید درک کنیم که توکن ها چگونه ذخیره می شوند: // Mapping from token ID to owner mapping (uint256 => address) private _tokenOwner;// Mapping from token ID to approved address mapping (uint256 => address) private _tokenApprovals;// Mapping from owner to number of owned token mapping (address => uint256) private _ownedTokensCount;// Mapping from owner to operator approvals mapping (address => mapping (address => bool)) private _operatorApprovals; tokenOwner : این طراحی به منظور ذخیره یک توکن در برابر مالک خود طراحی شده است. با استفاده از این طراحی، می توان دریافت مالک یک tokenld کیست. tokenApprovals : در هر جابه جایی که برای توکن ها صورت می گیرد، این طراحی مورد نیاز است. با استفاده از این طراحی tokenld را می توان در آدرس ارائه شده توسط مالک ذخیره کرد. از این طریق می توان توکن را انتقال داد. ownedTokenCount : با استفاده از این طراحی شما قادر خواهید بود، از تعداد توکن هایی که یک آدرس مالک آن می باشد، مطلع شوید. در صورت عدم ایجاد این طراحی، برای دستیابی به اطلاعات ذکر شده مجبور به ایجاد حلقه خواهیم بود که این این حلقه نیازمند gas زیادی در EVM می باشد. operatorApprovals : این طراحی برای بررسی تأیید یا عدم تأیید مالک ایجاد شده است. در ادامه عملکردها را به طور کامل توضیح خواهیم داد: balanceOf - این عملکرد قادر خواهد بود موجودی یک آدرس را بازگرداند. در راستای این عمل ابتدا به جستجو یک آدرس معتبر می پردازد و پس از آن با استفاده از ownedTokenCount شمار توکن را باز می گرداند. function balanceOf(address owner) public view returns (uint256) { require(owner != address(0)); return _ownedTokensCount; } -OwnerOf:این عملکرد با استفاده از طراحی tokenOwner آدرس مالک را برای یک توکن مورد نظر باز می گرداند. function ownerOf(uint256 tokenId) public view returns (address) { address owner = _tokenOwner; require(owner != address(0)); return owner; } -Approve: این عملکرد به تصویب یک آدرس برای انتقال توکن مورد نظر به خاطر مالک می پردازد. در مرحله اول این عملکرد بررسی می کند که آیا مالک توکن موجب دعوت این عملکرد شده است یا اینکه این عملکرد توسط مالک برای تمامی توکن ها در نظر گرفته شده ؟ پس از آن، اگر تمام مراحل طی شده به خوبی پشت سر گذاشته شود، طراحی tokenApprovals را به روزرسانی می کند. function approve(address to, uint256 tokenId) public { address owner = ownerOf(tokenId); require(to != owner); require(msg.sender == owner || isApprovedForAll(owner, msg.sender));_tokenApprovals = to; emit Approval(owner, to, tokenId); } -safeTransferFrom :از میان عملکرد های ذکر شده دو عملکرد مجزا وجود دارند که دارای نام های مشابهی می باشند، اما موضوعات مورد بحث آن ها کاملا متفاوت است. دو عملکرد نام برده به صورت داخلی عملکرد transferfrom نام گزاری می شوند. این دو، وظیفه مهم دیگری را نیز انجام می دهند. آن عملکردها اعتبار آدرس گیرنده را برای دریافت و انتقال توکن بررسی می کنند. این اقدام امنیت توکن را بالاتر می برد. function safeTransferFrom( address from, address to, uint256 tokenId, bytes _data ) public { transferFrom(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data)); } -transferFrom: این مورد اصلی ترین عملکرد برای انتقال توکن از یک آدرس به آدرس دیگر است. اجازه دهید ببینیم که این عملکرد چه چیزی انجام می دهد: • مشخص می کند که توکن به مالکیت called رسیده با به دعوت کننده یا caller، approved شده است. علاوه بر این اعتبار آدرس را نیز بررسی می کند. • حذف مالکیت فعلی، تصویب واضح، کم کردن شمار توکن ملک فعلی • افزودن توکن به یک اکانت گیرنده و بالا بردن شمار توکن برای گیرنده. function transferFrom( address from, address to, uint256 tokenId ) public { require(_isApprovedOrOwner(msg.sender, tokenId)); require(to != address(0));_clearApproval(from, tokenId); _removeTokenFrom(from, tokenId); _addTokenTo(to, tokenId);emit Transfer(from, to, tokenId); } setApprovalForAll-: این عملکرد، وظیف تأیید آدرس را برای انتقال توکن ها به مالک آن ها داراست. در اولین مرحله، آدرس called و to را برای تأیید عدم تشابه بررسی کرده و پس از آن operatorApprovals را به روزرسانی می کند. function setApprovalForAll(address to, bool approved) public { require(to != msg.sender); _operatorApprovals = approved; emit ApprovalForAll(msg.sender, to, approved); } -isApprovedForAll: این عملکرد وظیفه دارد بررسی کند آیا owner ، operator را برای جا به جایی توکن ها به مالکی دیگر تأیید می کند یا نه. function isApprovedForAll( address owner, address operator ) public view returns (bool) { return _operatorApprovals; } -getApproved: این عملکرد قابلیت این را دارد که آدرس تأیید شده را برای tokenld تعیین شده باز گرداند. function getApproved(uint256 tokenId) public view returns (address) { require(_exists(tokenId)); return _tokenApprovals; } همچنین شما قادر خواهید بود که سایر عملکردهای کمک کننده قرارداد های دریافت شده را بررسی کنید. چگونگی امتحان کردن توکن 721-ERC در این قسمت چگونگی امتحان و بررسی توکن ایجاد شده، آموزش داده شده است. قابل ذکر است که نصب و تست قرارداد به وسیله یک بلاکچین محلی، انجام خواهد شد. truffle develop این گزینه قابلیت فراهم کردن میز فرمان Truffle را داراست. در ادامه به نصب قرارداد ذکر شده می پردازیم. در این راستا لازم است یک فایل migration را به محتوای ایجاد شده بیافزاییم. در نهایت، قادر خواهید بود به بررسی مخزن GitHub بپردازید. truffle compile migrate –reset SIMPLEToken.deployed().then((simple) => {token = simple;}) در این مرحله در ابتدا تعدادی توکن ایجاد می کنیم و پس از آن به تست انتقال و تأیید آن خواهیم پرداخت. oken._mint(web3.eth.accounts) // will mint a new tokentoken.totalSupply() // check token’s total supplytoken.safeTransferFrom(web3.eth.accounts , web3.eth.accounts, 1) // transfer token (token id 1) from 0’th account to 1st accounttoken.ownerOf(1) // check owner of token id 1token._mint(web3.eth.accounts) // will mint another tokentoken.approve(web3.eth.accounts , 2) // approve token id 2 to accounttoken.safeTransferFrom(web3.eth.accounts , web3.eth.accounts, 2 , {from:web3.eth.accounts}) // Note that we are adding {from:web3.eth.accounts}, this mean that we are invoking this function using account علاوه بر روش ذکر شده، می توانید تمام روش های موجود را تست کنید. openZeppelin کتابخانه ای است که از هر لحاظ مورد تست و بررسی قرار گرفته و می توانید به آسانی از عملکرد آن اطمینان حاصل کنید. نتیجه در طی این مقاله با استفاده ازSolidity توانستیم روی اتریوم یک توکن غیر قابل جایگزین را طراحی و در نهایت راه اندازی کنیم. توکن های ایجاد شده در زمینه های مختلفی از جمله فعالیت های هنری، املاک، گواهینامه ها، وام ها و... کاربرد دارند. دیگر کاربرد این توکن ها، صنعت بازی می باشد که در این پلتفرم ها قابل استفاده است Read the full article
0 notes