apeescape2.com
  • メイン
  • 人とチーム
  • 分散チーム
  • 仕事の未来
  • モバイルデザイン
バックエンド

簡単な方法でERC20トークンを作成する方法

この記事の目的は、ERC20トークンをできるだけ短時間で作成する方法を示すことです。

基本から始めましょう: ERC20トークンとは何ですか?

近年、ERC20トークン仕様はイーサリアムトークンの事実上の標準になりました。言い換えれば、今日出回っているほとんどのイーサリアム契約はERC20に準拠しています。この記事では、独自のイーサリアムトークンを作成する方法について詳しく説明しますが、始める前に、ERC20標準について詳しく見ていきましょう。



ERC20トークンの図

ERC20トークンがこれほど魅力的で成功している理由は何ですか?関係するいくつかの要因があります:

  1. このチュートリアルでわかるように、ERC20トークンはシンプルで簡単にデプロイできます。
  2. ブロックチェーンベースのマーケットプレイスとクリプトウォレットは、管理するトークンの範囲と通信するために単一の標準化されたコマンドセットを必要とするため、ERC20標準は重大な問題を解決します。これには、異なるトークン間の相互作用ルール、およびトークン購入ルールが含まれます。
  3. これは、イーサリアムトークンの標準化を提供する最初の人気のある仕様でした。決してそうではありませんでした 最初 、しかしその人気のおかげで、それはすぐに業界標準になりました。

他のイーサリアムトークンと同様に、ERC20トークンはスマートコントラクトとして実装され、分散型の方法でイーサリアム仮想マシン(EVM)で実行されます。

Solidity:スマートコントラクトプログラミング言語

イーサリアムのスマートコントラクトはSolidityで書かれています。代替言語はありますが、この目的でそれらを使用する人はほとんどいません。 SolidityはJavaScriptに似ているため、JavaScript、またはJavaやその他のCのような言語についてある程度の知識がある場合は、実際にSolidityを十分に習得する前であっても、Solidityのコードの一部が理解できることを問題なく理解できます。それ。

簡単なERC20コントラクトの作成をすぐに開始できるはずなので、ここから楽しみが始まります。これは単純なタスクであり、この記事ではERC20トークンを1時間以内に作成してデプロイする方法を説明するのに十分なほど単純です。

このデモンストレーションで作成するトークンは、あまり多くのベルやホイッスルがない、最低限のERC20実装になります。しかし、私は現実の世界で多くの同様に単純なトークンを見てきました、そしてそれらは非常にうまくいく傾向があります。

ERC20トークン標準の概要

ERC20とは何ですか?

簡単に言えば、ERC20標準は、他の契約、ウォレット、またはマーケットプレイスとの統合を可能にするために、すべてのERC20トークンによって実装される一連の関数を定義します。この一連の関数はかなり短く、基本的です。

function totalSupply() public view returns (uint256); function balanceOf(address tokenOwner) public view returns (uint); function allowance(address tokenOwner, address spender) public view returns (uint); function transfer(address to, uint tokens) public returns (bool); function approve(address spender, uint tokens) public returns (bool); function transferFrom(address from, address to, uint tokens) public returns (bool);

ERC20関数を使用すると、外部ユーザー(暗号ウォレットアプリなど)がユーザーの残高を確認し、適切な承認を得て、あるユーザーから別のユーザーに資金を送金できます。

投資された現金が時間の経過とともに収入を得るという事実は、お金の時間価値と呼ばれます。

スマートコントラクトは、2つの明確に定義されたイベントを定義します。

event Approval(address indexed tokenOwner, address indexed spender, uint tokens); event Transfer(address indexed from, address indexed to, uint tokens);

これらのイベントが呼び出されるか、 放出された ユーザーがアカウントからトークンを引き出す権利を付与されたとき、およびトークンが実際に転送された後。

標準のERC20関数に加えて、多くのERC20トークンには追加のフィールドもあり、書面でなくても実際には、ERC20標準の事実上の一部になっているものもあります。このようなフィールドの例をいくつか示します。

string public constant name; string public constant symbol; uint8 public constant decimals;

ERC20とSolidityの命名法に関するいくつかのポイントは次のとおりです。

  • A public機能は契約自体の外部でアクセスできます
  • view基本的には一定を意味します。つまり、コントラクトの内部状態は関数によって変更されません。
  • event Solidityがクライアントを許可する方法です。コントラクト内の特定の発生について通知を受けるアプリケーションフロントエンド

すでに基本的なJava / JavaScriptスキルを持っている場合、ほとんどのSolidity言語構成は明確である必要があります。

SolidityでERC20トークンを書く

堅実なERC20トークン

基本の概要を説明し、ERC20トークンを作成するために必要なことを説明したので、次はロジックの作成を開始します。

まず、2つのマッピングオブジェクトを定義する必要があります。これは、連想配列またはキー/値配列のSolidityの概念です。

awsソリューションアーキテクト合格点
mapping(address => uint256) balances; mapping(address => mapping (address => uint256)) allowed;

式mapping(address => uint256)キーがタイプaddress —アカウントアドレスを示すために使用される数値であり、値がタイプuint256 —トークンの残高を格納するために通常使用される256ビット整数である連想配列を定義します。

最初のマッピングオブジェクトbalancesは、各所有者アカウントのトークン残高を保持します。

2番目のマッピングオブジェクトallowedには、特定のアカウントからの引き出しが承認されたすべてのアカウントと、それぞれに許可された引き出し額が含まれます。

ご覧のとおり、許可されたマッピングの値フィールドは、それ自体が、承認された引き出し合計へのマッピングプロットアカウントアドレスです。

これらのマッピングは、他のすべてのコントラクトフィールドとともにブロックチェーンに保存され、 採掘 その結果、変更がすべてのネットワークユーザーノードに伝播されます。

ブロックチェーンストレージは高価であり、契約のユーザーは何らかの方法で料金を支払う必要があります。したがって、常にストレージサイズを最小限に抑えてブロックチェーンに書き込むようにする必要があります。

必要なデータ構造が整ったので、ERC20ロジックを適切な関数に実際に記述し始めることができます。

ICOトークンの数の設定

ICOトークンの数をどのように設定しますか?さて、ICOトークンの最大数を設定する方法はいくつかあり、この問題自体は長い議論の価値があるかもしれません。

ECR20チュートリアルのニーズに応じて、最も簡単なアプローチを使用します。契約作成時にトークンの合計量を設定し、最初にすべてのトークンを「契約所有者」、つまりスマートコントラクトを展開したアカウントに割り当てます。

uint256 totalSupply_; constructor(uint256 total) public { totalSupply_ = total; balances[msg.sender] = _totalSupply; }

コンストラクターは、コントラクトがデプロイされた直後にイーサリアムによって自動的に呼び出される特別な関数です。これは通常、コントラクトのデプロイアカウントから渡されたパラメータを使用してトークンの状態を初期化するために使用されます。

msgイーサリアム自体によって宣言され、入力されるグローバル変数です。契約を履行するための重要なデータが含まれています。ここで使用しているフィールド:msg.sender現在の契約機能を実行しているイーサリアムアカウントが含まれています。

デプロイするアカウントのみがコントラクトのコンストラクターに入ることができます。契約が開始されると、この関数は使用可能なトークンを「契約所有者」アカウントに割り当てます。

合計トークン供給を取得する

function totalSupply() public view returns (uint256) { return totalSupply_; }

この関数は、所有者に関係なく、このコントラクトによって割り当てられたすべてのトークンの数を返します。

所有者のトークンバランスを取得する

function balanceOf(address tokenOwner) public view returns (uint) { return balances[tokenOwner]; }

balanceOf所有者のアドレスで識別される、アカウントの現在のトークン残高を返します。

トークンを別のアカウントに転送する

function transfer(address receiver, uint numTokens) public returns (bool) { require(numTokens <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender] — numTokens; balances[receiver] = balances[receiver] + numTokens; emit Transfer(msg.sender, receiver, numTokens); return true; }

その名前が示すように、transfer関数は移動に使用されますnumTokens所有者の残高から別のユーザーの残高までのトークンの量、またはreceiver。譲渡する所有者はmsg.senderですつまり、関数を実行しているものです。これは、トークンの所有者だけがトークンを他の人に転送できることを意味します。

Solidityが述語を主張する方法はrequireです。この場合、振替口座には振替を実行するのに十分な残高があります。 requireの場合ステートメントが失敗した場合、トランザクションはブロックチェーンに書き込まれる変更なしですぐにロールバックされます。

終了する直前に、関数はERC20イベントを発生させますTransfer登録されたリスナーがその完了に反応できるようにします。

トークンを引き出すための委任を承認する

この関数は、トークンマーケットプレイスのシナリオで最もよく使用されます。

function approve(address delegate, uint numTokens) public returns (bool) { allowed[msg.sender][delegate] = numTokens; emit Approval(msg.sender, delegate, numTokens); return true; }

何approve所有者を許可することです。つまり、msg.sender代理人アカウント(場合によってはマーケットプレイス自体)を承認して、自分のアカウントからトークンを引き出し、他のアカウントに転送します。

ご覧のとおり、この関数は、所有者がマーケットプレイスでトークンを提供しているシナリオで使用されます。これにより、マーケットプレイスは事前の承認を待たずにトランザクションを完了することができます。

実行の最後に、この関数はApprovalを起動します。イベント。

引き出しが承認されたトークンの数を取得する

function allowance(address owner, address delegate) public view returns (uint) { return allowed[owner][delegate]; }

この関数は、approveで設定されているように、所有者によって現在承認されているトークンの数を特定のデリゲートに返します。関数。

デリゲートによるトークンの転送

transferFrom関数はapproveのピアです以前に説明した関数。これにより、引き出しが承認された代理人は、所有者の資金を第三者の口座に送金することができます。

function transferFrom(address owner, address buyer, uint numTokens) public returns (bool) { require(numTokens <= balances[owner]); require(numTokens <= allowed[owner][msg.sender]); balances[owner] = balances[owner] — numTokens; allowed[owner][msg.sender] = allowed[from][msg.sender] — numTokens; balances[buyer] = balances[buyer] + numTokens; Transfer(owner, buyer, numTokens); return true; }

2つrequire関数開始時のステートメントは、トランザクションが正当であること、つまり、所有者が転送するのに十分なトークンを持っていること、および代理人が(少なくとも)numTokensを承認していることを確認することです。撤退する。

numTokensの転送に加えて所有者から購入者への金額。この関数はnumTokensも減算します。代議員の手当から。これは基本的に、与えられた手当を持つ代表者がそれをいくつかの別々の引き出しに分割することを可能にします。これは典型的な市場の行動です。

ここで停止して、有効なERC20実装を作成できます。ただし、産業用強度トークンが必要なため、さらに一歩進んでいきたいと考えています。これには、コードをもう少し安全にする必要がありますが、基本的ではないにしても、トークンを比較的単純に保つことができます。

SafeMath Solidity Library

SafeMath は、ハッカーが契約を破ることが知られている1つの方法である整数オーバーフロー攻撃に対処することを目的としたSolidityライブラリです。このような攻撃では、ハッカーは、関連する整数を取るパラメータを渡すことにより、契約に誤った数値を使用するように強制します 過去 それらの最大値。

SolidityのSafemathライブラリ:イラスト

ユニットテストjavaの書き方

SafeMath 算術アクションを実行する前にオーバーフローをテストすることでこれを防ぎ、オーバーフロー攻撃の危険性を排除します。ライブラリは非常に小さいため、契約サイズへの影響は最小限であり、パフォーマンスは発生せず、ストレージコストのペナルティもほとんどありません。

追加しましょう SafeMath 私たちのコードに:

library SafeMath { // Only relevant functions 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; } }

SafeMath assertを使用します渡されたパラメーターの正確さを検証するステートメント。すべきassert失敗した場合、関数の実行はただちに停止され、すべてのブロックチェーンの変更はロールバックされます。

次に、ライブラリをSolidityコンパイラに導入する次のステートメントを追加しましょう。

using SafeMath for uint256;

次に、最初に使用した単純な算術をSafeMath関数に置き換えます。

balances[msg.sender] = balances[msg.sender].sub(numTokens); balances[receiver] = balances[receiver].add(numTokens); balances[buyer] = balances[buyer].add(numTokens); balances[owner] = balances[owner].sub(numTokens);

すべて一緒に梱包する

Solidityでは、スマートコントラクトの機能とイベントは、と呼ばれるエンティティにラップされます。 契約する これをサイレントに「ブロックチェーンクラス」に変換できます。以下は、コードの要点を含め、作成したERC20互換のコントラクトです。名前と記号のフィールドは自由に変更できます。ほとんどのトークンは10進値を18に保つので、同じことを行います。

イーサリアム契約の展開

時が来た 契約をブロックチェーンにデプロイする 。展開後、契約はネットワークに参加しているすべてのノードに転送されます。コントラクトに加えられたすべての変更は、参加しているすべてのノードに伝播されます。

イーサリアムの開発者は通常、次のような展開ツールを使用します トリュフ 。トリュフでさえ、この記事の限られたニーズと呼ばれる単純なオンラインツールにはやり過ぎです リミックス 十分であろう。

使用するには、をインストールする必要があります MetaMaskプラグイン ブラウザと、少なくともいくつかのRinkeby Etherを含むRinkeby(Ethereumテストネットワーク)アカウント。これらは比較的簡単な手順なので、詳しくは説明しません。

どちらもお持ちでない場合は、 MetaMask そして リンケビュー ダウンロードリンクと明確なインストールと使用方法を取得するため。

すべてのビルディングブロックが配置されたので、次の手順に進みます。 リミックス プラグマ行とSafeMathライブラリを含む上記のコードをオンラインエディタに貼り付けます。

次に、右側の2番目のタブ「」に移動します。 実行 」をクリックし、「 デプロイ 。」トランザクションの確認を求めるMetaMaskポップアップが表示されます。もちろん、私たちはそれを承認します。

画像の代替テキスト

  • 緑のボックス:リンケビューにいることを確認してください
  • 青いボックス:トークンの総供給量を設定します
  • 赤いボックス:デプロイ!

要旨 : https://gist.github.com/giladHaimov/8e81dbde10c9aeff69a1d683ed6870be#file-basicerc20-sol

モバイルで不和ボットを作成する方法

おめでとうございます! 本当のように、最初のERC20トークンをデプロイしました イーサリアムプロフェッショナル 。約束通り、トークンはシンプルで軽量でありながら完全に機能し、ERC20標準に準拠し、MathSafeで保護されています。ブロックチェーン全体で購入、支払い、転送する準備ができています。

スマートコントラクトにあるのはそれだけですか?

いいえ、近いわけではありません。簡単なデモンストレーションは表面をほとんど傷つけず、スマートコントラクト開発の1つの側面のみを扱っているためです。

スマートコントラクトは、ビジネスロジック、ユーザーインタラクションのモデリング、トークンのマイニングと書き込みを許可するかどうか、コントラクトに導入するライフサイクルの変更、通常は管理者レベルの機能の必要性によって、はるかに複雑になる可能性があります。管理者が承認した一連の機能など。あなたは絵を手に入れます。

それでも、ここで行ったことを再現できれば、それは知識を拡大し、必要に応じてより複雑な契約に移行するための強固な基盤となります。

基本を理解する

スマートコントラクトとは何ですか?

スマートコントラクトは、イーサリアム仮想マシンで実行されるコードの一部です。イーサリアムのスマートコントラクトは不変であり、イーサリアムとデータを送受信できます。

ERC20トークンとは何ですか?

簡単に言えば、ERC20トークンはERC20標準を実装するコントラクトです。これらの契約によって処理される操作には、トークンの総供給量と残高の取得、およびトークンの転送に使用される方法が含まれます。

イーサリアムはどのプログラミング言語を使用していますか?

イーサリアムの開発は現在、JavaScript、Python、C ++に触発された契約指向のプログラミング言語であるSolidityで行われています。

ERCは何の略ですか?

ERCはEthereumRequest forCommentの略です。このリクエストには番号20が割り当てられているため、サフィックスが付けられます。

StoryBrandフレームワークを使用してより良いホームページを設計する

Uxデザイン

StoryBrandフレームワークを使用してより良いホームページを設計する
UIデザインのベストプラクティスとその最も一般的なエラー

UIデザインのベストプラクティスとその最も一般的なエラー

Uiデザイン

人気の投稿
GitHubWebhookを使用してWebアプリケーションを自動的にデプロイする
GitHubWebhookを使用してWebアプリケーションを自動的にデプロイする
デザイントーク:UXリサーチャーのCaitriaO'Neillとの実際の研究
デザイントーク:UXリサーチャーのCaitriaO'Neillとの実際の研究
プロスポーツフランチャイズ評価
プロスポーツフランチャイズ評価
不完全なハーモニー:SoundCloudとSpotifyの概要
不完全なハーモニー:SoundCloudとSpotifyの概要
データベース設計の悪い習慣:あなたはこれらの間違いを犯していますか?
データベース設計の悪い習慣:あなたはこれらの間違いを犯していますか?
 
ソフトウェアエンジニアのパフォーマンスレビューの説明
ソフトウェアエンジニアのパフォーマンスレビューの説明
Laravelを使用したGraphQLサーバーの構築
Laravelを使用したGraphQLサーバーの構築
シャザム!音楽アルゴリズム、指紋、および処理の認識
シャザム!音楽アルゴリズム、指紋、および処理の認識
WebVRとブラウザエッジコンピューティング革命
WebVRとブラウザエッジコンピューティング革命
デザイナーのための効果的なコミュニケーション戦略
デザイナーのための効果的なコミュニケーション戦略
人気の投稿
  • プライベートエクイティファンドの開始
  • 次の式のうち、需要の価格弾力性に有効なものはどれですか?
  • C ++プログラミングの学習
  • ユーザーエクスペリエンスを測定する方法
  • Excel2016でpowerpivotを使用する方法
カテゴリー
ブランドデザイン 投資家と資金調達 その他 財務プロセス ツールとチュートリアル 革新 人とチーム 技術 アジャイル データサイエンスとデータベース

© 2021 | 全著作権所有

apeescape2.com