Launchpad教程之前端发布ERC20合约

Launchpad教程之前端发布ERC20合约
ERC20

在看这篇教程之前你需要了解

1.ERC20协议的相关abi

2.合约的bytecode获取

在我们有了一个整体框架和连接相关钱包后,接下来就前端和合约交互了

用ethers.js发布合约

我们用ether.js的相关api来一键发布我们的合约,如ERC20或是Launchpad合约,下面有两种方式

  • 前端用合约的bytecode发布

合约在remix编译后,获取它的bytecode,使用以下api来发布合约

let factory = new ContractFactory(abi, bytecode, signer);//signer=provider.getSigner();	
const contract = await factory.deploy(..values,options)//values为构造函数中的参数
let address = contract.address;//获取合约地址
let hash = contract.deployTransaction.hash;//交易hash
await contract.deployTransaction.wait();
await contract.value;
  • 用合约创建合约

用已经发布的合约,类似工厂方法,创建合约,后面我们在airdrop合约发布时会讲到

Pinksale中的标准ERC20合约

以下为pinksale中ERC20的构造函数

  constructor(
        string memory name_,
        string memory symbol_,
        uint8 decimals_,
        uint256 totalSupply_,
        address serviceFeeReceiver_,
        uint256 serviceFee_
    ) payable {
        _name = name_;
        _symbol = symbol_;
        _decimals = decimals_;
        _mint(owner(), totalSupply_);
        emit TokenCreated(owner(), address(this), TokenType.standard, VERSION);
        payable(serviceFeeReceiver_).transfer(serviceFee_);
    }

name_:为ERC20的名字

symbol_:为ERC20的简称

decimals_:为ERC20的小数点后面的位数(俗称几个0)。注:decimals的转换很重要,因为平时说的一个eth或者1个bnb,实际单位都是ETH。前端转solidity中时,需要将ETH单位转为WEI;从solidity合约取数在前端展示时,需要将WEI转为ETH。转换关系跟decimals有关:

  • ETH->WEI:
ethers.utils.parseUnits(number, decimals)
  • WEI->ETH:
ethers.utils.formatUnits(number, decimals)

totalSupply_:ERC20的总量(注意:ethers.utils.parseUnits(totalSupply_, decimals)<10^33)

serviceFeeReceiver_serviceFee_:pinksale中收取的费用和收费地址

前端代码:

let _this = this;
let provider = new _this.web3provider();
let signer = provider.getSigner();
let userAddress = _this.userAddress;
let fee = ethers.utils.parseEther(_this.createtokenFee);
let options = { value: fee };
let factory = new ContractFactory(STANDARD_TOKEN.abi, '0x' + STANDARD_TOKEN.bytecode, signer);
const contract = await factory.deploy(
					_this.tokenInfo.name,
					_this.tokenInfo.symbol,
					_this.tokenInfo.decimals,
					ethers.utils.parseUnits(_this.tokenInfo.totalSupply, _this.tokenInfo.decimals),
					[CREATE_TOKEN_RECEIVER, _this.inviteAddr],
					[ethers.utils.parseEther(_this.plFee), ethers.utils.parseEther(_this.inviteFee)],
					options
				);
let address = contract.address;//合约地址
let hash = contract.deployTransaction.hash;//交易hash
await contract.deployTransaction.wait();
await contract.value;

前端的表单和相关验证

Launchpad教程之前端发布ERC20合约
仿pinksale的表单和验证

pinksale除了标准ERC20的发布,还有其他如BabyToken,你可以用他们的solidity源码,用以上方式进行一键发布。

本教程仅供学习,如需要相关源码,可以联系博主。

体验地址

本教程仅供学习,如有疑问,请移步Telegram
post-qrcode
gason
版权声明:本站原创文章,由 gason 2022-10-17发表,共计2184字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)
验证码