From e0ab9e56c8ee371be1d6426a77d989dd8a01a72e Mon Sep 17 00:00:00 2001 From: Justin Atwell Date: Thu, 16 Sep 2021 11:36:27 -0500 Subject: [PATCH 01/18] implementCustomFees - Change to fungible Signed-off-by: Justin Atwell --- src/components/FungibleComposer.vue | 9 +++------ src/components/TokenCreateDialog.vue | 1 - 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/src/components/FungibleComposer.vue b/src/components/FungibleComposer.vue index ca8a8a9..b09eec0 100644 --- a/src/components/FungibleComposer.vue +++ b/src/components/FungibleComposer.vue @@ -5,10 +5,7 @@ Name - + Fractional @@ -347,7 +344,7 @@ diff --git a/src/components/TokenCard.vue b/src/components/TokenCard.vue index 89ff9ae..7f27e38 100644 --- a/src/components/TokenCard.vue +++ b/src/components/TokenCard.vue @@ -37,7 +37,7 @@ Serial Number - {{ serial }} + {{ token.serialNumber }} diff --git a/src/service/tokenService.js b/src/service/tokenService.js index c46fd36..eba797e 100644 --- a/src/service/tokenService.js +++ b/src/service/tokenService.js @@ -181,7 +181,6 @@ export async function tokenCreate(token) { } return tokenResponse; } catch (err) { - console.log("error!!!!"); notifyError(err.message); return {}; } diff --git a/src/store/store.js b/src/store/store.js index 666250b..f43692c 100644 --- a/src/store/store.js +++ b/src/store/store.js @@ -3,7 +3,7 @@ import Vuex from "vuex"; import createPersistedState from "vuex-persistedstate"; import { accountCreate } from "../service/accountCreate"; import { accountGetInfo } from "../service/accountGetInfo"; -import { tokenGetInfo, nftGetInfo } from "../service/tokenService"; +import { tokenGetInfo } from "../service/tokenService"; import { notifySuccess } from "../utils"; import { EventBus } from "../eventBus"; Vue.use(Vuex); From 263a40a70a6c6c2f9b015080df1490582ca50de9 Mon Sep 17 00:00:00 2001 From: Justin Atwell Date: Tue, 5 Oct 2021 14:25:29 -0500 Subject: [PATCH 12/18] nativeNft - remove redundant logic Signed-off-by: Justin Atwell --- src/components/TokenCard.vue | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/components/TokenCard.vue b/src/components/TokenCard.vue index 7f27e38..55bb148 100644 --- a/src/components/TokenCard.vue +++ b/src/components/TokenCard.vue @@ -45,7 +45,7 @@ mdi-account-multiple Date: Mon, 11 Oct 2021 11:44:25 -0500 Subject: [PATCH 13/18] nativeNft - add different fee types Signed-off-by: Justin Atwell --- src/components/NonFungibleComposer.vue | 72 ++++++++++++++++++++++---- src/service/tokenService.js | 29 +++++++++-- 2 files changed, 86 insertions(+), 15 deletions(-) diff --git a/src/components/NonFungibleComposer.vue b/src/components/NonFungibleComposer.vue index 9782817..d611b10 100644 --- a/src/components/NonFungibleComposer.vue +++ b/src/components/NonFungibleComposer.vue @@ -211,22 +211,57 @@ - - + + + + + + - - + + + + + + + - + @@ -371,14 +406,25 @@ export default { (n) => !!n || "Please enter an integer", (n) => !isNaN(parseInt(n)) || "Please enter a number", ], + numeratorRules: [ + (n) => !!n || "Please enter an integer", + (n) => !isNaN(parseInt(n)) || "Please enter a valid number less than the denominator", + ], + denominatorRules: [ + (n) => !!n || "Please enter an integer", + (n) => !isNaN(parseInt(n)) || "Please enter a valid number less than the denominator" + ], supplyRules: [ (n) => !!n || "Please enter an integer", (n) => !isNaN(parseInt(n)) || "Please enter a number", ], - customFeeOptions: ["Custom", "Fixed", "Royalty"], + customFeeOptions: ["Fractional", "Fixed", "Royalty"], selectedFeeOption: "", name: "", customFees: 0, + customFeeSelected: "fixed", + customFeeNumerator: 0, + customFeeDenominator: 0, maxSupply: 0, symbol: "", defaultFreezeStatus: false, @@ -421,6 +467,9 @@ export default { this.metadata = ""; this.photoSize = 0; this.customFees = 0; + this.customFeeNumerator = 0; + this.customFeeDenominator = 0; + this.customFeesSelected = ""; this.maxSupply = 0; this.tokenTemplates = loadTokenTemplates(); this.tokenTemplatesForSelection = []; @@ -497,6 +546,9 @@ export default { (this.model.Storage === "HEDERA" ? "hedera://" : "ipfs://") + fileId, customFees: this.customFees, + customFeeNumerator: this.customFeeNumerator, + customFeeDenominator: this.customFeeDenominator, + customFeeSelected: this.customFeeSelected, maxSupply: this.maxSupply, decimals: 0, initialSupply: 0, diff --git a/src/service/tokenService.js b/src/service/tokenService.js index eba797e..d806859 100644 --- a/src/service/tokenService.js +++ b/src/service/tokenService.js @@ -22,7 +22,10 @@ const { TokenWipeTransaction, Hbar, CustomFixedFee, - Status + Status, + CustomFractionalFee, + CustomRoyaltyFee, + CustomFee } = require("@hashgraph/sdk"); function issuerClient() { @@ -65,11 +68,27 @@ export async function tokenCreate(token) { tx.setAutoRenewAccountId(token.autoRenewAccount); tx.setAutoRenewPeriod(autoRenewPeriod); - if(token.customFees) { - let fee = new CustomFixedFee(); - fee.setAmount(Number(token.customFees)); + if(token.customFeeSelected !== " ") { + let fee = new CustomFee(); + if(token.customFeeSelected === "fixed"){ + fee = new CustomFixedFee(); + fee.setAmount(Number(token.customFees)); + tx.setCustomFees([fee]); + } + else if(token.customFeeSelected === "fractional"){ + fee = new CustomFractionalFee(); + fee.setNumerator(parseInt(token.customFeeNumerator)) + fee.setDenominator(parseInt(token.customFeeDenominator)) + } + else if(token.customFeeSelected === "royalty"){ + fee = new CustomRoyaltyFee(); + fee.setNumerator(parseInt(token.customFeeNumerator)) + fee.setDenominator(parseInt(token.customFeeDenominator)) + } + else { + notifyError("Custom Fee Error"); + } fee.setFeeCollectorAccountId(issuerAccount); - tx.setCustomFees([fee]); } if (token.adminKey) { From 30909db014cef0fccee28205c58b8f4f24fb000c Mon Sep 17 00:00:00 2001 From: Justin Atwell Date: Tue, 16 Nov 2021 10:06:26 -0600 Subject: [PATCH 14/18] fix kyc Signed-off-by: Justin Atwell --- src/service/tokenService.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/service/tokenService.js b/src/service/tokenService.js index d806859..41082c6 100644 --- a/src/service/tokenService.js +++ b/src/service/tokenService.js @@ -86,7 +86,7 @@ export async function tokenCreate(token) { fee.setDenominator(parseInt(token.customFeeDenominator)) } else { - notifyError("Custom Fee Error"); + //notifyError("Custom Fee Error"); } fee.setFeeCollectorAccountId(issuerAccount); } @@ -182,7 +182,8 @@ export async function tokenCreate(token) { if (token.kycKey) { const instruction = { tokenId: token.tokenId, - accountId: marketAccountId + accountId: marketAccountId, + kycKey: token.kycKey }; tokenGrantKYC(instruction); } @@ -315,7 +316,7 @@ export async function tokenBurn(instruction) { export async function tokenMint(instruction) { instruction.successMessage = - "Minted " + instruction.amount + " for token " + instruction.tokenId; + "Minted token " + instruction.tokenId; const supplyKey = PrivateKey.fromString(instruction.supplyKey); const tx = new TokenMintTransaction(); @@ -425,8 +426,7 @@ export async function tokenUnFreeze(instruction) { } export async function tokenGrantKYC(instruction) { - const token = state.getters.getTokens[instruction.tokenId]; - const kycKey = PrivateKey.fromString(token.kycKey); + const kycKey = PrivateKey.fromString(instruction.kycKey); const tx = await new TokenGrantKycTransaction(); instruction.successMessage = "Account " + instruction.accountId + " KYC Granted"; From 528ea6644a2c8634ae46188d1928234abec5b6a6 Mon Sep 17 00:00:00 2001 From: Justin Atwell Date: Wed, 17 Nov 2021 19:23:33 -0600 Subject: [PATCH 15/18] remove fractional because it's not offered for nfts Signed-off-by: Justin Atwell --- src/components/NonFungibleComposer.vue | 9 ++------- src/service/tokenService.js | 3 +++ src/utils.js | 4 ++++ 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/components/NonFungibleComposer.vue b/src/components/NonFungibleComposer.vue index d611b10..1ece89d 100644 --- a/src/components/NonFungibleComposer.vue +++ b/src/components/NonFungibleComposer.vue @@ -222,11 +222,6 @@ label="Fixed" value="fixed" > - Date: Wed, 17 Nov 2021 19:33:56 -0600 Subject: [PATCH 16/18] add customFees to fungible tokens Signed-off-by: Justin Atwell --- src/components/FungibleComposer.vue | 111 +++++++++++++++++++++++-- src/components/NonFungibleComposer.vue | 2 +- src/components/TokenDetailsDialog.vue | 29 ++++++- 3 files changed, 135 insertions(+), 7 deletions(-) diff --git a/src/components/FungibleComposer.vue b/src/components/FungibleComposer.vue index b1b77d4..5e57e09 100644 --- a/src/components/FungibleComposer.vue +++ b/src/components/FungibleComposer.vue @@ -13,6 +13,10 @@ Supply + + Custom Fees + + Mutable @@ -181,6 +185,84 @@ + + + + + + + Custom fees are fees that are distributed to the specified + accounts each time the token is transferred + programmatically. + + + + + + + + + + + + + + + + + + + + + + + + + + Cancel + + + + + Continue + + + + + @@ -354,11 +436,12 @@ export default { STEP_NAME: 1, STEP_FRACTIONAL: 2, STEP_SUPPLY: 3, - STEP_MUTABLE: 4, - STEP_KYC: 5, - STEP_WIPEABLE: 6, - STEP_FREEZABLE: 7, - STEP_CREATE: 8, + STEP_CUSTOMFEES: 4, + STEP_MUTABLE: 5, + STEP_KYC: 6, + STEP_WIPEABLE: 7, + STEP_FREEZABLE: 8, + STEP_CREATE: 9, nameValid: false, decimalsValid: false, supplyValid: false, @@ -376,11 +459,21 @@ export default { v => !!v || "Input required", v => v.length <= 100 || "Max length 100" ], + customFeeRules: [ + (n) => !!n || "Please enter an integer", + (n) => !isNaN(parseInt(n)) || "Please enter a number", + ], symbolRules: [ v => !!v || "Input required", v => v.length <= 100 || "Max length 100" ], + customFeeOptions: ["Fixed", "Fractional", "Royalty"], + selectedFeeOption: "", name: "", + customFees: 0, + customFeeSelected: "fixed", + customFeeNumerator: 0, + customFeeDenominator: 0, symbol: "", decimals: "", initialSupply: 0, @@ -413,6 +506,10 @@ export default { this.decimals = ""; this.initialSupply = "0"; this.defaultFreezeStatus = false; + this.customFees = 0; + this.customFeeNumerator = 0; + this.customFeeDenominator = 0; + this.customFeesSelected = ""; }, nextStep() { this.step = this.step + 1; @@ -461,6 +558,10 @@ export default { symbol: this.symbol, decimals: this.decimals === "" ? 0 : this.decimals, initialSupply: this.initialSupply, + customFees: this.customFees, + customFeeNumerator: this.customFeeNumerator, + customFeeDenominator: this.customFeeDenominator, + customFeeSelected: this.customFeeSelected, adminKey: this.mutable === "yes" ? privateKey.toString() : undefined, kycKey: this.kyc === "yes" ? privateKey.toString() : undefined, freezeKey: this.freeze === "yes" ? privateKey.toString() : undefined, diff --git a/src/components/NonFungibleComposer.vue b/src/components/NonFungibleComposer.vue index 1ece89d..636e0ee 100644 --- a/src/components/NonFungibleComposer.vue +++ b/src/components/NonFungibleComposer.vue @@ -413,7 +413,7 @@ export default { (n) => !!n || "Please enter an integer", (n) => !isNaN(parseInt(n)) || "Please enter a number", ], - customFeeOptions: ["Fractional", "Fixed", "Royalty"], + customFeeOptions: ["Fixed", "Royalty"], selectedFeeOption: "", name: "", customFees: 0, diff --git a/src/components/TokenDetailsDialog.vue b/src/components/TokenDetailsDialog.vue index 72e09e8..c8681df 100644 --- a/src/components/TokenDetailsDialog.vue +++ b/src/components/TokenDetailsDialog.vue @@ -79,6 +79,18 @@ + + + + +