Siblearn Academy siblearn academy

Library

کتابخانه ها شبیه قراردادها هستند، اما شما نمی توانید هیچ متغیر حالت و را اعلام کنید

اگر تمام عملکردهای کتابخانه داخلی باشند، یک کتابخانه در قرارداد تعبیه شده است.

در غیر این صورت، کتابخانه باید قبل از استقرار قرارداد مستقر شده و سپس پیوند داده شود.


// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;

library Math {
    function sqrt(uint256 y) internal pure returns (uint256 z) {
        if (y > 3) {
            z = y;
            uint256 x = y / 2 + 1;
            while (x < z) {
                z = x;
                x = (y / x + x) / 2;
            }
        } else if (y != 0) {
            z = 1;
        }
        // else z = 0 (default value)
    }
}

contract TestMath {
    function testSquareRoot(uint256 x) public pure returns (uint256) {
        return Math.sqrt(x);
    }
}

// Array function to delete element at index and re-organize the array
// so that there are no gaps between the elements.
library Array {
    function remove(uint256[] storage arr, uint256 index) public {
        // Move the last element into the place to delete
        require(arr.length > 0, "Can't remove from empty array");
        arr[index] = arr[arr.length - 1];
        arr.pop();
    }
}

contract TestArray {
    using Array for uint256[];

    uint256[] public arr;

    function testArrayRemove() public {
        for (uint256 i = 0; i < 3; i++) {
            arr.push(i);
        }

        arr.remove(1);

        assert(arr.length == 2);
        assert(arr[0] == 0);
        assert(arr[1] == 2);
    }
}

روی محیط توسعه ی Remix امتحان بکنید

  • Library.sol
  • بازگشت به لیست