Skip to main content
PulseScanner.io

Address

0xad18d4e7ebff81818544b8e1da2cfb9b2807d965
Current Holdings
$1.23
TXs sent
not counted
First Active
2026-02-21
block 25,849,341
Last Active
207 days ago
block 25,849,423
Funded By
not identified

Net worth historyi

3 snapshots · to block 27,564,427coverage change 26 Augcoverage change 27 Augcoverage change 27 Augcoverage change 27 Augcoverage change 27 Aug
exact matchPulseSatoshiVaultsolc 0.8.29+commit.ab55807cruntime exact · creation exact
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/security/ReentrancyGuard.sol";


// ─────────────────────────────────────────────
// sTEST Token
// 1 token = 1 satoshi
// 21 trillion total supply (21,000,000,000,000 sats)
// ─────────────────────────────────────────────

contract STEST is ERC20 {

    uint256 public constant TOTAL_SUPPLY = 21_000_000_000_000;

    constructor() ERC20("STEST", "sTEST") {
        _mint(msg.sender, TOTAL_SUPPLY);
    }

    // No decimals → whole sats only
    function decimals() public pure override returns (uint8) {
        return 0;
    }
}


// ─────────────────────────────────────────────
// Pulse Satoshi Vault
// 1 sat (WBTC base unit) = 1 sTEST
// Fully inventory-based swap
// ─────────────────────────────────────────────

contract PulseSatoshiVault is Ownable, ReentrancyGuard {
    using SafeERC20 for IERC20;

    IERC20 public immutable wbtc;
    IERC20 public immutable stest;

    bool public paused;

    event Deposited(address indexed user, uint256 wbtcAmount);
    event Redeemed(address indexed user, uint256 stestAmount);

    constructor(address _wbtc, address _stest) Ownable(msg.sender) {
        wbtc = IERC20(_wbtc);
        stest = IERC20(_stest);

        require(
            stest.totalSupply() == 21_000_000_000_000,
            "Invalid sTEST supply"
        );
    }

    modifier whenNotPaused() {
        require(!paused, "Vault is paused");
        _;
    }

    // ── Deposit WBTC → receive equal amount of sTEST
    function deposit(uint256 wbtcAmount)
        external
        nonReentrant
        whenNotPaused
    {
        require(wbtcAmount > 0, "Amount must be > 0");

        // 1 sat = 1 sTEST
        require(
            stest.balanceOf(address(this)) >= wbtcAmount,
            "Insufficient sTEST in vault"
        );

        wbtc.safeTransferFrom(msg.sender, address(this), wbtcAmount);
        stest.safeTransfer(msg.sender, wbtcAmount);

        emit Deposited(msg.sender, wbtcAmount);
    }

    // ── Redeem sTEST → receive equal amount of WBTC
    function redeem(uint256 stestAmount)
        external
        nonReentrant
        whenNotPaused
    {
        require(stestAmount > 0, "Amount must be > 0");

        require(
            wbtc.balanceOf(address(this)) >= stestAmount,
            "Insufficient WBTC reserves"
        );

        stest.safeTransferFrom(msg.sender, address(this), stestAmount);
        wbtc.safeTransfer(msg.sender, stestAmount);

        emit Redeemed(msg.sender, stestAmount);
    }

    // ── Owner Controls
    function pause() external onlyOwner {
        paused = true;
    }

    function unpause() external onlyOwner {
        paused = false;
    }

    // ── View Helpers
    function vaultSTESTBalance() external view returns (uint256) {
        return stest.balanceOf(address(this));
    }

    function vaultWBTCBalance() external view returns (uint256) {
        return wbtc.balanceOf(address(this));
    }

    function circulatingSTEST() external view returns (uint256) {
        return stest.totalSupply() - stest.balanceOf(address(this));
    }
}