マイファーストエーテル


元来here👈
ここで最初のポストから1年が過ぎた.最後の1つのXDから半分.時間が割れを取得する!
昨年はクリプトスペースで巨大だった.私もそれに沈んだ.私が学んでいる以上(お金を失う)、私はそれに入っています.だからここで我々は楽しさと楽しいことを学んでいる!
出発点は常に同じです:いくつかのチュートリアル.彼らの多くを作るために若干の功績を与えましょう!私はチュートリアルに従っています、しかし、この部分はいくつかの余分の変化でトークンをつくることについてだけです.
始めましょう!
……もう一つ.私のコードはhereです!

ICO


少し理論.ICO(イニシャルコインオファー)は企業による資本調達の方法です.あなたはそれらにお金を与える、彼らはトークンを与える.そして、それは基本的にそれです.だから目標はいくつかのトークンを作成し、それをあなたのためにBTCで私を支払うことができます.おっ!💸

いくつかの基本


これは私の最初の粘り強さのプロジェクトですので、私は記憶されるいくつかの基本的な命令と条件を書き留めておく価値があると思います.
フレームワークは、生命をより簡単にします.Truffle
npm install -g truffle
次に、あなたのトリュフバージョンをチェックできます.それは非常に有用ないくつかの詳細情報を印刷します.
Truffle v5.5.7 (core: 5.5.7)
Ganache v^7.0.3
Solidity v0.5.16 (solc-js)
Node v17.8.0
Web3.js v1.5.3
プロジェクト構成を初期化するには:truffle versionいくつかのEthereumベースのブロックをマシンとCLIのために必要があります.すべてをローカルでテストするのはいいことでしょう.
npm install -g ganache-cli
Ganacheでブロックチェーンを実行するには、truffle initです.バム!ブロックチェーン実行中!
余分な注意:
私はガナッシュに私の契約を移行しながらいくつかの問題があった.私はそれに接続できなかった.指定されたポートとホストでガナッシュCLIを走らせることは役に立ちました.ganache-cliを使用してください.

トークン


OpenZeppelinの柔軟性のおかげで、ERC 20に基づいてトークンを作成するだけでerc 20クラスから継承されます.私のものはbonktokenと呼ばれます.なぜ私に尋ねるな😜
// SPDX-License-Identifier: MIT
pragma solidity 0.8.13;

import "openzeppelin-solidity/contracts/token/ERC20/ERC20.sol";

contract BonkToken is ERC20{
    constructor(string memory _name, string memory _symbol) 
    ERC20(_name, _symbol)
    {

    }

}
そして、それは基本的にそれです.他のクラスから継承し、関数やその他のプロパティをトークンに追加できます.すべてがOKであるかどうかチェックするために、現在ganache-cli -h localhost -p 8545を走らせてください!

移行


移行はあなたの契約がネットワークにどのように展開されるべきかを指定することです.ネットワークparamsはトリュフ設定で指定されます.jsファイル.
const BonkToken = artifacts.require("./BonkToken.sol");

module.exports = function (deployer) {
    const _name = "Bonk Token";
    const _symbol = "BNK";
    deployer.deploy(BonkToken, _name, _symbol);
};
移行の定義の後、truffle compileを実行します.

テスト


私はSollienceとJSに新しいので、私はopenzeppelin mostlyといくつかのチュートリアルのヒントに基づいて私のテストを書いていた.
したがって、トークンの名前とシンボルの基本テストは次のようになります.
const BonkToken = artifacts.require('BonkToken');
const { expect } = require('chai')

contract('BonkToken', accounts => {

    const _name = 'Bonk Token';
    const _symbol = 'BNK'; 

    describe('token attributes', function () {

        beforeEach(async function () {
            this.token = await BonkToken.new(_name, _symbol, _decimals); 
        })

        it('has the correct name', async function () {
            expect(await this.token.name()).to.equal(_name)
        })

        it('has the correct symbol', async function () {
            expect(await this.token.symbol()).to.equal(_symbol)
        })
    })

})

これらのテストを実行するには、Ganache Running(truffle migrate)を実行し、ganache-cliを実行してください.結果は次のようになります.
  Contract: BonkToken
    token attributes
✓ Transaction submitted successfully. Hash: 0xb04baef19503e3c4ff529e857b28045d50eb1461048a85d3f08686059f4a8318
      ✓ has the correct name
✓ Transaction submitted successfully. Hash: 0xd75e5bf01f7e3876f246a454c5fff3263f584a285f06f07b4c57896127313897
      ✓ has the correct symbol

  2 passing (269ms)

拡張トークン


練習のためだけに、私はトークンをチュートリアルのように小数点フィールドで拡張したいと思った.違いは、私がERC 20から継承していることです.デフォルトではerc 20は小数点を返します.
まず最初に、私はofcが失敗したテストを加えました.拡張テストファイルは次のようになります.
const BonkToken = artifacts.require('BonkToken');
const { BN } = require('@openzeppelin/test-helpers')
const { expect } = require('chai')

contract('BonkToken', accounts => {

    const _name = 'Bonk Token';
    const _symbol = 'BNK'; 
    const _decimals = new BN(18); 

    describe('token attributes', function () {

        beforeEach(async function () {
            this.token = await BonkToken.new(_name, _symbol, _decimals); 
        })

        it('has the correct name', async function () {
            expect(await this.token.name()).to.equal(_name)
        })

        it('has the correct symbol', async function () {
            expect(await this.token.symbol()).to.equal(_symbol)
        })

        it('has the correct decimals', async function () {
            expect(await this.token.decimals()).to.be.bignumber.equal(_decimals)
        })
    })

})
次はBonkToken自体の変更を行うことです.ファイル更新:
// SPDX-License-Identifier: MIT
pragma solidity 0.8.13;

import "openzeppelin-solidity/contracts/token/ERC20/ERC20.sol";

contract BonkToken is ERC20{

    uint8 private _decimals; 

    constructor(string memory _name, string memory _symbol, uint8 decimals_) 
    ERC20(_name, _symbol)
    {
        _decimals = decimals_;
    }

    function decimals() public override view returns(uint8){
        return _decimals;
    }
}
  • 私はコントラクトプロパティを設定するコンストラクタにBonkToken用の新しいパラメータを追加しました.イージー・ペイシー
    ERC20
  • 、機能小数点は、デフォルトで18を返します.私はそれをパラメータ化したかったので(ofc .私は18 xDを残します)、私は単にdecerals関数を返します.
  • ネットワークへのトークンの配備


    トリュフコンソールにアクセスするにはtruffle testを実行します.
    それからコンソールで:
    truffle(development)> BonkToken.deployed( ).then((t) => {token = t})
    undefined
    truffle(development)> token.address
    '0x14213DC7023Daf74e2D063d305978b5bdadB3beD'
    truffle(development)> token.name( )
    'Bonk Token'
    truffle(development)> token.symbol( )
    'BNK'
    truffle(development)> token.decimals( )
    BN { negative: 0, words: [ 18, <1 empty item> ], length: 1, red: null }