

在看这篇教程之前你需要了解
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;
前端的表单和相关验证:


pinksale除了标准ERC20的发布,还有其他如BabyToken,你可以用他们的solidity源码,用以上方式进行一键发布。
本教程仅供学习,如需要相关源码,可以联系博主。
本教程仅供学习,如有疑问,请移步Telegram

