feat:-ORM addition for possible complex queries.
-ABI for smart contracts
This commit is contained in:
parent
473838b3b7
commit
be18e4088f
2
.gitignore
vendored
2
.gitignore
vendored
|
|
@ -72,3 +72,5 @@ node_modules
|
|||
|
||||
# Hardhat Ignition default folder for deployments against a local node
|
||||
ignition/deployments/chain-31337
|
||||
|
||||
/generated/prisma
|
||||
|
|
|
|||
|
|
@ -4,40 +4,395 @@ pragma solidity ^0.8.27;
|
|||
import {ERC20} from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
|
||||
import {Strings} from "@openzeppelin/contracts/utils/Strings.sol";
|
||||
|
||||
// contract P2PTransferProject {
|
||||
// address public owner;
|
||||
// string public name;
|
||||
// modifier onlyOwner() {
|
||||
// require(msg.sender == owner, "Only owner");
|
||||
// _;
|
||||
// }
|
||||
|
||||
// constructor(string memory _name) {
|
||||
// owner = msg.sender;
|
||||
// name = _name;
|
||||
// }
|
||||
|
||||
// function getBalance() external view returns (uint256) {
|
||||
// return address(this).balance;
|
||||
// }
|
||||
|
||||
// function setName(string memory _name) external onlyOwner {
|
||||
// name = _name;
|
||||
// }
|
||||
|
||||
// function getName() external view returns (string memory) {
|
||||
// return name;
|
||||
// }
|
||||
|
||||
// function getOwner() external view returns (address) {
|
||||
// return owner;
|
||||
// }
|
||||
// }
|
||||
|
||||
contract ProjectToken is ERC20 {
|
||||
using Strings for uint256;
|
||||
|
||||
constructor() ERC20("ProjectToken", "PTKN") {}
|
||||
|
||||
struct TokenDetail {
|
||||
string tokenId;
|
||||
string idProjek;
|
||||
string idUser;
|
||||
int256 nilai; // Changed to int256
|
||||
}
|
||||
|
||||
struct Transaksi {
|
||||
string idUser;
|
||||
string namaUser;
|
||||
string idProjek;
|
||||
string judulProjek;
|
||||
string ownerProjek;
|
||||
int256 jumlahToken; // Changed to int256
|
||||
int256 totalNominal; // Changed to int256
|
||||
}
|
||||
struct Agreement {
|
||||
string idProjek;
|
||||
string idUser;
|
||||
string namaProyek;
|
||||
string namaPetugas;
|
||||
string alamatPetugas;
|
||||
string namaPemilikProyek;
|
||||
string nik;
|
||||
string noHp;
|
||||
string alamat;
|
||||
string signature;
|
||||
string tandaTangan;
|
||||
int256 nominalDisetujui; // Changed to int256
|
||||
uint256 createdAt;
|
||||
}
|
||||
|
||||
mapping(uint256 => Agreement) public agreements;
|
||||
uint256 public agreementCount;
|
||||
|
||||
event AgreementCreated(
|
||||
string idProjek,
|
||||
string idUser,
|
||||
string namaProyek,
|
||||
string namaPetugas,
|
||||
string alamatPetugas,
|
||||
string namaPemilikProyek,
|
||||
string nik,
|
||||
string noHp,
|
||||
string alamat,
|
||||
string signature,
|
||||
string tandaTangan,
|
||||
int256 nominalDisetujui,
|
||||
uint256 createdAt
|
||||
);
|
||||
|
||||
mapping(string => TokenDetail) public tokenDetails;
|
||||
|
||||
uint256 private tokenIdCounter;
|
||||
|
||||
string[] public allTokenIds;
|
||||
|
||||
event TokenCreated(
|
||||
string indexed tokenId,
|
||||
string idProjek,
|
||||
string idUser,
|
||||
int256 nilai
|
||||
);
|
||||
event TokenNominalReset(string indexed tokenId);
|
||||
|
||||
Transaksi[] public transaksiList;
|
||||
|
||||
function generateUniqueId() private returns (string memory) {
|
||||
tokenIdCounter += 1;
|
||||
uint256 counter = tokenIdCounter;
|
||||
return
|
||||
string(
|
||||
abi.encodePacked(
|
||||
"TKN-",
|
||||
block.timestamp.toString(),
|
||||
"-",
|
||||
counter.toString()
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
function createToken(
|
||||
string memory idProjek,
|
||||
string memory idUser,
|
||||
int256 nilai
|
||||
) public {
|
||||
string memory tokenId = generateUniqueId();
|
||||
|
||||
_mint(msg.sender, uint256(nilai >= 0 ? nilai : -nilai));
|
||||
|
||||
tokenDetails[tokenId] = TokenDetail(tokenId, idProjek, idUser, nilai);
|
||||
allTokenIds.push(tokenId);
|
||||
|
||||
emit TokenCreated(tokenId, idProjek, idUser, nilai);
|
||||
}
|
||||
|
||||
function getAllTokens() public view returns (TokenDetail[] memory) {
|
||||
TokenDetail[] memory tokens = new TokenDetail[](allTokenIds.length);
|
||||
|
||||
for (uint256 i = 0; i < allTokenIds.length; i++) {
|
||||
tokens[i] = tokenDetails[allTokenIds[i]];
|
||||
}
|
||||
|
||||
return tokens;
|
||||
}
|
||||
|
||||
function getTokenById(
|
||||
string memory tokenId
|
||||
) public view returns (TokenDetail memory) {
|
||||
require(
|
||||
bytes(tokenDetails[tokenId].tokenId).length > 0,
|
||||
"Project Token not found"
|
||||
);
|
||||
return tokenDetails[tokenId];
|
||||
}
|
||||
|
||||
function getTokenByProjectId(
|
||||
string memory idProjek
|
||||
) public view returns (TokenDetail[] memory) {
|
||||
uint256 count = 0;
|
||||
for (uint256 i = 0; i < allTokenIds.length; i++) {
|
||||
if (
|
||||
keccak256(bytes(tokenDetails[allTokenIds[i]].idProjek)) ==
|
||||
keccak256(bytes(idProjek))
|
||||
) {
|
||||
count++;
|
||||
}
|
||||
}
|
||||
|
||||
TokenDetail[] memory projekTokens = new TokenDetail[](count);
|
||||
|
||||
uint256 index = 0;
|
||||
for (uint256 i = 0; i < allTokenIds.length; i++) {
|
||||
if (
|
||||
keccak256(bytes(tokenDetails[allTokenIds[i]].idProjek)) ==
|
||||
keccak256(bytes(idProjek))
|
||||
) {
|
||||
projekTokens[index] = tokenDetails[allTokenIds[i]];
|
||||
index++;
|
||||
}
|
||||
}
|
||||
|
||||
return projekTokens;
|
||||
}
|
||||
|
||||
function getTokenByUserAndProject(
|
||||
string memory idUser,
|
||||
string memory idProjek
|
||||
) public view returns (TokenDetail[] memory) {
|
||||
uint256 count = 0;
|
||||
for (uint256 i = 0; i < allTokenIds.length; i++) {
|
||||
if (
|
||||
keccak256(bytes(tokenDetails[allTokenIds[i]].idUser)) ==
|
||||
keccak256(bytes(idUser)) &&
|
||||
keccak256(bytes(tokenDetails[allTokenIds[i]].idProjek)) ==
|
||||
keccak256(bytes(idProjek))
|
||||
) {
|
||||
count++;
|
||||
}
|
||||
}
|
||||
|
||||
TokenDetail[] memory filteredTokens = new TokenDetail[](count);
|
||||
|
||||
uint256 index = 0;
|
||||
for (uint256 i = 0; i < allTokenIds.length; i++) {
|
||||
if (
|
||||
keccak256(bytes(tokenDetails[allTokenIds[i]].idUser)) ==
|
||||
keccak256(bytes(idUser)) &&
|
||||
keccak256(bytes(tokenDetails[allTokenIds[i]].idProjek)) ==
|
||||
keccak256(bytes(idProjek))
|
||||
) {
|
||||
filteredTokens[index] = tokenDetails[allTokenIds[i]];
|
||||
index++;
|
||||
}
|
||||
}
|
||||
|
||||
return filteredTokens;
|
||||
}
|
||||
|
||||
function getTotalTokens() public view returns (uint256) {
|
||||
return allTokenIds.length;
|
||||
}
|
||||
|
||||
function resetTokenNominal(string memory tokenId) public {
|
||||
require(
|
||||
bytes(tokenDetails[tokenId].tokenId).length > 0,
|
||||
"Project Token not found"
|
||||
);
|
||||
|
||||
int256 currentValue = tokenDetails[tokenId].nilai;
|
||||
tokenDetails[tokenId].nilai = 0;
|
||||
|
||||
_burn(msg.sender, uint256(currentValue >= 0 ? currentValue : -currentValue));
|
||||
|
||||
emit TokenNominalReset(tokenId);
|
||||
}
|
||||
|
||||
function addTransaction(
|
||||
string memory idUser,
|
||||
string memory namaUser,
|
||||
string memory idProjek,
|
||||
string memory judulProjek,
|
||||
string memory ownerProjek,
|
||||
int256 jumlahToken,
|
||||
int256 totalNominal
|
||||
) public {
|
||||
transaksiList.push(
|
||||
Transaksi({
|
||||
idUser: idUser,
|
||||
namaUser: namaUser,
|
||||
idProjek: idProjek,
|
||||
judulProjek: judulProjek,
|
||||
ownerProjek: ownerProjek,
|
||||
jumlahToken: jumlahToken,
|
||||
totalNominal: totalNominal
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
function getAllTransaction() public view returns (Transaksi[] memory) {
|
||||
return transaksiList;
|
||||
}
|
||||
|
||||
function getTransactionByUserId(
|
||||
string memory idUser
|
||||
) public view returns (Transaksi[] memory) {
|
||||
uint256 count = 0;
|
||||
for (uint256 i = 0; i < transaksiList.length; i++) {
|
||||
if (
|
||||
keccak256(bytes(transaksiList[i].idUser)) ==
|
||||
keccak256(bytes(idUser))
|
||||
) {
|
||||
count++;
|
||||
}
|
||||
}
|
||||
|
||||
Transaksi[] memory userTransactions = new Transaksi[](count);
|
||||
uint256 index = 0;
|
||||
|
||||
for (uint256 i = 0; i < transaksiList.length; i++) {
|
||||
if (
|
||||
keccak256(bytes(transaksiList[i].idUser)) ==
|
||||
keccak256(bytes(idUser))
|
||||
) {
|
||||
userTransactions[index] = transaksiList[i];
|
||||
index++;
|
||||
}
|
||||
}
|
||||
|
||||
return userTransactions;
|
||||
}
|
||||
|
||||
function getTransactionByProjectId(
|
||||
string memory idProjek
|
||||
) public view returns (Transaksi[] memory) {
|
||||
uint256 count = 0;
|
||||
for (uint256 i = 0; i < transaksiList.length; i++) {
|
||||
if (
|
||||
keccak256(bytes(transaksiList[i].idProjek)) ==
|
||||
keccak256(bytes(idProjek))
|
||||
) {
|
||||
count++;
|
||||
}
|
||||
}
|
||||
|
||||
Transaksi[] memory projectTransactions = new Transaksi[](count);
|
||||
uint256 index = 0;
|
||||
|
||||
for (uint256 i = 0; i < transaksiList.length; i++) {
|
||||
if (
|
||||
keccak256(bytes(transaksiList[i].idProjek)) ==
|
||||
keccak256(bytes(idProjek))
|
||||
) {
|
||||
projectTransactions[index] = transaksiList[i];
|
||||
index++;
|
||||
}
|
||||
}
|
||||
|
||||
return projectTransactions;
|
||||
}
|
||||
|
||||
function createAgreementLetter(
|
||||
string memory _idProjek,
|
||||
string memory _idUser,
|
||||
string memory _namaProyek,
|
||||
string memory _namaPetugas,
|
||||
string memory _alamatPetugas,
|
||||
string memory _namaPemilikProyek,
|
||||
string memory _nik,
|
||||
string memory _noHp,
|
||||
string memory _alamat,
|
||||
string memory _signature,
|
||||
string memory _tandaTangan,
|
||||
int256 _nominalDisetujui
|
||||
) public {
|
||||
agreementCount++;
|
||||
|
||||
agreements[agreementCount] = Agreement({
|
||||
idProjek: _idProjek,
|
||||
idUser: _idUser,
|
||||
namaProyek: _namaProyek,
|
||||
namaPetugas: _namaPetugas,
|
||||
alamatPetugas: _alamatPetugas,
|
||||
namaPemilikProyek: _namaPemilikProyek,
|
||||
nik: _nik,
|
||||
noHp: _noHp,
|
||||
alamat: _alamat,
|
||||
signature: _signature,
|
||||
tandaTangan: _tandaTangan,
|
||||
nominalDisetujui: _nominalDisetujui,
|
||||
createdAt: block.timestamp
|
||||
});
|
||||
|
||||
emit AgreementCreated(
|
||||
_idProjek,
|
||||
_idUser,
|
||||
_namaProyek,
|
||||
_namaPetugas,
|
||||
_alamatPetugas,
|
||||
_namaPemilikProyek,
|
||||
_nik,
|
||||
_noHp,
|
||||
_alamat,
|
||||
_signature,
|
||||
_tandaTangan,
|
||||
_nominalDisetujui,
|
||||
block.timestamp
|
||||
);
|
||||
}
|
||||
|
||||
function getAllAgreement() public view returns (Agreement[] memory) {
|
||||
Agreement[] memory allAgreements = new Agreement[](agreementCount);
|
||||
for (uint256 i = 1; i <= agreementCount; i++) {
|
||||
allAgreements[i - 1] = agreements[i];
|
||||
}
|
||||
return allAgreements;
|
||||
}
|
||||
|
||||
function getAgreementByProjectId(
|
||||
string memory idProjek
|
||||
) public view returns (Agreement[] memory) {
|
||||
uint256 count = 0;
|
||||
for (uint256 i = 1; i <= agreementCount; i++) {
|
||||
if (
|
||||
keccak256(bytes(agreements[i].idProjek)) ==
|
||||
keccak256(bytes(idProjek))
|
||||
) {
|
||||
count++;
|
||||
}
|
||||
}
|
||||
|
||||
Agreement[] memory projectAgreements = new Agreement[](count);
|
||||
uint256 index = 0;
|
||||
for (uint256 i = 1; i <= agreementCount; i++) {
|
||||
if (
|
||||
keccak256(bytes(agreements[i].idProjek)) ==
|
||||
keccak256(bytes(idProjek))
|
||||
) {
|
||||
projectAgreements[index] = agreements[i];
|
||||
index++;
|
||||
}
|
||||
}
|
||||
|
||||
return projectAgreements;
|
||||
}
|
||||
|
||||
function getTotalNominalToken(
|
||||
string memory idUser,
|
||||
string memory idProjek
|
||||
) public view returns (int256) { // Changed to int256
|
||||
int256 totalNominal = 0; // Changed to int256
|
||||
|
||||
for (uint256 i = 0; i < allTokenIds.length; i++) {
|
||||
TokenDetail memory tokenDetail = tokenDetails[allTokenIds[i]];
|
||||
if (
|
||||
keccak256(bytes(tokenDetail.idUser)) ==
|
||||
keccak256(bytes(idUser)) &&
|
||||
keccak256(bytes(tokenDetail.idProjek)) ==
|
||||
keccak256(bytes(idProjek))
|
||||
) {
|
||||
totalNominal += tokenDetail.nilai;
|
||||
}
|
||||
}
|
||||
|
||||
return totalNominal;
|
||||
}
|
||||
}
|
||||
|
|
@ -2,7 +2,16 @@ import { HardhatUserConfig } from "hardhat/config";
|
|||
import "@nomicfoundation/hardhat-toolbox";
|
||||
|
||||
const config: HardhatUserConfig = {
|
||||
solidity: "0.8.28",
|
||||
solidity: {
|
||||
version: "0.8.28",
|
||||
settings:{
|
||||
optimizer: {
|
||||
enabled: true,
|
||||
runs: 500
|
||||
},
|
||||
viaIR: true
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
export default config;
|
||||
|
|
|
|||
337
package-lock.json
generated
337
package-lock.json
generated
|
|
@ -43,6 +43,7 @@
|
|||
"jest": "^29.7.0",
|
||||
"pg": "^8.16.3",
|
||||
"prettier": "^3.4.2",
|
||||
"prisma": "^6.14.0",
|
||||
"source-map-support": "^0.5.21",
|
||||
"supertest": "^7.0.0",
|
||||
"ts-jest": "^29.2.5",
|
||||
|
|
@ -3803,6 +3804,69 @@
|
|||
"url": "https://opencollective.com/pkgr"
|
||||
}
|
||||
},
|
||||
"node_modules/@prisma/config": {
|
||||
"version": "6.14.0",
|
||||
"resolved": "https://registry.npmjs.org/@prisma/config/-/config-6.14.0.tgz",
|
||||
"integrity": "sha512-IwC7o5KNNGhmblLs23swnfBjADkacBb7wvyDXUWLwuvUQciKJZqyecU0jw0d7JRkswrj+XTL8fdr0y2/VerKQQ==",
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"c12": "3.1.0",
|
||||
"deepmerge-ts": "7.1.5",
|
||||
"effect": "3.16.12",
|
||||
"empathic": "2.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@prisma/debug": {
|
||||
"version": "6.14.0",
|
||||
"resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-6.14.0.tgz",
|
||||
"integrity": "sha512-j4Lf+y+5QIJgQD4sJWSbkOD7geKx9CakaLp/TyTy/UDu9Wo0awvWCBH/BAxTHUaCpIl9USA5VS/KJhDqKJSwug==",
|
||||
"dev": true,
|
||||
"license": "Apache-2.0"
|
||||
},
|
||||
"node_modules/@prisma/engines": {
|
||||
"version": "6.14.0",
|
||||
"resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-6.14.0.tgz",
|
||||
"integrity": "sha512-LhJjqsALFEcoAtF07nSaOkVguaxw/ZsgfROIYZ8bAZDobe7y8Wy+PkYQaPOK1iLSsFgV2MhCO/eNrI1gdSOj6w==",
|
||||
"dev": true,
|
||||
"hasInstallScript": true,
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@prisma/debug": "6.14.0",
|
||||
"@prisma/engines-version": "6.14.0-25.717184b7b35ea05dfa71a3236b7af656013e1e49",
|
||||
"@prisma/fetch-engine": "6.14.0",
|
||||
"@prisma/get-platform": "6.14.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@prisma/engines-version": {
|
||||
"version": "6.14.0-25.717184b7b35ea05dfa71a3236b7af656013e1e49",
|
||||
"resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-6.14.0-25.717184b7b35ea05dfa71a3236b7af656013e1e49.tgz",
|
||||
"integrity": "sha512-EgN9ODJpiX45yvwcngoStp3uQPJ3l+AEVoQ6dMMO2QvmwIlnxfApzKmJQExzdo7/hqQANrz5txHJdGYHzOnGHA==",
|
||||
"dev": true,
|
||||
"license": "Apache-2.0"
|
||||
},
|
||||
"node_modules/@prisma/fetch-engine": {
|
||||
"version": "6.14.0",
|
||||
"resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-6.14.0.tgz",
|
||||
"integrity": "sha512-MPzYPOKMENYOaY3AcAbaKrfvXVlvTc6iHmTXsp9RiwCX+bPyfDMqMFVUSVXPYrXnrvEzhGHfyiFy0PRLHPysNg==",
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@prisma/debug": "6.14.0",
|
||||
"@prisma/engines-version": "6.14.0-25.717184b7b35ea05dfa71a3236b7af656013e1e49",
|
||||
"@prisma/get-platform": "6.14.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@prisma/get-platform": {
|
||||
"version": "6.14.0",
|
||||
"resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-6.14.0.tgz",
|
||||
"integrity": "sha512-7VjuxKNwjnBhKfqPpMeWiHEa2sVjYzmHdl1slW6STuUCe9QnOY0OY1ljGSvz6wpG4U8DfbDqkG1yofd/1GINww==",
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@prisma/debug": "6.14.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@scure/base": {
|
||||
"version": "1.2.6",
|
||||
"resolved": "https://registry.npmjs.org/@scure/base/-/base-1.2.6.tgz",
|
||||
|
|
@ -4051,6 +4115,13 @@
|
|||
"license": "MIT",
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/@standard-schema/spec": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.0.0.tgz",
|
||||
"integrity": "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==",
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@swc/cli": {
|
||||
"version": "0.6.0",
|
||||
"resolved": "https://registry.npmjs.org/@swc/cli/-/cli-0.6.0.tgz",
|
||||
|
|
@ -6556,6 +6627,48 @@
|
|||
"node": ">= 0.8"
|
||||
}
|
||||
},
|
||||
"node_modules/c12": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/c12/-/c12-3.1.0.tgz",
|
||||
"integrity": "sha512-uWoS8OU1MEIsOv8p/5a82c3H31LsWVR5qiyXVfBNOzfffjUWtPnhAb4BYI2uG2HfGmZmFjCtui5XNWaps+iFuw==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"chokidar": "^4.0.3",
|
||||
"confbox": "^0.2.2",
|
||||
"defu": "^6.1.4",
|
||||
"dotenv": "^16.6.1",
|
||||
"exsolve": "^1.0.7",
|
||||
"giget": "^2.0.0",
|
||||
"jiti": "^2.4.2",
|
||||
"ohash": "^2.0.11",
|
||||
"pathe": "^2.0.3",
|
||||
"perfect-debounce": "^1.0.0",
|
||||
"pkg-types": "^2.2.0",
|
||||
"rc9": "^2.1.2"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"magicast": "^0.3.5"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"magicast": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/c12/node_modules/dotenv": {
|
||||
"version": "16.6.1",
|
||||
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz",
|
||||
"integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==",
|
||||
"dev": true,
|
||||
"license": "BSD-2-Clause",
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://dotenvx.com"
|
||||
}
|
||||
},
|
||||
"node_modules/cacheable-lookup": {
|
||||
"version": "7.0.0",
|
||||
"resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz",
|
||||
|
|
@ -6840,6 +6953,16 @@
|
|||
"node": ">= 0.10"
|
||||
}
|
||||
},
|
||||
"node_modules/citty": {
|
||||
"version": "0.1.6",
|
||||
"resolved": "https://registry.npmjs.org/citty/-/citty-0.1.6.tgz",
|
||||
"integrity": "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"consola": "^3.2.3"
|
||||
}
|
||||
},
|
||||
"node_modules/cjs-module-lexer": {
|
||||
"version": "1.4.3",
|
||||
"resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz",
|
||||
|
|
@ -7244,6 +7367,13 @@
|
|||
"typedarray": "^0.0.6"
|
||||
}
|
||||
},
|
||||
"node_modules/confbox": {
|
||||
"version": "0.2.2",
|
||||
"resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.2.tgz",
|
||||
"integrity": "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==",
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/consola": {
|
||||
"version": "3.4.2",
|
||||
"resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz",
|
||||
|
|
@ -7553,6 +7683,16 @@
|
|||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/deepmerge-ts": {
|
||||
"version": "7.1.5",
|
||||
"resolved": "https://registry.npmjs.org/deepmerge-ts/-/deepmerge-ts-7.1.5.tgz",
|
||||
"integrity": "sha512-HOJkrhaYsweh+W+e74Yn7YStZOilkoPb6fycpwNLKzSPtruFs48nYis0zy5yJz1+ktUhHxoRDJ27RQAWLIJVJw==",
|
||||
"dev": true,
|
||||
"license": "BSD-3-Clause",
|
||||
"engines": {
|
||||
"node": ">=16.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/defaults": {
|
||||
"version": "2.0.2",
|
||||
"resolved": "https://registry.npmjs.org/defaults/-/defaults-2.0.2.tgz",
|
||||
|
|
@ -7594,6 +7734,13 @@
|
|||
"url": "https://github.com/sponsors/ljharb"
|
||||
}
|
||||
},
|
||||
"node_modules/defu": {
|
||||
"version": "6.1.4",
|
||||
"resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz",
|
||||
"integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==",
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/delayed-stream": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
|
||||
|
|
@ -7612,6 +7759,13 @@
|
|||
"node": ">= 0.8"
|
||||
}
|
||||
},
|
||||
"node_modules/destr": {
|
||||
"version": "2.0.5",
|
||||
"resolved": "https://registry.npmjs.org/destr/-/destr-2.0.5.tgz",
|
||||
"integrity": "sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==",
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/detect-newline": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz",
|
||||
|
|
@ -7732,6 +7886,17 @@
|
|||
"integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/effect": {
|
||||
"version": "3.16.12",
|
||||
"resolved": "https://registry.npmjs.org/effect/-/effect-3.16.12.tgz",
|
||||
"integrity": "sha512-N39iBk0K71F9nb442TLbTkjl24FLUzuvx2i1I2RsEAQsdAdUTuUoW0vlfUXgkMTUOnYqKnWcFfqw4hK4Pw27hg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@standard-schema/spec": "^1.0.0",
|
||||
"fast-check": "^3.23.1"
|
||||
}
|
||||
},
|
||||
"node_modules/ejs": {
|
||||
"version": "3.1.10",
|
||||
"resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz",
|
||||
|
|
@ -7795,6 +7960,16 @@
|
|||
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/empathic": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/empathic/-/empathic-2.0.0.tgz",
|
||||
"integrity": "sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=14"
|
||||
}
|
||||
},
|
||||
"node_modules/encodeurl": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
|
||||
|
|
@ -8560,6 +8735,13 @@
|
|||
"node": ">= 0.6"
|
||||
}
|
||||
},
|
||||
"node_modules/exsolve": {
|
||||
"version": "1.0.7",
|
||||
"resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.7.tgz",
|
||||
"integrity": "sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==",
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/ext-list": {
|
||||
"version": "2.2.2",
|
||||
"resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz",
|
||||
|
|
@ -8615,6 +8797,29 @@
|
|||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/fast-check": {
|
||||
"version": "3.23.2",
|
||||
"resolved": "https://registry.npmjs.org/fast-check/-/fast-check-3.23.2.tgz",
|
||||
"integrity": "sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A==",
|
||||
"dev": true,
|
||||
"funding": [
|
||||
{
|
||||
"type": "individual",
|
||||
"url": "https://github.com/sponsors/dubzzz"
|
||||
},
|
||||
{
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/fast-check"
|
||||
}
|
||||
],
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"pure-rand": "^6.1.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=8.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/fast-deep-equal": {
|
||||
"version": "3.1.3",
|
||||
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
|
||||
|
|
@ -9347,6 +9552,24 @@
|
|||
"node": ">=4"
|
||||
}
|
||||
},
|
||||
"node_modules/giget": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/giget/-/giget-2.0.0.tgz",
|
||||
"integrity": "sha512-L5bGsVkxJbJgdnwyuheIunkGatUF/zssUoxxjACCseZYAVbaqdh9Tsmmlkl8vYan09H7sbvKt4pS8GqKLBrEzA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"citty": "^0.1.6",
|
||||
"consola": "^3.4.0",
|
||||
"defu": "^6.1.4",
|
||||
"node-fetch-native": "^1.6.6",
|
||||
"nypm": "^0.6.0",
|
||||
"pathe": "^2.0.3"
|
||||
},
|
||||
"bin": {
|
||||
"giget": "dist/cli.mjs"
|
||||
}
|
||||
},
|
||||
"node_modules/glob": {
|
||||
"version": "11.0.3",
|
||||
"resolved": "https://registry.npmjs.org/glob/-/glob-11.0.3.tgz",
|
||||
|
|
@ -11377,6 +11600,16 @@
|
|||
"url": "https://github.com/chalk/supports-color?sponsor=1"
|
||||
}
|
||||
},
|
||||
"node_modules/jiti": {
|
||||
"version": "2.5.1",
|
||||
"resolved": "https://registry.npmjs.org/jiti/-/jiti-2.5.1.tgz",
|
||||
"integrity": "sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"bin": {
|
||||
"jiti": "lib/jiti-cli.mjs"
|
||||
}
|
||||
},
|
||||
"node_modules/js-sha3": {
|
||||
"version": "0.8.0",
|
||||
"resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz",
|
||||
|
|
@ -12465,6 +12698,13 @@
|
|||
"lodash": "^4.17.21"
|
||||
}
|
||||
},
|
||||
"node_modules/node-fetch-native": {
|
||||
"version": "1.6.7",
|
||||
"resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.7.tgz",
|
||||
"integrity": "sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==",
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/node-gyp-build": {
|
||||
"version": "4.8.4",
|
||||
"resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz",
|
||||
|
|
@ -12570,6 +12810,26 @@
|
|||
"license": "MIT",
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/nypm": {
|
||||
"version": "0.6.1",
|
||||
"resolved": "https://registry.npmjs.org/nypm/-/nypm-0.6.1.tgz",
|
||||
"integrity": "sha512-hlacBiRiv1k9hZFiphPUkfSQ/ZfQzZDzC+8z0wL3lvDAOUu/2NnChkKuMoMjNur/9OpKuz2QsIeiPVN0xM5Q0w==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"citty": "^0.1.6",
|
||||
"consola": "^3.4.2",
|
||||
"pathe": "^2.0.3",
|
||||
"pkg-types": "^2.2.0",
|
||||
"tinyexec": "^1.0.1"
|
||||
},
|
||||
"bin": {
|
||||
"nypm": "dist/cli.mjs"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^14.16.0 || >=16.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/object-assign": {
|
||||
"version": "4.1.1",
|
||||
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
|
||||
|
|
@ -12597,6 +12857,13 @@
|
|||
"integrity": "sha512-42CPE9AhahZRsMNslczq0ctAEtqk8Eka26QofnqC346BZdHDySk3LWka23LI7ULIw11NmltpiLagIq8gBozxTw==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/ohash": {
|
||||
"version": "2.0.11",
|
||||
"resolved": "https://registry.npmjs.org/ohash/-/ohash-2.0.11.tgz",
|
||||
"integrity": "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==",
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/on-finished": {
|
||||
"version": "2.4.1",
|
||||
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
|
||||
|
|
@ -12959,6 +13226,13 @@
|
|||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/pathe": {
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz",
|
||||
"integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==",
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/pathval": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz",
|
||||
|
|
@ -13028,6 +13302,13 @@
|
|||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/perfect-debounce": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz",
|
||||
"integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==",
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/pg": {
|
||||
"version": "8.16.3",
|
||||
"resolved": "https://registry.npmjs.org/pg/-/pg-8.16.3.tgz",
|
||||
|
|
@ -13252,6 +13533,18 @@
|
|||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/pkg-types": {
|
||||
"version": "2.2.0",
|
||||
"resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.2.0.tgz",
|
||||
"integrity": "sha512-2SM/GZGAEkPp3KWORxQZns4M+WSeXbC2HEvmOIJe3Cmiv6ieAJvdVhDldtHqM5J1Y7MrR1XhkBT/rMlhh9FdqQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"confbox": "^0.2.2",
|
||||
"exsolve": "^1.0.7",
|
||||
"pathe": "^2.0.3"
|
||||
}
|
||||
},
|
||||
"node_modules/pluralize": {
|
||||
"version": "8.0.0",
|
||||
"resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz",
|
||||
|
|
@ -13382,6 +13675,32 @@
|
|||
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
|
||||
}
|
||||
},
|
||||
"node_modules/prisma": {
|
||||
"version": "6.14.0",
|
||||
"resolved": "https://registry.npmjs.org/prisma/-/prisma-6.14.0.tgz",
|
||||
"integrity": "sha512-QEuCwxu+Uq9BffFw7in8In+WfbSUN0ewnaSUKloLkbJd42w6EyFckux4M0f7VwwHlM3A8ssaz4OyniCXlsn0WA==",
|
||||
"dev": true,
|
||||
"hasInstallScript": true,
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@prisma/config": "6.14.0",
|
||||
"@prisma/engines": "6.14.0"
|
||||
},
|
||||
"bin": {
|
||||
"prisma": "build/index.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18.18"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"typescript": ">=5.1.0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"typescript": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/prompts": {
|
||||
"version": "2.4.2",
|
||||
"resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz",
|
||||
|
|
@ -13523,6 +13842,17 @@
|
|||
"node": ">= 0.8"
|
||||
}
|
||||
},
|
||||
"node_modules/rc9": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/rc9/-/rc9-2.1.2.tgz",
|
||||
"integrity": "sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"defu": "^6.1.4",
|
||||
"destr": "^2.0.3"
|
||||
}
|
||||
},
|
||||
"node_modules/react-is": {
|
||||
"version": "18.3.1",
|
||||
"resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz",
|
||||
|
|
@ -15397,6 +15727,13 @@
|
|||
"readable-stream": "3"
|
||||
}
|
||||
},
|
||||
"node_modules/tinyexec": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.1.tgz",
|
||||
"integrity": "sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==",
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/tinyglobby": {
|
||||
"version": "0.2.14",
|
||||
"resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz",
|
||||
|
|
|
|||
|
|
@ -54,6 +54,7 @@
|
|||
"jest": "^29.7.0",
|
||||
"pg": "^8.16.3",
|
||||
"prettier": "^3.4.2",
|
||||
"prisma": "^6.14.0",
|
||||
"source-map-support": "^0.5.21",
|
||||
"supertest": "^7.0.0",
|
||||
"ts-jest": "^29.2.5",
|
||||
|
|
|
|||
15
prisma/schema.prisma
Normal file
15
prisma/schema.prisma
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
// This is your Prisma schema file,
|
||||
// learn more about it in the docs: https://pris.ly/d/prisma-schema
|
||||
|
||||
// Looking for ways to speed up your queries, or scale easily with your serverless or edge functions?
|
||||
// Try Prisma Accelerate: https://pris.ly/cli/accelerate-init
|
||||
|
||||
generator client {
|
||||
provider = "prisma-client-js"
|
||||
output = "../generated/prisma"
|
||||
}
|
||||
|
||||
datasource db {
|
||||
provider = "postgresql"
|
||||
url = env("DATABASE_URL")
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
1322
src/common/utils/abis/ProjectToken.json
Normal file
1322
src/common/utils/abis/ProjectToken.json
Normal file
File diff suppressed because one or more lines are too long
|
|
@ -1,7 +1,7 @@
|
|||
import { Injectable } from "@nestjs/common";
|
||||
import { ConfigService } from "@nestjs/config";
|
||||
import { ethers } from "ethers";
|
||||
import * as P2PTransferProject from "./abis/P2PTransferProject.json";
|
||||
import * as P2PTransferProject from "./abis/ProjectToken.json";
|
||||
|
||||
@Injectable()
|
||||
export class ProviderService {
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user