問題一覧に戻る
中級データ型
問題39: Calldataロケーション

Solidityのcalldataを学習します - 外部関数パラメータ用の特別なデータロケーションです。Calldataは読み取り専用で非常にガス効率的で、外部関数に配列や文字列を渡すのに最適です。メモリとは異なり、calldataはデータをコピーしないため、大幅なガスを節約します。不変であり、データの整合性を保証します。外部関数は参照型にcalldataを使用する必要があり、パブリック関数はメモリを使用できます。Calldataの理解は大量のデータを処理するコントラクト、特にDeFiプロトコルでのガスコスト最適化に重要です。

pragma solidity ^0.8.0;

contract CalldataExample {
// 外部関数でcalldata使用
function processData(uint256[] data)
external pure returns (uint256) {
return data[0];
}

// 返却用にメモリにコピー
function copyData(uint256[] calldata input)
external pure returns (uint256[] ) {
return input;
}
}