Ethereum ICO -鋳造されたクラウンセール
17715 ワード
元来here👈
前のpostはERC 20トークンについてでした.さあ、このトークンのためにCrowdsaleを準備しましょう.私は、このCrowdsaleをここで単純にしておきます.
基本的なCrowdsaleの作成は、トークンを作るのと同じ手順に従います.ここでの継承はすぐに新しいものを作成する際の祝福です😜).
新しいBonkTokenを作成し、それをCrowdsaleを作成します.レートは10に設定されますが、それは何を意味しますか?
そこで、16個の小数点トークンをテストに使っています.
1000 BNK <-> 1 eth <-> 1000000000000000000 Wei
レート1は0.0000000000000001 BNKを与える.BNK <-> 0.0001 eth <-> 1 000 000 000 000 Weiを持っていたいので、1のWI ( 0.000000000000000010 BNK <-> 1 Wei )に対して10個のSnallest単位が必要です.
それで
0 . 0000000000000010 BNK <-> 1 Weiと1 eth <-> 1000000000000000000 Wei電卓を使用🤔.
次の3つのチェックは、コンストラクタに適切なパラメータを渡すだけです.私は詳細に飛び込むつもりはない. 最後に取引を行う可能性についてです.すべての約束が満たされるかどうかチェックするだけです.
次の機能、次の継承.BonkTokenRowdSalesにMinteCrowdsaleを加えましょう.
MinterCrowdSlider契約へのダイビング時には、RunDeliVerToken ()メソッドのみです.コンストラクタの変更を考慮する必要はありません.
Ownableは、我々のトークンにアクセス制御機構を加えます.継承後、いくつかの関数は所有者だけで実行されるように制限されます.
erc 20 mintableはdev docsでとてもよく説明されています:
トークンは次のようになります.
前のpostはERC 20トークンについてでした.さあ、このトークンのためにCrowdsaleを準備しましょう.私は、このCrowdsaleをここで単純にしておきます.
群衆販売
基本的なCrowdsaleの作成は、トークンを作るのと同じ手順に従います.ここでの継承はすぐに新しいものを作成する際の祝福です😜).
pragma solidity 0.5.5;
contract BonkTokenCrowdsale is Crowdsale {
constructor(
uint256 _rate,
address payable _wallet,
IERC20 _token,
)
Crowdsale(_rate, _wallet, _token)
public
{
}
}
テストで作るより多くの魔法があります.新しいファイルの中で、適切なトークン、ATHへのレート、およびいくつかの資金を調達するウォレットアドレスでCrowdsaleの作成をテストしましょう.contract('BonkTokenCrowdsale', function ([_, wallet, investor_1, investor_2]) {
beforeEach(async function () {
this.name = 'BonkToken';
this.symbol = 'BNK';
this.decimals = new BN(2);
this.token = await BonkToken.new(
this.name,
this.symbol,
this.decimals
);
this.rate = new BN(10);
this.wallet = wallet;
this.crowdsale = await BonkTokenCrowdsale.new(
this.rate,
this.wallet,
this.token.address,
);
});
describe('crowdsale', function () {
it('tracks the rate', async function () {
expect(await this.crowdsale.rate()).
to.be.bignumber.equal(this.rate);
});
it('tracks the wallet', async function () {
expect(await this.crowdsale.wallet()).
to.equal(this.wallet);
});
it('tracks the token', async function () {
expect(await this.crowdsale.token()).
to.equal(this.token.address);
});
});
describe('accepting payments', function () {
it('should accept payments', async function () {
await this.crowdsale.sendTransaction({ value: ether("1"), from: investor_1 }).should.be.fulfilled;
await this.crowdsale.buyTokens(investor_1, { value: ether("1"), from: investor_2 }).should.be.fulfilled;
});
});
ここで何が起こっているのかHow many token units a buyer gets per wei. The rate is the conversion between wei and the smallest and indivisible token unit. So, if you are using a rate of 1 with a ERC20Detailed token with 3 decimals called TOK, 1 wei will give you 1 unit, or 0.001 TOK.
そこで、16個の小数点トークンをテストに使っています.
1000 BNK <-> 1 eth <-> 1000000000000000000 Wei
レート1は0.0000000000000001 BNKを与える.BNK <-> 0.0001 eth <-> 1 000 000 000 000 Weiを持っていたいので、1のWI ( 0.000000000000000010 BNK <-> 1 Wei )に対して10個のSnallest単位が必要です.
それで
0 . 0000000000000010 BNK <-> 1 Weiと1 eth <-> 1000000000000000000 Wei電卓を使用🤔.
0.
000000000000001 * 10000~~00000000000000~~ = 1000
ミントクラウン
次の機能、次の継承.BonkTokenRowdSalesにMinteCrowdsaleを加えましょう.
MinterCrowdSlider契約へのダイビング時には、RunDeliVerToken ()メソッドのみです.コンストラクタの変更を考慮する必要はありません.
pragma solidity 0.5.5;
contract BonkTokenCrowdsale is Crowdsale, MintedCrowdsale {
constructor(
uint256 _rate,
address payable _wallet,
IERC20 _token,
)
Crowdsale(_rate, _wallet, _token)
public
{
}
}
変更するものはbonktokenです.Crowdsaleは我々のトークンをミントしますので、それはそれによって所有されていて、住みやすいです.Ownable契約とerc 20 mintable契約は、ここに来ます.Ownableは、我々のトークンにアクセス制御機構を加えます.継承後、いくつかの関数は所有者だけで実行されるように制限されます.
erc 20 mintableはdev docsでとてもよく説明されています:
Extension of {ERC20} that adds a set of accounts with the {MinterRole}, which have permission to mint (create) new tokens as they see fit. At construction, the deployer of the contract is the only minter.
トークンは次のようになります.
// SPDX-License-Identifier: MIT
pragma solidity 0.5.5;
import "@openzeppelin/contracts/token/ERC20/ERC20Detailed.sol";
import "@openzeppelin/contracts/token/ERC20/ERC20Mintable.sol";
import "@openzeppelin/contracts/token/ERC20/ERC20Pausable.sol";
import "@openzeppelin/contracts/ownership/Ownable.sol";
contract BonkToken is ERC20Mintable, ERC20Detailed, Ownable{
constructor(string memory _name, string memory _symbol, uint8 _decimals)
ERC20Detailed(_name, _symbol, _decimals)
public
{
}
}
クラウディングセールでトークンをテストする前に、トークンの所有権を転送する必要があります.// create token
...
// create Crowdsale
...
await this.token.addMinter(this.crowdsale.address);
await this.token.transferOwnership(this.crowdsale.address);
それ以来、我々は鋳造のためのいくつかのテストを追加することができます. describe('minted crowdsale', function () {
it('mints token after purchase', async function () {
const originalTotalSupply = await this.token.totalSupply();
await this.crowdsale.sendTransaction({ value: ether("1"), from: investor_1 });
const newTotalSupply = await this.token.totalSupply();
expect(newTotalSupply > originalTotalSupply).to.be.true;
});
});
このテストは新しいトークンを鋳造することです.Crowdsaleで行われたすべてのトランザクションでは、bonktokensの合計供給が増加する必要があります.Reference
この問題について(Ethereum ICO -鋳造されたクラウンセール), 我々は、より多くの情報をここで見つけました https://dev.to/kuba_szw/ethereum-ico-minted-crowdsale-117hテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol