diff --git a/apps/sidenor-cli/index.js b/apps/sidenor-cli/index.js index ee4592d80aaf851fdc90465eca75c846d7faf761..88c53edf90f1c70ac7f49948b0c1ee65d2d96edc 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 08404177fc643daea019bc0a25c0ac1e2699247c..a3e730baea4ddcc4bccc716f48ecf958f6cf7ad2 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 93d34ec0af8f31b133665c2a4fcdbafbc219a0a4..eb7271bc2d12d38b55050dd9cc98085edecc7e9c 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 247923dfe3cdac8378d2571649f0ee4a367166d3..ba52c6fed81c54017b5b027fe41e087d7763edea 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 77056a52dc2e0cabf066a6b8ae78b165ab1f4a73..e1f1d3ae20ae3127d6b56483dda6be166300fbd9 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 ca172e992f1ddbb6f79cab876be0ddf2299f50a7..af4535f7347730b8ef8bea5a4b9cdf2ffcf64108 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 970c6ed13d91699484d27eead05bf22e3820257e..a464e86d2c1cdd7b84d43eccdb41d9c33b4e6646 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": {