Skip to content

Commit 0382dab

Browse files
authored
feat: rename OwnableDocumentStore to TransferableDocumentStore (#157)
1 parent 54717b4 commit 0382dab

19 files changed

+157
-146
lines changed

package.json

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,14 @@
3838
"prettier:write": "npx prettier --write \"**/*.{json,md,yml,sol}\" \"!broadcast/**/*\" --ignore-path=.prettierignore",
3939
"test": "forge test",
4040
"test:coverage": "rimraf coverage && mkdir coverage && forge coverage --report lcov && genhtml lcov.info --branch-coverage --output-dir coverage",
41-
"test:coverage:report": "forge coverage --report lcov && genhtml lcov.info --branch-coverage --output-dir coverage"
41+
"test:coverage:report": "forge coverage --report lcov && genhtml lcov.info --branch-coverage --output-dir coverage",
42+
"deploy": "./deploy.sh $npm_config_network $npm_config_sender $npm_config_verify",
43+
"deploy:ds": "npm run -s deploy script/DocumentStore.s.sol:DocumentStoreScript \"run(string,address)\" \"$npm_config_name\" \"$npm_config_admin\"",
44+
"deploy:ds:impl": "npm run -s deploy script/DocumentStoreInitializable.s.sol:DocumentStoreInitializableScript",
45+
"deploy:ds:upgradeable": "npm run -s deploy script/DocumentStoreUpgradeable.s.sol:DocumentStoreUpgradeableScript \"run(string,address)\" \"$npm_config_name\" \"$npm_config_admin\"",
46+
"deploy:tds": "npm run -s deploy script/TransferableDocumentStore.s.sol:TransferableDocumentStoreScript \"run(string,string,address)\" \"$npm_config_name\" \"$npm_config_symbol\" \"$npm_config_admin\"",
47+
"deploy:tds:impl": "npm run -s deploy script/TransferableDocumentStoreInitializable.s.sol:TransferableDocumentStoreInitializableScript",
48+
"deploy:tds:upgradeable": "npm run -s deploy script/TransferableDocumentStoreUpgradeable.s.sol:TransferableDocumentStoreUpgradeableScript \"run(string,string,address)\" \"$npm_config_name\" \"$npm_config_symbol\" \"$npm_config_admin\""
4249
},
4350
"jest": {
4451
"globalSetup": "./jest/setup.ts",

script/DeployBase.s.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ abstract contract DocumentStoreDeployScript is DeployBaseScript {
100100
}
101101
}
102102

103-
abstract contract OwnableDocumentStoreDeployScript is DeployBaseScript {
103+
abstract contract TransferableDocumentStoreDeployScript is DeployBaseScript {
104104
function _requireParams(string memory name, string memory symbol, address admin) internal pure {
105105
require(bytes(name).length > 0, "Name is required");
106106
require(bytes(symbol).length > 0, "Symbol is required");

script/OwnableDocumentStore.s.sol

Lines changed: 0 additions & 29 deletions
This file was deleted.

script/OwnableDocumentStoreInitializable.s.sol

Lines changed: 0 additions & 23 deletions
This file was deleted.

script/OwnableDocumentStoreUpgradeable.s.sol

Lines changed: 0 additions & 26 deletions
This file was deleted.
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
// SPDX-License-Identifier: Apache-2.0
2+
pragma solidity >=0.8.23 <0.9.0;
3+
4+
import { console2 } from "forge-std/console2.sol";
5+
6+
import { TransferableDocumentStoreDeployScript } from "./DeployBase.s.sol";
7+
import "../src/TransferableDocumentStore.sol";
8+
9+
contract TransferableDocumentStoreScript is TransferableDocumentStoreDeployScript {
10+
function run(string memory name, string memory symbol, address admin) public returns (TransferableDocumentStore ds) {
11+
_requireParams(name, symbol, admin);
12+
13+
console2.log("TransferableDocumentStore Name: ", name);
14+
console2.log("TransferableDocumentStore Symbol: ", symbol);
15+
console2.log("TransferableDocumentStore Admin: ", admin);
16+
17+
if (tdsImplExists()) {
18+
bytes memory initData = abi.encodeWithSignature("initialize(string,string,address)", name, symbol, admin);
19+
20+
vm.broadcast();
21+
address dsAddr = clone(TDS_IMPL, initData);
22+
23+
ds = TransferableDocumentStore(dsAddr);
24+
} else {
25+
vm.broadcast();
26+
ds = new TransferableDocumentStore(name, symbol, admin);
27+
}
28+
}
29+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
// SPDX-License-Identifier: Apache-2.0
2+
pragma solidity >=0.8.23 <0.9.0;
3+
4+
import { TransferableDocumentStoreDeployScript } from "./DeployBase.s.sol";
5+
import "../src/initializables/TransferableDocumentStoreInitializable.sol";
6+
7+
contract TransferableDocumentStoreInitializableScript is TransferableDocumentStoreDeployScript {
8+
function run() public returns (TransferableDocumentStoreInitializable documentStore) {
9+
require(!dsImplExists(), "TransferableDocumentStoreInitializable already exists");
10+
11+
bytes memory initCode = abi.encodePacked(type(TransferableDocumentStoreInitializable).creationCode);
12+
13+
bytes32 dsSalt = getTransferableDocumentStoreSalt();
14+
15+
address computedAddr = computeAddr(dsSalt);
16+
require(computedAddr == TDS_IMPL, "Bad deployment address");
17+
18+
vm.broadcast();
19+
address dsAddr = deploy(dsSalt, initCode);
20+
21+
documentStore = TransferableDocumentStoreInitializable(dsAddr);
22+
}
23+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
// SPDX-License-Identifier: Apache-2.0
2+
pragma solidity >=0.8.23 <0.9.0;
3+
4+
import { console2 } from "forge-std/console2.sol";
5+
6+
import { TransferableDocumentStoreDeployScript } from "./DeployBase.s.sol";
7+
import { DeployUtils } from "../src/libraries/DeployUtils.sol";
8+
import "../src/upgradeables/TransferableDocumentStoreUpgradeable.sol";
9+
10+
contract TransferableDocumentStoreUpgradeableScript is TransferableDocumentStoreDeployScript {
11+
function run(
12+
string memory name,
13+
string memory symbol,
14+
address admin
15+
) public returns (TransferableDocumentStoreUpgradeable ds) {
16+
_requireParams(name, symbol, admin);
17+
18+
console2.log("TransferableDocumentStore Name: ", name);
19+
console2.log("TransferableDocumentStore Symbol: ", symbol);
20+
console2.log("TransferableDocumentStore Admin: ", admin);
21+
22+
vm.broadcast();
23+
(address pAddr, ) = DeployUtils.deployTransferableDocumentStoreUpgradeable(name, symbol, admin);
24+
ds = TransferableDocumentStoreUpgradeable(pAddr);
25+
}
26+
}

src/OwnableDocumentStore.sol renamed to src/TransferableDocumentStore.sol

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@
22

33
pragma solidity >=0.8.23 <0.9.0;
44

5-
import "./base/BaseOwnableDocumentStore.sol";
5+
import "./base/BaseTransferableDocumentStore.sol";
66

7-
contract OwnableDocumentStore is BaseOwnableDocumentStore {
7+
contract TransferableDocumentStore is BaseTransferableDocumentStore {
88
constructor(string memory name_, string memory symbol_, address initAdmin) {
99
initialize(name_, symbol_, initAdmin);
1010
}
1111

1212
function initialize(string memory name_, string memory symbol_, address initAdmin) internal initializer {
13-
__OwnableDocumentStore_init(name_, symbol_, initAdmin);
13+
__TransferableDocumentStore_init(name_, symbol_, initAdmin);
1414
}
1515
}

src/base/BaseOwnableDocumentStore.sol renamed to src/base/BaseTransferableDocumentStore.sol

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,31 +6,32 @@ import "@openzeppelin/contracts-upgradeable/token/ERC721/ERC721Upgradeable.sol";
66
import { Strings } from "@openzeppelin/contracts/utils/Strings.sol";
77

88
import "../base/DocumentStoreAccessControl.sol";
9-
import "../interfaces/IOwnableDocumentStore.sol";
10-
import "../interfaces/IOwnableDocumentStoreErrors.sol";
9+
import "../interfaces/ITransferableDocumentStore.sol";
10+
import "../interfaces/ITransferableDocumentStoreErrors.sol";
1111
import "../interfaces/IERC5192.sol";
1212

13-
abstract contract BaseOwnableDocumentStore is
13+
abstract contract BaseTransferableDocumentStore is
1414
DocumentStoreAccessControl,
1515
ERC721Upgradeable,
1616
IERC5192,
17-
IOwnableDocumentStoreErrors,
18-
IOwnableDocumentStore
17+
ITransferableDocumentStoreErrors,
18+
ITransferableDocumentStore
1919
{
2020
using Strings for uint256;
2121

22-
/// @custom:storage-location erc7201:openattestation.storage.OwnableDocumentStore
22+
/// @custom:storage-location erc7201:openattestation.storage.TransferableDocumentStore
2323
struct DocumentStoreStorage {
2424
string baseURI;
2525
mapping(uint256 => bool) revoked;
2626
mapping(uint256 => bool) locked;
2727
}
2828

29-
// keccak256(abi.encode(uint256(keccak256("openattestation.storage.OwnableDocumentStore")) - 1)) & ~bytes32(uint256(0xff))
29+
// keccak256(abi.encode(uint256(keccak256("openattestation.storage.TransferableDocumentStore")) - 1)) &
30+
// ~bytes32(uint256(0xff))
3031
bytes32 private constant _DocumentStoreStorageSlot =
31-
0x5b868bb5de5c3e5f8f786d02cbc568987b1921539a10331babbe7311c24de500;
32+
0xe00db8ee8fc09b2a809fe10830715c77ed23b7661f93309e127fb70c1f33ef00;
3233

33-
function __OwnableDocumentStore_init(
34+
function __TransferableDocumentStore_init(
3435
string memory name_,
3536
string memory symbol_,
3637
address initAdmin
@@ -111,7 +112,7 @@ abstract contract BaseOwnableDocumentStore is
111112
) public view virtual override(ERC721Upgradeable, AccessControlUpgradeable) returns (bool) {
112113
return
113114
interfaceId == type(IDocumentStore).interfaceId ||
114-
interfaceId == type(IOwnableDocumentStore).interfaceId ||
115+
interfaceId == type(ITransferableDocumentStore).interfaceId ||
115116
interfaceId == type(IERC5192).interfaceId ||
116117
super.supportsInterface(interfaceId);
117118
}

src/initializables/OwnableDocumentStoreInitializable.sol renamed to src/initializables/TransferableDocumentStoreInitializable.sol

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@
22

33
pragma solidity >=0.8.23 <0.9.0;
44

5-
import "../base/BaseOwnableDocumentStore.sol";
5+
import "../base/BaseTransferableDocumentStore.sol";
66

7-
contract OwnableDocumentStoreInitializable is BaseOwnableDocumentStore {
7+
contract TransferableDocumentStoreInitializable is BaseTransferableDocumentStore {
88
constructor() initializer {}
99

1010
function initialize(string memory name_, string memory symbol_, address initAdmin) external initializer {
11-
__OwnableDocumentStore_init(name_, symbol_, initAdmin);
11+
__TransferableDocumentStore_init(name_, symbol_, initAdmin);
1212
}
1313
}

src/interfaces/IOwnableDocumentStore.sol renamed to src/interfaces/ITransferableDocumentStore.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,6 @@ pragma solidity >=0.8.23 <0.9.0;
33

44
import "./IDocumentStore.sol";
55

6-
interface IOwnableDocumentStore is IDocumentStore {
6+
interface ITransferableDocumentStore is IDocumentStore {
77
function issue(address to, bytes32 documentRoot, bool locked) external;
88
}

src/interfaces/IOwnableDocumentStoreErrors.sol renamed to src/interfaces/ITransferableDocumentStoreErrors.sol

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// SPDX-License-Identifier: Apache-2.0
22
pragma solidity >=0.8.23 <0.9.0;
33

4-
interface IOwnableDocumentStoreErrors {
4+
interface ITransferableDocumentStoreErrors {
55
error InactiveDocument(bytes32 document);
66

77
error DocumentExists(bytes32 document);

src/libraries/DeployUtils.sol

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ pragma solidity >=0.8.23 <0.9.0;
44
import "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol";
55

66
import "../upgradeables/DocumentStoreUpgradeable.sol";
7-
import "../upgradeables/OwnableDocumentStoreUpgradeable.sol";
7+
import "../upgradeables/TransferableDocumentStoreUpgradeable.sol";
88

99
library DeployUtils {
1010
function deployDocumentStoreUpgradeable(string memory name, address initAdmin) internal returns (address, address) {
@@ -18,14 +18,17 @@ library DeployUtils {
1818
return (address(proxy), dsAddr);
1919
}
2020

21-
function deployOwnableDocumentStoreUpgradeable(
21+
function deployTransferableDocumentStoreUpgradeable(
2222
string memory name,
2323
string memory symbol,
2424
address initAdmin
2525
) internal returns (address, address) {
26-
bytes memory initData = abi.encodeCall(OwnableDocumentStoreInitializable.initialize, (name, symbol, initAdmin));
26+
bytes memory initData = abi.encodeCall(
27+
TransferableDocumentStoreInitializable.initialize,
28+
(name, symbol, initAdmin)
29+
);
2730

28-
OwnableDocumentStoreUpgradeable documentStore = new OwnableDocumentStoreUpgradeable();
31+
TransferableDocumentStoreUpgradeable documentStore = new TransferableDocumentStoreUpgradeable();
2932
address dsAddr = address(documentStore);
3033

3134
ERC1967Proxy proxy = new ERC1967Proxy(dsAddr, initData);

src/upgradeables/OwnableDocumentStoreUpgradeable.sol renamed to src/upgradeables/TransferableDocumentStoreUpgradeable.sol

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ pragma solidity >=0.8.23 <0.9.0;
44

55
import "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol";
66

7-
import "../initializables/OwnableDocumentStoreInitializable.sol";
7+
import "../initializables/TransferableDocumentStoreInitializable.sol";
88

9-
contract OwnableDocumentStoreUpgradeable is UUPSUpgradeable, OwnableDocumentStoreInitializable {
9+
contract TransferableDocumentStoreUpgradeable is UUPSUpgradeable, TransferableDocumentStoreInitializable {
1010
function _authorizeUpgrade(address) internal view virtual override onlyRole(DEFAULT_ADMIN_ROLE) {}
1111
}

test/CommonTest.t.sol

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ import "forge-std/Test.sol";
55

66
import "../src/DocumentStore.sol";
77
import "./fixtures/DocumentStoreFixture.sol";
8-
import "../src/OwnableDocumentStore.sol";
9-
import "./fixtures/OwnableDocumentStoreFixture.sol";
8+
import "../src/TransferableDocumentStore.sol";
9+
import "./fixtures/TransferableDocumentStoreFixture.sol";
1010

1111
abstract contract CommonTest is Test {
1212
address public owner = vm.addr(1);
@@ -236,31 +236,31 @@ abstract contract DocumentStore_multicall_revoke_Initializer is DocumentStore_mu
236236
}
237237
}
238238

239-
abstract contract OwnableDocumentStoreCommonTest is CommonTest {
240-
OwnableDocumentStore public documentStore;
239+
abstract contract TranferableDocumentStoreCommonTest is CommonTest {
240+
TransferableDocumentStore public documentStore;
241241

242-
string public storeName = "OwnableDocumentStore Test";
242+
string public storeName = "TransferableDocumentStore Test";
243243
string public storeSymbol = "XYZ";
244244

245245
function setUp() public virtual override {
246246
super.setUp();
247247

248248
vm.startPrank(owner);
249-
documentStore = new OwnableDocumentStore(storeName, storeSymbol, owner);
249+
documentStore = new TransferableDocumentStore(storeName, storeSymbol, owner);
250250
documentStore.grantRole(documentStore.ISSUER_ROLE(), issuer);
251251
documentStore.grantRole(documentStore.REVOKER_ROLE(), revoker);
252252
vm.stopPrank();
253253
}
254254
}
255255

256-
abstract contract OwnableDocumentStore_Initializer is OwnableDocumentStoreCommonTest {
257-
OwnableDocumentStoreFixture private _fixture;
256+
abstract contract TransferableDocumentStore_Initializer is TranferableDocumentStoreCommonTest {
257+
TransferableDocumentStoreFixture private _fixture;
258258
address[] public recipients;
259259

260260
function setUp() public virtual override {
261261
super.setUp();
262262

263-
_fixture = new OwnableDocumentStoreFixture();
263+
_fixture = new TransferableDocumentStoreFixture();
264264

265265
recipients = new address[](2);
266266
recipients[0] = vm.addr(4);

0 commit comments

Comments
 (0)