冷たい孤独な自己のpythonをHeling日125ブロックチェーン039イーサネットスクエアerc20 09トークン
[主な内容]
Erc20は本日、トークンを発行することができ、契約に注釈を付けるために、インテリジェントなチュートリアルの別の記事ボーエンネットワークに応じてコードをコピーするために基準を継続して使用します。共通の学習を36分。
(また、仕上げ要約筆記は45分程度かかりました)
詳細は終わりに学習プロセス画面の映像を学習するプロセスを参照してください。
[研究ノート]
まず、今日は他の誰かのコードを参照して、個人的なメモを追加します。
ブログのアドレスを学ぶことです。https://blog.csdn.net/hantangduhey/article/details/80714656
今日は慎重にソースコードを読んで、これらの堅牢コードを読み、注釈を完了することができ(わずかに遅い)学習のほぼ20日間で感じた個人的なメモを、追加します。
`` `
プラグマ堅実^ 0.4.24。
//原作者ボーエンアドレスします。https://blog.csdn.net/hantangduhey/article/details/80714656、私は唯一の学習のためにここに引用します。
/ **
* @title SafeMath
エラー時に投げるの安全性チェックと* @dev数学演算
防止整数オーバーフローの問題
* /
ライブラリSafeMath {
関数MUL(uint256、uint256 B)内部純粋戻る(uint256){
uint256 C = A * B;
アサート(== 0 || C / A == B)。
Cを返します。
}
関数DIV(uint256、uint256 B)内部純粋戻る(uint256){
//アサート(B> 0)。0で除算したとき//ソリディティは自動的にスローされます
uint256 C = A / B。
//アサート(== B * C +%のB)。//これが成り立たないようなことがありません
Cを返します。
}
関数sub(uint256 A、uint256 B)内部純粋戻る(uint256){
アサート(B <= A)。
b - 返します
}
機能追加(uint256、uint256 B)内部純粋戻る(uint256){
uint256 C = A + B。
アサート(C> = A)。
Cを返します。
}
}
契約StandardToken {
//使用SafeMath
uint256ためSafeMathを使用して、
//トークン名
文字列のパブリック名。
//トークン略語
文字列のパブリックシンボル。
小数点以下の//トークン数(トークンは部品の数に分割することができます)
公共小数UINT8。
//トークンの総数
公共totalSupply uint256。
(トランザクションの開始剤である、このメソッドを呼び出して、)//トランザクションオリジネータは_toアカウントに_valueにトークンの数を送信します
機能転送(アドレス_to、uint256 _value)公共リターン(ブール成功)。
//アカウント_toに_fromアカウントからのトークンの_value数を消します
機能transferFrom(アドレス_from、アドレス_to、uint256 _value)公共リターン(ブール成功)。
_spenderへのトークンの数を使用する権利_value、その後、_spender transferFrom方法別の人に転送お金の認可発信アカウントを呼び出す前に//トランザクションオリジネータ
関数は、(アドレス_spender、uint256 _value)公共リターン(ブール成功)を承認します。
まだ口座番号_ownerトークンを使用する権利があります_spender //クエリ
関数手当(アドレス_owner、アドレス_spender)パブリック定数戻る(uint256残り)。
//転送イベントの成功
イベント転送(アドレス索引付け_from、アドレスインデックス付き_to、uint256 _value)。
//イベントの成功を使用する権利を委任
イベント承認(アドレス索引付け_owner、アドレスインデックス付き_spender、uint256 _value)。
}
//トークン制御管理者の契約セット(で、宣言するために、右をして、展開の持つ経営管理契約を開始します)
契約所有{
//モディファイ(関数修飾子)、契約の機能でいくつかの変更を使用して、すべては、このユーザー権利のチェックをするためにする必要がありますが、あなたが同様の意味の何かをする力の所有者、管理者でなければならないことを示します
onlyOwner変更(){
(msg.sender ==所有者)を必要とします。
_;何かをする//このダッシュは、後続のすべてのコマンドを指し、
}
パワーその契約デプロイヤアドレスの所有者の//アドレス
公共の所有者に取り組みます。
//は、契約書を作成したときに実行され、契約が最初の所有者である執行者
//以下のボディ構造の契約は1回だけ実行され、時に契約実行の展開、契約への後続の呼び出しは、恒久的な記録(デプロイヤ)ノードアドレスの下で契約の所有者であることを確実にするために、体の構築を実行しません。
コンストラクタ()パブリック{
所有者= msg.sender。
}
//新しい所有者は、nullに似最初は空アドレス、
//ここでは、新しい契約の管理者を設定しているようです!?
アドレスnewownerに= 0x0の。
//成功した所有者のイベント、成功したイベントのブロードキャストを設定する契約管理者に置き換えます
イベントOwnerUpdate(アドレス_prevOwner、アドレス_newOwner)。
新しい所有者に所有権の//現在の所有者(有効にするにacceptOwnershipメソッドを呼び出すために新しい所有者を必要とします)
// - この契約は、スマート契約の所有者を変更することができました!! - 新しい所有者がに同意する必要があり、実際に置き換えられます。
関数CHANGEOWNER(アドレス_newOwner)パブリックonlyOwner {
(!_newOwner =所有者)が必要です。
newownerに= _newOwner; //ここでは後にも本当にスマート契約の所有者(コントローラー)を置き換えるものではありません、次の機能を実行するために呼び出され、その後、本当の変化。
}
//新しい所有者が所有権を受け入れ、動力の交代が発効しました
//この関数法は(msg.sender == newownerに)--requireを呼び出すために、そのノードのインテリジェント新規契約所有者の身元が受け付けることができ、制限がここにいました
関数acceptOwnership()パブリック{
(msg.sender == newownerに)が必要です。
EMIT OwnerUpdate(所有者、newownerに)。
所有者= newownerに; //その後、所有者は本当にスマート契約を置き換えます
newownerに= 0x0の。
}
}
//トークン制御契約
制御された契約が所有しています{
ある//作成VIP、ノードアドレスはsetExclude方法は、新しいグローバル変数エクスクルードのVIPアドレスマッピングテーブルを追加することで、デプロイ契約VIPノードへの最初のセットです。
//この関数は、あなたが契約を展開するときに建設がその時間に実行された1回のみ実行されます。
コンストラクタ()パブリック{
setExclude(msg.sender、真の);
}
//コントロールは、トークンが取引可能かどうかを、真の代表が(アカウントに除外し、次のtransferAllowed年間で、この特定の実装に限定されません)
公共transferEnabled = trueのBOOL;
//アカウントロックアウト機能を有効にするかどうかを、真の代表が有効
BOOL lockFlag =はtrue。
、あなたがアカウントを回すことができないとき、お祝いlockFlagは、ハハ= trueの時にロックされている:ロック、真がいるかどうかのアカウント//ロックセット、アドレスのアカウント、BOOL
マッピング(アドレス=>ブール値)ロックされました。
//特権ユーザ、および無制限transferEnabledのlockFlag、VIPああ、ブール値は、有効なVIP真の代表であります
マッピング(アドレス=> BOOL)を除外し、アドレスマッピングブール値がtrueの場合、//は、グローバル変数、年間の各アドレスbool値の背中をマッピングし、その後、このアドレスは、アイデンティティvipがあります
//セットtransferEnabled値は、この関数は、関数修飾子はonlyOwner加えためだけ現在のノードが、この機能を呼び出すための契約を持っている、[トークントランザクショングローバルスイッチを許可するかどうか】行うために呼び出されます
関数enableTransfer(BOOL _enable)公衆onlyOwnerリターン(BOOL成功){
transferEnabled = _enable。
trueを返します。
}
機能修飾子が追加ため//セットlockFlag値は、この関数は、[ブラックリスト内のすべてのノードのすべてのグローバルスイッチをロックするかどうか】凍結するために呼び出され、現在のノードのみが、この機能を呼び出すための契約を結んでいるonlyOwner
関数disableLock(BOOL _enable)公衆onlyOwnerリターン(BOOL成功){
lockFlag = _enable。
trueを返します。
}
アカウントに追加// _addrは、ブラックリストを引き出し、ロックされました。。。関数修飾子を追加しているため、特別なユーザーノードアドレスのブラックリストを追加し、現在のノードのみが、この関数を呼び出すための契約を結んでいるonlyOwner
関数addLock(アドレス_addr)公共onlyOwnerリターン(BOOL成功){
(!_addr = msg.sender)が必要です; //は、ブラックリストに契約所有者ノードアドレスを追加することは避けてください
【_addr] = trueをロック。
trueを返します。
}
//セットのVIPユーザー関数修飾子はonlyOwner追加したので、現在のノードのみが、この関数を呼び出すための契約を結んでいます
関数setExclude(アドレス_addr、BOOL _enable)公衆onlyOwnerリターン(BOOL成功){
除外[_addr] = _イネーブル。
trueを返します。
}
//ロック解除_addrユーザは、ユーザノードがブラックリストから削除された機能改質剤はonlyOwner加えので、唯一の現在のノードは、この関数を呼び出すために契約を結んでいます
関数removeLock(アドレス_addr)公共onlyOwnerリターン(BOOL成功){
【_addr] =偽ロック。
trueを返します。
}
//制御コア契約は、利用者が取引に制限され、アカウントが凍結されているかどうかをグローバル制御ノードを確保するために---この関数修飾子を達成するために
修飾子transferAllowed(アドレス_addr){
//最初の行は、性を保証は、すべてのユーザーが制御されていないVIPノードいること
もし(![_addr]除外){
グローバル設定は、トランザクションを禁止する場合は、//、直接返信:現在のトランザクションが許可されます
必要(transferEnabledは、 "転送が今enabeledされていません!");
//次の行は凍結グローバル設定ユーザノードブラックリストかどうかをチェックします
IF(lockFlag){
グローバル設定は、ユーザノードのブラックリストを凍結する必要がある場合は、//、それが凍結を開始します
必要([_addr]は、ロックされた! "あなたがロックされています!");
}
}
_;
}
}
します。https://自分のトークン、原作者ボーエンアドレスの変更//blog.csdn.net/hantangduhey/article/details/80714656、私は学習のためにここに引用します。
契約CloudImageTokenは{制御、StandardTokenです
//アカウントのセット
マッピング(アドレス=> uint256)パブリックbalanceOf。
内部が許可マッピング(アドレス=>マッピング(アドレス=> uint256))。
//関数工事契約の契約のみがデプロイ実行された場合、一回だけ実行--------
コンストラクタ()パブリック{
totalSupply = 100000000; // 100万本契約は、現在定められた全ての通貨、貨幣機能の無い以降の発行の一回限りの合計です。
名前=「CloudImageトークン」。
記号=「CI」。
小数= 0;
balanceOf [msg.sender] = totalSupply。
}
//トークンを送信されたコール別の契約に加え、transferAllowed機能修飾子にノード、グローバル制御契約を受け入れます
機能転送(アドレス_to、uint256 _value)公衆transferAllowed(msg.sender)戻る(BOOL成功){
(!_to =アドレス(0))を必要とします。
必要(_value <= balanceOf [msg.sender])。
balanceOf [msg.sender] = balanceOf [msg.sender] .SUB(_value)。
balanceOf [_to] = balanceOf [_to] .add(_value)。
EMIT転送(msg.sender、_to、_value)。
trueを返します。
}
//契約は、ノードがトークンノードを送信することを許可された呼び出していると言うことですつまり、モードを実行する権限があることを意味し、他のノードのトークンに任意のノードを送信します。追加しましたtransferAllowed機能修飾子は、グローバル制御契約を受け入れます
関数transferFrom(uint256 _valueアドレス_from、アドレス_to)公衆transferAllowed(_from)戻る(BOOL成功){
(!_to =アドレス(0))を必要とします。
必要(_value <= balanceOf [_from])。
(_value <=許容[_from] [msg.sender])を必要とする; //チェック現在のノードの総効果バランスノードトークンの承認を認可するようにここに増加するトークン通話契約を送信します。
balanceOf [_from] = balanceOf [_from] .SUB(_value)。
balanceOf [_to] = balanceOf [_to] .add(_value)。
許可[_from] [msg.sender] =許容[_from] [msg.sender] .SUB(_value)。
EMIT転送(_from、_to、_value)。
trueを返します。
}
//関数が操作を許可、この機能はtransferAllowed機能修飾子を追加しません。ノードが利用可能なすべての回ですべてのユーザーのために動作することを許可。
関数が承認(アドレス_spender、uint256 _value)公共リターン(ブール成功){
許可[msg.sender] [_スペンダー] = _value。
承認(msg.sender、_spender、_value)を放出します。
trueを返します。
}
//この静的関数(Contantをも使用することができるビュー修飾子を使用して)、トークン使用のためのトータルリターンのバランス。クエリを実行し、不正なパーティで返すことができるトークンがいっぱいの場合にノードを承認し受け入れることを許可
関数手当(アドレス_owner、アドレス_spender)パブリックビューに戻り(uint256残り){
戻る許可[_owner] [_スペンダー]。
}
}
`` `
[共有]今日の自己認識
あなたはそれを信じることはできますか?能力を学ぶことは高級です!
学習の最低グレードは、この時間は唯一の学校の学習段階の大半として、学ぶことを強制することができ、基本的には自己学習能力ではありません。
学習能力がほとんどない低レベルの自習は、候補者は、アセスメントのようないくつかのものを扱うことができ、積極的に迫害外力を必要とせずに行うことができます。
学年で学習能力は簡単にプロの自己検診に参加することができ、資格を取得するために、このような自己検査として、所定の学習コンテンツを完了するために、独自の完全に独立した電源です。
学習能力の高いグレードは、私たちが呼んでいるもの、そしてあなたは、このような独学ものと独立して、選択した自分自身の学習内容の電源を完全に、することができ、学ぶことを選択し、独立して教科書や学習を選択するかを決定することができ、フィールドとは無関係ですマスターは民俗カテゴリの専門家です。
自己学習能力の最高レベルは、いかなる状況下にあるコンテンツを学ぶことができ、独立した探査、前任者から継承された学習新しい知識は完全に新しいフィールドをしませんでした、その後、トップの学習能力である新しい発明の出現、のプロセスは、マスターであります独立した自己学習機能の発明を反映しています。
私はハイグレードの学習レベルを達成する能力限りだと思うので、それは真の学習と見なされます。
議論へようこそ
私のビルドは、本来の意図を学ぶためのコミュニティは、ポリのクラスに一人で一緒に来て、若い人たちに行くことができ試行錯誤が多い同じ欲望と私の友人自律的かつ独立した生活、特に若者を追求することである[されます] 646 854 445:私たちは一緒にいた時間、毎日成長する互いに、付着と通信し、コミュニティへようこそQQグループを学ぶために[あります]
または訪問:www.941xue.com
[スティックの自己記述のルーチン]
最後のルーチンの説明、なぜ私は自習を主張すべきです。
「私は太陽を見ていない場合、私はこの暗いと一緒に暮らすことができますが、太陽が、私は、荒涼とした更新荒涼となりました。」
- エミリー・ディキンソン
あなたは彼の以前の生活を見てどのように私に尋ねるしたい場合は、私は昨日と今日の答えは完全に異なるものになると思います。
子どもたちの周りの人々に、時には相互の調和を、時にはに対する舌;昨日、私はほとんど常に人生を生き、コマンドの種類を聞いて、バッグ本体月給を取った、荒涼とした満足感で心の意識的な平和を生きます終始、Chuiladanchang作業、些細な生活を示し、時間をマークし、ステップで行進の破砕、平和運動の素晴らしさに統合することができエクスタシー、エクスタシー、。当時、私はこれが私の運命アップしている普通の生活のゆったり辞任、だと思います。
荒涼としない - しかし、ある日、私は太陽の下で異なる日と異なる生活環境を見ました。
今日、私は... ...広く開いた反省をすべて目を逃した人生の通過を、見て、圧倒ステップで行進、荒涼とした痛み、変化に意識的な願望に住んでいます
Jiangzai私は戻って行くことができない、私だけの変化が唯一の正しい方向であることを知っています。
まず、なぜ古い時代はまだ学んでいます
夕食に行くために多くのことをあきらめていない、遊びにHI歌を行く、映画を見に行く、キャッチドラマ......時間、その後、学習年齢に従事し、もはや行われているように思わなければならない、無限の人が周りに戸惑いも軽蔑貧しい魅了......
しかし、私は生涯学習の誓いを放棄したくありません。
なぜなら -
私は私の人生今日現状の状態に同意しません!
ロバート・キヨサキは、あなたが望むものではありません彼らの現在の生活に反映させるために、私たちに語っていないという最高のモチベーションと答え?
自分たちの生活のほとんどを経て、その後、一度だけ見つけるために、今現在進行中の人生はあなたが望むものではない、それは経験の一種でありますか?
誠実な気持ちの唯一の心のこの質問に答える、そして豊かな言語が描かれていないようにするためです。
トレッキングの経験の半分が、それはすべての過去が間違っている是認する勇気を持っているどのように多くの人々、右行かない発見?
そして、私は過去の私に教えて喜ん:「あなたがしている間違っています!。」
だから、半生の間違い、大きなプレッシャーと頭の時代を経験している、希望と半分はラダーフレームの端からありますし、ダウン再び、それで別のはしごを登るために足かせ?
私は希望があることを信じることを好みます!
私は上に行くために生涯学習にすべての理由を接着するために継続したい理由です。
第二には、この年齢ではまだこれらの技術は意味を成しません学習します
純粋な技術は、この時代は、実際には意味はありません。
しかし、関心は意味を越えて行くことができます。
しかし、技術は思考の変化につながることができ、これは意味があります。
自分の心の中で投資、改革のアイデア、これは最も保存、より長期的な投資では、過去に私は最初から、自分の心の中に投資し、その後、あまりにも、前にミスを投資したことがありません。
ロバート・キヨサキは本当に豊かでリッチ時間あることを教えてくれる、本当の自由は、彼らが行うことを喜んでいるかを決定する自由です。
私は私の興味の何かをしても構わないと思ってるので、私はその日の選択の自由を持っていることを望みますので、けれどもその日は、まだそれほど遠くから今日かもしれないが、私は一日以上は離れても、一歩前進を取るという希望から、いくつかの手順をキャッチすることを信じたいです。
さらに、私は、これらの技術に完全に完全にマスターすることができなかったかもしれませんが、技術自体は心の目覚めは、私は私からより積極的に離れて実行することを残すだろうと考えているので、限り、我々はそれを理解し、啓発触発されているが、少し速く近い将来に、あまりにも遠いという未知の将来によって放棄されることはありません。
だから、どのように私はペースクエストを追いかけてあきらめることができますか?
私は信じたい:ない遅すぎるかもしれない、遅すぎる感じ。
[同時音声メモ]
https://www.ximalaya.com/keji/19103006/271995817
[学習]画面記録画面
https://www.bilibili.com/video/av97423188/