main
Harry 2 years ago
parent f829e2baf6
commit b6a009f8d3

@ -35,8 +35,8 @@ contract Git3 {
storageManager = IFileOperator(address(new FlatDirectory(220))); storageManager = IFileOperator(address(new FlatDirectory(220)));
} }
modifier onlyOwner(bytes memory repoName, address memory user) { modifier onlyOwner(bytes memory repoName) {
require(repoNameToOwner[repoName] == user || repoNameToOwner[repoName] == address(0)); require(repoNameToOwner[repoName] == msg.sender);
_; _;
} }
@ -48,8 +48,15 @@ contract Git3 {
return storageManager.read(bytes.concat(repoName, '/', path)); return storageManager.read(bytes.concat(repoName, '/', path));
} }
function createRepo(bytes memory repoName)
external payable
{
require(repoNameToOwner[repoName] == address(0));
repoNameToOwner[repoName] = msg.sender;
}
function upload(bytes memory repoName, bytes memory path, bytes memory data) function upload(bytes memory repoName, bytes memory path, bytes memory data)
external payable onlyOwner(repoName, msg.sender) external payable onlyOwner(repoName)
{ {
storageManager.writeChunk{value: msg.value}(bytes.concat(repoName, '/', path), 0, data); storageManager.writeChunk{value: msg.value}(bytes.concat(repoName, '/', path), 0, data);
} }
@ -59,22 +66,22 @@ contract Git3 {
bytes memory path, bytes memory path,
uint256 chunkId, uint256 chunkId,
bytes memory data bytes memory data
) external payable onlyOwner(repoName, msg.sender) { ) external payable onlyOwner(repoName) {
storageManager.writeChunk{value: msg.value}(bytes.concat(repoName, '/', path), chunkId, data); storageManager.writeChunk{value: msg.value}(bytes.concat(repoName, '/', path), chunkId, data);
} }
function remove(bytes memory repoName, bytes memory path) external onlyOwner(repoName, msg.sender) { function remove(bytes memory repoName, bytes memory path) external onlyOwner(repoName) {
// The actually process of remove will remove all the chunks // The actually process of remove will remove all the chunks
storageManager.remove(bytes.concat(repoName, '/', path)); storageManager.remove(bytes.concat(repoName, '/', path));
} }
function size(bytes memory name) external view returns (uint256, uint256) { function size(string memory name) external view returns (uint256, uint256) {
return storageManager.size(name); return storageManager.size(bytes(name));
} }
function countChunks(bytes memory name) external view returns (uint256) { function countChunks(string memory name) external view returns (uint256) {
return storageManager.countChunks(name); return storageManager.countChunks(bytes(name));
} }
function listRefs() public view returns (refData[] memory list) { function listRefs() public view returns (refData[] memory list) {
@ -84,7 +91,7 @@ contract Git3 {
} }
} }
function setRef(bytes memory repoName, bytes memory name, bytes20 refHash) public onlyOwner(repoName, msg.sender) { function setRef(bytes memory repoName, string memory name, bytes20 refHash) public onlyOwner(repoName) {
// only execute `sload` once to reduce gas consumption // only execute `sload` once to reduce gas consumption
refInfo memory srs; refInfo memory srs;
srs = nameToRefInfo[name]; srs = nameToRefInfo[name];
@ -97,7 +104,6 @@ contract Git3 {
"Refs exceed valid length" "Refs exceed valid length"
); );
repoToOwner
nameToRefInfo[name].hash = refHash; nameToRefInfo[name].hash = refHash;
nameToRefInfo[name].index = uint96(refsLen); nameToRefInfo[name].index = uint96(refsLen);
@ -108,7 +114,7 @@ contract Git3 {
} }
} }
function delRef(bytes memory repoName, bytes memory name) public onlyOwner(repoName, msg.sender) { function delRef(bytes memory repoName, string memory name) public onlyOwner(repoName) {
// only execute `sload` once to reduce gas consumption // only execute `sload` once to reduce gas consumption
refInfo memory srs; refInfo memory srs;
srs = nameToRefInfo[name]; srs = nameToRefInfo[name];

1383
package-lock.json generated

File diff suppressed because it is too large Load Diff

@ -18,10 +18,12 @@
"homepage": "https://github.com/cyl19970726/dGithub#readme", "homepage": "https://github.com/cyl19970726/dGithub#readme",
"devDependencies": { "devDependencies": {
"@nomicfoundation/hardhat-toolbox": "^2.0.0", "@nomicfoundation/hardhat-toolbox": "^2.0.0",
"@typechain/ethers-v5": "^10.2.0",
"@typechain/hardhat": "^6.1.5", "@typechain/hardhat": "^6.1.5",
"dotenv": "^16.0.3", "dotenv": "^16.0.3",
"hardhat": "^2.12.4", "hardhat": "^2.12.4",
"hardhat-gas-reporter": "^1.0.9", "hardhat-gas-reporter": "^1.0.9",
"solidity-coverage": "^0.8.2",
"ts-node": "^10.9.1", "ts-node": "^10.9.1",
"typescript": "^4.9.4" "typescript": "^4.9.4"
}, },
@ -31,6 +33,7 @@
"@nomiclabs/hardhat-etherscan": "^3.1.3", "@nomiclabs/hardhat-etherscan": "^3.1.3",
"@openzeppelin/contracts": "^4.8.0", "@openzeppelin/contracts": "^4.8.0",
"chai": "^4.3.7", "chai": "^4.3.7",
"evm-large-storage": "^1.0.0" "evm-large-storage": "^1.0.0",
"typechain": "^8.1.1"
} }
} }

Loading…
Cancel
Save