@coti-io/coti-contracts 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/npm-publish.yml +52 -0
- package/CODE_OF_CONDUCT.md +44 -0
- package/CONTRIBUTING.md +101 -0
- package/LICENSE +201 -0
- package/README.md +48 -0
- package/contracts/access/DataPrivacyFramework/DataPrivacyFramework.sol +480 -0
- package/contracts/access/DataPrivacyFramework/README.md +68 -0
- package/contracts/access/DataPrivacyFramework/extensions/DataPrivacyFrameworkMpc.sol +1139 -0
- package/contracts/mocks/README.md +5 -0
- package/contracts/mocks/access/DataPrivacyFramework/DataPrivacyFrameworkMock.sol +9 -0
- package/contracts/mocks/token/PrivateERC20/PrivateERC20Mock.sol +17 -0
- package/contracts/mocks/token/PrivateERC721/PrivateERC721URIStorageMock.sol +34 -0
- package/contracts/mocks/utils/mpc/ArithmeticTestsContract.sol +431 -0
- package/contracts/mocks/utils/mpc/BitwiseTestsContract.sol +361 -0
- package/contracts/mocks/utils/mpc/Comparison1Tests.Contract.sol +307 -0
- package/contracts/mocks/utils/mpc/Comparison2TestsContract.sol +307 -0
- package/contracts/mocks/utils/mpc/MinMaxTestsContract.sol +297 -0
- package/contracts/mocks/utils/mpc/Miscellaneous1TestsContract.sol +185 -0
- package/contracts/mocks/utils/mpc/Miscellaneous2TestsContract.sol +448 -0
- package/contracts/mocks/utils/mpc/OffboardToUserKeyTestsContract.sol +81 -0
- package/contracts/mocks/utils/mpc/README.md +486 -0
- package/contracts/mocks/utils/mpc/ShiftTestsContract.sol +311 -0
- package/contracts/mocks/utils/mpc/StringTestsContract.sol +59 -0
- package/contracts/mocks/utils/mpc/TransferScalarTestsContract.sol +271 -0
- package/contracts/mocks/utils/mpc/TransferTestsContract.sol +715 -0
- package/contracts/mocks/wallet/PrivateERC20Wallet/PrivateERC20WalletMock.sol +25 -0
- package/contracts/onboard/AccountOnboard.sol +21 -0
- package/contracts/onboard/README.md +65 -0
- package/contracts/package.json +11 -0
- package/contracts/token/PrivateERC20/IPrivateERC20.sol +142 -0
- package/contracts/token/PrivateERC20/PrivateERC20.sol +478 -0
- package/contracts/token/PrivateERC20/README.md +104 -0
- package/contracts/token/PrivateERC721/PrivateERC721.sol +458 -0
- package/contracts/token/PrivateERC721/README.md +282 -0
- package/contracts/token/PrivateERC721/extensions/PrivateERC721URIStorage.sol +87 -0
- package/contracts/utils/mpc/MpcCore.sol +3215 -0
- package/contracts/utils/mpc/MpcInterface.sol +41 -0
- package/contracts/utils/mpc/README.md +82 -0
- package/hardhat.config.ts +18 -0
- package/package.json +14 -0
- package/test/access/DataPrivacyFramework/DataPrivacyFramework.test.ts +780 -0
- package/test/onboard/AccountOnboard.test.ts +45 -0
- package/test/token/PrivateERC20/PrivateERC20.test.ts +546 -0
- package/test/token/PrivateERC721/PrivateERC721.test.ts +223 -0
- package/test/utils/accounts.ts +55 -0
- package/test/utils/mpc/Precompile.test.ts +113 -0
- package/test/utils/mpc/String.test.ts +227 -0
- package/tsconfig.json +11 -0
- package/typechain-types/@openzeppelin/contracts/index.ts +9 -0
- package/typechain-types/@openzeppelin/contracts/interfaces/IERC4906.ts +462 -0
- package/typechain-types/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC1155Errors.ts +69 -0
- package/typechain-types/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC20Errors.ts +69 -0
- package/typechain-types/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC721Errors.ts +69 -0
- package/typechain-types/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/index.ts +6 -0
- package/typechain-types/@openzeppelin/contracts/interfaces/index.ts +6 -0
- package/typechain-types/@openzeppelin/contracts/token/ERC721/IERC721.ts +393 -0
- package/typechain-types/@openzeppelin/contracts/token/ERC721/IERC721Receiver.ts +110 -0
- package/typechain-types/@openzeppelin/contracts/token/ERC721/index.ts +5 -0
- package/typechain-types/@openzeppelin/contracts/token/index.ts +5 -0
- package/typechain-types/@openzeppelin/contracts/utils/index.ts +5 -0
- package/typechain-types/@openzeppelin/contracts/utils/introspection/ERC165.ts +94 -0
- package/typechain-types/@openzeppelin/contracts/utils/introspection/IERC165.ts +94 -0
- package/typechain-types/@openzeppelin/contracts/utils/introspection/index.ts +5 -0
- package/typechain-types/@openzeppelin/index.ts +5 -0
- package/typechain-types/common.ts +131 -0
- package/typechain-types/contracts/access/DataPrivacyFramework/DataPrivacyFramework.ts +598 -0
- package/typechain-types/contracts/access/DataPrivacyFramework/extensions/DataPrivacyFrameworkMpc.ts +598 -0
- package/typechain-types/contracts/access/DataPrivacyFramework/extensions/index.ts +4 -0
- package/typechain-types/contracts/access/DataPrivacyFramework/index.ts +6 -0
- package/typechain-types/contracts/access/index.ts +5 -0
- package/typechain-types/contracts/index.ts +13 -0
- package/typechain-types/contracts/mocks/access/DataPrivacyFramework/DataPrivacyFrameworkMock.ts +598 -0
- package/typechain-types/contracts/mocks/access/DataPrivacyFramework/index.ts +4 -0
- package/typechain-types/contracts/mocks/access/index.ts +5 -0
- package/typechain-types/contracts/mocks/index.ts +11 -0
- package/typechain-types/contracts/mocks/token/PrivateERC20/PrivateERC20Mock.ts +543 -0
- package/typechain-types/contracts/mocks/token/PrivateERC20/index.ts +4 -0
- package/typechain-types/contracts/mocks/token/PrivateERC721/PrivateERC721URIStorageMock.ts +576 -0
- package/typechain-types/contracts/mocks/token/PrivateERC721/index.ts +4 -0
- package/typechain-types/contracts/mocks/token/index.ts +7 -0
- package/typechain-types/contracts/mocks/utils/index.ts +5 -0
- package/typechain-types/contracts/mocks/utils/mpc/ArithmeticTestsContract.ts +354 -0
- package/typechain-types/contracts/mocks/utils/mpc/BitwiseTestsContract.ts +340 -0
- package/typechain-types/contracts/mocks/utils/mpc/Comparison1Tests.Contract.sol/Comparison1TestsContract.ts +340 -0
- package/typechain-types/contracts/mocks/utils/mpc/Comparison1Tests.Contract.sol/index.ts +4 -0
- package/typechain-types/contracts/mocks/utils/mpc/Comparison2TestsContract.ts +340 -0
- package/typechain-types/contracts/mocks/utils/mpc/MinMaxTestsContract.ts +321 -0
- package/typechain-types/contracts/mocks/utils/mpc/Miscellaneous1TestsContract.ts +199 -0
- package/typechain-types/contracts/mocks/utils/mpc/Miscellaneous2TestsContract.ts +384 -0
- package/typechain-types/contracts/mocks/utils/mpc/OffboardToUserKeyTestsContract.sol/OffboardToUserKeyTestContract.ts +218 -0
- package/typechain-types/contracts/mocks/utils/mpc/OffboardToUserKeyTestsContract.sol/index.ts +4 -0
- package/typechain-types/contracts/mocks/utils/mpc/ShiftTestsContract.ts +339 -0
- package/typechain-types/contracts/mocks/utils/mpc/StringTestsContract.ts +211 -0
- package/typechain-types/contracts/mocks/utils/mpc/TransferScalarTestsContract.ts +266 -0
- package/typechain-types/contracts/mocks/utils/mpc/TransferTestsContract.ts +288 -0
- package/typechain-types/contracts/mocks/utils/mpc/index.ts +17 -0
- package/typechain-types/contracts/mocks/wallet/PrivateERC20Wallet/PrivateERC20WalletMock.ts +173 -0
- package/typechain-types/contracts/mocks/wallet/PrivateERC20Wallet/index.ts +4 -0
- package/typechain-types/contracts/mocks/wallet/index.ts +5 -0
- package/typechain-types/contracts/onboard/AccountOnboard.ts +135 -0
- package/typechain-types/contracts/onboard/index.ts +4 -0
- package/typechain-types/contracts/token/PrivateERC20/IPrivateERC20.ts +437 -0
- package/typechain-types/contracts/token/PrivateERC20/PrivateERC20.ts +505 -0
- package/typechain-types/contracts/token/PrivateERC20/index.ts +5 -0
- package/typechain-types/contracts/token/PrivateERC721/PrivateERC721.ts +409 -0
- package/typechain-types/contracts/token/PrivateERC721/extensions/PrivateERC721URIStorage.ts +501 -0
- package/typechain-types/contracts/token/PrivateERC721/extensions/index.ts +4 -0
- package/typechain-types/contracts/token/PrivateERC721/index.ts +6 -0
- package/typechain-types/contracts/token/index.ts +7 -0
- package/typechain-types/contracts/utils/index.ts +5 -0
- package/typechain-types/contracts/utils/mpc/MpcInterface.sol/ExtendedOperations.ts +698 -0
- package/typechain-types/contracts/utils/mpc/MpcInterface.sol/index.ts +4 -0
- package/typechain-types/contracts/utils/mpc/index.ts +5 -0
- package/typechain-types/factories/@openzeppelin/contracts/index.ts +6 -0
- package/typechain-types/factories/@openzeppelin/contracts/interfaces/IERC4906__factory.ts +339 -0
- package/typechain-types/factories/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC1155Errors__factory.ts +127 -0
- package/typechain-types/factories/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC20Errors__factory.ts +111 -0
- package/typechain-types/factories/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC721Errors__factory.ts +128 -0
- package/typechain-types/factories/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/index.ts +6 -0
- package/typechain-types/factories/@openzeppelin/contracts/interfaces/index.ts +5 -0
- package/typechain-types/factories/@openzeppelin/contracts/token/ERC721/IERC721Receiver__factory.ts +59 -0
- package/typechain-types/factories/@openzeppelin/contracts/token/ERC721/IERC721__factory.ts +307 -0
- package/typechain-types/factories/@openzeppelin/contracts/token/ERC721/index.ts +5 -0
- package/typechain-types/factories/@openzeppelin/contracts/token/index.ts +4 -0
- package/typechain-types/factories/@openzeppelin/contracts/utils/index.ts +4 -0
- package/typechain-types/factories/@openzeppelin/contracts/utils/introspection/ERC165__factory.ts +41 -0
- package/typechain-types/factories/@openzeppelin/contracts/utils/introspection/IERC165__factory.ts +41 -0
- package/typechain-types/factories/@openzeppelin/contracts/utils/introspection/index.ts +5 -0
- package/typechain-types/factories/@openzeppelin/index.ts +4 -0
- package/typechain-types/factories/contracts/access/DataPrivacyFramework/DataPrivacyFramework__factory.ts +621 -0
- package/typechain-types/factories/contracts/access/DataPrivacyFramework/extensions/DataPrivacyFrameworkMpc__factory.ts +621 -0
- package/typechain-types/factories/contracts/access/DataPrivacyFramework/extensions/index.ts +4 -0
- package/typechain-types/factories/contracts/access/DataPrivacyFramework/index.ts +5 -0
- package/typechain-types/factories/contracts/access/index.ts +4 -0
- package/typechain-types/factories/contracts/index.ts +8 -0
- package/typechain-types/factories/contracts/mocks/access/DataPrivacyFramework/DataPrivacyFrameworkMock__factory.ts +670 -0
- package/typechain-types/factories/contracts/mocks/access/DataPrivacyFramework/index.ts +4 -0
- package/typechain-types/factories/contracts/mocks/access/index.ts +4 -0
- package/typechain-types/factories/contracts/mocks/index.ts +7 -0
- package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivateERC20Mock__factory.ts +615 -0
- package/typechain-types/factories/contracts/mocks/token/PrivateERC20/index.ts +4 -0
- package/typechain-types/factories/contracts/mocks/token/PrivateERC721/PrivateERC721URIStorageMock__factory.ts +630 -0
- package/typechain-types/factories/contracts/mocks/token/PrivateERC721/index.ts +4 -0
- package/typechain-types/factories/contracts/mocks/token/index.ts +5 -0
- package/typechain-types/factories/contracts/mocks/utils/index.ts +4 -0
- package/typechain-types/factories/contracts/mocks/utils/mpc/ArithmeticTestsContract__factory.ts +374 -0
- package/typechain-types/factories/contracts/mocks/utils/mpc/BitwiseTestsContract__factory.ts +361 -0
- package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison1Tests.Contract.sol/Comparison1TestsContract__factory.ts +361 -0
- package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison1Tests.Contract.sol/index.ts +4 -0
- package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison2TestsContract__factory.ts +361 -0
- package/typechain-types/factories/contracts/mocks/utils/mpc/MinMaxTestsContract__factory.ts +337 -0
- package/typechain-types/factories/contracts/mocks/utils/mpc/Miscellaneous1TestsContract__factory.ts +236 -0
- package/typechain-types/factories/contracts/mocks/utils/mpc/Miscellaneous2TestsContract__factory.ts +432 -0
- package/typechain-types/factories/contracts/mocks/utils/mpc/OffboardToUserKeyTestsContract.sol/OffboardToUserKeyTestContract__factory.ts +245 -0
- package/typechain-types/factories/contracts/mocks/utils/mpc/OffboardToUserKeyTestsContract.sol/index.ts +4 -0
- package/typechain-types/factories/contracts/mocks/utils/mpc/ShiftTestsContract__factory.ts +374 -0
- package/typechain-types/factories/contracts/mocks/utils/mpc/StringTestsContract__factory.ts +264 -0
- package/typechain-types/factories/contracts/mocks/utils/mpc/TransferScalarTestsContract__factory.ts +360 -0
- package/typechain-types/factories/contracts/mocks/utils/mpc/TransferTestsContract__factory.ts +441 -0
- package/typechain-types/factories/contracts/mocks/utils/mpc/index.ts +15 -0
- package/typechain-types/factories/contracts/mocks/wallet/PrivateERC20Wallet/PrivateERC20WalletMock__factory.ts +194 -0
- package/typechain-types/factories/contracts/mocks/wallet/PrivateERC20Wallet/index.ts +4 -0
- package/typechain-types/factories/contracts/mocks/wallet/index.ts +4 -0
- package/typechain-types/factories/contracts/onboard/AccountOnboard__factory.ts +104 -0
- package/typechain-types/factories/contracts/onboard/index.ts +4 -0
- package/typechain-types/factories/contracts/token/PrivateERC20/IPrivateERC20__factory.ts +406 -0
- package/typechain-types/factories/contracts/token/PrivateERC20/PrivateERC20__factory.ts +532 -0
- package/typechain-types/factories/contracts/token/PrivateERC20/index.ts +5 -0
- package/typechain-types/factories/contracts/token/PrivateERC721/PrivateERC721__factory.ts +439 -0
- package/typechain-types/factories/contracts/token/PrivateERC721/extensions/PrivateERC721URIStorage__factory.ts +512 -0
- package/typechain-types/factories/contracts/token/PrivateERC721/extensions/index.ts +4 -0
- package/typechain-types/factories/contracts/token/PrivateERC721/index.ts +5 -0
- package/typechain-types/factories/contracts/token/index.ts +5 -0
- package/typechain-types/factories/contracts/utils/index.ts +4 -0
- package/typechain-types/factories/contracts/utils/mpc/MpcInterface.sol/ExtendedOperations__factory.ts +919 -0
- package/typechain-types/factories/contracts/utils/mpc/MpcInterface.sol/index.ts +4 -0
- package/typechain-types/factories/contracts/utils/mpc/index.ts +4 -0
- package/typechain-types/factories/index.ts +5 -0
- package/typechain-types/hardhat.d.ts +621 -0
- package/typechain-types/index.ts +72 -0
|
@@ -0,0 +1,780 @@
|
|
|
1
|
+
// Data Privacy Framework (last updated v0.1.0)
|
|
2
|
+
|
|
3
|
+
import hre from "hardhat"
|
|
4
|
+
import { expect } from "chai"
|
|
5
|
+
import { setupAccounts } from "../../utils/accounts"
|
|
6
|
+
import { DataPrivacyFramework } from "../../../typechain-types"
|
|
7
|
+
|
|
8
|
+
async function deploy() {
|
|
9
|
+
const [owner, otherAccount] = await setupAccounts()
|
|
10
|
+
|
|
11
|
+
const DataPrivacyFrameworkMock = await hre.ethers.getContractFactory("DataPrivacyFrameworkMock")
|
|
12
|
+
|
|
13
|
+
const dataPrivacyFrameworkMock = await DataPrivacyFrameworkMock
|
|
14
|
+
.connect(owner)
|
|
15
|
+
.deploy()
|
|
16
|
+
|
|
17
|
+
const contract = await dataPrivacyFrameworkMock.waitForDeployment()
|
|
18
|
+
|
|
19
|
+
return { contract, contractAddress: await contract.getAddress(), owner, otherAccount }
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
describe("Data Privacy Framework", function () {
|
|
23
|
+
let deployment: Awaited<ReturnType<typeof deploy>>
|
|
24
|
+
|
|
25
|
+
before(async function () {
|
|
26
|
+
deployment = await deploy()
|
|
27
|
+
})
|
|
28
|
+
|
|
29
|
+
describe("Deployment", function () {
|
|
30
|
+
it("Deployed address should not be undefined", async function () {
|
|
31
|
+
const { contractAddress } = deployment
|
|
32
|
+
|
|
33
|
+
expect(contractAddress).to.not.equal(undefined)
|
|
34
|
+
})
|
|
35
|
+
})
|
|
36
|
+
|
|
37
|
+
describe("Allowing operations", function () {
|
|
38
|
+
it("Should remove '*' from the allowed operations mapping", async function () {
|
|
39
|
+
const { contract } = deployment
|
|
40
|
+
|
|
41
|
+
const tx = await contract.removeAllowedOperation("*")
|
|
42
|
+
|
|
43
|
+
await tx.wait()
|
|
44
|
+
|
|
45
|
+
const isAllowed = await contract.allowedOperations("*")
|
|
46
|
+
|
|
47
|
+
expect(isAllowed).to.equal(false)
|
|
48
|
+
})
|
|
49
|
+
|
|
50
|
+
it("Should update the allowed operations mapping", async function () {
|
|
51
|
+
const { contract } = deployment
|
|
52
|
+
|
|
53
|
+
const tx = await contract.addAllowedOperation("*")
|
|
54
|
+
|
|
55
|
+
await tx.wait()
|
|
56
|
+
|
|
57
|
+
const isAllowed = await contract.allowedOperations("*")
|
|
58
|
+
|
|
59
|
+
expect(isAllowed).to.equal(true)
|
|
60
|
+
})
|
|
61
|
+
|
|
62
|
+
it("Should allow all operations for all users", async function () {
|
|
63
|
+
const { contract } = deployment
|
|
64
|
+
|
|
65
|
+
const permissionGranted = await contract["isOperationAllowed(address,string)"](
|
|
66
|
+
"0xB75fc724A3F951b6D25310d476893b60f4B77C8F", // random address
|
|
67
|
+
"yzfsvycmua" // random string
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
expect(permissionGranted).to.equal(true)
|
|
71
|
+
})
|
|
72
|
+
})
|
|
73
|
+
|
|
74
|
+
describe("Restricting operations", function () {
|
|
75
|
+
before(async function() {
|
|
76
|
+
const { contract } = deployment
|
|
77
|
+
|
|
78
|
+
const tx = await contract.addRestrictedOperation("decrypt")
|
|
79
|
+
|
|
80
|
+
await tx.wait()
|
|
81
|
+
})
|
|
82
|
+
|
|
83
|
+
it("Should add 'decrypt' to the restricted operations mapping", async function () {
|
|
84
|
+
const { contract } = deployment
|
|
85
|
+
|
|
86
|
+
const isRestricted = await contract.restrictedOperations("decrypt")
|
|
87
|
+
|
|
88
|
+
expect(isRestricted).to.equal(true)
|
|
89
|
+
})
|
|
90
|
+
|
|
91
|
+
it("Should not allow any user to decrypt", async function () {
|
|
92
|
+
const { contract } = deployment
|
|
93
|
+
|
|
94
|
+
const permissionGranted = await contract["isOperationAllowed(address,string)"](
|
|
95
|
+
"0xb818166f592329B1c6122c447E078425AF522e96", // random address
|
|
96
|
+
"decrypt"
|
|
97
|
+
)
|
|
98
|
+
|
|
99
|
+
expect(permissionGranted).to.equal(false)
|
|
100
|
+
})
|
|
101
|
+
|
|
102
|
+
it("Should allow all other operations for all users", async function () {
|
|
103
|
+
const { contract } = deployment
|
|
104
|
+
|
|
105
|
+
const permissionGranted = await contract["isOperationAllowed(address,string)"](
|
|
106
|
+
"0x21AF6033aaC0E75eD898a9742183aC06B562bc92", // random address
|
|
107
|
+
"mztsdimwve" // random string
|
|
108
|
+
)
|
|
109
|
+
|
|
110
|
+
expect(permissionGranted).to.equal(true)
|
|
111
|
+
})
|
|
112
|
+
|
|
113
|
+
it("Should remove 'decrypt' from the restricted operations mapping", async function () {
|
|
114
|
+
const { contract } = deployment
|
|
115
|
+
|
|
116
|
+
const tx = await contract.removeRestrictedOperation("decrypt")
|
|
117
|
+
|
|
118
|
+
await tx.wait()
|
|
119
|
+
|
|
120
|
+
const isRestricted = await contract.restrictedOperations("decrypt")
|
|
121
|
+
|
|
122
|
+
expect(isRestricted).to.equal(false)
|
|
123
|
+
})
|
|
124
|
+
|
|
125
|
+
after(async function() {
|
|
126
|
+
const { contract } = deployment
|
|
127
|
+
|
|
128
|
+
let tx = await contract.removeAllowedOperation("*")
|
|
129
|
+
|
|
130
|
+
await tx.wait()
|
|
131
|
+
|
|
132
|
+
tx = await contract.addAllowedOperation("gt")
|
|
133
|
+
|
|
134
|
+
await tx.wait()
|
|
135
|
+
})
|
|
136
|
+
})
|
|
137
|
+
|
|
138
|
+
describe("Updating default permissions", function () {
|
|
139
|
+
before(async function() {
|
|
140
|
+
const { contract } = deployment
|
|
141
|
+
|
|
142
|
+
let tx = await contract.setAddressDefaultPermission(false)
|
|
143
|
+
|
|
144
|
+
await tx.wait()
|
|
145
|
+
|
|
146
|
+
tx = await contract.setOperationDefaultPermission(false)
|
|
147
|
+
|
|
148
|
+
await tx.wait()
|
|
149
|
+
})
|
|
150
|
+
|
|
151
|
+
it("Should set default address permissions to false", async function () {
|
|
152
|
+
const { contract } = deployment
|
|
153
|
+
|
|
154
|
+
const defaultPermission = await contract.addressDefaultPermission()
|
|
155
|
+
|
|
156
|
+
expect(defaultPermission).to.equal(false)
|
|
157
|
+
})
|
|
158
|
+
|
|
159
|
+
it("Should set default operation permissions to false", async function () {
|
|
160
|
+
const { contract } = deployment
|
|
161
|
+
|
|
162
|
+
const defaultPermission = await contract.operationDefaultPermission()
|
|
163
|
+
|
|
164
|
+
expect(defaultPermission).to.equal(false)
|
|
165
|
+
})
|
|
166
|
+
})
|
|
167
|
+
|
|
168
|
+
describe("Setting permissions", function () {
|
|
169
|
+
before(async function() {
|
|
170
|
+
const { contract } = deployment
|
|
171
|
+
|
|
172
|
+
let inputData: DataPrivacyFramework.InputDataStruct = {
|
|
173
|
+
caller: "0x0000000000000000000000000000000000000001",
|
|
174
|
+
operation: "*",
|
|
175
|
+
active: false,
|
|
176
|
+
timestampBefore: "0",
|
|
177
|
+
timestampAfter: "0",
|
|
178
|
+
falseKey: false,
|
|
179
|
+
trueKey: false,
|
|
180
|
+
uintParameter: "0",
|
|
181
|
+
addressParameter: "0x0000000000000000000000000000000000000000",
|
|
182
|
+
stringParameter: ""
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
let tx = await contract.setPermission(inputData)
|
|
186
|
+
|
|
187
|
+
await tx.wait()
|
|
188
|
+
|
|
189
|
+
inputData = {
|
|
190
|
+
caller: "0x70D6c0e13B60964D3A3e372Dd86acA7b75dcc562",
|
|
191
|
+
operation: "gt",
|
|
192
|
+
active: true,
|
|
193
|
+
timestampBefore: "0",
|
|
194
|
+
timestampAfter: "0",
|
|
195
|
+
falseKey: false,
|
|
196
|
+
trueKey: false,
|
|
197
|
+
uintParameter: "0",
|
|
198
|
+
addressParameter: "0x0000000000000000000000000000000000000000",
|
|
199
|
+
stringParameter: ""
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
tx = await contract.setPermission(inputData)
|
|
203
|
+
|
|
204
|
+
await tx.wait()
|
|
205
|
+
})
|
|
206
|
+
|
|
207
|
+
it("Should update the permissions mapping", async function () {
|
|
208
|
+
const { contract } = deployment
|
|
209
|
+
|
|
210
|
+
const conditionIdx = await contract.permissions("0x70D6c0e13B60964D3A3e372Dd86acA7b75dcc562", "gt")
|
|
211
|
+
|
|
212
|
+
expect(conditionIdx).to.equal(3)
|
|
213
|
+
})
|
|
214
|
+
|
|
215
|
+
it("Should update the conditions mapping", async function () {
|
|
216
|
+
const { contract } = deployment
|
|
217
|
+
|
|
218
|
+
const condition = await contract.conditions(3)
|
|
219
|
+
|
|
220
|
+
expect(condition[0]).to.equal(BigInt(3))
|
|
221
|
+
expect(condition[1]).to.equal("0x70D6c0e13B60964D3A3e372Dd86acA7b75dcc562")
|
|
222
|
+
expect(condition[2]).to.equal("gt")
|
|
223
|
+
expect(condition[3]).to.equal(true)
|
|
224
|
+
expect(condition[4]).to.equal(false)
|
|
225
|
+
expect(condition[5]).to.equal(false)
|
|
226
|
+
expect(condition[6]).to.equal(BigInt(0))
|
|
227
|
+
expect(condition[7]).to.equal(BigInt(0))
|
|
228
|
+
expect(condition[8]).to.equal(BigInt(0))
|
|
229
|
+
expect(condition[9]).to.equal("0x0000000000000000000000000000000000000000")
|
|
230
|
+
expect(condition[10]).to.equal("")
|
|
231
|
+
})
|
|
232
|
+
|
|
233
|
+
it("Should update the activePermissions mapping", async function () {
|
|
234
|
+
const { contract } = deployment
|
|
235
|
+
|
|
236
|
+
const rows = await contract.activePermissions("0x70D6c0e13B60964D3A3e372Dd86acA7b75dcc562")
|
|
237
|
+
|
|
238
|
+
expect(rows).to.equal(1)
|
|
239
|
+
})
|
|
240
|
+
|
|
241
|
+
it("Should allow 0x70D6c0e13B60964D3A3e372Dd86acA7b75dcc562 to compute gt", async function () {
|
|
242
|
+
const { contract } = deployment
|
|
243
|
+
|
|
244
|
+
const permissionGranted = await contract["isOperationAllowed(address,string)"](
|
|
245
|
+
"0x70D6c0e13B60964D3A3e372Dd86acA7b75dcc562",
|
|
246
|
+
"gt"
|
|
247
|
+
)
|
|
248
|
+
|
|
249
|
+
expect(permissionGranted).to.equal(true)
|
|
250
|
+
})
|
|
251
|
+
|
|
252
|
+
it("Should not allow other addresses to compute gt", async function () {
|
|
253
|
+
const { contract } = deployment
|
|
254
|
+
|
|
255
|
+
const permissionGranted = await contract["isOperationAllowed(address,string)"](
|
|
256
|
+
"0x7dc13edFF17da7e6D903573E688A5e06746B85e1", // random address
|
|
257
|
+
"gt"
|
|
258
|
+
)
|
|
259
|
+
|
|
260
|
+
expect(permissionGranted).to.equal(false)
|
|
261
|
+
})
|
|
262
|
+
|
|
263
|
+
it("Should not increment activePermissions", async function () {
|
|
264
|
+
const { contract } = deployment
|
|
265
|
+
|
|
266
|
+
const inputData: DataPrivacyFramework.InputDataStruct = {
|
|
267
|
+
caller: "0x70D6c0e13B60964D3A3e372Dd86acA7b75dcc562",
|
|
268
|
+
operation: "gt",
|
|
269
|
+
active: true,
|
|
270
|
+
timestampBefore: "0",
|
|
271
|
+
timestampAfter: "0",
|
|
272
|
+
falseKey: false,
|
|
273
|
+
trueKey: false,
|
|
274
|
+
uintParameter: "0",
|
|
275
|
+
addressParameter: "0x0000000000000000000000000000000000000001",
|
|
276
|
+
stringParameter: ""
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
const tx = await contract.setPermission(inputData)
|
|
280
|
+
|
|
281
|
+
await tx.wait()
|
|
282
|
+
|
|
283
|
+
const activePermissions = await contract.activePermissions("0x70D6c0e13B60964D3A3e372Dd86acA7b75dcc562")
|
|
284
|
+
|
|
285
|
+
expect(activePermissions).to.equal(1)
|
|
286
|
+
})
|
|
287
|
+
|
|
288
|
+
it("Should decrement activePermissions", async function () {
|
|
289
|
+
const { contract } = deployment
|
|
290
|
+
|
|
291
|
+
const inputData: DataPrivacyFramework.InputDataStruct = {
|
|
292
|
+
caller: "0x70D6c0e13B60964D3A3e372Dd86acA7b75dcc562",
|
|
293
|
+
operation: "gt",
|
|
294
|
+
active: false,
|
|
295
|
+
timestampBefore: "0",
|
|
296
|
+
timestampAfter: "0",
|
|
297
|
+
falseKey: false,
|
|
298
|
+
trueKey: false,
|
|
299
|
+
uintParameter: "0",
|
|
300
|
+
addressParameter: "0x0000000000000000000000000000000000000001",
|
|
301
|
+
stringParameter: ""
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
const tx = await contract.setPermission(inputData)
|
|
305
|
+
|
|
306
|
+
await tx.wait()
|
|
307
|
+
|
|
308
|
+
const activePermissions = await contract.activePermissions("0x70D6c0e13B60964D3A3e372Dd86acA7b75dcc562")
|
|
309
|
+
|
|
310
|
+
expect(activePermissions).to.equal(0)
|
|
311
|
+
})
|
|
312
|
+
|
|
313
|
+
it("Should increment activePermissions", async function () {
|
|
314
|
+
const { contract } = deployment
|
|
315
|
+
|
|
316
|
+
const inputData: DataPrivacyFramework.InputDataStruct = {
|
|
317
|
+
caller: "0x70D6c0e13B60964D3A3e372Dd86acA7b75dcc562",
|
|
318
|
+
operation: "gt",
|
|
319
|
+
active: true,
|
|
320
|
+
timestampBefore: "0",
|
|
321
|
+
timestampAfter: "0",
|
|
322
|
+
falseKey: false,
|
|
323
|
+
trueKey: false,
|
|
324
|
+
uintParameter: "0",
|
|
325
|
+
addressParameter: "0x0000000000000000000000000000000000000001",
|
|
326
|
+
stringParameter: ""
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
const tx = await contract.setPermission(inputData)
|
|
330
|
+
|
|
331
|
+
await tx.wait()
|
|
332
|
+
|
|
333
|
+
const activePermissions = await contract.activePermissions("0x70D6c0e13B60964D3A3e372Dd86acA7b75dcc562")
|
|
334
|
+
|
|
335
|
+
expect(activePermissions).to.equal(1)
|
|
336
|
+
})
|
|
337
|
+
})
|
|
338
|
+
|
|
339
|
+
describe("Downloading conditions table", function () {
|
|
340
|
+
before(async function() {
|
|
341
|
+
const { contract } = deployment
|
|
342
|
+
|
|
343
|
+
let inputData: DataPrivacyFramework.InputDataStruct = {
|
|
344
|
+
caller: "0x2943dE47d15538a99C25246Ac8628da5D3EC7DA8",
|
|
345
|
+
operation: "ntyxygayec",
|
|
346
|
+
active: true,
|
|
347
|
+
timestampBefore: "0",
|
|
348
|
+
timestampAfter: "0",
|
|
349
|
+
falseKey: false,
|
|
350
|
+
trueKey: false,
|
|
351
|
+
uintParameter: "0",
|
|
352
|
+
addressParameter: "0x0000000000000000000000000000000000000000",
|
|
353
|
+
stringParameter: ""
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
let tx = await contract.setPermission(inputData)
|
|
357
|
+
|
|
358
|
+
await tx.wait()
|
|
359
|
+
|
|
360
|
+
inputData = {
|
|
361
|
+
caller: "0x9794eA465f89231eaaB730d87A2083E1ae091Bc6",
|
|
362
|
+
operation: "gkdswnhthi",
|
|
363
|
+
active: true,
|
|
364
|
+
timestampBefore: "0",
|
|
365
|
+
timestampAfter: "0",
|
|
366
|
+
falseKey: false,
|
|
367
|
+
trueKey: false,
|
|
368
|
+
uintParameter: "0",
|
|
369
|
+
addressParameter: "0x0000000000000000000000000000000000000000",
|
|
370
|
+
stringParameter: ""
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
tx = await contract.setPermission(inputData)
|
|
374
|
+
|
|
375
|
+
await tx.wait()
|
|
376
|
+
|
|
377
|
+
inputData = {
|
|
378
|
+
caller: "0x377005C508C0a44Ee986fA344A61FDCA453Cb31F",
|
|
379
|
+
operation: "zqotxlwxwz",
|
|
380
|
+
active: true,
|
|
381
|
+
timestampBefore: "0",
|
|
382
|
+
timestampAfter: "0",
|
|
383
|
+
falseKey: false,
|
|
384
|
+
trueKey: false,
|
|
385
|
+
uintParameter: "0",
|
|
386
|
+
addressParameter: "0x0000000000000000000000000000000000000000",
|
|
387
|
+
stringParameter: ""
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
tx = await contract.setPermission(inputData)
|
|
391
|
+
|
|
392
|
+
await tx.wait()
|
|
393
|
+
})
|
|
394
|
+
|
|
395
|
+
it("Should return the first two conditions", async function () {
|
|
396
|
+
const { contract } = deployment
|
|
397
|
+
|
|
398
|
+
const conditions = await contract.getConditions(1, 2)
|
|
399
|
+
|
|
400
|
+
expect(conditions.length).to.equal(2)
|
|
401
|
+
})
|
|
402
|
+
|
|
403
|
+
it("Should return the third, fourth and fifth conditions", async function () {
|
|
404
|
+
const { contract } = deployment
|
|
405
|
+
|
|
406
|
+
const conditions = await contract.getConditions(3, 3)
|
|
407
|
+
|
|
408
|
+
expect(conditions.length).to.equal(3)
|
|
409
|
+
})
|
|
410
|
+
|
|
411
|
+
it("Should return the fifth condition", async function () {
|
|
412
|
+
const { contract } = deployment
|
|
413
|
+
|
|
414
|
+
const conditions = await contract.getConditions(6, 2)
|
|
415
|
+
|
|
416
|
+
expect(conditions.length).to.equal(1)
|
|
417
|
+
})
|
|
418
|
+
})
|
|
419
|
+
|
|
420
|
+
describe("Evaluate condition", function () {
|
|
421
|
+
it("Should return false due to falseKey", async function () {
|
|
422
|
+
const { contract } = deployment
|
|
423
|
+
|
|
424
|
+
let inputData: DataPrivacyFramework.InputDataStruct = {
|
|
425
|
+
caller: "0x5b8E1b957369135d58a86c736F5eea661B929227", // random address
|
|
426
|
+
operation: "gt",
|
|
427
|
+
active: true,
|
|
428
|
+
timestampBefore: "0",
|
|
429
|
+
timestampAfter: "0",
|
|
430
|
+
falseKey: true,
|
|
431
|
+
trueKey: false,
|
|
432
|
+
uintParameter: "0",
|
|
433
|
+
addressParameter: "0x0000000000000000000000000000000000000000",
|
|
434
|
+
stringParameter: ""
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
let tx = await contract.setPermission(inputData)
|
|
438
|
+
|
|
439
|
+
await tx.wait()
|
|
440
|
+
|
|
441
|
+
const permissionGranted = await contract["isOperationAllowed(address,string)"](
|
|
442
|
+
"0x5b8E1b957369135d58a86c736F5eea661B929227",
|
|
443
|
+
"gt"
|
|
444
|
+
)
|
|
445
|
+
|
|
446
|
+
expect(permissionGranted).to.equal(false)
|
|
447
|
+
})
|
|
448
|
+
|
|
449
|
+
it("Should return true due to trueKey", async function () {
|
|
450
|
+
const { contract } = deployment
|
|
451
|
+
|
|
452
|
+
let inputData: DataPrivacyFramework.InputDataStruct = {
|
|
453
|
+
caller: "0x5b8E1b957369135d58a86c736F5eea661B929227", // random address
|
|
454
|
+
operation: "gt",
|
|
455
|
+
active: true,
|
|
456
|
+
timestampBefore: "0",
|
|
457
|
+
timestampAfter: "0",
|
|
458
|
+
falseKey: false,
|
|
459
|
+
trueKey: true,
|
|
460
|
+
uintParameter: "0",
|
|
461
|
+
addressParameter: "0x0000000000000000000000000000000000000000",
|
|
462
|
+
stringParameter: ""
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
let tx = await contract.setPermission(inputData)
|
|
466
|
+
|
|
467
|
+
await tx.wait()
|
|
468
|
+
|
|
469
|
+
const permissionGranted = await contract["isOperationAllowed(address,string)"](
|
|
470
|
+
"0x5b8E1b957369135d58a86c736F5eea661B929227",
|
|
471
|
+
"gt"
|
|
472
|
+
)
|
|
473
|
+
|
|
474
|
+
expect(permissionGranted).to.equal(true)
|
|
475
|
+
})
|
|
476
|
+
|
|
477
|
+
it("Should return false due to timestampBefore", async function () {
|
|
478
|
+
const { contract } = deployment
|
|
479
|
+
|
|
480
|
+
let inputData: DataPrivacyFramework.InputDataStruct = {
|
|
481
|
+
caller: "0x5b8E1b957369135d58a86c736F5eea661B929227", // random address
|
|
482
|
+
operation: "gt",
|
|
483
|
+
active: true,
|
|
484
|
+
timestampBefore: BigInt(1),
|
|
485
|
+
timestampAfter: "0",
|
|
486
|
+
falseKey: false,
|
|
487
|
+
trueKey: false,
|
|
488
|
+
uintParameter: "0",
|
|
489
|
+
addressParameter: "0x0000000000000000000000000000000000000000",
|
|
490
|
+
stringParameter: ""
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
let tx = await contract.setPermission(inputData)
|
|
494
|
+
|
|
495
|
+
await tx.wait()
|
|
496
|
+
|
|
497
|
+
const permissionGranted = await contract["isOperationAllowed(address,string)"](
|
|
498
|
+
"0x5b8E1b957369135d58a86c736F5eea661B929227",
|
|
499
|
+
"gt"
|
|
500
|
+
)
|
|
501
|
+
|
|
502
|
+
expect(permissionGranted).to.equal(false)
|
|
503
|
+
})
|
|
504
|
+
|
|
505
|
+
it("Should return false due to timestampAfter", async function () {
|
|
506
|
+
const { contract } = deployment
|
|
507
|
+
|
|
508
|
+
let inputData: DataPrivacyFramework.InputDataStruct = {
|
|
509
|
+
caller: "0x5b8E1b957369135d58a86c736F5eea661B929227", // random address
|
|
510
|
+
operation: "gt",
|
|
511
|
+
active: true,
|
|
512
|
+
timestampBefore: "0",
|
|
513
|
+
timestampAfter: BigInt(2716990740),
|
|
514
|
+
falseKey: false,
|
|
515
|
+
trueKey: false,
|
|
516
|
+
uintParameter: "0",
|
|
517
|
+
addressParameter: "0x0000000000000000000000000000000000000000",
|
|
518
|
+
stringParameter: ""
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
let tx = await contract.setPermission(inputData)
|
|
522
|
+
|
|
523
|
+
await tx.wait()
|
|
524
|
+
|
|
525
|
+
const permissionGranted = await contract["isOperationAllowed(address,string)"](
|
|
526
|
+
"0x5b8E1b957369135d58a86c736F5eea661B929227",
|
|
527
|
+
"gt"
|
|
528
|
+
)
|
|
529
|
+
|
|
530
|
+
expect(permissionGranted).to.equal(false)
|
|
531
|
+
})
|
|
532
|
+
|
|
533
|
+
it("Should return false due to uintParameter", async function () {
|
|
534
|
+
const { contract } = deployment
|
|
535
|
+
|
|
536
|
+
let inputData: DataPrivacyFramework.InputDataStruct = {
|
|
537
|
+
caller: "0x5b8E1b957369135d58a86c736F5eea661B929227", // random address
|
|
538
|
+
operation: "gt",
|
|
539
|
+
active: true,
|
|
540
|
+
timestampBefore: "0",
|
|
541
|
+
timestampAfter: "0",
|
|
542
|
+
falseKey: false,
|
|
543
|
+
trueKey: false,
|
|
544
|
+
uintParameter: BigInt(1),
|
|
545
|
+
addressParameter: "0x0000000000000000000000000000000000000000",
|
|
546
|
+
stringParameter: ""
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
let tx = await contract.setPermission(inputData)
|
|
550
|
+
|
|
551
|
+
await tx.wait()
|
|
552
|
+
|
|
553
|
+
const permissionGranted = await contract["isOperationAllowed(address,string,uint256)"](
|
|
554
|
+
"0x5b8E1b957369135d58a86c736F5eea661B929227",
|
|
555
|
+
"gt",
|
|
556
|
+
BigInt(2)
|
|
557
|
+
)
|
|
558
|
+
|
|
559
|
+
expect(permissionGranted).to.equal(false)
|
|
560
|
+
})
|
|
561
|
+
|
|
562
|
+
it("Should return false due to addressParameter", async function () {
|
|
563
|
+
const { contract } = deployment
|
|
564
|
+
|
|
565
|
+
let inputData: DataPrivacyFramework.InputDataStruct = {
|
|
566
|
+
caller: "0x5b8E1b957369135d58a86c736F5eea661B929227", // random address
|
|
567
|
+
operation: "gt",
|
|
568
|
+
active: true,
|
|
569
|
+
timestampBefore: "0",
|
|
570
|
+
timestampAfter: "0",
|
|
571
|
+
falseKey: false,
|
|
572
|
+
trueKey: false,
|
|
573
|
+
uintParameter: "0",
|
|
574
|
+
addressParameter: "0x0000000000000000000000000000000000000001",
|
|
575
|
+
stringParameter: ""
|
|
576
|
+
}
|
|
577
|
+
|
|
578
|
+
let tx = await contract.setPermission(inputData)
|
|
579
|
+
|
|
580
|
+
await tx.wait()
|
|
581
|
+
|
|
582
|
+
const permissionGranted = await contract["isOperationAllowed(address,string,address)"](
|
|
583
|
+
"0x5b8E1b957369135d58a86c736F5eea661B929227",
|
|
584
|
+
"gt",
|
|
585
|
+
"0x0000000000000000000000000000000000000002"
|
|
586
|
+
)
|
|
587
|
+
|
|
588
|
+
expect(permissionGranted).to.equal(false)
|
|
589
|
+
})
|
|
590
|
+
|
|
591
|
+
it("Should return false due to addressParameter", async function () {
|
|
592
|
+
const { contract } = deployment
|
|
593
|
+
|
|
594
|
+
let inputData: DataPrivacyFramework.InputDataStruct = {
|
|
595
|
+
caller: "0x5b8E1b957369135d58a86c736F5eea661B929227", // random address
|
|
596
|
+
operation: "gt",
|
|
597
|
+
active: true,
|
|
598
|
+
timestampBefore: "0",
|
|
599
|
+
timestampAfter: "0",
|
|
600
|
+
falseKey: false,
|
|
601
|
+
trueKey: false,
|
|
602
|
+
uintParameter: "0",
|
|
603
|
+
addressParameter: "0x0000000000000000000000000000000000000000",
|
|
604
|
+
stringParameter: "abc"
|
|
605
|
+
}
|
|
606
|
+
|
|
607
|
+
let tx = await contract.setPermission(inputData)
|
|
608
|
+
|
|
609
|
+
await tx.wait()
|
|
610
|
+
|
|
611
|
+
const permissionGranted = await contract["isOperationAllowed(address,string,string)"](
|
|
612
|
+
"0x5b8E1b957369135d58a86c736F5eea661B929227",
|
|
613
|
+
"gt",
|
|
614
|
+
"def"
|
|
615
|
+
)
|
|
616
|
+
|
|
617
|
+
expect(permissionGranted).to.equal(false)
|
|
618
|
+
})
|
|
619
|
+
})
|
|
620
|
+
|
|
621
|
+
describe("Get permission", function () {
|
|
622
|
+
before(async function() {
|
|
623
|
+
const { contract } = deployment
|
|
624
|
+
|
|
625
|
+
let tx = await contract.setAddressDefaultPermission(true)
|
|
626
|
+
|
|
627
|
+
await tx.wait()
|
|
628
|
+
|
|
629
|
+
tx = await contract.setOperationDefaultPermission(true)
|
|
630
|
+
|
|
631
|
+
await tx.wait()
|
|
632
|
+
})
|
|
633
|
+
|
|
634
|
+
it("Should return true due to caller holding generic permission", async function () {
|
|
635
|
+
const { contract } = deployment
|
|
636
|
+
|
|
637
|
+
let inputData: DataPrivacyFramework.InputDataStruct = {
|
|
638
|
+
caller: "0xbC70898a84DE49d3aA3190b124542bc5eca88A5C", // random address
|
|
639
|
+
operation: "*",
|
|
640
|
+
active: true,
|
|
641
|
+
timestampBefore: "0",
|
|
642
|
+
timestampAfter: "0",
|
|
643
|
+
falseKey: false,
|
|
644
|
+
trueKey: false,
|
|
645
|
+
uintParameter: "0",
|
|
646
|
+
addressParameter: "0x0000000000000000000000000000000000000000",
|
|
647
|
+
stringParameter: ""
|
|
648
|
+
}
|
|
649
|
+
|
|
650
|
+
let tx = await contract.setPermission(inputData)
|
|
651
|
+
|
|
652
|
+
await tx.wait()
|
|
653
|
+
|
|
654
|
+
const permissionGranted = await contract["isOperationAllowed(address,string)"](
|
|
655
|
+
"0xbC70898a84DE49d3aA3190b124542bc5eca88A5C",
|
|
656
|
+
"gt"
|
|
657
|
+
)
|
|
658
|
+
|
|
659
|
+
expect(permissionGranted).to.equal(true)
|
|
660
|
+
})
|
|
661
|
+
|
|
662
|
+
it("Should return true due to default operation permission", async function () {
|
|
663
|
+
const { contract } = deployment
|
|
664
|
+
|
|
665
|
+
let inputData: DataPrivacyFramework.InputDataStruct = {
|
|
666
|
+
caller: "0xbC70898a84DE49d3aA3190b124542bc5eca88A5C", // random address
|
|
667
|
+
operation: "*",
|
|
668
|
+
active: false,
|
|
669
|
+
timestampBefore: "0",
|
|
670
|
+
timestampAfter: "0",
|
|
671
|
+
falseKey: false,
|
|
672
|
+
trueKey: false,
|
|
673
|
+
uintParameter: "0",
|
|
674
|
+
addressParameter: "0x0000000000000000000000000000000000000000",
|
|
675
|
+
stringParameter: ""
|
|
676
|
+
}
|
|
677
|
+
|
|
678
|
+
let tx = await contract.setPermission(inputData)
|
|
679
|
+
|
|
680
|
+
await tx.wait()
|
|
681
|
+
|
|
682
|
+
inputData = {
|
|
683
|
+
caller: "0xbC70898a84DE49d3aA3190b124542bc5eca88A5C", // random address
|
|
684
|
+
operation: "gte",
|
|
685
|
+
active: true,
|
|
686
|
+
timestampBefore: "0",
|
|
687
|
+
timestampAfter: "0",
|
|
688
|
+
falseKey: false,
|
|
689
|
+
trueKey: false,
|
|
690
|
+
uintParameter: "0",
|
|
691
|
+
addressParameter: "0x0000000000000000000000000000000000000000",
|
|
692
|
+
stringParameter: ""
|
|
693
|
+
}
|
|
694
|
+
|
|
695
|
+
tx = await contract.setPermission(inputData)
|
|
696
|
+
|
|
697
|
+
await tx.wait()
|
|
698
|
+
|
|
699
|
+
const permissionGranted = await contract["isOperationAllowed(address,string)"](
|
|
700
|
+
"0xbC70898a84DE49d3aA3190b124542bc5eca88A5C",
|
|
701
|
+
"gt"
|
|
702
|
+
)
|
|
703
|
+
|
|
704
|
+
expect(permissionGranted).to.equal(true)
|
|
705
|
+
})
|
|
706
|
+
|
|
707
|
+
it("Should return true due to generic address holding the specific permission", async function () {
|
|
708
|
+
const { contract } = deployment
|
|
709
|
+
|
|
710
|
+
let inputData = {
|
|
711
|
+
caller: "0x0000000000000000000000000000000000000001", // generic address
|
|
712
|
+
operation: "gt",
|
|
713
|
+
active: true,
|
|
714
|
+
timestampBefore: "0",
|
|
715
|
+
timestampAfter: "0",
|
|
716
|
+
falseKey: false,
|
|
717
|
+
trueKey: false,
|
|
718
|
+
uintParameter: "0",
|
|
719
|
+
addressParameter: "0x0000000000000000000000000000000000000000",
|
|
720
|
+
stringParameter: ""
|
|
721
|
+
}
|
|
722
|
+
|
|
723
|
+
let tx = await contract.setPermission(inputData)
|
|
724
|
+
|
|
725
|
+
await tx.wait()
|
|
726
|
+
|
|
727
|
+
const permissionGranted = await contract["isOperationAllowed(address,string)"](
|
|
728
|
+
"0x9e874196782e439FD2CEFcF62bC5c59816a6ae8b",
|
|
729
|
+
"gt"
|
|
730
|
+
)
|
|
731
|
+
|
|
732
|
+
expect(permissionGranted).to.equal(true)
|
|
733
|
+
})
|
|
734
|
+
|
|
735
|
+
it("Should return true due to generic address holding the generic permission", async function () {
|
|
736
|
+
const { contract } = deployment
|
|
737
|
+
|
|
738
|
+
let inputData = {
|
|
739
|
+
caller: "0x0000000000000000000000000000000000000001", // generic address
|
|
740
|
+
operation: "gt",
|
|
741
|
+
active: false,
|
|
742
|
+
timestampBefore: "0",
|
|
743
|
+
timestampAfter: "0",
|
|
744
|
+
falseKey: false,
|
|
745
|
+
trueKey: false,
|
|
746
|
+
uintParameter: "0",
|
|
747
|
+
addressParameter: "0x0000000000000000000000000000000000000000",
|
|
748
|
+
stringParameter: ""
|
|
749
|
+
}
|
|
750
|
+
|
|
751
|
+
let tx = await contract.setPermission(inputData)
|
|
752
|
+
|
|
753
|
+
await tx.wait()
|
|
754
|
+
|
|
755
|
+
inputData = {
|
|
756
|
+
caller: "0x0000000000000000000000000000000000000001", // generic address
|
|
757
|
+
operation: "*",
|
|
758
|
+
active: true,
|
|
759
|
+
timestampBefore: "0",
|
|
760
|
+
timestampAfter: "0",
|
|
761
|
+
falseKey: false,
|
|
762
|
+
trueKey: false,
|
|
763
|
+
uintParameter: "0",
|
|
764
|
+
addressParameter: "0x0000000000000000000000000000000000000000",
|
|
765
|
+
stringParameter: ""
|
|
766
|
+
}
|
|
767
|
+
|
|
768
|
+
tx = await contract.setPermission(inputData)
|
|
769
|
+
|
|
770
|
+
await tx.wait()
|
|
771
|
+
|
|
772
|
+
const permissionGranted = await contract["isOperationAllowed(address,string)"](
|
|
773
|
+
"0x9e874196782e439FD2CEFcF62bC5c59816a6ae8b",
|
|
774
|
+
"gt"
|
|
775
|
+
)
|
|
776
|
+
|
|
777
|
+
expect(permissionGranted).to.equal(true)
|
|
778
|
+
})
|
|
779
|
+
})
|
|
780
|
+
})
|