# 2.DMCCトークンのコアアーキテクチャ

DMCC トークンは、Solidity の連想配列またはキー値配列の概念を表す 2 つのマッピング オブジェクトを定義します。

mapping(address => uint256) balances;

mapping(address => mapping (address => uint256)) allowed;

\
最初のマッピングオブジェクトであるbalancesは、各DMCC所有者アカウントのトークン残高を保有する。 2番目のマッピングオブジェクトallowedには、指定されたアカウントから引き出すことが承認されたすべてのアカウントと、それぞれに対して許可された引き出しの合計が含まれる。

\
以下は上記のコードベースで応用されたDMCCの機能である。

\
**a.総トークン供給を得る**

//solidity

function totalSupply() public view virtual override(IERC20, IERC777) returns (uint256) { return \_totalSupply;

}

//

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

\
**b.所有者のトークン残高を取得する**

//solidity

function balanceOf(address tokenHolder) public view virtual override(IERC20, IERC777) returns (uint256) { return \_balances\[tokenHolder];

}

//

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

\
**c. 別のアカウントにトークンを送信**

//solidity

function transfer(address recipient, uint256 amount) public virtual override returns (bool) {

\_send(\_msgSender(), recipient, amount, "", "", false); return true;

}

//

\
transfer関数はnumTokens所有者の残額から他のユーザーの残額へトークン量を移動するのに使われる。 receiverは譲渡する所有者がmsg.sender機能を実行する人であり、これはDMCCトークン所有者だけがDMCCを他の人に譲渡できることを意味する。

\
**d. SafeMath Solidity ライブラリー**

Safemath Codeはハッカーが契約を違反すると知られている一つの方法である整数オーバーフロー攻撃を処理するためのDMCCのソリディティライブラリーだ。 このようなコードはハッカーの攻撃契約で関連定数をパラメーターに伝達して誤った数値を検証する。

Safemath Codeは算術作業を行う前にオーバーフローをテストしてハッキングを防止するので、オーバーフロー攻撃の危険を取り除く。 ライブラリが小さいため、契約サイズへの影響が最小限に抑えられ、容量が軽くストレージ使用コストを削減する。\


以下はDMCCトークンのSafemathコード例である。

\
//solidity

SafeMath is no longer needed starting with Solidity 0.8. The compiler now has built in overflow checking.

//

SafeMathはassert文を使って伝達されたパラメータの正確性を確認する。 assert失敗、機能実行は直ちに中断され、すべてのブロックチェーントランザクションはロールバックされる。 以下はどのようにSafemath 関数を応用しているかを示している。

//solidity

SafeMath is no longer needed starting with Solidity 0.8. The compiler now has built in overflow checking.

//
