ваше сообщение коммита
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
{
|
{
|
||||||
"_format": "hh-sol-dbg-1",
|
"_format": "hh-sol-dbg-1",
|
||||||
"buildInfo": "../../build-info/aa0034b410e4fbe1d1ff90369d480540.json"
|
"buildInfo": "../../build-info/de2a9b4015c1250f0af7fbce121b1da6.json"
|
||||||
}
|
}
|
||||||
|
|||||||
354
backend/cache/solidity-files-cache.json
vendored
354
backend/cache/solidity-files-cache.json
vendored
@@ -2,7 +2,7 @@
|
|||||||
"_format": "hh-sol-cache-2",
|
"_format": "hh-sol-cache-2",
|
||||||
"files": {
|
"files": {
|
||||||
"/home/alex/Digital_Legal_Entity(DLE)/backend/contracts/DLE.sol": {
|
"/home/alex/Digital_Legal_Entity(DLE)/backend/contracts/DLE.sol": {
|
||||||
"lastModificationDate": 1755366617069,
|
"lastModificationDate": 1756115917209,
|
||||||
"contentHash": "47d6b51ed0025b36c50649b175745512",
|
"contentHash": "47d6b51ed0025b36c50649b175745512",
|
||||||
"sourceName": "contracts/DLE.sol",
|
"sourceName": "contracts/DLE.sol",
|
||||||
"solcConfig": {
|
"solcConfig": {
|
||||||
@@ -123,127 +123,6 @@
|
|||||||
"ERC20"
|
"ERC20"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"/home/alex/Digital_Legal_Entity(DLE)/backend/node_modules/@openzeppelin/contracts/utils/cryptography/ECDSA.sol": {
|
|
||||||
"lastModificationDate": 1754306764456,
|
|
||||||
"contentHash": "81de029d56aa803972be03c5d277cb6c",
|
|
||||||
"sourceName": "@openzeppelin/contracts/utils/cryptography/ECDSA.sol",
|
|
||||||
"solcConfig": {
|
|
||||||
"version": "0.8.20",
|
|
||||||
"settings": {
|
|
||||||
"optimizer": {
|
|
||||||
"enabled": true,
|
|
||||||
"runs": 200
|
|
||||||
},
|
|
||||||
"viaIR": true,
|
|
||||||
"evmVersion": "paris",
|
|
||||||
"outputSelection": {
|
|
||||||
"*": {
|
|
||||||
"*": [
|
|
||||||
"abi",
|
|
||||||
"evm.bytecode",
|
|
||||||
"evm.deployedBytecode",
|
|
||||||
"evm.methodIdentifiers",
|
|
||||||
"metadata"
|
|
||||||
],
|
|
||||||
"": [
|
|
||||||
"ast"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"imports": [],
|
|
||||||
"versionPragmas": [
|
|
||||||
"^0.8.20"
|
|
||||||
],
|
|
||||||
"artifacts": [
|
|
||||||
"ECDSA"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"/home/alex/Digital_Legal_Entity(DLE)/backend/node_modules/@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol": {
|
|
||||||
"lastModificationDate": 1754306768254,
|
|
||||||
"contentHash": "b1a8fc63b83ce00408e0c9ed1230b717",
|
|
||||||
"sourceName": "@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol",
|
|
||||||
"solcConfig": {
|
|
||||||
"version": "0.8.20",
|
|
||||||
"settings": {
|
|
||||||
"optimizer": {
|
|
||||||
"enabled": true,
|
|
||||||
"runs": 200
|
|
||||||
},
|
|
||||||
"viaIR": true,
|
|
||||||
"evmVersion": "paris",
|
|
||||||
"outputSelection": {
|
|
||||||
"*": {
|
|
||||||
"*": [
|
|
||||||
"abi",
|
|
||||||
"evm.bytecode",
|
|
||||||
"evm.deployedBytecode",
|
|
||||||
"evm.methodIdentifiers",
|
|
||||||
"metadata"
|
|
||||||
],
|
|
||||||
"": [
|
|
||||||
"ast"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"imports": [
|
|
||||||
"./IERC20Permit.sol",
|
|
||||||
"../ERC20.sol",
|
|
||||||
"../../../utils/cryptography/ECDSA.sol",
|
|
||||||
"../../../utils/cryptography/EIP712.sol",
|
|
||||||
"../../../utils/Nonces.sol"
|
|
||||||
],
|
|
||||||
"versionPragmas": [
|
|
||||||
"^0.8.20"
|
|
||||||
],
|
|
||||||
"artifacts": [
|
|
||||||
"ERC20Permit"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"/home/alex/Digital_Legal_Entity(DLE)/backend/node_modules/@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol": {
|
|
||||||
"lastModificationDate": 1754306768254,
|
|
||||||
"contentHash": "51c2083b160453420aaa0a046c16d5ca",
|
|
||||||
"sourceName": "@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol",
|
|
||||||
"solcConfig": {
|
|
||||||
"version": "0.8.20",
|
|
||||||
"settings": {
|
|
||||||
"optimizer": {
|
|
||||||
"enabled": true,
|
|
||||||
"runs": 200
|
|
||||||
},
|
|
||||||
"viaIR": true,
|
|
||||||
"evmVersion": "paris",
|
|
||||||
"outputSelection": {
|
|
||||||
"*": {
|
|
||||||
"*": [
|
|
||||||
"abi",
|
|
||||||
"evm.bytecode",
|
|
||||||
"evm.deployedBytecode",
|
|
||||||
"evm.methodIdentifiers",
|
|
||||||
"metadata"
|
|
||||||
],
|
|
||||||
"": [
|
|
||||||
"ast"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"imports": [
|
|
||||||
"../ERC20.sol",
|
|
||||||
"../../../governance/utils/Votes.sol",
|
|
||||||
"../../../utils/structs/Checkpoints.sol"
|
|
||||||
],
|
|
||||||
"versionPragmas": [
|
|
||||||
"^0.8.20"
|
|
||||||
],
|
|
||||||
"artifacts": [
|
|
||||||
"ERC20Votes"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"/home/alex/Digital_Legal_Entity(DLE)/backend/node_modules/@openzeppelin/contracts/utils/Context.sol": {
|
"/home/alex/Digital_Legal_Entity(DLE)/backend/node_modules/@openzeppelin/contracts/utils/Context.sol": {
|
||||||
"lastModificationDate": 1754306760451,
|
"lastModificationDate": 1754306760451,
|
||||||
"contentHash": "67bfbc07588eb8683b3fd8f6f909563e",
|
"contentHash": "67bfbc07588eb8683b3fd8f6f909563e",
|
||||||
@@ -396,8 +275,129 @@
|
|||||||
"IERC20Metadata"
|
"IERC20Metadata"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"/home/alex/Digital_Legal_Entity(DLE)/backend/node_modules/@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol": {
|
||||||
|
"lastModificationDate": 1756116057319,
|
||||||
|
"contentHash": "b1a8fc63b83ce00408e0c9ed1230b717",
|
||||||
|
"sourceName": "@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol",
|
||||||
|
"solcConfig": {
|
||||||
|
"version": "0.8.20",
|
||||||
|
"settings": {
|
||||||
|
"optimizer": {
|
||||||
|
"enabled": true,
|
||||||
|
"runs": 200
|
||||||
|
},
|
||||||
|
"viaIR": true,
|
||||||
|
"evmVersion": "paris",
|
||||||
|
"outputSelection": {
|
||||||
|
"*": {
|
||||||
|
"*": [
|
||||||
|
"abi",
|
||||||
|
"evm.bytecode",
|
||||||
|
"evm.deployedBytecode",
|
||||||
|
"evm.methodIdentifiers",
|
||||||
|
"metadata"
|
||||||
|
],
|
||||||
|
"": [
|
||||||
|
"ast"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"imports": [
|
||||||
|
"./IERC20Permit.sol",
|
||||||
|
"../ERC20.sol",
|
||||||
|
"../../../utils/cryptography/ECDSA.sol",
|
||||||
|
"../../../utils/cryptography/EIP712.sol",
|
||||||
|
"../../../utils/Nonces.sol"
|
||||||
|
],
|
||||||
|
"versionPragmas": [
|
||||||
|
"^0.8.20"
|
||||||
|
],
|
||||||
|
"artifacts": [
|
||||||
|
"ERC20Permit"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"/home/alex/Digital_Legal_Entity(DLE)/backend/node_modules/@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol": {
|
||||||
|
"lastModificationDate": 1756116057319,
|
||||||
|
"contentHash": "51c2083b160453420aaa0a046c16d5ca",
|
||||||
|
"sourceName": "@openzeppelin/contracts/token/ERC20/extensions/ERC20Votes.sol",
|
||||||
|
"solcConfig": {
|
||||||
|
"version": "0.8.20",
|
||||||
|
"settings": {
|
||||||
|
"optimizer": {
|
||||||
|
"enabled": true,
|
||||||
|
"runs": 200
|
||||||
|
},
|
||||||
|
"viaIR": true,
|
||||||
|
"evmVersion": "paris",
|
||||||
|
"outputSelection": {
|
||||||
|
"*": {
|
||||||
|
"*": [
|
||||||
|
"abi",
|
||||||
|
"evm.bytecode",
|
||||||
|
"evm.deployedBytecode",
|
||||||
|
"evm.methodIdentifiers",
|
||||||
|
"metadata"
|
||||||
|
],
|
||||||
|
"": [
|
||||||
|
"ast"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"imports": [
|
||||||
|
"../ERC20.sol",
|
||||||
|
"../../../governance/utils/Votes.sol",
|
||||||
|
"../../../utils/structs/Checkpoints.sol"
|
||||||
|
],
|
||||||
|
"versionPragmas": [
|
||||||
|
"^0.8.20"
|
||||||
|
],
|
||||||
|
"artifacts": [
|
||||||
|
"ERC20Votes"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"/home/alex/Digital_Legal_Entity(DLE)/backend/node_modules/@openzeppelin/contracts/utils/cryptography/ECDSA.sol": {
|
||||||
|
"lastModificationDate": 1756116054610,
|
||||||
|
"contentHash": "81de029d56aa803972be03c5d277cb6c",
|
||||||
|
"sourceName": "@openzeppelin/contracts/utils/cryptography/ECDSA.sol",
|
||||||
|
"solcConfig": {
|
||||||
|
"version": "0.8.20",
|
||||||
|
"settings": {
|
||||||
|
"optimizer": {
|
||||||
|
"enabled": true,
|
||||||
|
"runs": 200
|
||||||
|
},
|
||||||
|
"viaIR": true,
|
||||||
|
"evmVersion": "paris",
|
||||||
|
"outputSelection": {
|
||||||
|
"*": {
|
||||||
|
"*": [
|
||||||
|
"abi",
|
||||||
|
"evm.bytecode",
|
||||||
|
"evm.deployedBytecode",
|
||||||
|
"evm.methodIdentifiers",
|
||||||
|
"metadata"
|
||||||
|
],
|
||||||
|
"": [
|
||||||
|
"ast"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"imports": [],
|
||||||
|
"versionPragmas": [
|
||||||
|
"^0.8.20"
|
||||||
|
],
|
||||||
|
"artifacts": [
|
||||||
|
"ECDSA"
|
||||||
|
]
|
||||||
|
},
|
||||||
"/home/alex/Digital_Legal_Entity(DLE)/backend/node_modules/@openzeppelin/contracts/utils/Nonces.sol": {
|
"/home/alex/Digital_Legal_Entity(DLE)/backend/node_modules/@openzeppelin/contracts/utils/Nonces.sol": {
|
||||||
"lastModificationDate": 1754306760451,
|
"lastModificationDate": 1756116051370,
|
||||||
"contentHash": "c32d108058718efb9061b88e83a83f79",
|
"contentHash": "c32d108058718efb9061b88e83a83f79",
|
||||||
"sourceName": "@openzeppelin/contracts/utils/Nonces.sol",
|
"sourceName": "@openzeppelin/contracts/utils/Nonces.sol",
|
||||||
"solcConfig": {
|
"solcConfig": {
|
||||||
@@ -434,7 +434,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"/home/alex/Digital_Legal_Entity(DLE)/backend/node_modules/@openzeppelin/contracts/utils/cryptography/EIP712.sol": {
|
"/home/alex/Digital_Legal_Entity(DLE)/backend/node_modules/@openzeppelin/contracts/utils/cryptography/EIP712.sol": {
|
||||||
"lastModificationDate": 1754306764456,
|
"lastModificationDate": 1756116054610,
|
||||||
"contentHash": "8dbb261c55f358342798c4d1803d4f8e",
|
"contentHash": "8dbb261c55f358342798c4d1803d4f8e",
|
||||||
"sourceName": "@openzeppelin/contracts/utils/cryptography/EIP712.sol",
|
"sourceName": "@openzeppelin/contracts/utils/cryptography/EIP712.sol",
|
||||||
"solcConfig": {
|
"solcConfig": {
|
||||||
@@ -475,7 +475,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"/home/alex/Digital_Legal_Entity(DLE)/backend/node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol": {
|
"/home/alex/Digital_Legal_Entity(DLE)/backend/node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol": {
|
||||||
"lastModificationDate": 1754306768254,
|
"lastModificationDate": 1756116057319,
|
||||||
"contentHash": "94ec15baf0d5df863f45b8f351937ec7",
|
"contentHash": "94ec15baf0d5df863f45b8f351937ec7",
|
||||||
"sourceName": "@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol",
|
"sourceName": "@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol",
|
||||||
"solcConfig": {
|
"solcConfig": {
|
||||||
@@ -511,8 +511,45 @@
|
|||||||
"IERC20Permit"
|
"IERC20Permit"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"/home/alex/Digital_Legal_Entity(DLE)/backend/node_modules/@openzeppelin/contracts/interfaces/IERC5267.sol": {
|
||||||
|
"lastModificationDate": 1756116051370,
|
||||||
|
"contentHash": "94364524cb1a39dcbc3d3afff6d8e53e",
|
||||||
|
"sourceName": "@openzeppelin/contracts/interfaces/IERC5267.sol",
|
||||||
|
"solcConfig": {
|
||||||
|
"version": "0.8.20",
|
||||||
|
"settings": {
|
||||||
|
"optimizer": {
|
||||||
|
"enabled": true,
|
||||||
|
"runs": 200
|
||||||
|
},
|
||||||
|
"viaIR": true,
|
||||||
|
"evmVersion": "paris",
|
||||||
|
"outputSelection": {
|
||||||
|
"*": {
|
||||||
|
"*": [
|
||||||
|
"abi",
|
||||||
|
"evm.bytecode",
|
||||||
|
"evm.deployedBytecode",
|
||||||
|
"evm.methodIdentifiers",
|
||||||
|
"metadata"
|
||||||
|
],
|
||||||
|
"": [
|
||||||
|
"ast"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"imports": [],
|
||||||
|
"versionPragmas": [
|
||||||
|
"^0.8.20"
|
||||||
|
],
|
||||||
|
"artifacts": [
|
||||||
|
"IERC5267"
|
||||||
|
]
|
||||||
|
},
|
||||||
"/home/alex/Digital_Legal_Entity(DLE)/backend/node_modules/@openzeppelin/contracts/utils/ShortStrings.sol": {
|
"/home/alex/Digital_Legal_Entity(DLE)/backend/node_modules/@openzeppelin/contracts/utils/ShortStrings.sol": {
|
||||||
"lastModificationDate": 1754306760451,
|
"lastModificationDate": 1756116051370,
|
||||||
"contentHash": "94e7feaf138d08fb736e43ca0be9bf26",
|
"contentHash": "94e7feaf138d08fb736e43ca0be9bf26",
|
||||||
"sourceName": "@openzeppelin/contracts/utils/ShortStrings.sol",
|
"sourceName": "@openzeppelin/contracts/utils/ShortStrings.sol",
|
||||||
"solcConfig": {
|
"solcConfig": {
|
||||||
@@ -550,45 +587,8 @@
|
|||||||
"ShortStrings"
|
"ShortStrings"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"/home/alex/Digital_Legal_Entity(DLE)/backend/node_modules/@openzeppelin/contracts/interfaces/IERC5267.sol": {
|
|
||||||
"lastModificationDate": 1754306760460,
|
|
||||||
"contentHash": "94364524cb1a39dcbc3d3afff6d8e53e",
|
|
||||||
"sourceName": "@openzeppelin/contracts/interfaces/IERC5267.sol",
|
|
||||||
"solcConfig": {
|
|
||||||
"version": "0.8.20",
|
|
||||||
"settings": {
|
|
||||||
"optimizer": {
|
|
||||||
"enabled": true,
|
|
||||||
"runs": 200
|
|
||||||
},
|
|
||||||
"viaIR": true,
|
|
||||||
"evmVersion": "paris",
|
|
||||||
"outputSelection": {
|
|
||||||
"*": {
|
|
||||||
"*": [
|
|
||||||
"abi",
|
|
||||||
"evm.bytecode",
|
|
||||||
"evm.deployedBytecode",
|
|
||||||
"evm.methodIdentifiers",
|
|
||||||
"metadata"
|
|
||||||
],
|
|
||||||
"": [
|
|
||||||
"ast"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"imports": [],
|
|
||||||
"versionPragmas": [
|
|
||||||
"^0.8.20"
|
|
||||||
],
|
|
||||||
"artifacts": [
|
|
||||||
"IERC5267"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"/home/alex/Digital_Legal_Entity(DLE)/backend/node_modules/@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol": {
|
"/home/alex/Digital_Legal_Entity(DLE)/backend/node_modules/@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol": {
|
||||||
"lastModificationDate": 1754306764465,
|
"lastModificationDate": 1756116054610,
|
||||||
"contentHash": "86fd93657e4e27ff76c38699e9b9fcef",
|
"contentHash": "86fd93657e4e27ff76c38699e9b9fcef",
|
||||||
"sourceName": "@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol",
|
"sourceName": "@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol",
|
||||||
"solcConfig": {
|
"solcConfig": {
|
||||||
@@ -627,7 +627,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"/home/alex/Digital_Legal_Entity(DLE)/backend/node_modules/@openzeppelin/contracts/utils/StorageSlot.sol": {
|
"/home/alex/Digital_Legal_Entity(DLE)/backend/node_modules/@openzeppelin/contracts/utils/StorageSlot.sol": {
|
||||||
"lastModificationDate": 1754306760451,
|
"lastModificationDate": 1756116051379,
|
||||||
"contentHash": "e656d64c4ce918f3d13030b91c935134",
|
"contentHash": "e656d64c4ce918f3d13030b91c935134",
|
||||||
"sourceName": "@openzeppelin/contracts/utils/StorageSlot.sol",
|
"sourceName": "@openzeppelin/contracts/utils/StorageSlot.sol",
|
||||||
"solcConfig": {
|
"solcConfig": {
|
||||||
@@ -664,7 +664,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"/home/alex/Digital_Legal_Entity(DLE)/backend/node_modules/@openzeppelin/contracts/utils/Strings.sol": {
|
"/home/alex/Digital_Legal_Entity(DLE)/backend/node_modules/@openzeppelin/contracts/utils/Strings.sol": {
|
||||||
"lastModificationDate": 1754306760451,
|
"lastModificationDate": 1756116051379,
|
||||||
"contentHash": "a55fef2557b35bac18a1880d3c2e6740",
|
"contentHash": "a55fef2557b35bac18a1880d3c2e6740",
|
||||||
"sourceName": "@openzeppelin/contracts/utils/Strings.sol",
|
"sourceName": "@openzeppelin/contracts/utils/Strings.sol",
|
||||||
"solcConfig": {
|
"solcConfig": {
|
||||||
@@ -705,7 +705,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"/home/alex/Digital_Legal_Entity(DLE)/backend/node_modules/@openzeppelin/contracts/utils/math/Math.sol": {
|
"/home/alex/Digital_Legal_Entity(DLE)/backend/node_modules/@openzeppelin/contracts/utils/math/Math.sol": {
|
||||||
"lastModificationDate": 1754306764456,
|
"lastModificationDate": 1756116054610,
|
||||||
"contentHash": "2b2665ae9bdb1af440658741a77fe213",
|
"contentHash": "2b2665ae9bdb1af440658741a77fe213",
|
||||||
"sourceName": "@openzeppelin/contracts/utils/math/Math.sol",
|
"sourceName": "@openzeppelin/contracts/utils/math/Math.sol",
|
||||||
"solcConfig": {
|
"solcConfig": {
|
||||||
@@ -745,7 +745,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"/home/alex/Digital_Legal_Entity(DLE)/backend/node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol": {
|
"/home/alex/Digital_Legal_Entity(DLE)/backend/node_modules/@openzeppelin/contracts/utils/math/SafeCast.sol": {
|
||||||
"lastModificationDate": 1754306764456,
|
"lastModificationDate": 1756116054610,
|
||||||
"contentHash": "2adca1150f58fc6f3d1f0a0f22ee7cca",
|
"contentHash": "2adca1150f58fc6f3d1f0a0f22ee7cca",
|
||||||
"sourceName": "@openzeppelin/contracts/utils/math/SafeCast.sol",
|
"sourceName": "@openzeppelin/contracts/utils/math/SafeCast.sol",
|
||||||
"solcConfig": {
|
"solcConfig": {
|
||||||
@@ -782,7 +782,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"/home/alex/Digital_Legal_Entity(DLE)/backend/node_modules/@openzeppelin/contracts/utils/math/SignedMath.sol": {
|
"/home/alex/Digital_Legal_Entity(DLE)/backend/node_modules/@openzeppelin/contracts/utils/math/SignedMath.sol": {
|
||||||
"lastModificationDate": 1754306764456,
|
"lastModificationDate": 1756116054610,
|
||||||
"contentHash": "ae3528afb8bdb0a7dcfba5b115ee8074",
|
"contentHash": "ae3528afb8bdb0a7dcfba5b115ee8074",
|
||||||
"sourceName": "@openzeppelin/contracts/utils/math/SignedMath.sol",
|
"sourceName": "@openzeppelin/contracts/utils/math/SignedMath.sol",
|
||||||
"solcConfig": {
|
"solcConfig": {
|
||||||
@@ -821,7 +821,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"/home/alex/Digital_Legal_Entity(DLE)/backend/node_modules/@openzeppelin/contracts/utils/Panic.sol": {
|
"/home/alex/Digital_Legal_Entity(DLE)/backend/node_modules/@openzeppelin/contracts/utils/Panic.sol": {
|
||||||
"lastModificationDate": 1754306760451,
|
"lastModificationDate": 1756116051370,
|
||||||
"contentHash": "2133dc13536b4a6a98131e431fac59e1",
|
"contentHash": "2133dc13536b4a6a98131e431fac59e1",
|
||||||
"sourceName": "@openzeppelin/contracts/utils/Panic.sol",
|
"sourceName": "@openzeppelin/contracts/utils/Panic.sol",
|
||||||
"solcConfig": {
|
"solcConfig": {
|
||||||
@@ -858,7 +858,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"/home/alex/Digital_Legal_Entity(DLE)/backend/node_modules/@openzeppelin/contracts/governance/utils/Votes.sol": {
|
"/home/alex/Digital_Legal_Entity(DLE)/backend/node_modules/@openzeppelin/contracts/governance/utils/Votes.sol": {
|
||||||
"lastModificationDate": 1754306764456,
|
"lastModificationDate": 1756116054601,
|
||||||
"contentHash": "95aceafdc639babdd22576e5e3774d64",
|
"contentHash": "95aceafdc639babdd22576e5e3774d64",
|
||||||
"sourceName": "@openzeppelin/contracts/governance/utils/Votes.sol",
|
"sourceName": "@openzeppelin/contracts/governance/utils/Votes.sol",
|
||||||
"solcConfig": {
|
"solcConfig": {
|
||||||
@@ -904,7 +904,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"/home/alex/Digital_Legal_Entity(DLE)/backend/node_modules/@openzeppelin/contracts/utils/structs/Checkpoints.sol": {
|
"/home/alex/Digital_Legal_Entity(DLE)/backend/node_modules/@openzeppelin/contracts/utils/structs/Checkpoints.sol": {
|
||||||
"lastModificationDate": 1754306764456,
|
"lastModificationDate": 1756116054610,
|
||||||
"contentHash": "657c6dfea3bae1af948de6113ba01cea",
|
"contentHash": "657c6dfea3bae1af948de6113ba01cea",
|
||||||
"sourceName": "@openzeppelin/contracts/utils/structs/Checkpoints.sol",
|
"sourceName": "@openzeppelin/contracts/utils/structs/Checkpoints.sol",
|
||||||
"solcConfig": {
|
"solcConfig": {
|
||||||
@@ -943,7 +943,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"/home/alex/Digital_Legal_Entity(DLE)/backend/node_modules/@openzeppelin/contracts/interfaces/IERC5805.sol": {
|
"/home/alex/Digital_Legal_Entity(DLE)/backend/node_modules/@openzeppelin/contracts/interfaces/IERC5805.sol": {
|
||||||
"lastModificationDate": 1754306760460,
|
"lastModificationDate": 1756116051370,
|
||||||
"contentHash": "65ba9f89b1057e2192e341b286d4e261",
|
"contentHash": "65ba9f89b1057e2192e341b286d4e261",
|
||||||
"sourceName": "@openzeppelin/contracts/interfaces/IERC5805.sol",
|
"sourceName": "@openzeppelin/contracts/interfaces/IERC5805.sol",
|
||||||
"solcConfig": {
|
"solcConfig": {
|
||||||
@@ -983,7 +983,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"/home/alex/Digital_Legal_Entity(DLE)/backend/node_modules/@openzeppelin/contracts/utils/types/Time.sol": {
|
"/home/alex/Digital_Legal_Entity(DLE)/backend/node_modules/@openzeppelin/contracts/utils/types/Time.sol": {
|
||||||
"lastModificationDate": 1754306764456,
|
"lastModificationDate": 1756116054610,
|
||||||
"contentHash": "d83e7814a059fc1287fd765f424ce004",
|
"contentHash": "d83e7814a059fc1287fd765f424ce004",
|
||||||
"sourceName": "@openzeppelin/contracts/utils/types/Time.sol",
|
"sourceName": "@openzeppelin/contracts/utils/types/Time.sol",
|
||||||
"solcConfig": {
|
"solcConfig": {
|
||||||
@@ -1023,7 +1023,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"/home/alex/Digital_Legal_Entity(DLE)/backend/node_modules/@openzeppelin/contracts/governance/utils/IVotes.sol": {
|
"/home/alex/Digital_Legal_Entity(DLE)/backend/node_modules/@openzeppelin/contracts/governance/utils/IVotes.sol": {
|
||||||
"lastModificationDate": 1754306764456,
|
"lastModificationDate": 1756116054601,
|
||||||
"contentHash": "905ffceb29869fee4b5a649abe7e2927",
|
"contentHash": "905ffceb29869fee4b5a649abe7e2927",
|
||||||
"sourceName": "@openzeppelin/contracts/governance/utils/IVotes.sol",
|
"sourceName": "@openzeppelin/contracts/governance/utils/IVotes.sol",
|
||||||
"solcConfig": {
|
"solcConfig": {
|
||||||
@@ -1060,7 +1060,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"/home/alex/Digital_Legal_Entity(DLE)/backend/node_modules/@openzeppelin/contracts/interfaces/IERC6372.sol": {
|
"/home/alex/Digital_Legal_Entity(DLE)/backend/node_modules/@openzeppelin/contracts/interfaces/IERC6372.sol": {
|
||||||
"lastModificationDate": 1754306760460,
|
"lastModificationDate": 1756116051370,
|
||||||
"contentHash": "414cd6acf090e4009cf016ff62ecbd88",
|
"contentHash": "414cd6acf090e4009cf016ff62ecbd88",
|
||||||
"sourceName": "@openzeppelin/contracts/interfaces/IERC6372.sol",
|
"sourceName": "@openzeppelin/contracts/interfaces/IERC6372.sol",
|
||||||
"solcConfig": {
|
"solcConfig": {
|
||||||
@@ -1097,7 +1097,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"/home/alex/Digital_Legal_Entity(DLE)/backend/contracts/FactoryDeployer.sol": {
|
"/home/alex/Digital_Legal_Entity(DLE)/backend/contracts/FactoryDeployer.sol": {
|
||||||
"lastModificationDate": 1754685617489,
|
"lastModificationDate": 1756115917209,
|
||||||
"contentHash": "6161bbb21af830bc05d6acd8682d9678",
|
"contentHash": "6161bbb21af830bc05d6acd8682d9678",
|
||||||
"sourceName": "contracts/FactoryDeployer.sol",
|
"sourceName": "contracts/FactoryDeployer.sol",
|
||||||
"solcConfig": {
|
"solcConfig": {
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ const verificationService = require('./verification-service'); // Использ
|
|||||||
const identityService = require('./identity-service'); // <-- ДОБАВЛЕН ИМПОРТ
|
const identityService = require('./identity-service'); // <-- ДОБАВЛЕН ИМПОРТ
|
||||||
const authTokenService = require('./authTokenService');
|
const authTokenService = require('./authTokenService');
|
||||||
const rpcProviderService = require('./rpcProviderService');
|
const rpcProviderService = require('./rpcProviderService');
|
||||||
|
const tokenBalanceService = require('./tokenBalanceService');
|
||||||
const { getLinkedWallet } = require('./wallet-service');
|
const { getLinkedWallet } = require('./wallet-service');
|
||||||
const { checkAdminRole } = require('./admin-role');
|
const { checkAdminRole } = require('./admin-role');
|
||||||
const { broadcastContactsUpdate } = require('../wsHub');
|
const { broadcastContactsUpdate } = require('../wsHub');
|
||||||
@@ -914,64 +915,7 @@ class AuthService {
|
|||||||
* @returns {Promise<Array>} - массив объектов с балансами
|
* @returns {Promise<Array>} - массив объектов с балансами
|
||||||
*/
|
*/
|
||||||
async getUserTokenBalances(address) {
|
async getUserTokenBalances(address) {
|
||||||
if (!address) return [];
|
return tokenBalanceService.getUserTokenBalances(address);
|
||||||
|
|
||||||
// Получаем ключ шифрования
|
|
||||||
const fs = require('fs');
|
|
||||||
const path = require('path');
|
|
||||||
let encryptionKey = 'default-key';
|
|
||||||
|
|
||||||
try {
|
|
||||||
const keyPath = path.join(__dirname, '../ssl/keys/full_db_encryption.key');
|
|
||||||
if (fs.existsSync(keyPath)) {
|
|
||||||
encryptionKey = fs.readFileSync(keyPath, 'utf8').trim();
|
|
||||||
}
|
|
||||||
} catch (keyError) {
|
|
||||||
console.error('Error reading encryption key:', keyError);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Получаем токены и RPC с расшифровкой
|
|
||||||
const tokensResult = await db.getQuery()(
|
|
||||||
'SELECT id, min_balance, created_at, updated_at, decrypt_text(name_encrypted, $1) as name, decrypt_text(address_encrypted, $1) as address, decrypt_text(network_encrypted, $1) as network FROM auth_tokens',
|
|
||||||
[encryptionKey]
|
|
||||||
);
|
|
||||||
const tokens = tokensResult.rows;
|
|
||||||
|
|
||||||
const rpcProvidersResult = await db.getQuery()(
|
|
||||||
'SELECT id, chain_id, created_at, updated_at, decrypt_text(network_id_encrypted, $1) as network_id, decrypt_text(rpc_url_encrypted, $1) as rpc_url FROM rpc_providers',
|
|
||||||
[encryptionKey]
|
|
||||||
);
|
|
||||||
const rpcProviders = rpcProvidersResult.rows;
|
|
||||||
const rpcMap = {};
|
|
||||||
for (const rpc of rpcProviders) {
|
|
||||||
rpcMap[rpc.network_id] = rpc.rpc_url;
|
|
||||||
}
|
|
||||||
const ERC20_ABI = ['function balanceOf(address owner) view returns (uint256)'];
|
|
||||||
const results = [];
|
|
||||||
for (const token of tokens) {
|
|
||||||
const rpcUrl = rpcMap[token.network];
|
|
||||||
if (!rpcUrl) continue;
|
|
||||||
const provider = new ethers.JsonRpcProvider(rpcUrl);
|
|
||||||
const tokenContract = new ethers.Contract(token.address, ERC20_ABI, provider);
|
|
||||||
let balance = '0';
|
|
||||||
try {
|
|
||||||
const rawBalance = await tokenContract.balanceOf(address);
|
|
||||||
balance = ethers.formatUnits(rawBalance, 18);
|
|
||||||
if (!balance || isNaN(Number(balance))) balance = '0';
|
|
||||||
} catch (e) {
|
|
||||||
logger.error(`[getUserTokenBalances] Ошибка получения баланса для ${token.name} (${token.address}) в сети ${token.network}:`, e);
|
|
||||||
balance = '0';
|
|
||||||
}
|
|
||||||
results.push({
|
|
||||||
network: token.network,
|
|
||||||
tokenAddress: token.address,
|
|
||||||
tokenName: token.name,
|
|
||||||
symbol: token.symbol || '',
|
|
||||||
balance,
|
|
||||||
minBalance: token.min_balance,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
return results;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
78
backend/services/tokenBalanceService.js
Normal file
78
backend/services/tokenBalanceService.js
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
/**
|
||||||
|
* Сервис получения балансов токенов пользователя из БД и RPC
|
||||||
|
*/
|
||||||
|
|
||||||
|
const { ethers } = require('ethers');
|
||||||
|
const db = require('../db');
|
||||||
|
const logger = require('../utils/logger');
|
||||||
|
|
||||||
|
async function getUserTokenBalances(address) {
|
||||||
|
if (!address) return [];
|
||||||
|
|
||||||
|
// Получаем ключ шифрования
|
||||||
|
const fs = require('fs');
|
||||||
|
const path = require('path');
|
||||||
|
let encryptionKey = 'default-key';
|
||||||
|
|
||||||
|
try {
|
||||||
|
const keyPath = path.join(__dirname, '../ssl/keys/full_db_encryption.key');
|
||||||
|
if (fs.existsSync(keyPath)) {
|
||||||
|
encryptionKey = fs.readFileSync(keyPath, 'utf8').trim();
|
||||||
|
}
|
||||||
|
} catch (keyError) {
|
||||||
|
console.error('Error reading encryption key:', keyError);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Получаем токены и RPC с расшифровкой
|
||||||
|
const tokensResult = await db.getQuery()(
|
||||||
|
'SELECT id, min_balance, created_at, updated_at, decrypt_text(name_encrypted, $1) as name, decrypt_text(address_encrypted, $1) as address, decrypt_text(network_encrypted, $1) as network FROM auth_tokens',
|
||||||
|
[encryptionKey]
|
||||||
|
);
|
||||||
|
const tokens = tokensResult.rows;
|
||||||
|
|
||||||
|
const rpcProvidersResult = await db.getQuery()(
|
||||||
|
'SELECT id, chain_id, created_at, updated_at, decrypt_text(network_id_encrypted, $1) as network_id, decrypt_text(rpc_url_encrypted, $1) as rpc_url FROM rpc_providers',
|
||||||
|
[encryptionKey]
|
||||||
|
);
|
||||||
|
const rpcProviders = rpcProvidersResult.rows;
|
||||||
|
const rpcMap = {};
|
||||||
|
for (const rpc of rpcProviders) {
|
||||||
|
rpcMap[rpc.network_id] = rpc.rpc_url;
|
||||||
|
}
|
||||||
|
|
||||||
|
const ERC20_ABI = ['function balanceOf(address owner) view returns (uint256)'];
|
||||||
|
const results = [];
|
||||||
|
|
||||||
|
for (const token of tokens) {
|
||||||
|
const rpcUrl = rpcMap[token.network];
|
||||||
|
if (!rpcUrl) continue;
|
||||||
|
const provider = new ethers.JsonRpcProvider(rpcUrl);
|
||||||
|
const tokenContract = new ethers.Contract(token.address, ERC20_ABI, provider);
|
||||||
|
let balance = '0';
|
||||||
|
try {
|
||||||
|
const rawBalance = await tokenContract.balanceOf(address);
|
||||||
|
balance = ethers.formatUnits(rawBalance, 18);
|
||||||
|
if (!balance || isNaN(Number(balance))) balance = '0';
|
||||||
|
} catch (e) {
|
||||||
|
logger.error(
|
||||||
|
`[tokenBalanceService] Ошибка получения баланса для ${token.name} (${token.address}) в сети ${token.network}:`,
|
||||||
|
e
|
||||||
|
);
|
||||||
|
balance = '0';
|
||||||
|
}
|
||||||
|
results.push({
|
||||||
|
network: token.network,
|
||||||
|
tokenAddress: token.address,
|
||||||
|
tokenName: token.name,
|
||||||
|
symbol: token.symbol || '',
|
||||||
|
balance,
|
||||||
|
minBalance: token.min_balance,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return results;
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = { getUserTokenBalances };
|
||||||
|
|
||||||
|
|
||||||
@@ -11,7 +11,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
const WebSocket = require('ws');
|
const WebSocket = require('ws');
|
||||||
const authService = require('./services/auth-service');
|
const tokenBalanceService = require('./services/tokenBalanceService');
|
||||||
|
|
||||||
let wss = null;
|
let wss = null;
|
||||||
// Храним клиентов по userId для персонализированных уведомлений
|
// Храним клиентов по userId для персонализированных уведомлений
|
||||||
@@ -477,9 +477,9 @@ module.exports = {
|
|||||||
async function handleTokenBalancesRequest(ws, address, userId) {
|
async function handleTokenBalancesRequest(ws, address, userId) {
|
||||||
try {
|
try {
|
||||||
console.log(`[WebSocket] Запрос балансов для адреса: ${address}`);
|
console.log(`[WebSocket] Запрос балансов для адреса: ${address}`);
|
||||||
|
|
||||||
// Получаем балансы через authService
|
// Получаем балансы через отдельный сервис без зависимостей от wsHub
|
||||||
const balances = await authService.getUserTokenBalances(address);
|
const balances = await tokenBalanceService.getUserTokenBalances(address);
|
||||||
|
|
||||||
// Отправляем ответ клиенту
|
// Отправляем ответ клиенту
|
||||||
ws.send(JSON.stringify({
|
ws.send(JSON.stringify({
|
||||||
|
|||||||
@@ -45,18 +45,19 @@ services:
|
|||||||
deploy:
|
deploy:
|
||||||
resources:
|
resources:
|
||||||
limits:
|
limits:
|
||||||
cpus: '4.0'
|
cpus: '2.0'
|
||||||
memory: 16G
|
memory: 8G
|
||||||
reservations:
|
reservations:
|
||||||
cpus: '3.0'
|
cpus: '1.0'
|
||||||
memory: 12G
|
memory: 4G
|
||||||
environment:
|
environment:
|
||||||
- OLLAMA_HOST=0.0.0.0
|
- OLLAMA_HOST=0.0.0.0
|
||||||
- OLLAMA_ORIGINS=*
|
- OLLAMA_ORIGINS=*
|
||||||
- OLLAMA_NUM_PARALLEL=1
|
- OLLAMA_NUM_PARALLEL=1
|
||||||
- OLLAMA_NUM_GPU=1
|
- OLLAMA_NUM_GPU=0
|
||||||
- OLLAMA_KEEP_ALIVE=1
|
- OLLAMA_KEEP_ALIVE=-1
|
||||||
- OLLAMA_MODEL_TIMEOUT=0
|
- OLLAMA_MODEL_TIMEOUT=0
|
||||||
|
- OLLAMA_MAX_LOADED_MODELS=1
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: ["CMD", "ollama", "list"]
|
test: ["CMD", "ollama", "list"]
|
||||||
interval: 30s
|
interval: 30s
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
# Финальная безопасная конфигурация nginx
|
# Финальная безопасная конфигурация nginx
|
||||||
|
|
||||||
# Включаем WAF конфигурацию
|
# Включаем WAF конфигурацию
|
||||||
# include /etc/nginx/conf.d/waf.conf;
|
include /etc/nginx/conf.d/waf.conf;
|
||||||
|
|
||||||
# Ограничение запросов (5 r/s на IP, с небольшим burst)
|
# Ограничение запросов (5 r/s на IP, с небольшим burst)
|
||||||
limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=5r/s;
|
limit_req_zone $binary_remote_addr zone=req_limit_per_ip:10m rate=5r/s;
|
||||||
@@ -27,21 +27,21 @@ server {
|
|||||||
index index.html;
|
index index.html;
|
||||||
|
|
||||||
# Блокировка по WAF правилам
|
# Блокировка по WAF правилам
|
||||||
# if ($bad_ip = 1) {
|
if ($bad_ip = 1) {
|
||||||
# return 403;
|
return 403;
|
||||||
# }
|
}
|
||||||
|
|
||||||
# if ($bad_bot = 1) {
|
if ($bad_bot = 1) {
|
||||||
# return 403;
|
return 403;
|
||||||
# }
|
}
|
||||||
|
|
||||||
# if ($bad_request = 1) {
|
if ($bad_request = 1) {
|
||||||
# return 404;
|
return 404;
|
||||||
# }
|
}
|
||||||
|
|
||||||
# if ($bad_domain = 1) {
|
if ($bad_domain = 1) {
|
||||||
# return 404;
|
return 404;
|
||||||
# }
|
}
|
||||||
|
|
||||||
# Блокировка агрессивных сканеров
|
# Блокировка агрессивных сканеров
|
||||||
if ($http_user_agent ~* (sqlmap|nikto|dirb|gobuster|wfuzz|burp|zap|nessus|openvas)) {
|
if ($http_user_agent ~* (sqlmap|nikto|dirb|gobuster|wfuzz|burp|zap|nessus|openvas)) {
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
FROM nginx:alpine
|
FROM nginx:alpine
|
||||||
COPY dist/ /usr/share/nginx/html/
|
COPY dist/ /usr/share/nginx/html/
|
||||||
COPY nginx-tunnel.conf /etc/nginx/conf.d/default.conf
|
COPY nginx-tunnel.conf /etc/nginx/conf.d/default.conf
|
||||||
# COPY nginx-waf.conf /etc/nginx/conf.d/waf.conf
|
COPY nginx-waf.conf /etc/nginx/conf.d/waf.conf
|
||||||
@@ -1,16 +1,5 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
/**
|
|
||||||
* Copyright (c) 2024-2025 Тарабанов Александр Викторович
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This software is proprietary and confidential.
|
|
||||||
* Unauthorized copying, modification, or distribution is prohibited.
|
|
||||||
*
|
|
||||||
* For licensing inquiries: info@hb3-accelerator.com
|
|
||||||
* Website: https://hb3-accelerator.com
|
|
||||||
* GitHub: https://github.com/VC-HB3-Accelerator
|
|
||||||
*/
|
|
||||||
|
|
||||||
if ! docker exec dapp-postgres pg_isready -U dapp_user -d dapp_db > /dev/null 2>&1; then
|
if ! docker exec dapp-postgres pg_isready -U dapp_user -d dapp_db > /dev/null 2>&1; then
|
||||||
exit 1
|
exit 1
|
||||||
|
|||||||
Reference in New Issue
Block a user