diff --git a/.gitignore b/.gitignore index 90daadb..2b5397c 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,4 @@ coverage *.tgz *.log .turbo +.hidden diff --git a/packages/client-test/data/shop_info0.json b/packages/client-test/data/shop_info0.json new file mode 100644 index 0000000..fcd8e03 --- /dev/null +++ b/packages/client-test/data/shop_info0.json @@ -0,0 +1,5 @@ +{ + "shopId": "0x00011936a68f7c26797fa2ab64d444ea82c2fb1af36cdea6d4ff845da635f287", + "address": "0xB6f69F0e9e70034ba0578C542476cC13eF739269", + "privateKey": "0x595f911dcf0845cb1f2d0e5cec9f1ccfd62fa199ebeae215a72aa56014edbb32" +} diff --git a/packages/client-test/data/shop_info1.json b/packages/client-test/data/shop_info1.json new file mode 100644 index 0000000..e4d6f31 --- /dev/null +++ b/packages/client-test/data/shop_info1.json @@ -0,0 +1,5 @@ +{ + "shopId": "0x00011f2355a63165608a0f1c00cf1a03183cf9e7e0becb874092f1cdf9db8aa0", + "address": "0x9b3ABc653D15B5a0f4E43E6340096C1C9BB2CA2f", + "privateKey": "0xc3bc6d1141896f1729ece9c7a8bb97c6222cac8e7d902317746b073a369a263e" +} diff --git a/packages/client-test/data/shop_infos.json b/packages/client-test/data/shop_infos.json new file mode 100644 index 0000000..f851e03 --- /dev/null +++ b/packages/client-test/data/shop_infos.json @@ -0,0 +1,14 @@ +[{ + "shopId": "0x00011936a68f7c26797fa2ab64d444ea82c2fb1af36cdea6d4ff845da635f287", + "address": "0xB6f69F0e9e70034ba0578C542476cC13eF739269", + "privateKey": "0x595f911dcf0845cb1f2d0e5cec9f1ccfd62fa199ebeae215a72aa56014edbb32", + "name": "상점1", + "currency": "php" +},{ + "shopId": "0x00011f2355a63165608a0f1c00cf1a03183cf9e7e0becb874092f1cdf9db8aa0", + "address": "0x9b3ABc653D15B5a0f4E43E6340096C1C9BB2CA2f", + "privateKey": "0xc3bc6d1141896f1729ece9c7a8bb97c6222cac8e7d902317746b073a369a263e", + "name": "상점2", + "currency": "php" +} +] diff --git a/packages/client-test/data/user_info.json b/packages/client-test/data/user_info.json index 77e21ec..f67e6d6 100644 --- a/packages/client-test/data/user_info.json +++ b/packages/client-test/data/user_info.json @@ -1,5 +1,5 @@ { "phone": "+82 10-9520-1803", - "address": "0x9a568e50556e7d51d1d477b22C28a099d33Ea04f", - "privateKey": "0x00e8b7fdbed0d29a71339ca7699ff3982708867725e8c49e04ced69222189551" + "address": "0x5A3Fc8990417b3e6ddCdAE0E8039E798A609Ef84", + "privateKey": "0x1f38c07e88ca6bc2f7790f09a27bfc39f4524cf2a322d003435392cfa0d6dae3" } diff --git a/packages/client-test/package.json b/packages/client-test/package.json index 2ca2fe0..18b3598 100644 --- a/packages/client-test/package.json +++ b/packages/client-test/package.json @@ -13,9 +13,11 @@ "26-ledger:balance:point": "npx ts-node scripts/2-ledger/point.ts", "27-ledger:balance:unpayable": "npx ts-node scripts/2-ledger/unpayable.ts", "28-ledger:exchange:toToken": "npx ts-node scripts/2-ledger/changeToToken.ts", - "31-shop:add": "npx ts-node scripts/3-shop/add.ts", - "31-shop:get": "npx ts-node scripts/3-shop/get.ts", - "32-shop:createId": "npx ts-node scripts/3-shop/createId.ts", + "31-shop:addOne": "npx ts-node scripts/3-shop/addOne.ts", + "34-shop:addTwo": "npx ts-node scripts/3-shop/addTwo.ts", + "32-shop:get": "npx ts-node scripts/3-shop/get.ts", + "33-shop:createId": "npx ts-node scripts/3-shop/createId.ts", + "35-shop:refund": "npx ts-node scripts/3-shop/refund.ts", "41-save:account": "npx ts-node scripts/4-save/account.ts", "42-save:phone": "npx ts-node scripts/4-save/phone.ts", "51-use:new": "npx ts-node scripts/5-use/new.ts", diff --git a/packages/client-test/scripts/2-ledger/changeToToken.ts b/packages/client-test/scripts/2-ledger/changeToToken.ts index 43211e4..7af4b52 100644 --- a/packages/client-test/scripts/2-ledger/changeToToken.ts +++ b/packages/client-test/scripts/2-ledger/changeToToken.ts @@ -10,7 +10,7 @@ async function main() { const context: Context = new Context(contextParams); const client = new Client(context); - const amount = BOACoin.make("10_000"); + const amount = BOACoin.make("1_000"); for await (const step of client.ledger.exchangePointToToken(amount.value)) { switch (step.key) { case NormalSteps.PREPARED: diff --git a/packages/client-test/scripts/3-shop/add.ts b/packages/client-test/scripts/3-shop/addOne.ts similarity index 100% rename from packages/client-test/scripts/3-shop/add.ts rename to packages/client-test/scripts/3-shop/addOne.ts diff --git a/packages/client-test/scripts/3-shop/addTwo.ts b/packages/client-test/scripts/3-shop/addTwo.ts new file mode 100644 index 0000000..8a1283a --- /dev/null +++ b/packages/client-test/scripts/3-shop/addTwo.ts @@ -0,0 +1,48 @@ +import { Helper } from "../utils"; +import { Client, Context, ContextBuilder, ContractUtils, NormalSteps } from "acc-sdk-client-v2"; +import fs from "fs"; +import { Wallet } from "ethers"; + +async function main() { + const shopInfos = JSON.parse(fs.readFileSync("./data/shop_infos.json", "utf8")).map( + (m: { shopId: string; privateKey: string; name: string; currency: string }) => { + return { + shopId: m.shopId, + wallet: new Wallet(m.privateKey), + name: m.name, + currency: m.currency, + }; + } + ); + for (const shopInfo of shopInfos) { + const contextParams = ContextBuilder.buildContextParams(Helper.NETWORK, shopInfo.wallet.privateKey); + if (Helper.RELAY_ENDPOINT !== "") contextParams.relayEndpoint = Helper.RELAY_ENDPOINT; + if (Helper.WEB3_ENDPOINT !== "") contextParams.web3Provider = Helper.WEB3_ENDPOINT; + const context: Context = new Context(contextParams); + const client = new Client(context); + console.log("상점 데이타를 추가합니다."); + + for await (const step of client.shop.add(shopInfo.shopId, shopInfo.name, shopInfo.currency)) { + switch (step.key) { + case NormalSteps.PREPARED: + console.log("NormalSteps.PREPARED"); + break; + case NormalSteps.SENT: + console.log("NormalSteps.SENT"); + break; + case NormalSteps.DONE: + console.log("NormalSteps.DONE"); + break; + default: + throw new Error("Unexpected add shop step: " + JSON.stringify(step, null, 2)); + } + } + + await ContractUtils.delay(1000); + } +} + +main().catch((error) => { + console.error(error); + process.exitCode = 1; +}); diff --git a/packages/client-test/scripts/3-shop/get.ts b/packages/client-test/scripts/3-shop/get.ts index 37231de..f8e3a08 100644 --- a/packages/client-test/scripts/3-shop/get.ts +++ b/packages/client-test/scripts/3-shop/get.ts @@ -6,6 +6,9 @@ const beautify = require("beautify"); async function main() { const shopInfo = Helper.loadShopInfo(); + console.log(`shopId: ${shopInfo.shopId}`); + console.log(`wallet.address: ${shopInfo.wallet.address}`); + const contextParams = ContextBuilder.buildContextParams(Helper.NETWORK, shopInfo.wallet.privateKey); if (Helper.RELAY_ENDPOINT !== "") contextParams.relayEndpoint = Helper.RELAY_ENDPOINT; if (Helper.WEB3_ENDPOINT !== "") contextParams.web3Provider = Helper.WEB3_ENDPOINT; diff --git a/packages/client-test/scripts/3-shop/refund.ts b/packages/client-test/scripts/3-shop/refund.ts new file mode 100644 index 0000000..b16ba98 --- /dev/null +++ b/packages/client-test/scripts/3-shop/refund.ts @@ -0,0 +1,60 @@ +import { Helper } from "../utils"; +import { Amount, Client, Context, ContextBuilder, NormalSteps } from "acc-sdk-client-v2"; +import { BOACoin } from "../../src/Amount"; +import { BigNumber } from "@ethersproject/bignumber"; + +const beautify = require("beautify"); + +async function main() { + const shopInfo = Helper.loadShopInfo(); + console.log(`shopId: ${shopInfo.shopId}`); + console.log(`wallet.address: ${shopInfo.wallet.address}`); + + const contextParams = ContextBuilder.buildContextParams(Helper.NETWORK, shopInfo.wallet.privateKey); + if (Helper.RELAY_ENDPOINT !== "") contextParams.relayEndpoint = Helper.RELAY_ENDPOINT; + if (Helper.WEB3_ENDPOINT !== "") contextParams.web3Provider = Helper.WEB3_ENDPOINT; + const context: Context = new Context(contextParams); + const client = new Client(context); + + console.log("상점 정보를 요청합니다."); + const info = await client.shop.getShopInfo(shopInfo.shopId); + const refundable = await client.shop.getRefundableAmount(shopInfo.shopId); + + console.log("처리결과입니다."); + console.log(`shopId: ${info.shopId}`); + console.log(`name: ${info.name}`); + console.log(`currency: ${info.currency}`); + console.log(`account: ${info.account}`); + console.log(`delegator: ${info.delegator}`); + console.log(`providedAmount: ${new BOACoin(info.providedAmount).toDisplayString(true, 2)}`); + console.log(`usedAmount: ${new BOACoin(info.usedAmount).toDisplayString(true, 2)}`); + console.log(`refundedAmount: ${new BOACoin(info.refundedAmount).toDisplayString(true, 2)}`); + console.log(`refundableAmount: ${new BOACoin(refundable.refundableAmount).toDisplayString(true, 2)}`); + + if (refundable.refundableAmount.gt(BigNumber.from(0))) { + for await (const step of client.shop.refund(shopInfo.shopId, refundable.refundableAmount)) { + switch (step.key) { + case NormalSteps.PREPARED: + console.log(`NormalSteps.PREPARED`); + console.log(`step.shopId: ${step.shopId}`); + console.log(`step.signature: ${step.signature}`); + break; + case NormalSteps.SENT: + console.log(`NormalSteps.SENT`); + console.log(`step.txHash: ${step.txHash}`); + break; + case NormalSteps.DONE: + console.log(`NormalSteps.DONE`); + console.log(`step.refundAmount: ${step.refundAmount.toString()}`); + break; + default: + throw new Error("Unexpected open withdrawal step: " + JSON.stringify(step, null, 2)); + } + } + } +} + +main().catch((error) => { + console.error(error); + process.exitCode = 1; +});