{"id":23631660,"url":"https://github.com/docongminh/p2p-program","last_synced_at":"2025-04-09T23:09:59.029Z","repository":{"id":154521370,"uuid":"631915953","full_name":"docongminh/p2p-program","owner":"docongminh","description":"P2P Trading Solana Token: SOL-SPL / SPL-SPL / SPL-SOL","archived":false,"fork":false,"pushed_at":"2023-07-11T23:10:32.000Z","size":1271,"stargazers_count":7,"open_issues_count":4,"forks_count":2,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-09T23:09:53.954Z","etag":null,"topics":["p2p-trading-exchanges","solana","solana-program","trading"],"latest_commit_sha":null,"homepage":"","language":"Rust","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/docongminh.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-04-24T10:29:41.000Z","updated_at":"2025-01-16T23:42:46.000Z","dependencies_parsed_at":null,"dependency_job_id":"42c22505-0f40-4c3b-8de8-f563f24997e7","html_url":"https://github.com/docongminh/p2p-program","commit_stats":null,"previous_names":["docongminh/peer-to-peer-trading","docongminh/p2p-program"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/docongminh%2Fp2p-program","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/docongminh%2Fp2p-program/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/docongminh%2Fp2p-program/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/docongminh%2Fp2p-program/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/docongminh","download_url":"https://codeload.github.com/docongminh/p2p-program/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248125616,"owners_count":21051770,"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":["p2p-trading-exchanges","solana","solana-program","trading"],"created_at":"2024-12-28T03:17:48.249Z","updated_at":"2025-04-09T23:09:59.009Z","avatar_url":"https://github.com/docongminh.png","language":"Rust","readme":"# Trading-p2p\n \nA solana program support user can trade peer to peer solana token between 2 users\n\nNotes: Because program designed and developed in May, 2022, so, have some piece of code outdated with latest version.\n\n# Overview\n\n  - [Context](#context)\n  - [Logic](#logic)\n  - [How to use ?](#how-to-use-)\n  - [Run example](#clients-example-in-here-has-wallet-and-config-already-to-example-client)\n  \n\n# Context\n  - In some bussiness cases, out token has not had ido, or listed in any DEX. Pool liquidity has not provide. So, user can not trade or swap token.\n  In this case, trading p2p program support user can create a deal to trade token between specify partner or any user has demand trade with this token.\n  - Example use case:\n    As a discord user in any community want to trade token with another discord user.\n\n# Logic\n  - In this program. Currently supporting 3 types of trade [here](https://github.com/docongminh/trading-p2p/blob/master/programs/trade-p2p/src/state.rs#L6-L32):\n    - **Token - Token**: User A has ***Token A*** and want to trade ***x Token A amount*** with someone to receive ***y Token B amount***\n    - **Token - SOL**: User A has ***Token A*** and want to trade ***x Token A amount*** with someone to receive  ***y SOL amount***\n    - **SOL - Token**: User A has ***SOL*** and want to trade ***x SOL amount*** with someone to receive ***y Token B amount***\n  - Diagram for each trade type\n  \n   ***Token - Token***\n     \u003cp align=\"center\"\u003e\n       \u003cimg width=\"258\" height=\"182\" src=\"https://github.com/docongminh/trading-p2p/blob/master/resources/splspl.png\"\u003e\n     \u003c/p\u003e\n     \n   ***Token - SOL***\n     \u003cp align=\"center\"\u003e\n       \u003cimg width=\"258\" height=\"182\" src=\"https://github.com/docongminh/trading-p2p/blob/master/resources/splsol.png\"\u003e\n     \u003c/p\u003e\n     \n   ***SOL - Token***\n     \u003cp align=\"center\"\u003e\n       \u003cimg width=\"258\" height=\"182\" src=\"https://github.com/docongminh/trading-p2p/blob/master/resources/solspl.png\"\u003e\n     \u003c/p\u003e\n\n\n# How to use ?\n - Basically, To create a deal, i designed a class [`TradeP2P`](https://github.com/docongminh/trading-p2p/blob/master/clients/p2p/TradeP2P.ts) that supported all methods related to `create`, `exchange` and `cancel` a deal.\n    - Create a trade instance example:\n      ```ts\n        const rpc =  anchor.web3.clusterApiUrl(\"devnet\")\n        const connection = new anchor.web3.Connection(rpc);\n        const tradeInstance = new TradeP2P(connection);\n      ```\n    - Follow up [TradeType](https://github.com/docongminh/trading-p2p/blob/master/clients/p2p/types.ts#L32-L36)\n      ```ts\n        export enum TradeType {\n            SPLSPL,\n            SPLSOL,\n            SOLSPL,\n        }\n      ```\n  - Create trade:\n  \n    Follow up [`TradeOrderRequest`](https://github.com/docongminh/trading-p2p/blob/master/clients/p2p/types.ts#L38-L50)\n    \n       ```ts\n          export type TradeOrderRequest = {\n            creator: PublicKey;\n            orderId: number;\n            specifyPartner?: PublicKey;\n            tradeValue: number;\n            receiveValue: number;\n            creatorSendAccount: PublicKey;\n            creatorReceiveAccount: PublicKey;\n            tradeMint?: PublicKey;\n            receiveMint?: PublicKey;\n            timestamp: string;\n            tradeType: TradeType;\n         };\n       ```\n        \n     - SPL - SPL:\n        ```ts\n           const tradeOrder: TradeOrderRequest = {\n              creator: tradeCreator.publicKey,\n              orderId: orderId,\n              tradeValue: tradeValue,\n              receiveValue: receivevalue,\n              creatorSendAccount: creatorSendTokenAccount,\n              creatorReceiveAccount: creatorReceiveTokenAccount,\n              tradeMint: tradeMintAddress,\n              receiveMint: receiveMintAddress,\n              timestamp: Date.now().toString(),\n              tradeType: TradeType.SPLSPL,\n           };\n\n           const transcationBuffer = await tradeInstance.createTrade(tradeOrder);\n        ```\n     - SPL - SOL:\n        ```ts\n          const tradeOrder: TradeOrderRequest = {\n             creator: tradeCreator.publicKey,\n             orderId: orderId,\n             tradeValue: tradeValue,\n             receiveValue: receivevalue,\n             creatorReceiveAccount: tradeCreator.publicKey,\n             creatorSendAccount: creatorSendTokenAccount,\n             tradeMint: tradeMintAddress,\n             timestamp: Date.now().toString(),\n             tradeType: TradeType.SPLSOL,\n          };\n\n          const transactionBuffer = await tradeInstance.createTrade(tradeOrder);\n        ```\n   \n     - SOL - SPL:\n        ```ts\n            const tradeOrder: TradeOrderRequest = {\n             creator: tradeCreator.publicKey,\n             orderId: orderId,\n             tradeValue: tradeValue,\n             receiveValue: receivevalue,\n             creatorSendAccount: tradeCreator.publicKey,\n             creatorReceiveAccount: creatorReceiveTokenAccount,\n             receiveMint: receiveMintAddress,\n             timestamp: Date.now().toString(),\n             tradeType: TradeType.SOLSPL,\n          };\n\n          const transactionBuffer = await tradeInstance.createTrade(tradeOrder);\n        ```\n     \n  - Exchange:\n     - P2P SPL - SPL:\n        ```ts\n           const tradeInfo: TradeInfo = {\n            orderId: orderId,\n            creator: tradeCreator,\n            creatorSendAccount: creatorSendTokenAccount,\n            creatorReceiveAccount: creatorReceiveTokenAccount,\n            tradeMint: tradeMintAddress,\n            receiveMint: receiveMintAddress,\n            tradeType: TradeType.SPLSPL,\n          };\n\n          const partnerInfo: PartnerInfo = {\n            partner: partner.publicKey,\n            partnerSendAccount: partnerSendTokenAccount,\n            partnerReceiveAccount: partnerReceiveTokenAccount,\n          };\n\n          const transactionBuffer = await tradeInstance.exchange(tradeInfo, partnerInfo);\n        ```\n        \n     - P2P SPL - SOL:\n        ```ts\n            const tradeInfo: TradeInfo = {\n             orderId: orderId,\n             creator: tradeCreator,\n             creatorReceiveAccount: tradeCreator,\n             creatorSendAccount: creatorSendTokenAccount,\n             tradeType: TradeType.SPLSOL,\n             tradeMint: tradeMintAddress,\n           };\n\n           const partnerInfo: PartnerInfo = {\n             partner: partner.publicKey,\n             partnerSendAccount: partner.publicKey,\n             partnerReceiveAccount: partnerReceiveTokenAccount,\n           };\n\n           const transactionBuffer = await tradeInstance.exchange(tradeInfo, partnerInfo);\n        \n        ```\n        \n     - P2P SPL - SPL:\n        ```ts\n          const tradeInfo: TradeInfo = {\n            orderId: orderId,\n            creator: tradeCreator,\n            creatorSendAccount: creatorSendTokenAccount,\n            creatorReceiveAccount: creatorReceiveTokenAccount,\n            tradeMint: tradeMintAddress,\n            receiveMint: receiveMintAddress,\n            tradeType: TradeType.SPLSPL,\n          };\n\n          const partnerInfo: PartnerInfo = {\n            partner: partner.publicKey,\n            partnerSendAccount: partnerSendTokenAccount,\n            partnerReceiveAccount: partnerReceiveTokenAccount,\n          };\n\n          const transactionBuffer = await tradeInstance.exchange(tradeInfo, partnerInfo);\n        \n        ```\n     \n  - Cancel:\n      Follow up [`CancelParams`](https://github.com/docongminh/trading-p2p/blob/master/clients/p2p/types.ts#L66-L71)\n    \n       ```ts\n          export type CancelParams = {\n             creator: PublicKey;\n             orderId: number;\n             creatorSendAccount: PublicKey;\n             tradeMint: PublicKey;\n             tradeType: TradeType;\n          }\n       ```\n        \n     - SPL - SPL:\n        ```ts\n           const cancelParams: CancelParams = {\n             orderId: orderId,\n             creator: tradeCreator.publicKey,\n             creatorSendAccount: creatorSendTokenAccount,\n             tradeType: TradeType.SPLSPL,\n             tradeMint: tradeMintAddress,\n           };\n           const transactionBuffer = await tradeInstance.cancel(cancelParams);\n        ```\n     - SPL - SOL:\n        ```ts\n           const cancelParams: CancelParams = {\n              orderId: orderId,\n              creator: tradeCreator.publicKey,\n              creatorSendAccount: creatorSendTokenAccount,\n              tradeType: TradeType.SPLSOL,\n              tradeMint: tradeMintAddress,\n           };\n           const transactionBuffer = await tradeInstance.cancel(cancelParams);\n        ```\n   \n     - SOL - SPL:\n        ```ts\n            const tradeOrder: TradeOrderRequest = {\n               creator: tradeCreator.publicKey,\n               orderId: orderId,\n               tradeValue: tradeValue,\n               receiveValue: receivevalue,\n               creatorSendAccount: tradeCreator.publicKey,\n               creatorReceiveAccount: creatorReceiveTokenAccount,\n               receiveMint: receiveMintAddress,\n               timestamp: Date.now().toString(),\n               tradeType: TradeType.SOLSPL,\n            };\n\n            const transactionBuffer = await tradeInstance.createTrade(tradeOrder);\n        ``` \n   ## clients example in [here](https://github.com/docongminh/trading-p2p/tree/master/clients) has wallet and config ready for test.\n   - run create and exchange SPL-SPL:\n     \n       ```bash\n          npx ts-node clients/splspl.ts\n       ```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdocongminh%2Fp2p-program","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdocongminh%2Fp2p-program","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdocongminh%2Fp2p-program/lists"}