Sonic Blaze Testnet

Contract

0x617b75643B784ca57c8FC016099A09eEb245f0bB

Overview

S Balance

Sonic Blaze LogoSonic Blaze LogoSonic Blaze Logo0 S

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To

There are no matching entries

> 10 Internal Transactions found.

Latest 22 internal transactions

Parent Transaction Hash Block From To
168977792025-01-31 13:42:1611 days ago1738330936
0x617b7564...Eb245f0bB
0 S
168972302025-01-31 13:39:0111 days ago1738330741
0x617b7564...Eb245f0bB
0 S
168971852025-01-31 13:38:4411 days ago1738330724
0x617b7564...Eb245f0bB
0 S
168971412025-01-31 13:38:2811 days ago1738330708
0x617b7564...Eb245f0bB
0 S
168970702025-01-31 13:38:0311 days ago1738330683
0x617b7564...Eb245f0bB
0 S
168946002025-01-31 13:23:3111 days ago1738329811
0x617b7564...Eb245f0bB
0 S
168935272025-01-31 13:17:0511 days ago1738329425
0x617b7564...Eb245f0bB
0 S
168935072025-01-31 13:16:5811 days ago1738329418
0x617b7564...Eb245f0bB
0 S
168934742025-01-31 13:16:4711 days ago1738329407
0x617b7564...Eb245f0bB
0 S
168932572025-01-31 13:15:3411 days ago1738329334
0x617b7564...Eb245f0bB
0 S
168931902025-01-31 13:15:1011 days ago1738329310
0x617b7564...Eb245f0bB
0 S
168931452025-01-31 13:14:5511 days ago1738329295
0x617b7564...Eb245f0bB
0 S
168930992025-01-31 13:14:3811 days ago1738329278
0x617b7564...Eb245f0bB
0 S
168926742025-01-31 13:12:0711 days ago1738329127
0x617b7564...Eb245f0bB
0 S
168920662025-01-31 13:08:2211 days ago1738328902
0x617b7564...Eb245f0bB
0 S
168913472025-01-31 13:03:5911 days ago1738328639
0x617b7564...Eb245f0bB
0 S
168913152025-01-31 13:03:4811 days ago1738328628
0x617b7564...Eb245f0bB
0 S
168912932025-01-31 13:03:4011 days ago1738328620
0x617b7564...Eb245f0bB
0 S
168902422025-01-31 12:57:1611 days ago1738328236
0x617b7564...Eb245f0bB
0 S
168894662025-01-31 12:52:3911 days ago1738327959
0x617b7564...Eb245f0bB
0 S
168893702025-01-31 12:52:0511 days ago1738327925
0x617b7564...Eb245f0bB
0 S
168892842025-01-31 12:51:3211 days ago1738327892
0x617b7564...Eb245f0bB
0 S
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
LinearDistributionIntervalDecrease

Compiler Version
v0.8.22+commit.4fc1097e

Optimization Enabled:
Yes with 200 runs

Other Settings:
paris EvmVersion

Contract Source Code (Solidity Standard Json-Input format)

File 1 of 1 : LinearDistributionIntervalDecrease.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.22;

/**
 * This is the library that calculates the reward for the period with linear distribution and interval decrease.
 * Supports the constant reward amount (decreaseAmount_ = 0)
 */
library LinearDistributionIntervalDecrease {
    /**
     * The function to calculate the reward for the period.
     * @param initialAmount_ The initial reward amount.
     * @param decreaseAmount_ The reward decrease amount.
     * @param payoutStart_ The timestamp when the period starts to pay out rewards.
     * @param interval_ The interval in seconds between reward decreases.
     * @param startTime_ The timestamp when the period starts.
     * @param endTime_ The timestamp when the period ends.
     * @return The reward amount.
     */
    function getPeriodReward(
        uint256 initialAmount_,
        uint256 decreaseAmount_,
        uint128 payoutStart_,
        uint128 interval_,
        uint128 startTime_,
        uint128 endTime_
    ) external pure returns (uint256) {
        if (interval_ == 0) {
            return 0;
        }

        // 'startTime_' can't be less than 'payoutStart_'
        if (startTime_ < payoutStart_) {
            startTime_ = payoutStart_;
        }

        uint128 maxEndTime_ = _calculateMaxEndTime(payoutStart_, interval_, initialAmount_, decreaseAmount_);

        if (endTime_ > maxEndTime_) {
            endTime_ = maxEndTime_;
        }

        // Return 0 when calculation 'startTime_' is bigger then 'endTime_'...
        if (startTime_ >= endTime_) {
            return 0;
        }

        // Calculate interval that less then 'interval_' range
        uint256 timePassedBefore_ = startTime_ - payoutStart_;
        if ((timePassedBefore_ / interval_) == ((endTime_ - payoutStart_) / interval_)) {
            uint256 intervalsPassed_ = timePassedBefore_ / interval_;
            uint256 intervalFullReward_ = initialAmount_ - intervalsPassed_ * decreaseAmount_;

            return (intervalFullReward_ * (endTime_ - startTime_)) / interval_;
        }

        // Calculate interval that more then 'interval_' range
        uint256 firstPeriodReward_ = _calculatePartPeriodReward(
            payoutStart_,
            startTime_,
            interval_,
            initialAmount_,
            decreaseAmount_,
            true
        );

        uint256 secondPeriodReward_ = _calculateFullPeriodReward(
            payoutStart_,
            startTime_,
            endTime_,
            interval_,
            initialAmount_,
            decreaseAmount_
        );

        uint256 thirdPeriodReward_ = _calculatePartPeriodReward(
            payoutStart_,
            endTime_,
            interval_,
            initialAmount_,
            decreaseAmount_,
            false
        );

        return firstPeriodReward_ + secondPeriodReward_ + thirdPeriodReward_;
    }

    function _calculateMaxEndTime(
        uint128 payoutStart_,
        uint128 interval_,
        uint256 initialAmount_,
        uint256 decreaseAmount_
    ) private pure returns (uint128) {
        if (decreaseAmount_ == 0) {
            return type(uint128).max;
        }

        uint256 maxIntervals_ = _divideCeil(initialAmount_, decreaseAmount_);

        return uint128(payoutStart_ + maxIntervals_ * interval_);
    }

    function _calculatePartPeriodReward(
        uint128 payoutStart_,
        uint128 startTime_,
        uint128 interval_,
        uint256 initialAmount_,
        uint256 decreaseAmount_,
        bool toEnd_
    ) private pure returns (uint256) {
        uint256 intervalsPassed_ = (startTime_ - payoutStart_) / interval_;
        uint256 decreaseRewardAmount_ = intervalsPassed_ * decreaseAmount_;
        if (decreaseRewardAmount_ >= initialAmount_) {
            return 0;
        }
        uint256 intervalFullReward_ = initialAmount_ - decreaseRewardAmount_;

        uint256 intervalPart_;
        if (toEnd_) {
            intervalPart_ = interval_ * (intervalsPassed_ + 1) + payoutStart_ - startTime_;
        } else {
            intervalPart_ = startTime_ - interval_ * intervalsPassed_ - payoutStart_;
        }

        if (intervalPart_ == interval_) {
            return 0;
        }

        return (intervalFullReward_ * intervalPart_) / interval_;
    }

    function _calculateFullPeriodReward(
        uint128 payoutStart_,
        uint128 startTime_,
        uint128 endTime_,
        uint128 interval_,
        uint256 initialAmount_,
        uint256 decreaseAmount_
    ) private pure returns (uint256) {
        // START calculate initial reward when period start
        uint256 timePassedBefore_ = startTime_ - payoutStart_;
        uint256 intervalsPassedBefore_ = _divideCeil(timePassedBefore_, interval_);

        uint256 decreaseRewardAmount_ = intervalsPassedBefore_ * decreaseAmount_;

        if (decreaseRewardAmount_ >= initialAmount_) {
            return 0;
        }

        uint256 initialReward_ = initialAmount_ - decreaseRewardAmount_;
        // END

        // Intervals passed
        uint256 ip_ = ((endTime_ - payoutStart_ - intervalsPassedBefore_ * interval_) / interval_);
        if (ip_ == 0) {
            return 0;
        }

        return initialReward_ * ip_ - (decreaseAmount_ * (ip_ * (ip_ - 1))) / 2;
    }

    function _divideCeil(uint256 a_, uint256 b_) private pure returns (uint256) {
        return (a_ + b_ - 1) / b_;
    }
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "evmVersion": "paris",
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"initialAmount_","type":"uint256"},{"internalType":"uint256","name":"decreaseAmount_","type":"uint256"},{"internalType":"uint128","name":"payoutStart_","type":"uint128"},{"internalType":"uint128","name":"interval_","type":"uint128"},{"internalType":"uint128","name":"startTime_","type":"uint128"},{"internalType":"uint128","name":"endTime_","type":"uint128"}],"name":"getPeriodReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"}]

61062361003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100355760003560e01c80638ef1035b1461003a575b600080fd5b61004d6100483660046104bd565b61005f565b60405190815260200160405180910390f35b6000836001600160801b031660000361007a575060006101f8565b846001600160801b0316836001600160801b03161015610098578492505b60006100a686868a8a610202565b9050806001600160801b0316836001600160801b031611156100c6578092505b826001600160801b0316846001600160801b0316106100e95760009150506101f8565b60006100f58786610539565b6001600160801b031690508561010b8886610539565b6101159190610576565b6001600160801b0316866001600160801b031682610133919061059c565b036101a357600061014d6001600160801b0388168361059c565b9050600061015b8a836105b0565b610165908c6105c7565b90506001600160801b03881661017b8888610539565b61018e906001600160801b0316836105b0565b610198919061059c565b9450505050506101f8565b60006101b48887898d8d600161025a565b905060006101c68988888b8f8f610383565b905060006101d98a888b8f8f600061025a565b9050806101e683856105da565b6101f091906105da565b955050505050505b9695505050505050565b60008160000361021a57506001600160801b03610252565b60006102268484610475565b905061023b6001600160801b038616826105b0565b61024e906001600160801b0388166105da565b9150505b949350505050565b600080856102688989610539565b6102729190610576565b6001600160801b03169050600061028985836105b0565b905085811061029d576000925050506101f8565b60006102a982886105c7565b9050600085156102fa576001600160801b03808b16908c166102cc8660016105da565b6102df906001600160801b038d166105b0565b6102e991906105da565b6102f391906105c7565b9050610339565b8a6001600160801b0316848a6001600160801b031661031991906105b0565b61032c906001600160801b038d166105c7565b61033691906105c7565b90505b886001600160801b031681036103565760009450505050506101f8565b6001600160801b03891661036a82846105b0565b610374919061059c565b9b9a5050505050505050505050565b6000806103908888610539565b6001600160801b0316905060006103b082876001600160801b0316610475565b905060006103be85836105b0565b90508581106103d357600093505050506101f8565b60006103df82886105c7565b905060006001600160801b0389166103f781866105b0565b6104018e8d610539565b6001600160801b031661041491906105c7565b61041e919061059c565b905080600003610436576000955050505050506101f8565b60026104436001836105c7565b61044d90836105b0565b61045790896105b0565b610461919061059c565b61046b82846105b0565b6101f091906105c7565b600081600161048482866105da565b61048e91906105c7565b610498919061059c565b90505b92915050565b80356001600160801b03811681146104b857600080fd5b919050565b60008060008060008060c087890312156104d657600080fd5b86359550602087013594506104ed604088016104a1565b93506104fb606088016104a1565b9250610509608088016104a1565b915061051760a088016104a1565b90509295509295509295565b634e487b7160e01b600052601160045260246000fd5b6001600160801b0382811682821603908082111561055957610559610523565b5092915050565b634e487b7160e01b600052601260045260246000fd5b60006001600160801b038084168061059057610590610560565b92169190910492915050565b6000826105ab576105ab610560565b500490565b808202811582820484141761049b5761049b610523565b8181038181111561049b5761049b610523565b8082018082111561049b5761049b61052356fea2646970667358221220671bd0dc858fbf147b74f11442f6ad73d10ea6e32e65250cc340a4f101065b8864736f6c63430008160033

Deployed Bytecode

0x73617b75643b784ca57c8fc016099a09eeb245f0bb30146080604052600436106100355760003560e01c80638ef1035b1461003a575b600080fd5b61004d6100483660046104bd565b61005f565b60405190815260200160405180910390f35b6000836001600160801b031660000361007a575060006101f8565b846001600160801b0316836001600160801b03161015610098578492505b60006100a686868a8a610202565b9050806001600160801b0316836001600160801b031611156100c6578092505b826001600160801b0316846001600160801b0316106100e95760009150506101f8565b60006100f58786610539565b6001600160801b031690508561010b8886610539565b6101159190610576565b6001600160801b0316866001600160801b031682610133919061059c565b036101a357600061014d6001600160801b0388168361059c565b9050600061015b8a836105b0565b610165908c6105c7565b90506001600160801b03881661017b8888610539565b61018e906001600160801b0316836105b0565b610198919061059c565b9450505050506101f8565b60006101b48887898d8d600161025a565b905060006101c68988888b8f8f610383565b905060006101d98a888b8f8f600061025a565b9050806101e683856105da565b6101f091906105da565b955050505050505b9695505050505050565b60008160000361021a57506001600160801b03610252565b60006102268484610475565b905061023b6001600160801b038616826105b0565b61024e906001600160801b0388166105da565b9150505b949350505050565b600080856102688989610539565b6102729190610576565b6001600160801b03169050600061028985836105b0565b905085811061029d576000925050506101f8565b60006102a982886105c7565b9050600085156102fa576001600160801b03808b16908c166102cc8660016105da565b6102df906001600160801b038d166105b0565b6102e991906105da565b6102f391906105c7565b9050610339565b8a6001600160801b0316848a6001600160801b031661031991906105b0565b61032c906001600160801b038d166105c7565b61033691906105c7565b90505b886001600160801b031681036103565760009450505050506101f8565b6001600160801b03891661036a82846105b0565b610374919061059c565b9b9a5050505050505050505050565b6000806103908888610539565b6001600160801b0316905060006103b082876001600160801b0316610475565b905060006103be85836105b0565b90508581106103d357600093505050506101f8565b60006103df82886105c7565b905060006001600160801b0389166103f781866105b0565b6104018e8d610539565b6001600160801b031661041491906105c7565b61041e919061059c565b905080600003610436576000955050505050506101f8565b60026104436001836105c7565b61044d90836105b0565b61045790896105b0565b610461919061059c565b61046b82846105b0565b6101f091906105c7565b600081600161048482866105da565b61048e91906105c7565b610498919061059c565b90505b92915050565b80356001600160801b03811681146104b857600080fd5b919050565b60008060008060008060c087890312156104d657600080fd5b86359550602087013594506104ed604088016104a1565b93506104fb606088016104a1565b9250610509608088016104a1565b915061051760a088016104a1565b90509295509295509295565b634e487b7160e01b600052601160045260246000fd5b6001600160801b0382811682821603908082111561055957610559610523565b5092915050565b634e487b7160e01b600052601260045260246000fd5b60006001600160801b038084168061059057610590610560565b92169190910492915050565b6000826105ab576105ab610560565b500490565b808202811582820484141761049b5761049b610523565b8181038181111561049b5761049b610523565b8082018082111561049b5761049b61052356fea2646970667358221220671bd0dc858fbf147b74f11442f6ad73d10ea6e32e65250cc340a4f101065b8864736f6c63430008160033

Block Transaction Gas Used Reward
view all blocks produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.