Artifacts
DISCLAIMER // NFA // DYOR
This analysis is based on decompiled bytecode — the contract source code is not verified on
Etherscan. Function names, parameter types, and internal logic are inferred from selector
matching, transaction input decoding, and event log analysis. We are not smart contract
security experts. This document should not be considered a comprehensive security audit or
financial advice. Always verify critical information independently.
⊙ generated by robots | curated by humans
| METADATA | |
|---|---|
| Contract Address | 0xD8706D2D...dC2C2c (etherscan) |
| Network | Ethereum Mainnet |
| Analysis Date | 2026-03-29 |
Runtime Bytecode
The deployed contract bytecode fetched from the blockchain.
Source: Etherscan - Contract Code
Command:
Artifact:
0x6080604052600436106101445760003560e01c806375619ab5116100b6578063cb3d05641161006f578063cb3d0564146103c2578063d7740ee1146103d7578063db2e21bc146103df578063e74b981b146103f4578063f2fde38b14610414578063f3234ff71461043457600080fd5b806375619ab5146103015780638da5cb5b14610321578063a4c1e9c01461033f578063bbb8518814610352578063bfe1092814610382578063c320c727146103a257600080fd5b80633f90916a116101085780633f90916a1461021b57806346904840146102315780634e71d92d1461026957806367b40cf71461027e57806370a08231146102ab5780637259e0f8146102e157600080fd5b806314c44e09146101505780631e1c6a071461017957806323b221a0146101b957806330a90736146101db57806331fbea69146101ee57600080fd5b3661014b57005b600080fd5b34801561015c57600080fd5b5061016660085481565b6040519081526020015b60405180910390f35b34801561018557600080fd5b506101a96101943660046113d0565b60096020526000908152604090205460ff1681565b6040519015158152602001610170565b3480156101c557600080fd5b506101d96101d4366004611400565b610461565b005b6101d96101e9366004611465565b61065a565b3480156101fa57600080fd5b506101666102093660046113d0565b60046020526000908152604090205481565b34801561022757600080fd5b5061016660065481565b34801561023d57600080fd5b50600754610251906001600160a01b031681565b6040516001600160a01b039091168152602001610170565b34801561027557600080fd5b506101d9610ae0565b34801561028a57600080fd5b506101666102993660046113d0565b60036020526000908152604090205481565b3480156102b757600080fd5b506101666102c63660046113d0565b6001600160a01b031660009081526003602052604090205490565b3480156102ed57600080fd5b506102516102fc366004611400565b610b93565b34801561030d57600080fd5b506101d961031c3660046113d0565b610bbd565b34801561032d57600080fd5b506001546001600160a01b0316610251565b6101d961034d3660046113d0565b610c9b565b34801561035e57600080fd5b50610367610dee565b60408051938452602084019290925290820152606001610170565b34801561038e57600080fd5b50600254610251906001600160a01b031681565b3480156103ae57600080fd5b506101d96103bd366004611400565b610e1c565b3480156103ce57600080fd5b50600a54610166565b6101d9610e8b565b3480156103eb57600080fd5b506101d96110d7565b34801561040057600080fd5b506101d961040f3660046113d0565b61122a565b34801561042057600080fd5b506101d961042f3660046113d0565b6112fc565b34801561044057600080fd5b5061016661044f3660046113d0565b60056020526000908152604090205481565b60026000540361048c5760405162461bcd60e51b8152600401610483906114d1565b60405180910390fd5b6002600055806104de5760405162461bcd60e51b815260206004820152601f60248201527f526577617264506f6f6c52656769737472793a207a65726f20616d6f756e74006044820152606401610483565b3360009081526003602052604090205481111561054e5760405162461bcd60e51b815260206004820152602860248201527f526577617264506f6f6c52656769737472793a20696e73756666696369656e746044820152672062616c616e636560c01b6064820152608401610483565b336000908152600360205260408120805483929061056d90849061151e565b925050819055508060066000828254610586919061151e565b909155505033600090815260046020526040812080548392906105aa908490611537565b9091555050604051600090339083908381818185875af1925050503d80600081146105f1576040519150601f19603f3d011682016040523d82523d6000602084013e6105f6565b606091505b50509050806106175760405162461bcd60e51b81526004016104839061154a565b6040805183815242602082015233917ff01da32686223933d8a18a391060918c7f11a3648639edd87ae013e2e2731743910160405180910390a250506001600055565b6002546001600160a01b031633148061067d57506001546001600160a01b031633145b6106995760405162461bcd60e51b815260040161048390611591565b8281146106f45760405162461bcd60e51b815260206004820152602360248201527f526577617264506f6f6c52656769737472793a206c656e677468206d69736d616044820152620e8c6d60eb1b6064820152608401610483565b826107415760405162461bcd60e51b815260206004820181905260248201527f526577617264506f6f6c52656769737472793a20656d707479206172726179736044820152606401610483565b6000805b828110156107855783838281811061075f5761075f6115e7565b90506020020135826107719190611537565b91508061077d816115fd565b915050610745565b508034146107ed5760405162461bcd60e51b815260206004820152602f60248201527f526577617264506f6f6c52656769737472793a206d73672e76616c756520213d60448201526e2073756d206f6620616d6f756e747360881b6064820152608401610483565b4260005b85811015610ac057600087878381811061080d5761080d6115e7565b905060200201602081019061082291906113d0565b6001600160a01b0316036108485760405162461bcd60e51b815260040161048390611616565b600085858381811061085c5761085c6115e7565b90506020020135116108c15760405162461bcd60e51b815260206004820152602860248201527f526577617264506f6f6c52656769737472793a207a65726f20616d6f756e74206044820152673337b9103ab9b2b960c11b6064820152608401610483565b600960008888848181106108d7576108d76115e7565b90506020020160208101906108ec91906113d0565b6001600160a01b0316815260208101919091526040016000205460ff166109655760405162461bcd60e51b815260206004820152602760248201527f526577617264506f6f6c52656769737472793a2075736572206e6f74207265676044820152661a5cdd195c995960ca1b6064820152608401610483565b848482818110610977576109776115e7565b9050602002013560036000898985818110610994576109946115e7565b90506020020160208101906109a991906113d0565b6001600160a01b03166001600160a01b0316815260200190815260200160002060008282546109d89190611537565b90915550829050600560008989858181106109f5576109f56115e7565b9050602002016020810190610a0a91906113d0565b6001600160a01b03168152602081019190915260400160002055868682818110610a3657610a366115e7565b9050602002016020810190610a4b91906113d0565b6001600160a01b03167f630e4c9c62b2386aa5f29def4bdcf3208d4a77aa359ce0414aaddde09ba039a9868684818110610a8757610a876115e7565b9050602002013584604051610aa6929190918252602082015260400190565b60405180910390a280610ab8816115fd565b9150506107f1565b503460066000828254610ad39190611537565b9091555050505050505050565b600260005403610b025760405162461bcd60e51b8152600401610483906114d1565b600260009081553381526003602052604090205480610b6f5760405162461bcd60e51b8152602060048201526024808201527f526577617264506f6f6c52656769737472793a206e6f7468696e6720746f20636044820152636c61696d60e01b6064820152608401610483565b3360009081526003602052604081208190556006805483929061058690849061151e565b600a8181548110610ba357600080fd5b6000918252602090912001546001600160a01b0316905081565b6001546001600160a01b03163314610be75760405162461bcd60e51b81526004016104839061165b565b6001600160a01b038116610c495760405162461bcd60e51b8152602060048201526024808201527f526577617264506f6f6c52656769737472793a207a65726f20646973747269626044820152633aba37b960e11b6064820152608401610483565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f111a961d91cf441fe07e7bfddc128b30ab56974d1a76851e969e0642fdb2dd5090600090a35050565b6002546001600160a01b0316331480610cbe57506001546001600160a01b031633145b610cda5760405162461bcd60e51b815260040161048390611591565b6001600160a01b038116610d005760405162461bcd60e51b815260040161048390611616565b60003411610d505760405162461bcd60e51b815260206004820181905260248201527f526577617264506f6f6c52656769737472793a207a65726f206465706f7369746044820152606401610483565b6001600160a01b03811660009081526003602052604081208054349290610d78908490611537565b925050819055503460066000828254610d919190611537565b90915550506001600160a01b03811660008181526005602090815260409182902042908190558251348152918201527f630e4c9c62b2386aa5f29def4bdcf3208d4a77aa359ce0414aaddde09ba039a9910160405180910390a250565b60065447600082821015610e0b57610e06828461151e565b610e15565b610e15838361151e565b9050909192565b6001546001600160a01b03163314610e465760405162461bcd60e51b81526004016104839061165b565b600880549082905560408051828152602081018490527f50b218c5a101ad05d53ab0a964d01da639ee79525ae4b7802ed714249740a8d5910160405180910390a15050565b600260005403610ead5760405162461bcd60e51b8152600401610483906114d1565b600260009081553381526009602052604090205460ff1615610f205760405162461bcd60e51b815260206004820152602660248201527f526577617264506f6f6c52656769737472793a20616c726561647920726567696044820152651cdd195c995960d21b6064820152608401610483565b600854341015610f8c5760405162461bcd60e51b815260206004820152603160248201527f526577617264506f6f6c52656769737472793a20696e73756666696369656e7460448201527020726567697374726174696f6e2066656560781b6064820152608401610483565b33600081815260096020526040808220805460ff19166001908117909155600a8054918201815583527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b031916909317909255600754915190916001600160a01b03169034908381818185875af1925050503d8060008114611034576040519150601f19603f3d011682016040523d82523d6000602084013e611039565b606091505b505090508061109a5760405162461bcd60e51b815260206004820152602760248201527f526577617264506f6f6c52656769737472793a20666565207472616e736665726044820152660819985a5b195960ca1b6064820152608401610483565b60405134815233907f8e7aeb727a8d0fd229ea085622d6ed0bf0ec5eda2885f3b38e6438cf586970fa9060200160405180910390a2506001600055565b6001546001600160a01b031633146111015760405162461bcd60e51b81526004016104839061165b565b478061115f5760405162461bcd60e51b815260206004820152602760248201527f526577617264506f6f6c52656769737472793a206e6f7468696e6720746f20776044820152666974686472617760c81b6064820152608401610483565b600060068190556001546040516001600160a01b039091169083908381818185875af1925050503d80600081146111b2576040519150601f19603f3d011682016040523d82523d6000602084013e6111b7565b606091505b50509050806111d85760405162461bcd60e51b81526004016104839061154a565b6001546001600160a01b03166001600160a01b03167f2e39961a70a10f4d46383948095ac2752b3ee642a7c76aa827410aaff08c2e518360405161121e91815260200190565b60405180910390a25050565b6001546001600160a01b031633146112545760405162461bcd60e51b81526004016104839061165b565b6001600160a01b0381166112aa5760405162461bcd60e51b815260206004820181905260248201527f526577617264506f6f6c52656769737472793a207a65726f20616464726573736044820152606401610483565b600780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907faaebcf1bfa00580e41d966056b48521fa9f202645c86d4ddf28113e617c1b1d390600090a35050565b6001546001600160a01b031633146113265760405162461bcd60e51b81526004016104839061165b565b6001600160a01b0381166113745760405162461bcd60e51b81526020600482015260156024820152744f776e61626c653a207a65726f206164647265737360581b6044820152606401610483565b6001546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000602082840312156113e257600080fd5b81356001600160a01b03811681146113f957600080fd5b9392505050565b60006020828403121561141257600080fd5b5035919050565b60008083601f84011261142b57600080fd5b50813567ffffffffffffffff81111561144357600080fd5b6020830191508360208260051b850101111561145e57600080fd5b9250929050565b6000806000806040858703121561147b57600080fd5b843567ffffffffffffffff8082111561149357600080fd5b61149f88838901611419565b909650945060208701359150808211156114b857600080fd5b506114c587828801611419565b95989497509550505050565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8181038181111561153157611531611508565b92915050565b8082018082111561153157611531611508565b60208082526027908201527f526577617264506f6f6c52656769737472793a20455448207472616e736665726040820152660819985a5b195960ca1b606082015260800190565b60208082526036908201527f526577617264506f6f6c52656769737472793a2063616c6c6572206973206e6f6040820152753a103234b9ba3934b13aba37b91037b91037bbb732b960511b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60006001820161160f5761160f611508565b5060010190565b60208082526025908201527f526577617264506f6f6c52656769737472793a207a65726f2075736572206164604082015264647265737360d81b606082015260800190565b6020808252601c908201527f4f776e61626c653a2063616c6c6572206973206e6f74206f776e65720000000060408201526060019056fea26469706673582212207f491a5689c596bd8b1555e37f6a3a883cc77beed86394fdde2dc4b76136a27064736f6c63430008140033
Creation Bytecode
The full bytecode used to deploy the contract, including constructor code and arguments.
Source: Etherscan - Creation TX
Command:
export ETH_RPC_URL=https://eth.llamarpc.com
cast tx 0xc7eb1823b8d4175ca3abac5609a57a1ad59ababd8a17b7899a192dd7a011731b input
Constructor Arguments (last 96 bytes of creation bytecode):
| PARAMETER | TYPE | VALUE |
|---|---|---|
_distributor |
address |
0x867a2c98...db3157 (etherscan) |
_feeRecipient |
address |
0xe1f3fbb1...264a84 (etherscan) |
_registrationFee |
uint256 |
1000000000000000 (0.001 ETH) |
Reconstructed Source Code
Solidity source code reconstructed from bytecode analysis. This is an approximation based on function selectors, storage layout, and error messages found in the bytecode.
Not Verified Source
This is a reconstruction based on bytecode analysis and may not exactly match the original source code. It is provided for educational and analysis purposes only.
Source: Reconstructed from bytecode analysis using function selectors, storage slots, and error message strings.
Artifact:
// SPDX-License-Identifier: UNLICENSED
// RECONSTRUCTED FROM BYTECODE — Not original source
// Contract: RewardPoolRegistry
// Address: 0xD8706D2D39AaE656bB5Eb2383a541B6a1ddC2C2c
// Compiler: Solidity 0.8.20
// Deployed: 2026-03-27 (Block 24746335)
pragma solidity ^0.8.20;
contract RewardPoolRegistry {
// Events
event RewardClaimed(address indexed user, uint256 amount, uint256 timestamp);
event RewardDeposited(address indexed user, uint256 amount, uint256 timestamp);
event DistributorUpdated(address indexed oldDistributor, address indexed newDistributor);
event RegistrationFeeUpdated(uint256 oldFee, uint256 newFee);
event UserRegistered(address indexed user, uint256 amount);
event EmergencyWithdrawn(address indexed recipient, uint256 amount);
event FeeRecipientUpdated(address indexed oldRecipient, address indexed newRecipient);
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
// Storage
uint256 private _reentrancyGuard; // Slot 0
address public owner; // Slot 1
address public distributor; // Slot 2
mapping(address => uint256) public rewardBalance; // Slot 3
mapping(address => uint256) public totalClaimed; // Slot 4
mapping(address => uint256) public lastCreditedAt; // Slot 5
uint256 public totalPending; // Slot 6
address public feeRecipient; // Slot 7
uint256 public registrationFee; // Slot 8
mapping(address => bool) public poolExists; // Slot 9
address[] public registeredUsers; // Slot 10
modifier nonReentrant() {
require(_reentrancyGuard != 2, "ReentrancyGuard: reentrant call");
_reentrancyGuard = 2;
_;
_reentrancyGuard = 1;
}
modifier onlyOwner() {
require(msg.sender == owner, "Ownable: caller is not owner");
_;
}
constructor(address _distributor, address _feeRecipient, uint256 _registrationFee) {
_reentrancyGuard = 1;
require(msg.sender != address(0), "Ownable: zero address");
owner = msg.sender;
emit OwnershipTransferred(address(0), msg.sender);
require(_distributor != address(0), "RewardPoolRegistry: zero distributor");
distributor = _distributor;
emit DistributorUpdated(address(0), _distributor);
require(_feeRecipient != address(0), "RewardPoolRegistry: zero fee recipient");
feeRecipient = _feeRecipient;
registrationFee = _registrationFee;
emit FeeRecipientUpdated(address(0), _feeRecipient);
}
receive() external payable {}
function registerPool() external payable nonReentrant {
require(!poolExists[msg.sender], "RewardPoolRegistry: already registered");
require(msg.value >= registrationFee,
"RewardPoolRegistry: insufficient registration fee");
poolExists[msg.sender] = true;
registeredUsers.push(msg.sender);
(bool success, ) = feeRecipient.call{value: msg.value}("");
require(success, "RewardPoolRegistry: fee transfer failed");
emit UserRegistered(msg.sender, msg.value);
}
function claim() external nonReentrant {
uint256 amount = rewardBalance[msg.sender];
require(amount > 0, "RewardPoolRegistry: nothing to claim");
rewardBalance[msg.sender] = 0;
totalPending -= amount;
(bool success, ) = msg.sender.call{value: amount}("");
require(success, "RewardPoolRegistry: ETH transfer failed");
emit RewardClaimed(msg.sender, amount, block.timestamp);
}
function claimAmount(uint256 amount) external nonReentrant {
require(amount > 0, "RewardPoolRegistry: zero amount");
require(amount <= rewardBalance[msg.sender],
"RewardPoolRegistry: insufficient balance");
rewardBalance[msg.sender] -= amount;
totalPending -= amount;
totalClaimed[msg.sender] += amount;
(bool success, ) = msg.sender.call{value: amount}("");
require(success, "RewardPoolRegistry: ETH transfer failed");
emit RewardClaimed(msg.sender, amount, block.timestamp);
}
function depositToUser(address user) external payable {
require(msg.sender == distributor || msg.sender == owner,
"RewardPoolRegistry: caller is not distributor or owner");
require(user != address(0), "RewardPoolRegistry: zero user address");
require(msg.value > 0, "RewardPoolRegistry: zero deposit");
rewardBalance[user] += msg.value;
totalPending += msg.value;
lastCreditedAt[user] = block.timestamp;
emit RewardDeposited(user, msg.value, block.timestamp);
}
function batchDeposit(
address[] calldata users,
uint256[] calldata amounts
) external payable {
require(msg.sender == distributor || msg.sender == owner,
"RewardPoolRegistry: caller is not distributor or owner");
require(users.length == amounts.length,
"RewardPoolRegistry: length mismatch");
require(users.length > 0, "RewardPoolRegistry: empty arrays");
uint256 total = 0;
for (uint256 i = 0; i < amounts.length; i++) {
total += amounts[i];
}
require(msg.value == total,
"RewardPoolRegistry: msg.value != sum of amounts");
uint256 timestamp = block.timestamp;
for (uint256 i = 0; i < users.length; i++) {
require(users[i] != address(0),
"RewardPoolRegistry: zero user address");
require(amounts[i] > 0,
"RewardPoolRegistry: zero amount for user");
require(poolExists[users[i]],
"RewardPoolRegistry: user not registered");
rewardBalance[users[i]] += amounts[i];
lastCreditedAt[users[i]] = timestamp;
emit RewardDeposited(users[i], amounts[i], timestamp);
}
totalPending += msg.value;
}
function setDistributor(address newDistributor) external onlyOwner {
require(newDistributor != address(0),
"RewardPoolRegistry: zero distributor");
address old = distributor;
distributor = newDistributor;
emit DistributorUpdated(old, newDistributor);
}
function setFeeRecipient(address newRecipient) external onlyOwner {
require(newRecipient != address(0),
"RewardPoolRegistry: zero address");
address old = feeRecipient;
feeRecipient = newRecipient;
emit FeeRecipientUpdated(old, newRecipient);
}
function setRegistrationFee(uint256 newFee) external onlyOwner {
uint256 old = registrationFee;
registrationFee = newFee;
emit RegistrationFeeUpdated(old, newFee);
}
function emergencyWithdraw() external onlyOwner {
uint256 amount = address(this).balance;
require(amount > 0, "RewardPoolRegistry: nothing to withdraw");
totalPending = 0;
(bool success, ) = owner.call{value: amount}("");
require(success, "RewardPoolRegistry: ETH transfer failed");
emit EmergencyWithdrawn(owner, amount);
}
function transferOwnership(address newOwner) external onlyOwner {
require(newOwner != address(0), "Ownable: zero address");
emit OwnershipTransferred(owner, newOwner);
owner = newOwner;
}
function balanceOf(address user) external view returns (uint256) {
return rewardBalance[user];
}
function registeredUserCount() external view returns (uint256) {
return registeredUsers.length;
}
function getPoolStats() external view returns (uint256, uint256, uint256) {
uint256 pending = totalPending;
uint256 balance = address(this).balance;
uint256 diff;
if (pending > balance) {
diff = pending - balance;
} else {
diff = balance - pending;
}
return (pending, balance, diff);
}
}
Additional Artifacts
Event Topic Hashes
| EVENT | TOPIC HASH |
|---|---|
RewardClaimed(address,uint256,uint256) |
0xf01da326...731743 (events) |
RewardDeposited(address,uint256,uint256) |
0x630e4c9c...a039a9 (events) |
DistributorUpdated(address,address) |
0x111a961d...2dd50 (events) |
RegistrationFeeUpdated(uint256,uint256) |
0x50b218c5...40a8d5 (events) |
UserRegistered(address,uint256) |
0x8e7aeb72...6970fa (events) |
EmergencyWithdrawn(address,uint256) |
0x2e39961a...8c2e51 (events) |
FeeRecipientUpdated(address,address) |
0xaaebcf1b...c1b1d3 (events) |
OwnershipTransferred(address,address) |
0x8be0079c...6457e0 (events) |
Transaction Summary (as of 2026-03-29)
| METRIC | VALUE |
|---|---|
| Total Transactions | 180 |
| Successful | 175 |
| Failed | 5 |
| Unique Senders | 174+ |
registerPool() Calls |
179 (174 successful) |
| Registered Users | 174 |
| Internal Transactions | 174 (fee forwards to recipient) |
| Total Fees Forwarded | 0.174 ETH |
| Reward Deposits | 0 |
| Claims | 0 |