Feature Tip: Add private address tag to any address under My Name Tag !
Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
ETHFSFileStorage
Compiler Version
v0.8.17+commit.8df45f5f
Optimization Enabled:
Yes with 500 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
///////////////////////////////////////////////////////////
// ░██████╗░█████╗░██████╗░██╗██████╗░████████╗██╗░░░██╗ //
// ██╔════╝██╔══██╗██╔══██╗██║██╔══██╗╚══██╔══╝╚██╗░██╔╝ //
// ╚█████╗░██║░░╚═╝██████╔╝██║██████╔╝░░░██║░░░░╚████╔╝░ //
// ░╚═══██╗██║░░██╗██╔══██╗██║██╔═══╝░░░░██║░░░░░╚██╔╝░░ //
// ██████╔╝╚█████╔╝██║░░██║██║██║░░░░░░░░██║░░░░░░██║░░░ //
// ╚═════╝░░╚════╝░╚═╝░░╚═╝╚═╝╚═╝░░░░░░░░╚═╝░░░░░░╚═╝░░░ //
///////////////////////////////////////////////////////////
import {IFileStore} from "./../../dependencies/ethfs/IFileStore.sol";
import {IContractScript} from "./../../IContractScript.sol";
contract ETHFSFileStorage is IContractScript {
IFileStore public immutable fileStore;
constructor(address _fileStoreAddress) {
fileStore = IFileStore(_fileStoreAddress);
}
// =============================================================
// GETTERS
// =============================================================
/**
* @notice Get the full script from ethfs's FileStore contract
* @param name - Name given to the script. Eg: threejs.min.js_r148
* @param data - Arbitrary data. Not used by this contract.
* @return script - Full script from merged chunks
*/
function getScript(
string calldata name,
bytes memory data
) external view returns (bytes memory script) {
return bytes(fileStore.getFile(name).read());
}
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
///////////////////////////////////////////////////////////
// ░██████╗░█████╗░██████╗░██╗██████╗░████████╗██╗░░░██╗ //
// ██╔════╝██╔══██╗██╔══██╗██║██╔══██╗╚══██╔══╝╚██╗░██╔╝ //
// ╚█████╗░██║░░╚═╝██████╔╝██║██████╔╝░░░██║░░░░╚████╔╝░ //
// ░╚═══██╗██║░░██╗██╔══██╗██║██╔═══╝░░░░██║░░░░░╚██╔╝░░ //
// ██████╔╝╚█████╔╝██║░░██║██║██║░░░░░░░░██║░░░░░░██║░░░ //
// ╚═════╝░░╚════╝░╚═╝░░╚═╝╚═╝╚═╝░░░░░░░░╚═╝░░░░░░╚═╝░░░ //
///////////////////////////////////////////////////////////
interface IContractScript {
// =============================================================
// GETTERS
// =============================================================
/**
* @notice Get the full script
* @param name - Name given to the script. Eg: threejs.min.js_r148
* @param data - Arbitrary data to be passed to storage
* @return script - Full script from merged chunks
*/
function getScript(string calldata name, bytes memory data)
external
view
returns (bytes memory script);
}// SPDX-License-Identifier: Unlicense
pragma solidity ^0.8.13;
import {File} from "./File.sol";
import {IContentStore} from "./IContentStore.sol";
interface IFileStore {
event FileCreated(
string indexed indexedFilename,
bytes32 indexed checksum,
string filename,
uint256 size,
bytes metadata
);
event FileDeleted(
string indexed indexedFilename,
bytes32 indexed checksum,
string filename
);
error FileNotFound(string filename);
error FilenameExists(string filename);
error EmptyFile();
function contentStore() external view returns (IContentStore);
function files(string memory filename)
external
view
returns (bytes32 checksum);
function fileExists(string memory filename) external view returns (bool);
function getChecksum(string memory filename)
external
view
returns (bytes32 checksum);
function getFile(string memory filename)
external
view
returns (File memory file);
function createFile(string memory filename, bytes32[] memory checksums)
external
returns (File memory file);
function createFile(
string memory filename,
bytes32[] memory checksums,
bytes memory extraData
) external returns (File memory file);
function deleteFile(string memory filename) external;
}// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
interface IContentStore {
event NewChecksum(bytes32 indexed checksum, uint256 contentSize);
error ChecksumExists(bytes32 checksum);
error ChecksumNotFound(bytes32 checksum);
function pointers(bytes32 checksum) external view returns (address pointer);
function checksumExists(bytes32 checksum) external view returns (bool);
function contentLength(bytes32 checksum)
external
view
returns (uint256 size);
function addPointer(address pointer) external returns (bytes32 checksum);
function addContent(bytes memory content)
external
returns (bytes32 checksum, address pointer);
function getPointer(bytes32 checksum)
external
view
returns (address pointer);
}// SPDX-License-Identifier: Unlicense
pragma solidity ^0.8.13;
struct Content {
bytes32 checksum;
address pointer;
}
struct File {
uint256 size; // content length in bytes, max 24k
Content[] contents;
}
function read(File memory file) view returns (string memory contents) {
Content[] memory chunks = file.contents;
// Adapted from https://gist.github.com/xtremetom/20411eb126aaf35f98c8a8ffa00123cd
assembly {
let len := mload(chunks)
let totalSize := 0x20
contents := mload(0x40)
let size
let chunk
let pointer
// loop through all pointer addresses
// - get content
// - get address
// - get data size
// - get code and add to contents
// - update total size
for { let i := 0 } lt(i, len) { i := add(i, 1) } {
chunk := mload(add(chunks, add(0x20, mul(i, 0x20))))
pointer := mload(add(chunk, 0x20))
size := sub(extcodesize(pointer), 1)
extcodecopy(pointer, add(contents, totalSize), 1, size)
totalSize := add(totalSize, size)
}
// update contents size
mstore(contents, sub(totalSize, 0x20))
// store contents
mstore(0x40, add(contents, and(add(totalSize, 0x1f), not(0x1f))))
}
}
using {
read
} for File global;{
"optimizer": {
"enabled": true,
"runs": 500
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_fileStoreAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"fileStore","outputs":[{"internalType":"contract IFileStore","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"getScript","outputs":[{"internalType":"bytes","name":"script","type":"bytes"}],"stateMutability":"view","type":"function"}]Contract Creation Code
60a060405234801561001057600080fd5b5060405161056438038061056483398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b6080516104d4610090600039600081816040015260a601526104d46000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806321ea07e11461003b578063f96355941461007f575b600080fd5b6100627f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b61009261008d36600461021b565b61009f565b6040516100769190610306565b606061013c7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e0876aa886866040518363ffffffff1660e01b81526004016100f2929190610354565b600060405180830381865afa15801561010f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526101379190810190610383565b610144565b949350505050565b60208082015180516040519260008080805b8581101561018c57602081026020018701519250602083015191506001823b039350836001868a01843c93830193600101610156565b50505050602081038452601f19601f8201168401604052505050919050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156101e4576101e46101ab565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715610213576102136101ab565b604052919050565b60008060006040848603121561023057600080fd5b833567ffffffffffffffff8082111561024857600080fd5b818601915086601f83011261025c57600080fd5b81358181111561026b57600080fd5b6020888183860101111561027e57600080fd5b80840196508195508088013593508284111561029957600080fd5b838801935088601f8501126102ad57600080fd5b83359150828211156102c1576102c16101ab565b6102d3601f8301601f191682016101ea565b925081835288818386010111156102e957600080fd5b818185018285013760009183010152939692955092935090915050565b600060208083528351808285015260005b8181101561033357858101830151858201604001528201610317565b506000604082860101526040601f19601f8301168501019250505092915050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b6000602080838503121561039657600080fd5b825167ffffffffffffffff808211156103ae57600080fd5b818501915060408083880312156103c457600080fd5b6103cc6101c1565b8351815284840151838111156103e157600080fd5b80850194505087601f8501126103f657600080fd5b835183811115610408576104086101ab565b610416868260051b016101ea565b818152868101945060069190911b85018601908982111561043657600080fd5b948601945b8186101561048c5783868b0312156104535760008081fd5b61045b6101c1565b86518152878701516001600160a01b03811681146104795760008081fd5b818901528552948301949386019361043b565b9582019590955297965050505050505056fea264697066735822122099b62884b0ee3f18956cdac8cf26ef4d1a7794868d9a2d092d6094c25c5f682564736f6c634300081100330000000000000000000000009746fd0a77829e12f8a9dbe70d7a322412325b91
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100365760003560e01c806321ea07e11461003b578063f96355941461007f575b600080fd5b6100627f0000000000000000000000009746fd0a77829e12f8a9dbe70d7a322412325b9181565b6040516001600160a01b0390911681526020015b60405180910390f35b61009261008d36600461021b565b61009f565b6040516100769190610306565b606061013c7f0000000000000000000000009746fd0a77829e12f8a9dbe70d7a322412325b916001600160a01b031663e0876aa886866040518363ffffffff1660e01b81526004016100f2929190610354565b600060405180830381865afa15801561010f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526101379190810190610383565b610144565b949350505050565b60208082015180516040519260008080805b8581101561018c57602081026020018701519250602083015191506001823b039350836001868a01843c93830193600101610156565b50505050602081038452601f19601f8201168401604052505050919050565b634e487b7160e01b600052604160045260246000fd5b6040805190810167ffffffffffffffff811182821017156101e4576101e46101ab565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715610213576102136101ab565b604052919050565b60008060006040848603121561023057600080fd5b833567ffffffffffffffff8082111561024857600080fd5b818601915086601f83011261025c57600080fd5b81358181111561026b57600080fd5b6020888183860101111561027e57600080fd5b80840196508195508088013593508284111561029957600080fd5b838801935088601f8501126102ad57600080fd5b83359150828211156102c1576102c16101ab565b6102d3601f8301601f191682016101ea565b925081835288818386010111156102e957600080fd5b818185018285013760009183010152939692955092935090915050565b600060208083528351808285015260005b8181101561033357858101830151858201604001528201610317565b506000604082860101526040601f19601f8301168501019250505092915050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b6000602080838503121561039657600080fd5b825167ffffffffffffffff808211156103ae57600080fd5b818501915060408083880312156103c457600080fd5b6103cc6101c1565b8351815284840151838111156103e157600080fd5b80850194505087601f8501126103f657600080fd5b835183811115610408576104086101ab565b610416868260051b016101ea565b818152868101945060069190911b85018601908982111561043657600080fd5b948601945b8186101561048c5783868b0312156104535760008081fd5b61045b6101c1565b86518152878701516001600160a01b03811681146104795760008081fd5b818901528552948301949386019361043b565b9582019590955297965050505050505056fea264697066735822122099b62884b0ee3f18956cdac8cf26ef4d1a7794868d9a2d092d6094c25c5f682564736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000009746fd0a77829e12f8a9dbe70d7a322412325b91
-----Decoded View---------------
Arg [0] : _fileStoreAddress (address): 0x9746fD0A77829E12F8A9DBe70D7a322412325B91
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000009746fd0a77829e12f8a9dbe70d7a322412325b91
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
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.