{"id":20917424,"url":"https://github.com/play3rzer0/decentralized-escrow","last_synced_at":"2026-04-09T18:03:12.914Z","repository":{"id":247953503,"uuid":"617455396","full_name":"Play3rZer0/Decentralized-Escrow","owner":"Play3rZer0","description":null,"archived":false,"fork":false,"pushed_at":"2023-03-24T09:20:49.000Z","size":62,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-19T16:46:54.651Z","etag":null,"topics":["ethereum","hardhat","javascript","nodejs","programming","smart-contracts","solidity","web3"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Play3rZer0.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-03-22T12:37:38.000Z","updated_at":"2024-10-21T04:53:11.000Z","dependencies_parsed_at":"2024-07-11T14:25:43.210Z","dependency_job_id":"9fe97f1f-da63-4b4f-ad26-8158cc3bf8c3","html_url":"https://github.com/Play3rZer0/Decentralized-Escrow","commit_stats":null,"previous_names":["play3rzer0/decentralized-escrow"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Play3rZer0%2FDecentralized-Escrow","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Play3rZer0%2FDecentralized-Escrow/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Play3rZer0%2FDecentralized-Escrow/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Play3rZer0%2FDecentralized-Escrow/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Play3rZer0","download_url":"https://codeload.github.com/Play3rZer0/Decentralized-Escrow/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243311716,"owners_count":20271034,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ethereum","hardhat","javascript","nodejs","programming","smart-contracts","solidity","web3"],"created_at":"2024-11-18T16:32:49.168Z","updated_at":"2025-12-11T19:03:21.971Z","avatar_url":"https://github.com/Play3rZer0.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"Escrow smart contract project using a decentralized network (Ethereum).\n\nSource Code: Javascript (ES5 and up) and Solidity (0.8.18)\nFramework: Ethers.JS and React\nIDE: Hardhat\n\n==============\n\nConcept: An escrow implementation that uses a third party, but implemented on\na blockchain. This adds the benefits of transparency and immutable record of\nthe transaction. The third party cannot manipulate or change the amount in the\ndeposit, nor can they steal the funds.\n\nThe funds are locked in the smart contract, and can only be released to the\nbeneficiary with the approval from the arbiter. The arbiter cannot take the funds\nand the depositor cannot overturn a deposit they made to the escrow.\n\n==============\n\nThe escrow involves three parties:\n\n1. Arbiter - The approver of the transfer of funds\n2. Beneficiary - The recipient of the funds in escrow\n3. Depositor - The depositor of the funds held in the contract\n\nThe 'arbiter', 'beneficiary' and 'depositor' are EOA while the escrow is a contract\nwith an address on the blockchain.\n\nThe contract is deployed by the 'depositor', which takes the addresses of the 'arbiter'\nand 'beneficiary' as parameters.\n\nThere are strict rules for who can call the functions. A depositor cannot be an arbiter or beneficiary to the escrow.\n\nA contract must be funded in order to release funds. It can also be reset to accept new\ndeposits. Only the arbiter can approve the release of funds, while the depositor can\nreset the contract after funds have been released.\n\nDepositor is the owner of the contract, and is the only EOA that is permitted to\nsend funds using the receive() function.\n\nArbiter is the only EOA that is allowed to release the funds to the beneficiary of the\ncontract. No other account is allowed to use the approve() function.\n\n==============\n\nThere are 4 events in this contract:\n\nDeposited(address, uint)\nDeployed(address)\nApproved(uint, bool)\nNewEscrow(address, address)\n\nDeposited is emitted when the depositor makes a deposit of funds to the contract.\nDeployed emits the contract deployment event.\nApproved is the approval event for the release of funds.\nNewEscrow is when the contract is reset and allowed to accept new deposits.\n\n==============\n\nIncluded in this project are scripts with the following functions:\n\napprove.js - Allows only the arbiter to make the call for releasing funds and setting\nthe variable isApproved = true. The function approve() is invoked from the contract.\n\ncheckbalance.js - A read function that returns the total deposited balance to the\nescrow made by the depositor.\n\ndeploy.js - Allows for deployment to a blockchain, test or production. The deployer will\nautomatically be designated as the depositor to the escrow contract.\n\nnewescrow.js - This resets the contract to allow new deposit after the release of the\ninitial funds. Only the depositor can call this function, and it resets the value of\nisApproved = false.\n\nsend.js - Deposit funds to the escrow. Only the depositor is allowed to send ETH, while\nall other EOA are not allowed.\n\n==============\n\nTest this project on local blockchain first (e.g. RPC Provider), and then a test network (e.g. Goerli).\n\nIMPORTANT: For security purposes, this project masks private data like the private key\nusing environment variables. The dotenv library is installed to allow developers to\nprotect data.\n\nInstall the dotenv module -\u003e npm i dotenv\nCreate a .env file in the root folder of the project\nAdd your environment variables\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fplay3rzer0%2Fdecentralized-escrow","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fplay3rzer0%2Fdecentralized-escrow","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fplay3rzer0%2Fdecentralized-escrow/lists"}