From a4c9f2e833a1386051ccd5266346c4518341ee7e Mon Sep 17 00:00:00 2001 From: "Gomez Goiri, Aitor" <aitor.gomez@tecnalia.com> Date: Tue, 8 Mar 2022 09:48:08 +0100 Subject: [PATCH] Adding discard command to Sidenor CLI --- apps/sidenor-cli/index.js | 11 ++--- apps/sidenor-cli/lib.js | 52 +++++++++++++++++++++- apps/utils/package-lock.json | 14 +++--- apps/utils/package.json | 2 +- chaincode/controller/bid/bid_controller.go | 2 +- scripts/package-lock.json | 14 +++--- scripts/package.json | 2 +- 7 files changed, 74 insertions(+), 23 deletions(-) diff --git a/apps/sidenor-cli/index.js b/apps/sidenor-cli/index.js index ee4592d..88c53ed 100644 --- a/apps/sidenor-cli/index.js +++ b/apps/sidenor-cli/index.js @@ -8,7 +8,8 @@ const { sendToCone, sendToStock, acceptBid, - rejectBid + rejectBid, + discardStock } = require("./lib") const program = createCLIApp() @@ -63,14 +64,14 @@ program ) .action(loginAndCallAfterwards(rejectBid)) -/*program +program .command("discard-stock") - .description("Discard part of a slag stock") + .description("Discard part of a slag stock sending it to the landfill") .option("--asset-id [value]", "Identifier of the slag stock") .option( "--quantity [value]", - "Quantity of the bidder for the provided slag stock" + "Quantity of the slag stock to discard (i.e., to be sent to the landfill)" ) - .action(loginAndCallAfterwards(discardStock))*/ + .action(loginAndCallAfterwards(discardStock)) program.parse(process.argv) diff --git a/apps/sidenor-cli/lib.js b/apps/sidenor-cli/lib.js index 0840417..a3e730b 100644 --- a/apps/sidenor-cli/lib.js +++ b/apps/sidenor-cli/lib.js @@ -218,6 +218,55 @@ const bidResponse = const acceptBid = bidResponse("accept") const rejectBid = bidResponse("reject") +const discardStock = async (apiClient, { assetId: paramAssetId, quantity }) => { + const discadableAssets = await apiClient.richQuery({ + fields: { + status: STATUSES.STOCK + } + }) + + const assetId = paramAssetId || (await promptAssetSelection(discadableAssets)) + const assetToDiscard = discadableAssets.find(({ id }) => id === assetId) + + let chosenQuantity = quantity + if (!quantity) { + const { inputQuantity } = await inquirer.prompt([ + { + type: "number", + name: "inputQuantity", + message: `Choose an ammount of slag (max: ${assetToDiscard.quantity} ${assetToDiscard.units}):`, + default: Math.floor(assetToDiscard.quantity * 0.1) // Default: 10% + } + ]) + chosenQuantity = inputQuantity + } + + const newAssets = await apiClient.splitAsset(assetId, 2, { + archiveOld: true, + bidirectional: true, + base: { + type: assetToDiscard.type, + fields: assetToDiscard.fields + } + }) + + await apiClient.modifyAsset({ + id: newAssets[0], + quantity: assetToDiscard.quantity - chosenQuantity, + units: assetToDiscard.units + }) + + await apiClient.modifyAsset({ + id: newAssets[1], + quantity: chosenQuantity, + units: assetToDiscard.units + }) + + await apiClient.deleteAsset(newAssets[1]) + + console.log(`Discarded stock ${newAssets[1]} (new stock ${newAssets[0]})`) +} + // To be reused as a library in @hypercog/batch-sim module.exports = { createAsset, @@ -225,5 +274,6 @@ module.exports = { sendToCone, sendToStock, acceptBid, - rejectBid + rejectBid, + discardStock } diff --git a/apps/utils/package-lock.json b/apps/utils/package-lock.json index 93d34ec..eb7271b 100644 --- a/apps/utils/package-lock.json +++ b/apps/utils/package-lock.json @@ -9,7 +9,7 @@ "version": "0.0.1", "dependencies": { "@faker-js/faker": "^5.5.3", - "@traceblock/api-client": "^0.2.5", + "@traceblock/api-client": "^0.2.9", "commander": "^9.0.0", "dotenv": "^16.0.0", "inquirer": "^8.2.0" @@ -21,9 +21,9 @@ "integrity": "sha512-R11tGE6yIFwqpaIqcfkcg7AICXzFg14+5h5v0TfF/9+RMDL6jhzCy/pxHVOfbALGdtVYdt6JdR21tuxEgl34dw==" }, "node_modules/@traceblock/api-client": { - "version": "0.2.5", - "resolved": "https://artifact.tecnalia.com:443/artifactory/api/npm/traceblock-npm-release/@traceblock/api-client/-/api-client-0.2.5.tgz", - "integrity": "sha1-Sy3RTiEYWX+a/znrYDOkRuT9Z8E=", + "version": "0.2.9", + "resolved": "https://artifact.tecnalia.com:443/artifactory/api/npm/traceblock-npm-release/@traceblock/api-client/-/api-client-0.2.9.tgz", + "integrity": "sha1-AhqCJayB7TK8tJ6LzvGzJszp1E8=", "dependencies": { "cross-fetch": "^3.1.4", "jsonwebtoken": "^8.5.1" @@ -709,9 +709,9 @@ "integrity": "sha512-R11tGE6yIFwqpaIqcfkcg7AICXzFg14+5h5v0TfF/9+RMDL6jhzCy/pxHVOfbALGdtVYdt6JdR21tuxEgl34dw==" }, "@traceblock/api-client": { - "version": "0.2.5", - "resolved": "https://artifact.tecnalia.com:443/artifactory/api/npm/traceblock-npm-release/@traceblock/api-client/-/api-client-0.2.5.tgz", - "integrity": "sha1-Sy3RTiEYWX+a/znrYDOkRuT9Z8E=", + "version": "0.2.9", + "resolved": "https://artifact.tecnalia.com:443/artifactory/api/npm/traceblock-npm-release/@traceblock/api-client/-/api-client-0.2.9.tgz", + "integrity": "sha1-AhqCJayB7TK8tJ6LzvGzJszp1E8=", "requires": { "cross-fetch": "^3.1.4", "jsonwebtoken": "^8.5.1" diff --git a/apps/utils/package.json b/apps/utils/package.json index 247923d..ba52c6f 100644 --- a/apps/utils/package.json +++ b/apps/utils/package.json @@ -3,7 +3,7 @@ "version": "0.0.1", "main": "index.js", "dependencies": { - "@traceblock/api-client": "^0.2.5", + "@traceblock/api-client": "^0.2.9", "@faker-js/faker": "^5.5.3", "commander": "^9.0.0", "dotenv": "^16.0.0", diff --git a/chaincode/controller/bid/bid_controller.go b/chaincode/controller/bid/bid_controller.go index 77056a5..e1f1d3a 100644 --- a/chaincode/controller/bid/bid_controller.go +++ b/chaincode/controller/bid/bid_controller.go @@ -232,7 +232,7 @@ func (c BidDecisionController) _acceptBid(stub shared.LedgerBuildrStubInterface splitParams.SplitConfig.ArchiveOld = true splitParams.SplitConfig.Bidirectional = true splitParams.SplitConfig.ChildCount = 2 - splitParams.SplitConfig.BaseAsset.AssetType = "stocked" + splitParams.SplitConfig.BaseAsset.AssetType = biddableAsset.AssetType subAssets, err := split.SplitAsset(c.TraceblockBaseController, stub, biddableAsset, *splitParams) if err != nil { diff --git a/scripts/package-lock.json b/scripts/package-lock.json index ca172e9..af4535f 100644 --- a/scripts/package-lock.json +++ b/scripts/package-lock.json @@ -8,14 +8,14 @@ "name": "hypercog-config-scripts", "version": "0.0.1", "dependencies": { - "@traceblock/api-client": "^0.2.5", + "@traceblock/api-client": "^0.2.9", "dotenv": "^10.0.0" } }, "node_modules/@traceblock/api-client": { - "version": "0.2.5", - "resolved": "https://artifact.tecnalia.com:443/artifactory/api/npm/traceblock-npm-release/@traceblock/api-client/-/api-client-0.2.5.tgz", - "integrity": "sha1-Sy3RTiEYWX+a/znrYDOkRuT9Z8E=", + "version": "0.2.9", + "resolved": "https://artifact.tecnalia.com:443/artifactory/api/npm/traceblock-npm-release/@traceblock/api-client/-/api-client-0.2.9.tgz", + "integrity": "sha1-AhqCJayB7TK8tJ6LzvGzJszp1E8=", "dependencies": { "cross-fetch": "^3.1.4", "jsonwebtoken": "^8.5.1" @@ -168,9 +168,9 @@ }, "dependencies": { "@traceblock/api-client": { - "version": "0.2.5", - "resolved": "https://artifact.tecnalia.com:443/artifactory/api/npm/traceblock-npm-release/@traceblock/api-client/-/api-client-0.2.5.tgz", - "integrity": "sha1-Sy3RTiEYWX+a/znrYDOkRuT9Z8E=", + "version": "0.2.9", + "resolved": "https://artifact.tecnalia.com:443/artifactory/api/npm/traceblock-npm-release/@traceblock/api-client/-/api-client-0.2.9.tgz", + "integrity": "sha1-AhqCJayB7TK8tJ6LzvGzJszp1E8=", "requires": { "cross-fetch": "^3.1.4", "jsonwebtoken": "^8.5.1" diff --git a/scripts/package.json b/scripts/package.json index 970c6ed..a464e86 100644 --- a/scripts/package.json +++ b/scripts/package.json @@ -3,7 +3,7 @@ "version": "0.0.1", "private": true, "dependencies": { - "@traceblock/api-client": "^0.2.5", + "@traceblock/api-client": "^0.2.9", "dotenv": "^10.0.0" }, "scripts": { -- GitLab