diff --git a/.gitignore b/.gitignore index 1012084..60d4405 100644 --- a/.gitignore +++ b/.gitignore @@ -72,3 +72,5 @@ node_modules # Hardhat Ignition default folder for deployments against a local node ignition/deployments/chain-31337 + +/generated/prisma diff --git a/contracts/main.sol b/contracts/main.sol index 095a58f..f028e48 100644 --- a/contracts/main.sol +++ b/contracts/main.sol @@ -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; + } } \ No newline at end of file diff --git a/hardhat.config.ts b/hardhat.config.ts index 0e8962a..30d28b0 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -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; diff --git a/package-lock.json b/package-lock.json index dd79bd4..5d44a79 100644 --- a/package-lock.json +++ b/package-lock.json @@ -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", diff --git a/package.json b/package.json index 2a9c782..a98b1a8 100644 --- a/package.json +++ b/package.json @@ -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", diff --git a/prisma/schema.prisma b/prisma/schema.prisma new file mode 100644 index 0000000..e8b9fe9 --- /dev/null +++ b/prisma/schema.prisma @@ -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") +} diff --git a/src/common/utils/abis/P2PTransferProject.json b/src/common/utils/abis/P2PTransferProject.json deleted file mode 100644 index 46374ba..0000000 --- a/src/common/utils/abis/P2PTransferProject.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "_format": "hh-sol-artifact-1", - "contractName": "P2PTransferProject", - "sourceName": "contracts/main.sol", - "abi": [ - { - "inputs": [ - { - "internalType": "string", - "name": "_name", - "type": "string" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "getBalance", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getName", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "name", - "outputs": [ - { - "internalType": "string", - "name": "", - "type": "string" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "string", - "name": "_name", - "type": "string" - } - ], - "name": "setName", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } - ], - "bytecode": "0x608060405234801561001057600080fd5b50604051610ecb380380610ecb833981810160405281019061003291906101fd565b336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600190816100819190610467565b5050610539565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6100ef826100a6565b810181811067ffffffffffffffff8211171561010e5761010d6100b7565b5b80604052505050565b6000610121610088565b905061012d82826100e6565b919050565b600067ffffffffffffffff82111561014d5761014c6100b7565b5b610156826100a6565b9050602081019050919050565b60005b83811015610181578082015181840152602081019050610166565b60008484015250505050565b60006101a061019b84610132565b610117565b9050828152602081018484840111156101bc576101bb6100a1565b5b6101c7848285610163565b509392505050565b600082601f8301126101e4576101e361009c565b5b81516101f484826020860161018d565b91505092915050565b60006020828403121561021357610212610092565b5b600082015167ffffffffffffffff81111561023157610230610097565b5b61023d848285016101cf565b91505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061029857607f821691505b6020821081036102ab576102aa610251565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026103137fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826102d6565b61031d86836102d6565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600061036461035f61035a84610335565b61033f565b610335565b9050919050565b6000819050919050565b61037e83610349565b61039261038a8261036b565b8484546102e3565b825550505050565b600090565b6103a761039a565b6103b2818484610375565b505050565b5b818110156103d6576103cb60008261039f565b6001810190506103b8565b5050565b601f82111561041b576103ec816102b1565b6103f5846102c6565b81016020851015610404578190505b610418610410856102c6565b8301826103b7565b50505b505050565b600082821c905092915050565b600061043e60001984600802610420565b1980831691505092915050565b6000610457838361042d565b9150826002028217905092915050565b61047082610246565b67ffffffffffffffff811115610489576104886100b7565b5b6104938254610280565b61049e8282856103da565b600060209050601f8311600181146104d157600084156104bf578287015190505b6104c9858261044b565b865550610531565b601f1984166104df866102b1565b60005b82811015610507578489015182556001820191506020850194506020810190506104e2565b868310156105245784890151610520601f89168261042d565b8355505b6001600288020188555050505b505050505050565b610983806105486000396000f3fe608060405234801561001057600080fd5b50600436106100625760003560e01c806306fdde031461006757806312065fe01461008557806317d7de7c146100a3578063893d20e8146100c15780638da5cb5b146100df578063c47f0027146100fd575b600080fd5b61006f610119565b60405161007c91906103bf565b60405180910390f35b61008d6101a7565b60405161009a91906103fa565b60405180910390f35b6100ab6101af565b6040516100b891906103bf565b60405180910390f35b6100c9610241565b6040516100d69190610456565b60405180910390f35b6100e761026a565b6040516100f49190610456565b60405180910390f35b610117600480360381019061011291906105ba565b61028e565b005b6001805461012690610632565b80601f016020809104026020016040519081016040528092919081815260200182805461015290610632565b801561019f5780601f106101745761010080835404028352916020019161019f565b820191906000526020600020905b81548152906001019060200180831161018257829003601f168201915b505050505081565b600047905090565b6060600180546101be90610632565b80601f01602080910402602001604051908101604052809291908181526020018280546101ea90610632565b80156102375780601f1061020c57610100808354040283529160200191610237565b820191906000526020600020905b81548152906001019060200180831161021a57829003601f168201915b5050505050905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461031c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610313906106af565b60405180910390fd5b806001908161032b919061087b565b5050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561036957808201518184015260208101905061034e565b60008484015250505050565b6000601f19601f8301169050919050565b60006103918261032f565b61039b818561033a565b93506103ab81856020860161034b565b6103b481610375565b840191505092915050565b600060208201905081810360008301526103d98184610386565b905092915050565b6000819050919050565b6103f4816103e1565b82525050565b600060208201905061040f60008301846103eb565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061044082610415565b9050919050565b61045081610435565b82525050565b600060208201905061046b6000830184610447565b92915050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6104c782610375565b810181811067ffffffffffffffff821117156104e6576104e561048f565b5b80604052505050565b60006104f9610471565b905061050582826104be565b919050565b600067ffffffffffffffff8211156105255761052461048f565b5b61052e82610375565b9050602081019050919050565b82818337600083830152505050565b600061055d6105588461050a565b6104ef565b9050828152602081018484840111156105795761057861048a565b5b61058484828561053b565b509392505050565b600082601f8301126105a1576105a0610485565b5b81356105b184826020860161054a565b91505092915050565b6000602082840312156105d0576105cf61047b565b5b600082013567ffffffffffffffff8111156105ee576105ed610480565b5b6105fa8482850161058c565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061064a57607f821691505b60208210810361065d5761065c610603565b5b50919050565b7f4f6e6c79206f776e657200000000000000000000000000000000000000000000600082015250565b6000610699600a8361033a565b91506106a482610663565b602082019050919050565b600060208201905081810360008301526106c88161068c565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026107317fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826106f4565b61073b86836106f4565b95508019841693508086168417925050509392505050565b6000819050919050565b600061077861077361076e846103e1565b610753565b6103e1565b9050919050565b6000819050919050565b6107928361075d565b6107a661079e8261077f565b848454610701565b825550505050565b600090565b6107bb6107ae565b6107c6818484610789565b505050565b5b818110156107ea576107df6000826107b3565b6001810190506107cc565b5050565b601f82111561082f57610800816106cf565b610809846106e4565b81016020851015610818578190505b61082c610824856106e4565b8301826107cb565b50505b505050565b600082821c905092915050565b600061085260001984600802610834565b1980831691505092915050565b600061086b8383610841565b9150826002028217905092915050565b6108848261032f565b67ffffffffffffffff81111561089d5761089c61048f565b5b6108a78254610632565b6108b28282856107ee565b600060209050601f8311600181146108e557600084156108d3578287015190505b6108dd858261085f565b865550610945565b601f1984166108f3866106cf565b60005b8281101561091b578489015182556001820191506020850194506020810190506108f6565b868310156109385784890151610934601f891682610841565b8355505b6001600288020188555050505b50505050505056fea264697066735822122055c4bc3e2dec177a2ee3be1f9de0dd5a3b32a3b3cf51914cf20047aeb10154e564736f6c634300081c0033", - "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100625760003560e01c806306fdde031461006757806312065fe01461008557806317d7de7c146100a3578063893d20e8146100c15780638da5cb5b146100df578063c47f0027146100fd575b600080fd5b61006f610119565b60405161007c91906103bf565b60405180910390f35b61008d6101a7565b60405161009a91906103fa565b60405180910390f35b6100ab6101af565b6040516100b891906103bf565b60405180910390f35b6100c9610241565b6040516100d69190610456565b60405180910390f35b6100e761026a565b6040516100f49190610456565b60405180910390f35b610117600480360381019061011291906105ba565b61028e565b005b6001805461012690610632565b80601f016020809104026020016040519081016040528092919081815260200182805461015290610632565b801561019f5780601f106101745761010080835404028352916020019161019f565b820191906000526020600020905b81548152906001019060200180831161018257829003601f168201915b505050505081565b600047905090565b6060600180546101be90610632565b80601f01602080910402602001604051908101604052809291908181526020018280546101ea90610632565b80156102375780601f1061020c57610100808354040283529160200191610237565b820191906000526020600020905b81548152906001019060200180831161021a57829003601f168201915b5050505050905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461031c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610313906106af565b60405180910390fd5b806001908161032b919061087b565b5050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561036957808201518184015260208101905061034e565b60008484015250505050565b6000601f19601f8301169050919050565b60006103918261032f565b61039b818561033a565b93506103ab81856020860161034b565b6103b481610375565b840191505092915050565b600060208201905081810360008301526103d98184610386565b905092915050565b6000819050919050565b6103f4816103e1565b82525050565b600060208201905061040f60008301846103eb565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061044082610415565b9050919050565b61045081610435565b82525050565b600060208201905061046b6000830184610447565b92915050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6104c782610375565b810181811067ffffffffffffffff821117156104e6576104e561048f565b5b80604052505050565b60006104f9610471565b905061050582826104be565b919050565b600067ffffffffffffffff8211156105255761052461048f565b5b61052e82610375565b9050602081019050919050565b82818337600083830152505050565b600061055d6105588461050a565b6104ef565b9050828152602081018484840111156105795761057861048a565b5b61058484828561053b565b509392505050565b600082601f8301126105a1576105a0610485565b5b81356105b184826020860161054a565b91505092915050565b6000602082840312156105d0576105cf61047b565b5b600082013567ffffffffffffffff8111156105ee576105ed610480565b5b6105fa8482850161058c565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061064a57607f821691505b60208210810361065d5761065c610603565b5b50919050565b7f4f6e6c79206f776e657200000000000000000000000000000000000000000000600082015250565b6000610699600a8361033a565b91506106a482610663565b602082019050919050565b600060208201905081810360008301526106c88161068c565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026107317fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826106f4565b61073b86836106f4565b95508019841693508086168417925050509392505050565b6000819050919050565b600061077861077361076e846103e1565b610753565b6103e1565b9050919050565b6000819050919050565b6107928361075d565b6107a661079e8261077f565b848454610701565b825550505050565b600090565b6107bb6107ae565b6107c6818484610789565b505050565b5b818110156107ea576107df6000826107b3565b6001810190506107cc565b5050565b601f82111561082f57610800816106cf565b610809846106e4565b81016020851015610818578190505b61082c610824856106e4565b8301826107cb565b50505b505050565b600082821c905092915050565b600061085260001984600802610834565b1980831691505092915050565b600061086b8383610841565b9150826002028217905092915050565b6108848261032f565b67ffffffffffffffff81111561089d5761089c61048f565b5b6108a78254610632565b6108b28282856107ee565b600060209050601f8311600181146108e557600084156108d3578287015190505b6108dd858261085f565b865550610945565b601f1984166108f3866106cf565b60005b8281101561091b578489015182556001820191506020850194506020810190506108f6565b868310156109385784890151610934601f891682610841565b8355505b6001600288020188555050505b50505050505056fea264697066735822122055c4bc3e2dec177a2ee3be1f9de0dd5a3b32a3b3cf51914cf20047aeb10154e564736f6c634300081c0033", - "linkReferences": {}, - "deployedLinkReferences": {} -} diff --git a/src/common/utils/abis/ProjectToken.json b/src/common/utils/abis/ProjectToken.json new file mode 100644 index 0000000..55161c4 --- /dev/null +++ b/src/common/utils/abis/ProjectToken.json @@ -0,0 +1,1322 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "ProjectToken", + "sourceName": "contracts/main.sol", + "abi": [ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "allowance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "needed", + "type": "uint256" + } + ], + "name": "ERC20InsufficientAllowance", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "balance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "needed", + "type": "uint256" + } + ], + "name": "ERC20InsufficientBalance", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "approver", + "type": "address" + } + ], + "name": "ERC20InvalidApprover", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "receiver", + "type": "address" + } + ], + "name": "ERC20InvalidReceiver", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "ERC20InvalidSender", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "ERC20InvalidSpender", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "string", + "name": "idProjek", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "idUser", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "namaProyek", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "namaPetugas", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "alamatPetugas", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "namaPemilikProyek", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "nik", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "noHp", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "alamat", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "signature", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "tandaTangan", + "type": "string" + }, + { + "indexed": false, + "internalType": "int256", + "name": "nominalDisetujui", + "type": "int256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "createdAt", + "type": "uint256" + } + ], + "name": "AgreementCreated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "string", + "name": "tokenId", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "idProjek", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "idUser", + "type": "string" + }, + { + "indexed": false, + "internalType": "int256", + "name": "nilai", + "type": "int256" + } + ], + "name": "TokenCreated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "string", + "name": "tokenId", + "type": "string" + } + ], + "name": "TokenNominalReset", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "idUser", + "type": "string" + }, + { + "internalType": "string", + "name": "namaUser", + "type": "string" + }, + { + "internalType": "string", + "name": "idProjek", + "type": "string" + }, + { + "internalType": "string", + "name": "judulProjek", + "type": "string" + }, + { + "internalType": "string", + "name": "ownerProjek", + "type": "string" + }, + { + "internalType": "int256", + "name": "jumlahToken", + "type": "int256" + }, + { + "internalType": "int256", + "name": "totalNominal", + "type": "int256" + } + ], + "name": "addTransaction", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "agreementCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "agreements", + "outputs": [ + { + "internalType": "string", + "name": "idProjek", + "type": "string" + }, + { + "internalType": "string", + "name": "idUser", + "type": "string" + }, + { + "internalType": "string", + "name": "namaProyek", + "type": "string" + }, + { + "internalType": "string", + "name": "namaPetugas", + "type": "string" + }, + { + "internalType": "string", + "name": "alamatPetugas", + "type": "string" + }, + { + "internalType": "string", + "name": "namaPemilikProyek", + "type": "string" + }, + { + "internalType": "string", + "name": "nik", + "type": "string" + }, + { + "internalType": "string", + "name": "noHp", + "type": "string" + }, + { + "internalType": "string", + "name": "alamat", + "type": "string" + }, + { + "internalType": "string", + "name": "signature", + "type": "string" + }, + { + "internalType": "string", + "name": "tandaTangan", + "type": "string" + }, + { + "internalType": "int256", + "name": "nominalDisetujui", + "type": "int256" + }, + { + "internalType": "uint256", + "name": "createdAt", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "allTokenIds", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_idProjek", + "type": "string" + }, + { + "internalType": "string", + "name": "_idUser", + "type": "string" + }, + { + "internalType": "string", + "name": "_namaProyek", + "type": "string" + }, + { + "internalType": "string", + "name": "_namaPetugas", + "type": "string" + }, + { + "internalType": "string", + "name": "_alamatPetugas", + "type": "string" + }, + { + "internalType": "string", + "name": "_namaPemilikProyek", + "type": "string" + }, + { + "internalType": "string", + "name": "_nik", + "type": "string" + }, + { + "internalType": "string", + "name": "_noHp", + "type": "string" + }, + { + "internalType": "string", + "name": "_alamat", + "type": "string" + }, + { + "internalType": "string", + "name": "_signature", + "type": "string" + }, + { + "internalType": "string", + "name": "_tandaTangan", + "type": "string" + }, + { + "internalType": "int256", + "name": "_nominalDisetujui", + "type": "int256" + } + ], + "name": "createAgreementLetter", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "idProjek", + "type": "string" + }, + { + "internalType": "string", + "name": "idUser", + "type": "string" + }, + { + "internalType": "int256", + "name": "nilai", + "type": "int256" + } + ], + "name": "createToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "idProjek", + "type": "string" + } + ], + "name": "getAgreementByProjectId", + "outputs": [ + { + "components": [ + { + "internalType": "string", + "name": "idProjek", + "type": "string" + }, + { + "internalType": "string", + "name": "idUser", + "type": "string" + }, + { + "internalType": "string", + "name": "namaProyek", + "type": "string" + }, + { + "internalType": "string", + "name": "namaPetugas", + "type": "string" + }, + { + "internalType": "string", + "name": "alamatPetugas", + "type": "string" + }, + { + "internalType": "string", + "name": "namaPemilikProyek", + "type": "string" + }, + { + "internalType": "string", + "name": "nik", + "type": "string" + }, + { + "internalType": "string", + "name": "noHp", + "type": "string" + }, + { + "internalType": "string", + "name": "alamat", + "type": "string" + }, + { + "internalType": "string", + "name": "signature", + "type": "string" + }, + { + "internalType": "string", + "name": "tandaTangan", + "type": "string" + }, + { + "internalType": "int256", + "name": "nominalDisetujui", + "type": "int256" + }, + { + "internalType": "uint256", + "name": "createdAt", + "type": "uint256" + } + ], + "internalType": "struct ProjectToken.Agreement[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAllAgreement", + "outputs": [ + { + "components": [ + { + "internalType": "string", + "name": "idProjek", + "type": "string" + }, + { + "internalType": "string", + "name": "idUser", + "type": "string" + }, + { + "internalType": "string", + "name": "namaProyek", + "type": "string" + }, + { + "internalType": "string", + "name": "namaPetugas", + "type": "string" + }, + { + "internalType": "string", + "name": "alamatPetugas", + "type": "string" + }, + { + "internalType": "string", + "name": "namaPemilikProyek", + "type": "string" + }, + { + "internalType": "string", + "name": "nik", + "type": "string" + }, + { + "internalType": "string", + "name": "noHp", + "type": "string" + }, + { + "internalType": "string", + "name": "alamat", + "type": "string" + }, + { + "internalType": "string", + "name": "signature", + "type": "string" + }, + { + "internalType": "string", + "name": "tandaTangan", + "type": "string" + }, + { + "internalType": "int256", + "name": "nominalDisetujui", + "type": "int256" + }, + { + "internalType": "uint256", + "name": "createdAt", + "type": "uint256" + } + ], + "internalType": "struct ProjectToken.Agreement[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAllTokens", + "outputs": [ + { + "components": [ + { + "internalType": "string", + "name": "tokenId", + "type": "string" + }, + { + "internalType": "string", + "name": "idProjek", + "type": "string" + }, + { + "internalType": "string", + "name": "idUser", + "type": "string" + }, + { + "internalType": "int256", + "name": "nilai", + "type": "int256" + } + ], + "internalType": "struct ProjectToken.TokenDetail[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getAllTransaction", + "outputs": [ + { + "components": [ + { + "internalType": "string", + "name": "idUser", + "type": "string" + }, + { + "internalType": "string", + "name": "namaUser", + "type": "string" + }, + { + "internalType": "string", + "name": "idProjek", + "type": "string" + }, + { + "internalType": "string", + "name": "judulProjek", + "type": "string" + }, + { + "internalType": "string", + "name": "ownerProjek", + "type": "string" + }, + { + "internalType": "int256", + "name": "jumlahToken", + "type": "int256" + }, + { + "internalType": "int256", + "name": "totalNominal", + "type": "int256" + } + ], + "internalType": "struct ProjectToken.Transaksi[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "tokenId", + "type": "string" + } + ], + "name": "getTokenById", + "outputs": [ + { + "components": [ + { + "internalType": "string", + "name": "tokenId", + "type": "string" + }, + { + "internalType": "string", + "name": "idProjek", + "type": "string" + }, + { + "internalType": "string", + "name": "idUser", + "type": "string" + }, + { + "internalType": "int256", + "name": "nilai", + "type": "int256" + } + ], + "internalType": "struct ProjectToken.TokenDetail", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "idProjek", + "type": "string" + } + ], + "name": "getTokenByProjectId", + "outputs": [ + { + "components": [ + { + "internalType": "string", + "name": "tokenId", + "type": "string" + }, + { + "internalType": "string", + "name": "idProjek", + "type": "string" + }, + { + "internalType": "string", + "name": "idUser", + "type": "string" + }, + { + "internalType": "int256", + "name": "nilai", + "type": "int256" + } + ], + "internalType": "struct ProjectToken.TokenDetail[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "idUser", + "type": "string" + }, + { + "internalType": "string", + "name": "idProjek", + "type": "string" + } + ], + "name": "getTokenByUserAndProject", + "outputs": [ + { + "components": [ + { + "internalType": "string", + "name": "tokenId", + "type": "string" + }, + { + "internalType": "string", + "name": "idProjek", + "type": "string" + }, + { + "internalType": "string", + "name": "idUser", + "type": "string" + }, + { + "internalType": "int256", + "name": "nilai", + "type": "int256" + } + ], + "internalType": "struct ProjectToken.TokenDetail[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "idUser", + "type": "string" + }, + { + "internalType": "string", + "name": "idProjek", + "type": "string" + } + ], + "name": "getTotalNominalToken", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTotalTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "idProjek", + "type": "string" + } + ], + "name": "getTransactionByProjectId", + "outputs": [ + { + "components": [ + { + "internalType": "string", + "name": "idUser", + "type": "string" + }, + { + "internalType": "string", + "name": "namaUser", + "type": "string" + }, + { + "internalType": "string", + "name": "idProjek", + "type": "string" + }, + { + "internalType": "string", + "name": "judulProjek", + "type": "string" + }, + { + "internalType": "string", + "name": "ownerProjek", + "type": "string" + }, + { + "internalType": "int256", + "name": "jumlahToken", + "type": "int256" + }, + { + "internalType": "int256", + "name": "totalNominal", + "type": "int256" + } + ], + "internalType": "struct ProjectToken.Transaksi[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "idUser", + "type": "string" + } + ], + "name": "getTransactionByUserId", + "outputs": [ + { + "components": [ + { + "internalType": "string", + "name": "idUser", + "type": "string" + }, + { + "internalType": "string", + "name": "namaUser", + "type": "string" + }, + { + "internalType": "string", + "name": "idProjek", + "type": "string" + }, + { + "internalType": "string", + "name": "judulProjek", + "type": "string" + }, + { + "internalType": "string", + "name": "ownerProjek", + "type": "string" + }, + { + "internalType": "int256", + "name": "jumlahToken", + "type": "int256" + }, + { + "internalType": "int256", + "name": "totalNominal", + "type": "int256" + } + ], + "internalType": "struct ProjectToken.Transaksi[]", + "name": "", + "type": "tuple[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "tokenId", + "type": "string" + } + ], + "name": "resetTokenNominal", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "name": "tokenDetails", + "outputs": [ + { + "internalType": "string", + "name": "tokenId", + "type": "string" + }, + { + "internalType": "string", + "name": "idProjek", + "type": "string" + }, + { + "internalType": "string", + "name": "idUser", + "type": "string" + }, + { + "internalType": "int256", + "name": "nilai", + "type": "int256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "transaksiList", + "outputs": [ + { + "internalType": "string", + "name": "idUser", + "type": "string" + }, + { + "internalType": "string", + "name": "namaUser", + "type": "string" + }, + { + "internalType": "string", + "name": "idProjek", + "type": "string" + }, + { + "internalType": "string", + "name": "judulProjek", + "type": "string" + }, + { + "internalType": "string", + "name": "ownerProjek", + "type": "string" + }, + { + "internalType": "int256", + "name": "jumlahToken", + "type": "int256" + }, + { + "internalType": "int256", + "name": "totalNominal", + "type": "int256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x60806040523461032a57604080519081016001600160401b03811182821017610235576040908152600c82526b283937b532b1ba2a37b5b2b760a11b602083015280519081016001600160401b03811182821017610235576040526004815263282a25a760e11b602082015281516001600160401b03811161023557600354600181811c91168015610320575b602082101461021557601f81116102bb575b50602092601f8211600114610256579281929360009261024b575b50508160011b916000199060031b1c1916176003555b80516001600160401b03811161023557600454600181811c9116801561022b575b602082101461021557601f81116101b0575b50602091601f821160011461014c57918192600092610141575b50508160011b916000199060031b1c1916176004555b60405161299490816103308239f35b01519050388061011c565b601f198216926004600052806000209160005b8581106101985750836001951061017f575b505050811b01600455610132565b015160001960f88460031b161c19169055388080610171565b9192602060018192868501518155019401920161015f565b60046000527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b601f830160051c8101916020841061020b575b601f0160051c01905b8181106101ff5750610102565b600081556001016101f2565b90915081906101e9565b634e487b7160e01b600052602260045260246000fd5b90607f16906100f0565b634e487b7160e01b600052604160045260246000fd5b0151905038806100b9565b601f198216936003600052806000209160005b8681106102a3575083600195961061028a575b505050811b016003556100cf565b015160001960f88460031b161c1916905538808061027c565b91926020600181928685015181550194019201610269565b60036000527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b601f830160051c81019160208410610316575b601f0160051c01905b81811061030a575061009e565b600081556001016102fd565b90915081906102f4565b90607f169061008c565b600080fdfe608080604052600436101561001357600080fd5b60003560e01c90816306fdde0314611a7057508063095ea7b3146119ea57806318160ddd146119cc5780631aee42fb1461185c57806323b872dd1461176657806323fb4cad146116755780632a5c792a146115ba578063313ce5671461159e5780634a8651b2146115255780636c842b8a146113a757806370a082311461136d5780637d07b2d2146113165780638ce9a3e0146111f257806395d89b4114611111578063a9059cbb146110e0578063add6415d14611051578063bb7bb27814611033578063bd14de9614610f0b578063c4070dfd14610e15578063d094fecb14610d0e578063d0ce8fce14610c0e578063dd62ed3e14610bb6578063e02ca27a14610a17578063e72e533f14610919578063ea8a69b9146107f9578063ed9e88041461050e578063f08b82e6146104f0578063f571d912146104055763f60885731461015e57600080fd5b34610400576060366003190112610400576004356001600160401b0381116104005761018e903690600401611c17565b6024356001600160401b038111610400576101ad903690600401611c17565b6044359160085492600184018094116103c55783600855602461023560016101dd6101d7426127d8565b976127d8565b604051938491602083019963544b4e2d60e01b8b526102058151809260208688019101611b15565b8301602d60f81b83820152610224825180936020602585019101611b15565b01010301601f198101835282611bdb565b600082126103f15781945b33156103db576002548681018091116103c5576002556000953387528660205260408720818154019055604051908152867fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60203393a36003604051916102a683611b89565b838352610306602084018781526102fc60408601918a83526102f26102e0602060608a01978c89528b604051938492839251928391611b15565b81016007815203019020975188612519565b5160018701612519565b5160028501612519565b51910155600954680100000000000000008110156103b15780600161032e9201600955611e6f565b61039d579161039161036e836103697fe23114fe27f7be70984c72f92cce6a0acc20674db41af2d72d29fdd458890c45979561038397612519565b6121d7565b95604051948594606086526060860190611b38565b908482036020860152611b38565b9060408301520390a280f35b634e487b7160e01b86526004869052602486fd5b634e487b7160e01b86526041600452602486fd5b634e487b7160e01b600052601160045260246000fd5b63ec442f0560e01b600052600060045260246000fd5b6103fa826121c6565b94610240565b600080fd5b34610400576020366003190112610400576004356001600160401b03811161040057610450602061043d6104ca933690600401611c17565b8160405193828580945193849201611b15565b81016007815203019020604051906104738261046c8184611eda565b0383611bdb565b6104e6604051916104928361048b8160018501611eda565b0384611bdb565b6104d86003604051926104b3846104ac8160028501611eda565b0385611bdb565b015493604051968796608088526080880190611b38565b908682036020880152611b38565b908482036040860152611b38565b9060608301520390f35b34610400576000366003190112610400576020600954604051908152f35b3461040057610180366003190112610400576004356001600160401b0381116104005761053f903690600401611c17565b6024356001600160401b0381116104005761055e903690600401611c17565b6044356001600160401b0381116104005761057d903690600401611c17565b6064356001600160401b0381116104005761059c903690600401611c17565b916084356001600160401b038111610400576105bc903690600401611c17565b9360a4356001600160401b038111610400576105dc903690600401611c17565b60c4356001600160401b038111610400576105fb903690600401611c17565b60e4356001600160401b0381116104005761061a903690600401611c17565b610104356001600160401b0381116104005761063a903690600401611c17565b90610124356001600160401b0381116104005761065b903690600401611c17565b9261014435946001600160401b03861161040057868b898c8888888f9c36906004019061068791611c17565b9c8d9460065461069690612285565b9788600655604051996106a88b611bbf565b8a5260208a0197885260408a0192835260608a0191825260808a0190815260a08a01918b835260c08b01938d855260e08c019586526101008c019687526101208c019788526101408c019889526101608c0199610164358b526101808d019b428d5260005260056020526040600020809d5161072391612519565b516107319060018e01612519565b5161073f9060028d01612519565b5161074d9060038c01612519565b5161075b9060048b01612519565b516107699060058a01612519565b516107779060068901612519565b516107859060078801612519565b516107939060088701612519565b516107a19060098601612519565b516107af90600a8501612519565b51600b8301555190600c01556040519a8b9a8b9a429a610164359a6107d39d61202e565b037fe64ebda120a8bc0569b2033c59c749df43b3adadabd10cefeba2efa424462e8e91a1005b34610400576020366003190112610400576004356001600160401b03811161040057610829903690600401611c17565b600a54602082016000805b8381106108dd5750610845906126bf565b9260009160005b84811061086557604051806108618882611f5d565b0390f35b6108816108886108748361210e565b5060405192838092611eda565b0382611bdb565b6020815191012083518320146108a1575b60010161084c565b926108d56001916108ba6108b48761210e565b50612624565b6108c4828a612320565b526108cf8189612320565b50612285565b939050610899565b6108816108ec6108748361210e565b602081519101208551842014610905575b600101610834565b90610911600191612285565b9190506108fd565b34610400576109273661212d565b60095460009290916020820191845b84811061094857602086604051908152f35b606061095c61095683611e6f565b506121f7565b6040519061096982611b89565b60405161097a816108818185611eda565b8252604051916109918361048b8160018601611eda565b602081019283526003604051926109af846104ac8160028501611eda565b8360408401520154938491015260208151910120845187201490816109ff575b506109de575b50600101610936565b9095600082820192831291129080158216911516176103c5579460016109d5565b905051602081519101208451602086012014886109cf565b3461040057610a253661212d565b60095460208301926000805b838110610b465750610a42906122d0565b9260009160005b848110610a5e57604051806108618882611ca8565b610881610a7f6002610a7261095685611e6f565b0160405192838092611eda565b60208151910120825188201480610b1d575b610a9e575b600101610a49565b92610b15600191610ab161095687611e6f565b600360405191610ac083611b89565b604051610ad1816108818185611eda565b8352604051610ae681610881818a8601611eda565b6020840152604051610aff816108818160028601611eda565b6040840152015460608201526108c4828a612320565b939050610a96565b50610881610b326001610a7261095685611e6f565b602081519101208351602085012014610a91565b610881610b5a6002610a7261095685611e6f565b60208151910120835187201480610b8d575b610b79575b600101610a31565b90610b85600191612285565b919050610b71565b50610881610ba26001610a7261095685611e6f565b602081519101208551602087012014610b6c565b3461040057604036600319011261040057610bcf611b5d565b6001600160a01b03610bdf611b73565b911660005260016020526001600160a01b03604060002091166000526020526020604060002054604051908152f35b34610400576020366003190112610400576004356001600160401b03811161040057610c956020610c46610861933690600401611c17565b610c4e6122ab565b5060405190610c84610c7d825193858181860196610c6d81838a611b15565b8101600781520301902054611ea0565b151561217a565b604051938492839251928391611b15565b81016007815203019020600360405191610cae83611b89565b604051610cbf816108818185611eda565b8352604051610cd5816108818160018601611eda565b6020840152604051610cee816108818160028601611eda565b604084015201546060820152604051918291602083526020830190611c5e565b3461040057602036600319011261040057600435600a5481101561040057610d38610dce9161210e565b5060405190610d4b8261046c8184611eda565b604051610d5f816108818160018601611eda565b610e06604051610d76816108818160028801611eda565b610df8604051610d8d816108818160038a01611eda565b610dea60405193610dac85610da58160048c01611eda565b0386611bdb565b610ddc600660058a0154990154976040519b8c9b60e08d5260e08d0190611b38565b908b820360208d0152611b38565b9089820360408b0152611b38565b908782036060890152611b38565b908582036080870152611b38565b9160a084015260c08301520390f35b34610400576020366003190112610400576004356001600160401b03811161040057610e45903690600401611c17565b600a54602082016000805b838110610ed05750610e61906126bf565b9260009160005b848110610e7d57604051806108618882611f5d565b6002610e9c610e8b8361210e565b506108816040518094819301611eda565b602081519101208351832014610eb5575b600101610e68565b92610ec86001916108ba6108b48761210e565b939050610ead565b6002610ede610e8b8361210e565b602081519101208551842014610ef7575b600101610e50565b90610f03600191612285565b919050610eef565b346104005760203660031901126104005760043560005260056020526040600020604051610f3d816108818185611eda565b61086160405192610f55846104ac8160018501611eda565b60405190610f6a8261046c8160028501611eda565b604051610f7e816108818160038601611eda565b604051610f92816108818160048701611eda565b604051610fa6816108818160058801611eda565b604051610fba816108818160068901611eda565b60405190610fcf8261046c8160078a01611eda565b60405192610fe4846104ac8160088b01611eda565b6040519461100086610ff98160098c01611eda565b0387611bdb565b6040519661101c8861101581600a8d01611eda565b0389611bdb565b600c600b8a0154990154996040519d8e9d8e61202e565b34610400576000366003190112610400576020600654604051908152f35b3461040057600036600319011261040057600a5461106e81612294565b9061107c6040519283611bdb565b80825260208201600a6000527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a86000915b8383106110c257604051806108618782611f5d565b600760206001926110d285612624565b8152019201920191906110ad565b34610400576040366003190112610400576111066110fc611b5d565b602435903361273f565b602060405160018152f35b3461040057600036600319011261040057604051600060045461113381611ea0565b80845290600181169081156111ce575060011461116f575b6108618361115b81850382611bdb565b604051918291602083526020830190611b38565b600460009081527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b939250905b8082106111b45750909150810160200161115b61114b565b91926001816020925483858801015201910190929161119c565b60ff191660208086019190915291151560051b8401909101915061115b905061114b565b34610400576020366003190112610400576004356001600160401b03811161040057611222903690600401611c17565b60065460208201600060015b838111156112c2575061124090612334565b9260009160015b8481111561125d57604051806108618882611d08565b80600052600560205261088161127d604060002060405192838092611eda565b60208151910120835183201461129c575b61129790612285565b611247565b926112ba611297918560005260056020526108ba60406000206123e3565b93905061128e565b8060005260056020526108816112e2604060002060405192838092611eda565b602081519101208551842014611301575b6112fc90612285565b61122e565b9061130e6112fc91612285565b9190506112f3565b34610400576020366003190112610400576004356009548110156104005761133d90611e6f565b6113575761088161115b6108619260405192838092611eda565b634e487b7160e01b600052600060045260246000fd5b34610400576020366003190112610400576001600160a01b0361138e611b5d565b1660005260006020526020604060002054604051908152f35b346104005760e0366003190112610400576004356001600160401b038111610400576113d7903690600401611c17565b6024356001600160401b038111610400576113f6903690600401611c17565b6044356001600160401b03811161040057611415903690600401611c17565b916064356001600160401b03811161040057611435903690600401611c17565b926084356001600160401b03811161040057611455903690600401611c17565b906040519261146384611ba4565b83526020830193845260408301908152606083019485526080830191825260a083019160a435835260c084019360c4358552600a546801000000000000000081101561150f578060016114b99201600a5561210e565b979097611357576114ef611503946114e56006996114db6114f996518d612519565b5160018c01612519565b5160028a01612519565b5160038801612519565b5160048601612519565b51600584015551910155005b634e487b7160e01b600052604160045260246000fd5b346104005760003660031901126104005760065461154281612334565b9060015b8181111561155c57604051806108618582611d08565b8060005260056020526040600020906000198101918183116103c557611599926115886108cf926123e3565b6115928288612320565b5285612320565b611546565b3461040057600036600319011261040057602060405160128152f35b34610400576000366003190112610400576009546115d7816122d0565b9060005b8181106115f057604051806108618582611ca8565b806115ff610956600193611e6f565b60036040519161160e83611b89565b60405161161f816108818185611eda565b83526040516116348161088181898601611eda565b602084015260405161164d816108818160028601611eda565b6040840152015460608201526116638286612320565b5261166e8185612320565b50016115db565b34610400576020366003190112610400576004356001600160401b038111610400576116a5903690600401611c17565b600954602082016000805b83811061172557506116c1906122d0565b9260009160005b8481106116dd57604051806108618882611ca8565b6108816116f16001610a7261095685611e6f565b60208151910120835183201461170a575b6001016116c8565b9261171d600191610ab161095687611e6f565b939050611702565b6108816117396001610a7261095685611e6f565b602081519101208551842014611752575b6001016116b0565b9061175e600191612285565b91905061174a565b346104005760603660031901126104005761177f611b5d565b611787611b73565b604435906001600160a01b0383169283600052600160205260406000206001600160a01b03331660005260205260406000205460001981106117cf575b50611106935061273f565b83811061183f5784156118295733156118135761110694600052600160205260406000206001600160a01b03331660005260205283604060002091039055846117c4565b634a1406b160e11b600052600060045260246000fd5b63e602df0560e01b600052600060045260246000fd5b8390637dc7a0d960e11b6000523360045260245260445260646000fd5b34610400576020366003190112610400576004356001600160401b0381116104005761188c903690600401611c17565b6040516118aa610c7d83519260208181870195610c6d818389611b15565b600060036118e4602082604051828189516118c681838c611b15565b81016007815203019020015494604051809381928951928391611b15565b6007908201908152030190200155600081126119bd57905b33156119a75760009133835282602052604083205481811061198d5781611966939285923384528360205203604083205580600254036002556040519081527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60203392a36121d7565b7f49656834f5cb7a4a17a37704042cf99cbb50d4ac10bd9e382eadf70ec80dffe08280a280f35b63391434e360e21b84523360045260245260445250606490fd5b634b637e8f60e11b600052600060045260246000fd5b6119c6906121c6565b906118fc565b34610400576000366003190112610400576020600254604051908152f35b3461040057604036600319011261040057611a03611b5d565b602435903315611829576001600160a01b031690811561181357336000526001602052604060002082600052602052806040600020556040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203392a3602060405160018152f35b34610400576000366003190112610400576000600354611a8f81611ea0565b80845290600181169081156111ce5750600114611ab6576108618361115b81850382611bdb565b600360009081527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b939250905b808210611afb5750909150810160200161115b61114b565b919260018160209254838588010152019101909291611ae3565b60005b838110611b285750506000910152565b8181015183820152602001611b18565b90602091611b5181518092818552858086019101611b15565b601f01601f1916010190565b600435906001600160a01b038216820361040057565b602435906001600160a01b038216820361040057565b608081019081106001600160401b0382111761150f57604052565b60e081019081106001600160401b0382111761150f57604052565b6101a081019081106001600160401b0382111761150f57604052565b90601f801991011681019081106001600160401b0382111761150f57604052565b6001600160401b03811161150f57601f01601f191660200190565b81601f8201121561040057803590611c2e82611bfc565b92611c3c6040519485611bdb565b8284526020838301011161040057816000926020809301838601378301015290565b90606080611c9f611c8d611c7b8651608087526080870190611b38565b60208701518682036020880152611b38565b60408601518582036040870152611b38565b93015191015290565b602081016020825282518091526040820191602060408360051b8301019401926000915b838310611cdb57505050505090565b9091929394602080611cf9600193603f198682030187528951611c5e565b97019301930191939290611ccc565b602081016020825282518091526040820191602060408360051b8301019401926000915b838310611d3b57505050505090565b9091929394602080611da78361018080611e4e611e3a611e26611e128f611dee611ddc8f8f60019f6040611e0096611dca94611db794603f19908503019052519e8f92611d9384516101a083526101a0830190611b38565b906020850151906020818403910152611b38565b9101518d820360408f0152611b38565b60608d01518c6060818403910152611b38565b60808c01518b820360808d0152611b38565b60a08b01518a820360a08c0152611b38565b60c08a015189820360c08b0152611b38565b60e089015188820360e08a0152611b38565b610100880151878203610100890152611b38565b610120870151868203610120880152611b38565b610140860151858203610140870152611b38565b93610160810151610160850152015191015297019301930191939290611d2c565b600954811015611e8a57600960005260206000200190600090565b634e487b7160e01b600052603260045260246000fd5b90600182811c92168015611ed0575b6020831014611eba57565b634e487b7160e01b600052602260045260246000fd5b91607f1691611eaf565b60009291815491611eea83611ea0565b8083529260018116908115611f405750600114611f0657505050565b60009081526020812093945091925b838310611f26575060209250010190565b600181602092949394548385870101520191019190611f15565b915050602093945060ff929192191683830152151560051b010190565b602081016020825282518091526040820191602060408360051b8301019401926000915b838310611f9057505050505090565b9091929394602080600192603f1985820301865288519060c08061200f611ffd611feb611fd9611fc9885160e0895260e0890190611b38565b898901518882038b8a0152611b38565b60408801518782036040890152611b38565b60608701518682036060880152611b38565b60808601518582036080870152611b38565b9360a081015160a0850152015191015297019301930191939290611f81565b9995966120ba9c9e9d9c6120f4986120ac8d6101809f9c969961209e6121039f9a6120906120d69b6120826120e59f6120746120c89d6101a08a526101a08a0190611b38565b9088820360208a0152611b38565b908682036040880152611b38565b908482036060860152611b38565b916080818403910152611b38565b8d810360a08f015290611b38565b908b820360c08d0152611b38565b9089820360e08b0152611b38565b90878203610100890152611b38565b90858203610120870152611b38565b90838203610140850152611b38565b946101608201520152565b600a54811015611e8a57600a6000526007602060002091020190600090565b906040600319830112610400576004356001600160401b038111610400578261215891600401611c17565b91602435906001600160401b0382116104005761217791600401611c17565b90565b1561218157565b60405162461bcd60e51b815260206004820152601760248201527f50726f6a65637420546f6b656e206e6f7420666f756e640000000000000000006044820152606490fd5b600160ff1b81146103c55760000390565b6121ef90602060405192828480945193849201611b15565b810103902090565b6040519081600082549261220a84611ea0565b936001811690811561226b575060011461222f575b5060209250600781520301902090565b9150506000528160206000206000905b83821061225357505060209181013861221f565b6020919250806001915484870152019101839161223f565b60ff1916845250602093801515028301915038905061221f565b60001981146103c55760010190565b6001600160401b03811161150f5760051b60200190565b604051906122b882611b89565b60006060838181528160208201528160408201520152565b906122da82612294565b6122e76040519182611bdb565b82815280926122f8601f1991612294565b019060005b82811061230957505050565b6020906123146122ab565b828285010152016122fd565b8051821015611e8a5760209160051b010190565b9061233e82612294565b61234b6040519182611bdb565b828152809261235c601f1991612294565b019060005b82811061236d57505050565b60209060405161237c81611bbf565b606081526060838201526060604082015260608082015260606080820152606060a0820152606060c0820152606060e08201526060610100820152606061012082015260606101408201526000610160820152600061018082015282828501015201612361565b906040516123f081611bbf565b610180600c8294604051612408816108818185611eda565b845260405161241e816108818160018601611eda565b6020850152604051612437816108818160028601611eda565b6040850152604051612450816108818160038601611eda565b6060850152604051612469816108818160048601611eda565b6080850152604051612482816108818160058601611eda565b60a085015260405161249b816108818160068601611eda565b60c08501526040516124b4816108818160078601611eda565b60e08501526040516124cd816108818160088601611eda565b6101008501526040516124e7816108818160098601611eda565b6101208501526040516125018161088181600a8601611eda565b610140850152600b8101546101608501520154910152565b91909182516001600160401b03811161150f576125368254611ea0565b601f81116125dc575b506020601f821160011461257a578192939460009261256f575b50508160011b916000199060031b1c1916179055565b015190503880612559565b601f1982169083600052806000209160005b8181106125c4575095836001959697106125ab575b505050811b019055565b015160001960f88460031b161c191690553880806125a1565b9192602060018192868b01518155019401920161258c565b826000526020600020601f830160051c8101916020841061261a575b601f0160051c01905b81811061260e575061253f565b60008155600101612601565b90915081906125f8565b9060405161263181611ba4565b60c060068294604051612648816108818185611eda565b845260405161265e816108818160018601611eda565b6020850152604051612677816108818160028601611eda565b6040850152604051612690816108818160038601611eda565b60608501526040516126a9816108818160048601611eda565b6080850152600581015460a08501520154910152565b906126c982612294565b6126d66040519182611bdb565b82815280926126e7601f1991612294565b019060005b8281106126f857505050565b60209060405161270781611ba4565b606081526060838201526060604082015260608082015260606080820152600060a0820152600060c0820152828285010152016126ec565b6001600160a01b03169081156119a7576001600160a01b03169182156103db5760008281528060205260408120548281106127be5791604082827fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef958760209652828652038282205586815280845220818154019055604051908152a3565b916064928463391434e360e21b8452600452602452604452fd5b806000917a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000821015612936575b806d04ee2d6d415b85acef8100000000600a92101561291b575b662386f26fc10000811015612907575b6305f5e1008110156128f6575b6127108110156128e7575b60648110156128d9575b10156128ce575b600a6021600184019361286585611bfc565b946128736040519687611bdb565b808652612882601f1991611bfc565b013660208701378401015b60001901917f30313233343536373839616263646566000000000000000000000000000000008282061a83530480156128c957600a909161288d565b505090565b600190910190612853565b60646002910493019261284c565b61271060049104930192612842565b6305f5e10060089104930192612837565b662386f26fc100006010910493019261282a565b6d04ee2d6d415b85acef81000000006020910493019261281a565b50604091507a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000810461280056fea26469706673582212204920aba0318d999b72c897be65cd46b12733fccbc1c41bb9cada6321a07b014364736f6c634300081c0033", + "deployedBytecode": "0x608080604052600436101561001357600080fd5b60003560e01c90816306fdde0314611a7057508063095ea7b3146119ea57806318160ddd146119cc5780631aee42fb1461185c57806323b872dd1461176657806323fb4cad146116755780632a5c792a146115ba578063313ce5671461159e5780634a8651b2146115255780636c842b8a146113a757806370a082311461136d5780637d07b2d2146113165780638ce9a3e0146111f257806395d89b4114611111578063a9059cbb146110e0578063add6415d14611051578063bb7bb27814611033578063bd14de9614610f0b578063c4070dfd14610e15578063d094fecb14610d0e578063d0ce8fce14610c0e578063dd62ed3e14610bb6578063e02ca27a14610a17578063e72e533f14610919578063ea8a69b9146107f9578063ed9e88041461050e578063f08b82e6146104f0578063f571d912146104055763f60885731461015e57600080fd5b34610400576060366003190112610400576004356001600160401b0381116104005761018e903690600401611c17565b6024356001600160401b038111610400576101ad903690600401611c17565b6044359160085492600184018094116103c55783600855602461023560016101dd6101d7426127d8565b976127d8565b604051938491602083019963544b4e2d60e01b8b526102058151809260208688019101611b15565b8301602d60f81b83820152610224825180936020602585019101611b15565b01010301601f198101835282611bdb565b600082126103f15781945b33156103db576002548681018091116103c5576002556000953387528660205260408720818154019055604051908152867fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60203393a36003604051916102a683611b89565b838352610306602084018781526102fc60408601918a83526102f26102e0602060608a01978c89528b604051938492839251928391611b15565b81016007815203019020975188612519565b5160018701612519565b5160028501612519565b51910155600954680100000000000000008110156103b15780600161032e9201600955611e6f565b61039d579161039161036e836103697fe23114fe27f7be70984c72f92cce6a0acc20674db41af2d72d29fdd458890c45979561038397612519565b6121d7565b95604051948594606086526060860190611b38565b908482036020860152611b38565b9060408301520390a280f35b634e487b7160e01b86526004869052602486fd5b634e487b7160e01b86526041600452602486fd5b634e487b7160e01b600052601160045260246000fd5b63ec442f0560e01b600052600060045260246000fd5b6103fa826121c6565b94610240565b600080fd5b34610400576020366003190112610400576004356001600160401b03811161040057610450602061043d6104ca933690600401611c17565b8160405193828580945193849201611b15565b81016007815203019020604051906104738261046c8184611eda565b0383611bdb565b6104e6604051916104928361048b8160018501611eda565b0384611bdb565b6104d86003604051926104b3846104ac8160028501611eda565b0385611bdb565b015493604051968796608088526080880190611b38565b908682036020880152611b38565b908482036040860152611b38565b9060608301520390f35b34610400576000366003190112610400576020600954604051908152f35b3461040057610180366003190112610400576004356001600160401b0381116104005761053f903690600401611c17565b6024356001600160401b0381116104005761055e903690600401611c17565b6044356001600160401b0381116104005761057d903690600401611c17565b6064356001600160401b0381116104005761059c903690600401611c17565b916084356001600160401b038111610400576105bc903690600401611c17565b9360a4356001600160401b038111610400576105dc903690600401611c17565b60c4356001600160401b038111610400576105fb903690600401611c17565b60e4356001600160401b0381116104005761061a903690600401611c17565b610104356001600160401b0381116104005761063a903690600401611c17565b90610124356001600160401b0381116104005761065b903690600401611c17565b9261014435946001600160401b03861161040057868b898c8888888f9c36906004019061068791611c17565b9c8d9460065461069690612285565b9788600655604051996106a88b611bbf565b8a5260208a0197885260408a0192835260608a0191825260808a0190815260a08a01918b835260c08b01938d855260e08c019586526101008c019687526101208c019788526101408c019889526101608c0199610164358b526101808d019b428d5260005260056020526040600020809d5161072391612519565b516107319060018e01612519565b5161073f9060028d01612519565b5161074d9060038c01612519565b5161075b9060048b01612519565b516107699060058a01612519565b516107779060068901612519565b516107859060078801612519565b516107939060088701612519565b516107a19060098601612519565b516107af90600a8501612519565b51600b8301555190600c01556040519a8b9a8b9a429a610164359a6107d39d61202e565b037fe64ebda120a8bc0569b2033c59c749df43b3adadabd10cefeba2efa424462e8e91a1005b34610400576020366003190112610400576004356001600160401b03811161040057610829903690600401611c17565b600a54602082016000805b8381106108dd5750610845906126bf565b9260009160005b84811061086557604051806108618882611f5d565b0390f35b6108816108886108748361210e565b5060405192838092611eda565b0382611bdb565b6020815191012083518320146108a1575b60010161084c565b926108d56001916108ba6108b48761210e565b50612624565b6108c4828a612320565b526108cf8189612320565b50612285565b939050610899565b6108816108ec6108748361210e565b602081519101208551842014610905575b600101610834565b90610911600191612285565b9190506108fd565b34610400576109273661212d565b60095460009290916020820191845b84811061094857602086604051908152f35b606061095c61095683611e6f565b506121f7565b6040519061096982611b89565b60405161097a816108818185611eda565b8252604051916109918361048b8160018601611eda565b602081019283526003604051926109af846104ac8160028501611eda565b8360408401520154938491015260208151910120845187201490816109ff575b506109de575b50600101610936565b9095600082820192831291129080158216911516176103c5579460016109d5565b905051602081519101208451602086012014886109cf565b3461040057610a253661212d565b60095460208301926000805b838110610b465750610a42906122d0565b9260009160005b848110610a5e57604051806108618882611ca8565b610881610a7f6002610a7261095685611e6f565b0160405192838092611eda565b60208151910120825188201480610b1d575b610a9e575b600101610a49565b92610b15600191610ab161095687611e6f565b600360405191610ac083611b89565b604051610ad1816108818185611eda565b8352604051610ae681610881818a8601611eda565b6020840152604051610aff816108818160028601611eda565b6040840152015460608201526108c4828a612320565b939050610a96565b50610881610b326001610a7261095685611e6f565b602081519101208351602085012014610a91565b610881610b5a6002610a7261095685611e6f565b60208151910120835187201480610b8d575b610b79575b600101610a31565b90610b85600191612285565b919050610b71565b50610881610ba26001610a7261095685611e6f565b602081519101208551602087012014610b6c565b3461040057604036600319011261040057610bcf611b5d565b6001600160a01b03610bdf611b73565b911660005260016020526001600160a01b03604060002091166000526020526020604060002054604051908152f35b34610400576020366003190112610400576004356001600160401b03811161040057610c956020610c46610861933690600401611c17565b610c4e6122ab565b5060405190610c84610c7d825193858181860196610c6d81838a611b15565b8101600781520301902054611ea0565b151561217a565b604051938492839251928391611b15565b81016007815203019020600360405191610cae83611b89565b604051610cbf816108818185611eda565b8352604051610cd5816108818160018601611eda565b6020840152604051610cee816108818160028601611eda565b604084015201546060820152604051918291602083526020830190611c5e565b3461040057602036600319011261040057600435600a5481101561040057610d38610dce9161210e565b5060405190610d4b8261046c8184611eda565b604051610d5f816108818160018601611eda565b610e06604051610d76816108818160028801611eda565b610df8604051610d8d816108818160038a01611eda565b610dea60405193610dac85610da58160048c01611eda565b0386611bdb565b610ddc600660058a0154990154976040519b8c9b60e08d5260e08d0190611b38565b908b820360208d0152611b38565b9089820360408b0152611b38565b908782036060890152611b38565b908582036080870152611b38565b9160a084015260c08301520390f35b34610400576020366003190112610400576004356001600160401b03811161040057610e45903690600401611c17565b600a54602082016000805b838110610ed05750610e61906126bf565b9260009160005b848110610e7d57604051806108618882611f5d565b6002610e9c610e8b8361210e565b506108816040518094819301611eda565b602081519101208351832014610eb5575b600101610e68565b92610ec86001916108ba6108b48761210e565b939050610ead565b6002610ede610e8b8361210e565b602081519101208551842014610ef7575b600101610e50565b90610f03600191612285565b919050610eef565b346104005760203660031901126104005760043560005260056020526040600020604051610f3d816108818185611eda565b61086160405192610f55846104ac8160018501611eda565b60405190610f6a8261046c8160028501611eda565b604051610f7e816108818160038601611eda565b604051610f92816108818160048701611eda565b604051610fa6816108818160058801611eda565b604051610fba816108818160068901611eda565b60405190610fcf8261046c8160078a01611eda565b60405192610fe4846104ac8160088b01611eda565b6040519461100086610ff98160098c01611eda565b0387611bdb565b6040519661101c8861101581600a8d01611eda565b0389611bdb565b600c600b8a0154990154996040519d8e9d8e61202e565b34610400576000366003190112610400576020600654604051908152f35b3461040057600036600319011261040057600a5461106e81612294565b9061107c6040519283611bdb565b80825260208201600a6000527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a86000915b8383106110c257604051806108618782611f5d565b600760206001926110d285612624565b8152019201920191906110ad565b34610400576040366003190112610400576111066110fc611b5d565b602435903361273f565b602060405160018152f35b3461040057600036600319011261040057604051600060045461113381611ea0565b80845290600181169081156111ce575060011461116f575b6108618361115b81850382611bdb565b604051918291602083526020830190611b38565b600460009081527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b939250905b8082106111b45750909150810160200161115b61114b565b91926001816020925483858801015201910190929161119c565b60ff191660208086019190915291151560051b8401909101915061115b905061114b565b34610400576020366003190112610400576004356001600160401b03811161040057611222903690600401611c17565b60065460208201600060015b838111156112c2575061124090612334565b9260009160015b8481111561125d57604051806108618882611d08565b80600052600560205261088161127d604060002060405192838092611eda565b60208151910120835183201461129c575b61129790612285565b611247565b926112ba611297918560005260056020526108ba60406000206123e3565b93905061128e565b8060005260056020526108816112e2604060002060405192838092611eda565b602081519101208551842014611301575b6112fc90612285565b61122e565b9061130e6112fc91612285565b9190506112f3565b34610400576020366003190112610400576004356009548110156104005761133d90611e6f565b6113575761088161115b6108619260405192838092611eda565b634e487b7160e01b600052600060045260246000fd5b34610400576020366003190112610400576001600160a01b0361138e611b5d565b1660005260006020526020604060002054604051908152f35b346104005760e0366003190112610400576004356001600160401b038111610400576113d7903690600401611c17565b6024356001600160401b038111610400576113f6903690600401611c17565b6044356001600160401b03811161040057611415903690600401611c17565b916064356001600160401b03811161040057611435903690600401611c17565b926084356001600160401b03811161040057611455903690600401611c17565b906040519261146384611ba4565b83526020830193845260408301908152606083019485526080830191825260a083019160a435835260c084019360c4358552600a546801000000000000000081101561150f578060016114b99201600a5561210e565b979097611357576114ef611503946114e56006996114db6114f996518d612519565b5160018c01612519565b5160028a01612519565b5160038801612519565b5160048601612519565b51600584015551910155005b634e487b7160e01b600052604160045260246000fd5b346104005760003660031901126104005760065461154281612334565b9060015b8181111561155c57604051806108618582611d08565b8060005260056020526040600020906000198101918183116103c557611599926115886108cf926123e3565b6115928288612320565b5285612320565b611546565b3461040057600036600319011261040057602060405160128152f35b34610400576000366003190112610400576009546115d7816122d0565b9060005b8181106115f057604051806108618582611ca8565b806115ff610956600193611e6f565b60036040519161160e83611b89565b60405161161f816108818185611eda565b83526040516116348161088181898601611eda565b602084015260405161164d816108818160028601611eda565b6040840152015460608201526116638286612320565b5261166e8185612320565b50016115db565b34610400576020366003190112610400576004356001600160401b038111610400576116a5903690600401611c17565b600954602082016000805b83811061172557506116c1906122d0565b9260009160005b8481106116dd57604051806108618882611ca8565b6108816116f16001610a7261095685611e6f565b60208151910120835183201461170a575b6001016116c8565b9261171d600191610ab161095687611e6f565b939050611702565b6108816117396001610a7261095685611e6f565b602081519101208551842014611752575b6001016116b0565b9061175e600191612285565b91905061174a565b346104005760603660031901126104005761177f611b5d565b611787611b73565b604435906001600160a01b0383169283600052600160205260406000206001600160a01b03331660005260205260406000205460001981106117cf575b50611106935061273f565b83811061183f5784156118295733156118135761110694600052600160205260406000206001600160a01b03331660005260205283604060002091039055846117c4565b634a1406b160e11b600052600060045260246000fd5b63e602df0560e01b600052600060045260246000fd5b8390637dc7a0d960e11b6000523360045260245260445260646000fd5b34610400576020366003190112610400576004356001600160401b0381116104005761188c903690600401611c17565b6040516118aa610c7d83519260208181870195610c6d818389611b15565b600060036118e4602082604051828189516118c681838c611b15565b81016007815203019020015494604051809381928951928391611b15565b6007908201908152030190200155600081126119bd57905b33156119a75760009133835282602052604083205481811061198d5781611966939285923384528360205203604083205580600254036002556040519081527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60203392a36121d7565b7f49656834f5cb7a4a17a37704042cf99cbb50d4ac10bd9e382eadf70ec80dffe08280a280f35b63391434e360e21b84523360045260245260445250606490fd5b634b637e8f60e11b600052600060045260246000fd5b6119c6906121c6565b906118fc565b34610400576000366003190112610400576020600254604051908152f35b3461040057604036600319011261040057611a03611b5d565b602435903315611829576001600160a01b031690811561181357336000526001602052604060002082600052602052806040600020556040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203392a3602060405160018152f35b34610400576000366003190112610400576000600354611a8f81611ea0565b80845290600181169081156111ce5750600114611ab6576108618361115b81850382611bdb565b600360009081527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b939250905b808210611afb5750909150810160200161115b61114b565b919260018160209254838588010152019101909291611ae3565b60005b838110611b285750506000910152565b8181015183820152602001611b18565b90602091611b5181518092818552858086019101611b15565b601f01601f1916010190565b600435906001600160a01b038216820361040057565b602435906001600160a01b038216820361040057565b608081019081106001600160401b0382111761150f57604052565b60e081019081106001600160401b0382111761150f57604052565b6101a081019081106001600160401b0382111761150f57604052565b90601f801991011681019081106001600160401b0382111761150f57604052565b6001600160401b03811161150f57601f01601f191660200190565b81601f8201121561040057803590611c2e82611bfc565b92611c3c6040519485611bdb565b8284526020838301011161040057816000926020809301838601378301015290565b90606080611c9f611c8d611c7b8651608087526080870190611b38565b60208701518682036020880152611b38565b60408601518582036040870152611b38565b93015191015290565b602081016020825282518091526040820191602060408360051b8301019401926000915b838310611cdb57505050505090565b9091929394602080611cf9600193603f198682030187528951611c5e565b97019301930191939290611ccc565b602081016020825282518091526040820191602060408360051b8301019401926000915b838310611d3b57505050505090565b9091929394602080611da78361018080611e4e611e3a611e26611e128f611dee611ddc8f8f60019f6040611e0096611dca94611db794603f19908503019052519e8f92611d9384516101a083526101a0830190611b38565b906020850151906020818403910152611b38565b9101518d820360408f0152611b38565b60608d01518c6060818403910152611b38565b60808c01518b820360808d0152611b38565b60a08b01518a820360a08c0152611b38565b60c08a015189820360c08b0152611b38565b60e089015188820360e08a0152611b38565b610100880151878203610100890152611b38565b610120870151868203610120880152611b38565b610140860151858203610140870152611b38565b93610160810151610160850152015191015297019301930191939290611d2c565b600954811015611e8a57600960005260206000200190600090565b634e487b7160e01b600052603260045260246000fd5b90600182811c92168015611ed0575b6020831014611eba57565b634e487b7160e01b600052602260045260246000fd5b91607f1691611eaf565b60009291815491611eea83611ea0565b8083529260018116908115611f405750600114611f0657505050565b60009081526020812093945091925b838310611f26575060209250010190565b600181602092949394548385870101520191019190611f15565b915050602093945060ff929192191683830152151560051b010190565b602081016020825282518091526040820191602060408360051b8301019401926000915b838310611f9057505050505090565b9091929394602080600192603f1985820301865288519060c08061200f611ffd611feb611fd9611fc9885160e0895260e0890190611b38565b898901518882038b8a0152611b38565b60408801518782036040890152611b38565b60608701518682036060880152611b38565b60808601518582036080870152611b38565b9360a081015160a0850152015191015297019301930191939290611f81565b9995966120ba9c9e9d9c6120f4986120ac8d6101809f9c969961209e6121039f9a6120906120d69b6120826120e59f6120746120c89d6101a08a526101a08a0190611b38565b9088820360208a0152611b38565b908682036040880152611b38565b908482036060860152611b38565b916080818403910152611b38565b8d810360a08f015290611b38565b908b820360c08d0152611b38565b9089820360e08b0152611b38565b90878203610100890152611b38565b90858203610120870152611b38565b90838203610140850152611b38565b946101608201520152565b600a54811015611e8a57600a6000526007602060002091020190600090565b906040600319830112610400576004356001600160401b038111610400578261215891600401611c17565b91602435906001600160401b0382116104005761217791600401611c17565b90565b1561218157565b60405162461bcd60e51b815260206004820152601760248201527f50726f6a65637420546f6b656e206e6f7420666f756e640000000000000000006044820152606490fd5b600160ff1b81146103c55760000390565b6121ef90602060405192828480945193849201611b15565b810103902090565b6040519081600082549261220a84611ea0565b936001811690811561226b575060011461222f575b5060209250600781520301902090565b9150506000528160206000206000905b83821061225357505060209181013861221f565b6020919250806001915484870152019101839161223f565b60ff1916845250602093801515028301915038905061221f565b60001981146103c55760010190565b6001600160401b03811161150f5760051b60200190565b604051906122b882611b89565b60006060838181528160208201528160408201520152565b906122da82612294565b6122e76040519182611bdb565b82815280926122f8601f1991612294565b019060005b82811061230957505050565b6020906123146122ab565b828285010152016122fd565b8051821015611e8a5760209160051b010190565b9061233e82612294565b61234b6040519182611bdb565b828152809261235c601f1991612294565b019060005b82811061236d57505050565b60209060405161237c81611bbf565b606081526060838201526060604082015260608082015260606080820152606060a0820152606060c0820152606060e08201526060610100820152606061012082015260606101408201526000610160820152600061018082015282828501015201612361565b906040516123f081611bbf565b610180600c8294604051612408816108818185611eda565b845260405161241e816108818160018601611eda565b6020850152604051612437816108818160028601611eda565b6040850152604051612450816108818160038601611eda565b6060850152604051612469816108818160048601611eda565b6080850152604051612482816108818160058601611eda565b60a085015260405161249b816108818160068601611eda565b60c08501526040516124b4816108818160078601611eda565b60e08501526040516124cd816108818160088601611eda565b6101008501526040516124e7816108818160098601611eda565b6101208501526040516125018161088181600a8601611eda565b610140850152600b8101546101608501520154910152565b91909182516001600160401b03811161150f576125368254611ea0565b601f81116125dc575b506020601f821160011461257a578192939460009261256f575b50508160011b916000199060031b1c1916179055565b015190503880612559565b601f1982169083600052806000209160005b8181106125c4575095836001959697106125ab575b505050811b019055565b015160001960f88460031b161c191690553880806125a1565b9192602060018192868b01518155019401920161258c565b826000526020600020601f830160051c8101916020841061261a575b601f0160051c01905b81811061260e575061253f565b60008155600101612601565b90915081906125f8565b9060405161263181611ba4565b60c060068294604051612648816108818185611eda565b845260405161265e816108818160018601611eda565b6020850152604051612677816108818160028601611eda565b6040850152604051612690816108818160038601611eda565b60608501526040516126a9816108818160048601611eda565b6080850152600581015460a08501520154910152565b906126c982612294565b6126d66040519182611bdb565b82815280926126e7601f1991612294565b019060005b8281106126f857505050565b60209060405161270781611ba4565b606081526060838201526060604082015260608082015260606080820152600060a0820152600060c0820152828285010152016126ec565b6001600160a01b03169081156119a7576001600160a01b03169182156103db5760008281528060205260408120548281106127be5791604082827fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef958760209652828652038282205586815280845220818154019055604051908152a3565b916064928463391434e360e21b8452600452602452604452fd5b806000917a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000821015612936575b806d04ee2d6d415b85acef8100000000600a92101561291b575b662386f26fc10000811015612907575b6305f5e1008110156128f6575b6127108110156128e7575b60648110156128d9575b10156128ce575b600a6021600184019361286585611bfc565b946128736040519687611bdb565b808652612882601f1991611bfc565b013660208701378401015b60001901917f30313233343536373839616263646566000000000000000000000000000000008282061a83530480156128c957600a909161288d565b505090565b600190910190612853565b60646002910493019261284c565b61271060049104930192612842565b6305f5e10060089104930192612837565b662386f26fc100006010910493019261282a565b6d04ee2d6d415b85acef81000000006020910493019261281a565b50604091507a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000810461280056fea26469706673582212204920aba0318d999b72c897be65cd46b12733fccbc1c41bb9cada6321a07b014364736f6c634300081c0033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/src/common/utils/provider.service.ts b/src/common/utils/provider.service.ts index 2784621..3fa7fac 100644 --- a/src/common/utils/provider.service.ts +++ b/src/common/utils/provider.service.ts @@ -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 {