イーサリアム -- ERC 標準

1.ERC20規格

イーサリアム上で公開される標準トークンであり、イーサリアム上のERC20規格を満たす、つまり所定の機能やイベントを実装するものであれば、誰でも独自のERC20トークンを発行することができます。

// 函数
function name() public view returns (string)
function symbol() public view returns (string)
function decimals() public view returns (uint8)
function totalSupply() public view returns (uint256)
function balanceOf(address _owner) public view returns (uint256 balance)
function transfer(address _to, uint256 _value) public returns (bool success)
function transferFrom(address _from, address _to, uint256 _value) public returns (bool success)
function approve(address _spender, uint256 _value) public returns (bool success)
function allowance(address _owner, address _spender) public view returns (uint256 remaining)
//事件
event Transfer(address indexed _from, address indexed _to, uint256 _value)
event Approval(address indexed _owner, address indexed _spender, uint256 _value)

上記の機能やイベントが実装されれば、イーサリアム上で対応するトークンを発行することが可能となり、現在イーサリアム上には多数のERC20トークンが存在します。

ERC721 標準は代替不可能なトークンであり、NFT によってリリースされた対応する標準は ERC20 に似ています。

2.ERC20の問題点

しかし、ERC20 アノテーション自体には多くの制限があり、ERC20 トークン == 規格に基づいて機能を追加することは非常に難しく、1 つのトランザクション内で完了できないことも多くあります。
主な問題は次のとおりです。

  • トークンの転送を受信した場合、ERC20 標準ではトークンの送信者をコントラクトに記録できません。
  • ERC20 標準には転送通知メカニズムがありません
  • ERC20 トークンを転送する場合、追加情報を運ぶことはできません。

現時点では、ERC777 標準の登場により、この問題はより適切に解決されました。

3. ERC1820 – ユニバーサルレジストリ契約

ERC1820 は ERC165 と互換性があり、ERC165 標準自体は、インターフェイスを識別する方法と、コントラクトが特定の標準インターフェイスを実装しているかどうかを検出する方法を標準化しています。
ERC1820 標準は、スマート コントラクトと通常のユーザー アカウントがレジストリに公開できる機能を定義します。
誰でもこのレジストリにクエリを実行して、どのアドレスが特定のインターフェイスを実装しているかを問い合わせることができ、スマート コントラクトが実装ロジックを処理します。
ERC1820 は主に 2 つのインターフェイスを実装します。

  • setInterfaceImplementer(address _addr, bytes32 _interfaceHash, address _implementer) は、
    アドレス (_addr) のインターフェース (_interfaceHash インターフェース名 keccak256) をどのコントラクトで実装するかを設定します (_implementer)。
  • getInterfaceImplementer(address _addr, bytes32 _interfaceHash) 外部ビューは (address) を返します。
    この関数は、どのコントラクトがアドレス (_addr) のインターフェイスを実装しているかを照会するために使用されます。

3.ERC777

主な利点:

  1. ERC777 は ERC20 と互換性があります。ERC20 に基づいて、トークンを転送するための **send(dest, value, data)** が定義されています。他の情報を運ぶために追加のパラメーターが使用されます。送信関数は、所有者と受信者が正しいかどうかを検出します。対応するフック関数が実装されている 実装されている場合、対応するフック関数が呼び出されます。
    ERC777 が送信から転送を使用する場合、保有者および受信者のアドレスに対して ERC1820 の getInterfaceImplementer 関数を使用して、対応する実装契約があるかどうかを問い合わせます。
    インターフェース名と関数名はERC777の標準仕様で決まっており、実装されていれば対応する呼び出しが行われます。
  2. コントラクトと通常のアドレスはどちらも、tokensToSend フック関数を登録することで、どのトークンの送信を拒否するかを制御できます (送信の拒否は、フック関数 tokensToSend で元に戻すことで実現されます)。
  3. コントラクトと通常のアドレスはどちらも、tokensReceived フック関数を登録することで、どのトークンの受け入れを制御し、拒否することができます (拒否は、フック関数 tokensReceived で元に戻すことで実現されます)。
  4. tokensReceived は、2 つの呼び出し (approve/transferFrom) で完了する必要がある ERC20 とは異なり、フック関数を使用して 1 つのトランザクションでトークンを送信し、トークンを受け入れるようにコントラクトに通知できます。

3-1 インターフェースの説明と実装規則

ERC777 コントラクトは、ERC1820 を通じて ERC777Token インターフェイスと ERC20Token インターフェイスを登録する必要があります。

3-2 オペレーター

ERC777 では、オペレーターの新しい役割を定義しています。オペレーターは、モバイル トークンとして機能するアドレスです。各アドレスは、独自のトークンを直感的に移動させ、ホルダーとオペレーターの概念を分離します。

3-3トークンの送信

ERC777 は、次の 2 つの方法を使用してトークンを送信します。

send(address to, uint256 amount, bytes calldata data) external

function operatorSend(
    address from,
    address to,
    uint256 amount,
    bytes calldata data,
    bytes calldata operatorData
) external

OperatorSend は、パラメーター OperatorData を通じてオペレーターの情報を伝達できます。対応するアカウントの残高の加算と減算を実行し、イベントをトリガーすることに加えて、トークンの送信には追加の規定もあります。

  1. 所有者が ERC1820 を通じて ERC777TokensSender 実装インターフェイスを登録している場合、トークン コントラクトはその tokensToSend フック関数を呼び出す必要があります。
  2. 受信者が ERC1820 を通じて ERC777TokensRecipient 実装インターフェイスを登録している場合、トークン コントラクトはその tokensReceived フック関数を呼び出す必要があります。
  3. tokensToSend フック関数がある場合は、残高ステータスを変更する前にそれを呼び出す必要があります。
  4. tokensReceived フック関数がある場合は、残高ステータスを変更した後に呼び出す必要があります。

ERC777トークン送信者

すべての ERC777 コントラクトでは、所有者アドレスは 1 つの ERC777TokenSender インターフェイス実装のみを登録できます。ERC777TokenSender 実装は、複数の ERC777 コントラクトによって呼び出されます。ERC777TokenSenderインターフェイスの実装コントラクトでは、msg.sender は演算子ではなく、ERC777 コントラクト アドレスです。

ERC777トークン受信者

受信者がコントラクト アドレスの場合、ERC777TokensRecipient インターフェイスを登録して実装する必要があります (これにより、トークンがロックされるのを防ぐことができます)。実装されていない場合、ERC777 トークン コントラクトはトランザクション状態に戻る必要があります。

ERC721 および ERC777 標準のいくつかの問題によって引き起こされる脆弱性は、後で紹介されます。

ERC777 トークンの詳細な概要は、次の文書にあります。ERC777 標準
の概要 上記の ERC721、20、165、777、1820 およびその他の標準の詳細な説明は、この文書にあります。Ethereum EIP の説明

おすすめ

転載: blog.csdn.net/m0_53689197/article/details/134043116