問題一覧に戻る
中級実践的な機能
問題70: ABIエンコード/デコード
SolidityのABIエンコードとデコードを学習します - コントラクト相互作用のためのデータシリアライズです。abi.encodeはパディング付きの標準ABIエンコーディングを作成します。abi.encodePackedはコンパクトなデータのためパディングを削除します。abi.decodeはエンコードされたバイトから値を抽出します。これらの関数は低レベル呼び出し、関数シグネチャの作成、データシリアライズに不可欠です。encodePackedはkeccak256でのハッシュ化によく使用されます。ABIエンコーディングの理解はDeFiプロトコルでの相互通信に重要です。
pragma solidity ^0.8.0;
contract ABIEncoding {
function encodeData(uint256 x, address addr)
public pure returns (bytes memory) {
// データをエンコード
return abi.(x, addr);
}
function decodeData(bytes memory data)
public pure returns (uint256, address) {
// データをデコード
return abi.(data, (uint256, address));
}
// パックエンコード
function hashPacked(string memory text)
public pure returns (bytes32) {
return keccak256(abi.(text));
}
}