問題一覧に戻る
中級ガス最適化
問題73: グローバル関数

Solidityのグローバル数学関数を学習します - 安全な剰余演算のためのaddmodとmulmodです。これらの関数は中間オーバーフローリスクなしに加算/乗算後に剰余演算を実行します。剰余前にオーバーフローする可能性がある通常の演算とは異なり、内部的により高い精度で(a op b) % mを計算します。暗号操作、数学アルゴリズムの実装、大きな数の安全な計算に不可欠です。これらの関数の理解はボンディングカーブやAMM式などの複雑な数学演算を含むDeFiプロトコル構築に重要です。

pragma solidity ^0.8.0;

contract GlobalFunctions {
// 安全な剰余加算
function safeAddMod(
uint256 a,
uint256 b,
uint256 modulus
) public pure returns (uint256) {
return (a, b, modulus);
}

// 安全な剰余乗算
function safeMulMod(
uint256 a,
uint256 b,
uint256 modulus
) public pure returns (uint256) {
return (a, b, modulus);
}

// べき乗剰余の例
function modularExponentiation(
uint256 base,
uint256 exponent,
uint256 modulus
) public pure returns (uint256) {
uint256 result = 1;
base = base % modulus;

while (exponent > 0) {
if (exponent % 2 == 1) {
result = (result, base, modulus);
}
base = (base, base, modulus);
exponent = exponent / 2;
}

return result;
}
}