@ayanworks/polygon-did-registry-contract 2.0.1-alpha.2 → 2.0.1-alpha.3
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/.prettierignore +2 -1
- package/.release-it.json +2 -1
- package/artifacts/PolygonDidRegistry.json +1 -25308
- package/build/artifacts/PolygonDidRegistry.json +1 -25308
- package/contracts/PolygonDidRegistry.sol +86 -47
- package/hardhat.config.js +28 -0
- package/package.json +7 -7
- package/scripts/deploy.js +31 -0
- package/sst-config.json +1 -3
- package/migrations/1_initial_migration.js +0 -5
- package/migrations/2_deploy_contract.js +0 -8
- package/truffle-config.js +0 -68
|
@@ -19,33 +19,41 @@ contract PolygonDidRegistry {
|
|
|
19
19
|
modifier onlyController(address _id) {
|
|
20
20
|
require(
|
|
21
21
|
polyDIDs[_id].controller == msg.sender,
|
|
22
|
-
|
|
22
|
+
'message sender is not the controller of the DID Doc'
|
|
23
23
|
);
|
|
24
24
|
_;
|
|
25
25
|
}
|
|
26
26
|
mapping(address => PolyDID) polyDIDs;
|
|
27
27
|
mapping(uint256 => address) activeDIDs;
|
|
28
28
|
mapping(address => uint256) activeAddress;
|
|
29
|
+
|
|
29
30
|
event DIDCreated(address id, string doc);
|
|
30
31
|
event DIDUpdated(address id, string doc);
|
|
31
|
-
event DIDDeleted(address id);
|
|
32
32
|
event TransferOwnership(address newOwner);
|
|
33
|
+
event ResourceAdded(
|
|
34
|
+
address _id,
|
|
35
|
+
string _resourceId,
|
|
36
|
+
string _resourcePayload
|
|
37
|
+
);
|
|
38
|
+
|
|
33
39
|
bool private initialized;
|
|
34
40
|
|
|
35
41
|
/**
|
|
36
42
|
*@dev initializes the ownership of contract
|
|
37
43
|
**/
|
|
38
44
|
|
|
45
|
+
mapping(address => string[]) private keysById;
|
|
46
|
+
mapping(address => mapping(string => string)) resourceData;
|
|
47
|
+
|
|
39
48
|
function initialize() public {
|
|
40
|
-
require(!initialized,
|
|
49
|
+
require(!initialized, 'Contract instance has already been initialized');
|
|
41
50
|
initialized = true;
|
|
42
51
|
owner = msg.sender;
|
|
43
52
|
totalDIDs = 0;
|
|
44
|
-
deletedDID = 0;
|
|
45
53
|
}
|
|
46
54
|
|
|
47
55
|
modifier onlyOwner() {
|
|
48
|
-
require(msg.sender == owner,
|
|
56
|
+
require(msg.sender == owner, 'message sender is not the owner');
|
|
49
57
|
_;
|
|
50
58
|
}
|
|
51
59
|
|
|
@@ -54,17 +62,15 @@ contract PolygonDidRegistry {
|
|
|
54
62
|
*@param _newOwner - Address of the new owner to whom the ownership needs to be passed
|
|
55
63
|
**/
|
|
56
64
|
|
|
57
|
-
function transferOwnership(
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
returns (string memory)
|
|
61
|
-
{
|
|
65
|
+
function transferOwnership(
|
|
66
|
+
address _newOwner
|
|
67
|
+
) public onlyOwner returns (string memory) {
|
|
62
68
|
if (owner != _newOwner) {
|
|
63
69
|
owner = _newOwner;
|
|
64
70
|
emit TransferOwnership(owner);
|
|
65
|
-
return (
|
|
71
|
+
return ('Ownership transferred successfully');
|
|
66
72
|
} else {
|
|
67
|
-
return (
|
|
73
|
+
return ('Ownership cannot be transferred to the same account');
|
|
68
74
|
}
|
|
69
75
|
}
|
|
70
76
|
|
|
@@ -82,7 +88,10 @@ contract PolygonDidRegistry {
|
|
|
82
88
|
*@param _doc - A string object that holds the DID Doc
|
|
83
89
|
*/
|
|
84
90
|
|
|
85
|
-
function createDID(
|
|
91
|
+
function createDID(
|
|
92
|
+
address _id,
|
|
93
|
+
string memory _doc
|
|
94
|
+
)
|
|
86
95
|
public
|
|
87
96
|
returns (
|
|
88
97
|
address controller,
|
|
@@ -112,32 +121,23 @@ contract PolygonDidRegistry {
|
|
|
112
121
|
*@param _id - Address that refers to the DID doc position
|
|
113
122
|
*/
|
|
114
123
|
|
|
115
|
-
function getDIDDoc(
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
/**
|
|
120
|
-
*@dev Reads total number of DIDs and total number of active DIDs from Chain
|
|
121
|
-
*/
|
|
124
|
+
function getDIDDoc(
|
|
125
|
+
address _id
|
|
126
|
+
) public view returns (string memory, string[] memory) {
|
|
127
|
+
string[] memory result = new string[](keysById[_id].length);
|
|
122
128
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
{
|
|
128
|
-
return (totalDIDs, (totalDIDs - deletedDID));
|
|
129
|
+
for (uint256 i = 0; i < keysById[_id].length; i++) {
|
|
130
|
+
result[i] = resourceData[_id][keysById[_id][i]];
|
|
131
|
+
}
|
|
132
|
+
return (polyDIDs[_id].didDoc, result);
|
|
129
133
|
}
|
|
130
134
|
|
|
131
135
|
/**
|
|
132
|
-
*@dev Reads total number of DIDs
|
|
136
|
+
*@dev Reads total number of DIDs and total number of active DIDs from Chain
|
|
133
137
|
*/
|
|
134
138
|
|
|
135
|
-
function
|
|
136
|
-
|
|
137
|
-
view
|
|
138
|
-
returns (uint256 _deletedDID)
|
|
139
|
-
{
|
|
140
|
-
return deletedDID;
|
|
139
|
+
function getTotalNumberOfDIDs() public view returns (uint256 _totalDIDs) {
|
|
140
|
+
return (totalDIDs);
|
|
141
141
|
}
|
|
142
142
|
|
|
143
143
|
/**
|
|
@@ -146,11 +146,9 @@ contract PolygonDidRegistry {
|
|
|
146
146
|
*@return _did - returns the DID Doc assciated with the index. Returns null if the DID Doc is deleted.
|
|
147
147
|
*/
|
|
148
148
|
|
|
149
|
-
function
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
returns (string memory)
|
|
153
|
-
{
|
|
149
|
+
function getDIDDocByIndex(
|
|
150
|
+
uint256 _index
|
|
151
|
+
) public view returns (string memory) {
|
|
154
152
|
return polyDIDs[activeDIDs[_index]].didDoc;
|
|
155
153
|
}
|
|
156
154
|
|
|
@@ -160,7 +158,10 @@ contract PolygonDidRegistry {
|
|
|
160
158
|
*@param _doc - A String that holds the DID doc
|
|
161
159
|
*/
|
|
162
160
|
|
|
163
|
-
function updateDIDDoc(
|
|
161
|
+
function updateDIDDoc(
|
|
162
|
+
address _id,
|
|
163
|
+
string memory _doc
|
|
164
|
+
)
|
|
164
165
|
public
|
|
165
166
|
onlyController(_id)
|
|
166
167
|
returns (
|
|
@@ -182,14 +183,52 @@ contract PolygonDidRegistry {
|
|
|
182
183
|
}
|
|
183
184
|
|
|
184
185
|
/**
|
|
185
|
-
*@dev To
|
|
186
|
-
*@param _id - Address that refers to the DID doc
|
|
186
|
+
*@dev To add linked resource in the DID doc
|
|
187
|
+
*@param _id - Address that refers to the DID doc
|
|
188
|
+
*@param _resourceId - Id that refers to the resource
|
|
189
|
+
*/
|
|
190
|
+
function addResource(
|
|
191
|
+
address _id,
|
|
192
|
+
string memory _resourceId,
|
|
193
|
+
string memory _resourcePayload
|
|
194
|
+
)
|
|
195
|
+
public
|
|
196
|
+
onlyController(_id)
|
|
197
|
+
returns (address, string memory, string memory)
|
|
198
|
+
{
|
|
199
|
+
resourceData[_id][_resourceId] = _resourcePayload;
|
|
200
|
+
keysById[_id].push(_resourceId);
|
|
201
|
+
emit ResourceAdded(_id, _resourceId, _resourcePayload);
|
|
202
|
+
return (_id, _resourceId, _resourcePayload);
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
*@dev Reads DID linked resource from Chain
|
|
207
|
+
*@param _id - Address that refers to the DID doc
|
|
208
|
+
*@param _resourceId - Id that refers to a specific resource
|
|
187
209
|
*/
|
|
188
210
|
|
|
189
|
-
function
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
211
|
+
function getResource(
|
|
212
|
+
address _id,
|
|
213
|
+
string memory _resourceId
|
|
214
|
+
) public view returns (string memory) {
|
|
215
|
+
return resourceData[_id][_resourceId];
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
/**
|
|
219
|
+
*@dev Reads all DID linked resource for a specific DID from Chain
|
|
220
|
+
*@param _id - Address that refers to the DID doc
|
|
221
|
+
*/
|
|
222
|
+
|
|
223
|
+
function getAllResources(
|
|
224
|
+
address _id
|
|
225
|
+
) public view returns (string[] memory) {
|
|
226
|
+
string[] memory result = new string[](keysById[_id].length);
|
|
227
|
+
|
|
228
|
+
for (uint256 i = 0; i < keysById[_id].length; i++) {
|
|
229
|
+
result[i] = resourceData[_id][keysById[_id][i]];
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
return result;
|
|
194
233
|
}
|
|
195
|
-
}
|
|
234
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @type import('hardhat/config').HardhatUserConfig
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
// import 'hardhat';
|
|
6
|
+
require('@nomicfoundation/hardhat-ethers')
|
|
7
|
+
require('@openzeppelin/hardhat-upgrades')
|
|
8
|
+
|
|
9
|
+
require('dotenv/config')
|
|
10
|
+
|
|
11
|
+
module.exports = {
|
|
12
|
+
solidity: {
|
|
13
|
+
version: '0.8.16',
|
|
14
|
+
settings: {
|
|
15
|
+
optimizer: {
|
|
16
|
+
enabled: true,
|
|
17
|
+
runs: 200,
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
},
|
|
21
|
+
networks: {
|
|
22
|
+
hardhat: {},
|
|
23
|
+
mumbai: {
|
|
24
|
+
url: process.env.RPCURL, // Update with Mumbai Matic RPC URL
|
|
25
|
+
accounts: [`0x${process.env.SIGNER}`],
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ayanworks/polygon-did-registry-contract",
|
|
3
|
-
"version": "2.0.1-alpha.
|
|
3
|
+
"version": "2.0.1-alpha.3",
|
|
4
4
|
"description": "Smart Contract to register DID on Polygon",
|
|
5
5
|
"main": "build/index.js",
|
|
6
6
|
"directories": {
|
|
@@ -17,24 +17,23 @@
|
|
|
17
17
|
"check-format": "pnpm prettier --list-different",
|
|
18
18
|
"check-types": "pnpm build --noEmit",
|
|
19
19
|
"format": "pnpm prettier --write",
|
|
20
|
-
"release": "
|
|
20
|
+
"release": "release-it"
|
|
21
21
|
},
|
|
22
22
|
"license": "MIT",
|
|
23
23
|
"devDependencies": {
|
|
24
|
-
"@
|
|
25
|
-
"@
|
|
24
|
+
"@nomicfoundation/hardhat-ethers": "^3.0.5",
|
|
25
|
+
"@openzeppelin/hardhat-upgrades": "^3.0.1",
|
|
26
26
|
"@types/fs-extra": "^11.0.1",
|
|
27
27
|
"@types/node": "^18.17.0",
|
|
28
28
|
"dotenv": "^16.0.2",
|
|
29
29
|
"eslint": "^8.23.1",
|
|
30
30
|
"ethers": "^6.9.0",
|
|
31
31
|
"fs-extra": "^11.1.1",
|
|
32
|
-
"
|
|
32
|
+
"hardhat": "^2.19.4",
|
|
33
33
|
"mocha": "^7.0.0",
|
|
34
34
|
"prettier": "^3.0.2",
|
|
35
35
|
"release-it": "^16.3.0",
|
|
36
36
|
"solc": "^0.8.21",
|
|
37
|
-
"truffle": "^5.5.20",
|
|
38
37
|
"ts-node": "^10.9.1",
|
|
39
38
|
"typescript": "^5.1.6"
|
|
40
39
|
},
|
|
@@ -52,5 +51,6 @@
|
|
|
52
51
|
"bugs": {
|
|
53
52
|
"url": "https://github.com/ayanworks/polygon-did-registry-contract/issues"
|
|
54
53
|
},
|
|
55
|
-
"homepage": "https://github.com/ayanworks/polygon-did-registry-contract#readme"
|
|
54
|
+
"homepage": "https://github.com/ayanworks/polygon-did-registry-contract#readme",
|
|
55
|
+
"dependencies": {}
|
|
56
56
|
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
const { ethers, upgrades } = require('hardhat')
|
|
2
|
+
|
|
3
|
+
async function main() {
|
|
4
|
+
try {
|
|
5
|
+
console.log('Deploying the smart contract...')
|
|
6
|
+
const PolygonDidRegistry =
|
|
7
|
+
await ethers.getContractFactory('PolygonDidRegistry')
|
|
8
|
+
|
|
9
|
+
// To deploy the initial upgradable smart contract
|
|
10
|
+
|
|
11
|
+
// const contract = await upgrades.deployProxy(PolygonDidRegistry, {
|
|
12
|
+
// initializer: 'initialize',
|
|
13
|
+
// })
|
|
14
|
+
|
|
15
|
+
const contract = await upgrades.upgradeProxy(
|
|
16
|
+
process.env.CONTRACT_ADDRESS,
|
|
17
|
+
PolygonDidRegistry,
|
|
18
|
+
{
|
|
19
|
+
initializer: 'initialize',
|
|
20
|
+
},
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
await contract.waitForDeployment()
|
|
24
|
+
|
|
25
|
+
console.log('Contract address::', contract.target)
|
|
26
|
+
} catch (error) {
|
|
27
|
+
console.error('Error deploying contract:', error.message)
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
main()
|
package/sst-config.json
CHANGED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
const { deployProxy } = require('@openzeppelin/truffle-upgrades')
|
|
2
|
-
|
|
3
|
-
const PolygonDidRegistry = artifacts.require('PolygonDidRegistry')
|
|
4
|
-
|
|
5
|
-
module.exports = async function (deployer) {
|
|
6
|
-
const instance = await deployProxy(PolygonDidRegistry, { deployer })
|
|
7
|
-
console.log('Deployed', instance.address)
|
|
8
|
-
}
|
package/truffle-config.js
DELETED
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Use this file to configure your truffle project. It's seeded with some
|
|
3
|
-
* common settings for different networks and features like migrations,
|
|
4
|
-
* compilation and testing. Uncomment the ones you need or modify
|
|
5
|
-
* them to suit your project as necessary.
|
|
6
|
-
*
|
|
7
|
-
* More information about configuration can be found at:
|
|
8
|
-
*
|
|
9
|
-
* trufflesuite.com/docs/advanced/configuration
|
|
10
|
-
*
|
|
11
|
-
* To deploy via Infura you'll need a wallet provider (like @truffle/hdwallet-provider)
|
|
12
|
-
* to sign your transactions before they're sent to a remote public node. Infura accounts
|
|
13
|
-
* are available for free at: infura.io/register.
|
|
14
|
-
*
|
|
15
|
-
* You'll also need a mnemonic - the twelve word phrase the wallet uses to generate
|
|
16
|
-
* public/private key pairs. If you're publishing your code to GitHub make sure you load this
|
|
17
|
-
* phrase from a file you've .gitignored so it doesn't accidentally become public.
|
|
18
|
-
*
|
|
19
|
-
*/
|
|
20
|
-
const HDWalletProvider = require('@truffle/hdwallet-provider')
|
|
21
|
-
require('dotenv').config()
|
|
22
|
-
|
|
23
|
-
module.exports = {
|
|
24
|
-
/**
|
|
25
|
-
* Networks define how you connect to your ethereum client and let you set the
|
|
26
|
-
* defaults web3 uses to send transactions. If you don't specify one truffle
|
|
27
|
-
* will spin up a development blockchain for you on port 9545 when you
|
|
28
|
-
* run `develop` or `test`. You can ask a truffle command to use a specific
|
|
29
|
-
* network from the command line, e.g
|
|
30
|
-
*
|
|
31
|
-
* $ truffle test --network <network-name>
|
|
32
|
-
*/
|
|
33
|
-
networks: {
|
|
34
|
-
development: {
|
|
35
|
-
host: '127.0.0.1', // Localhost (default: none)
|
|
36
|
-
port: 8545, // Standard Ethereum port (default: none)
|
|
37
|
-
network_id: '*', // Any network (default: none)
|
|
38
|
-
},
|
|
39
|
-
matic: {
|
|
40
|
-
provider: function () {
|
|
41
|
-
return new HDWalletProvider(process.env.SIGNER, process.env.RPCURL)
|
|
42
|
-
},
|
|
43
|
-
network_id: '80001',
|
|
44
|
-
},
|
|
45
|
-
matic_mainnet: {
|
|
46
|
-
provider: function () {
|
|
47
|
-
return new HDWalletProvider(process.env.SIGNER, process.env.RPCURL)
|
|
48
|
-
},
|
|
49
|
-
network_id: '137',
|
|
50
|
-
},
|
|
51
|
-
},
|
|
52
|
-
|
|
53
|
-
// Set default mocha options here, use special reporters etc.
|
|
54
|
-
mocha: {
|
|
55
|
-
// timeout: 100000
|
|
56
|
-
},
|
|
57
|
-
|
|
58
|
-
// Configure your compilers
|
|
59
|
-
compilers: {
|
|
60
|
-
solc: {
|
|
61
|
-
version: '0.8.16', // Fetch exact version from solc-bin (default: truffle's version)
|
|
62
|
-
},
|
|
63
|
-
},
|
|
64
|
-
|
|
65
|
-
db: {
|
|
66
|
-
enabled: false,
|
|
67
|
-
},
|
|
68
|
-
}
|