diff options
author | Jack <87339414+algojack@users.noreply.github.com> | 2022-01-10 11:29:48 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-01-10 11:29:48 -0500 |
commit | 23466151e424d71c81bb52f1286db7512709ab0c (patch) | |
tree | 69be7cde1c26cd660b95f5cc3c870655ae11733e | |
parent | f9497d9e754c059c735081a01c5ecabed580ae12 (diff) |
Remaking a PR for CI (#3398)
* Allow setting manager, reserve, freeze, and clawback at goal asset create
* Add e2e tests
* Add more tests for goal asset create flags
Co-authored-by: Fionna <fionnacst@gmail.com>
-rw-r--r-- | cmd/goal/asset.go | 71 | ||||
-rwxr-xr-x | test/scripts/e2e_subs/asset-misc.sh | 102 |
2 files changed, 172 insertions, 1 deletions
diff --git a/cmd/goal/asset.go b/cmd/goal/asset.go index ad2891e82..b940a54e1 100644 --- a/cmd/goal/asset.go +++ b/cmd/goal/asset.go @@ -37,8 +37,13 @@ var ( assetURL string assetName string assetManager string + assetReserve string assetClawback string assetFreezer string + assetNoManager bool + assetNoReserve bool + assetNoFreezer bool + assetNoClawback bool assetNewManager string assetNewReserve string @@ -64,6 +69,14 @@ func init() { createAssetCmd.Flags().StringVar(&assetName, "name", "", "Name for the entire asset") createAssetCmd.Flags().StringVar(&assetURL, "asseturl", "", "URL where user can access more information about the asset (max 32 bytes)") createAssetCmd.Flags().StringVar(&assetMetadataHashBase64, "assetmetadatab64", "", "base-64 encoded 32-byte commitment to asset metadata") + createAssetCmd.Flags().StringVar(&assetManager, "manager", "", "Manager account that can issue transactions to re-configure or destroy the asset") + createAssetCmd.Flags().StringVar(&assetReserve, "reserve", "", "Reserve account that non-minted assets will reside in") + createAssetCmd.Flags().StringVar(&assetFreezer, "freezer", "", "Freezer account that can freeze or unfreeze the asset holdings for a specific account") + createAssetCmd.Flags().StringVar(&assetClawback, "clawback", "", "Clawback account that is allowed to transfer assets from and to any asset holder") + createAssetCmd.Flags().BoolVar(&assetNoManager, "no-manager", false, "Explicitly declare the lack of manager") + createAssetCmd.Flags().BoolVar(&assetNoReserve, "no-reserve", false, "Explicitly declare the lack of reserve") + createAssetCmd.Flags().BoolVar(&assetNoFreezer, "no-freezer", false, "Explicitly declare the lack of freezer") + createAssetCmd.Flags().BoolVar(&assetNoClawback, "no-clawback", false, "Explicitly declare the lack of clawback") createAssetCmd.MarkFlagRequired("total") createAssetCmd.MarkFlagRequired("creator") @@ -185,10 +198,66 @@ var createAssetCmd = &cobra.Command{ Run: func(cmd *cobra.Command, _ []string) { checkTxValidityPeriodCmdFlags(cmd) + if assetManager != "" && assetNoManager { + reportErrorf("The [--manager] flag and the [--no-manager] flag are mutually exclusive, do not provide both flags.") + } + + if assetReserve != "" && assetNoReserve { + reportErrorf("The [--reserve] flag and the [--no-reserve] flag are mutually exclusive, do not provide both flags.") + } + + if assetFreezer != "" && assetNoFreezer { + reportErrorf("The [--freezer] flag and the [--no-freezer] flag are mutually exclusive, do not provide both flags.") + } + + if assetClawback != "" && assetNoClawback { + reportErrorf("The [--clawback] flag and the [--no-clawback] flag are mutually exclusive, do not provide both flags.") + } + dataDir := ensureSingleDataDir() client := ensureFullClient(dataDir) accountList := makeAccountsList(dataDir) creator := accountList.getAddressByName(assetCreator) + manager := creator + reserve := creator + freezer := creator + clawback := creator + + if cmd.Flags().Changed("manager") { + assetManager = accountList.getAddressByName(assetManager) + manager = assetManager + } + + if assetNoManager { + manager = "" + } + + if cmd.Flags().Changed("reserve") { + assetReserve = accountList.getAddressByName(assetReserve) + reserve = assetReserve + } + + if assetNoReserve { + reserve = "" + } + + if cmd.Flags().Changed("freezer") { + assetFreezer = accountList.getAddressByName(assetFreezer) + freezer = assetFreezer + } + + if assetNoFreezer { + freezer = "" + } + + if cmd.Flags().Changed("clawback") { + assetClawback = accountList.getAddressByName(assetClawback) + clawback = assetClawback + } + + if assetNoClawback { + clawback = "" + } var err error var assetMetadataHash []byte @@ -199,7 +268,7 @@ var createAssetCmd = &cobra.Command{ } } - tx, err := client.MakeUnsignedAssetCreateTx(assetTotal, assetFrozen, creator, creator, creator, creator, assetUnitName, assetName, assetURL, assetMetadataHash, assetDecimals) + tx, err := client.MakeUnsignedAssetCreateTx(assetTotal, assetFrozen, manager, reserve, freezer, clawback, assetUnitName, assetName, assetURL, assetMetadataHash, assetDecimals) if err != nil { reportErrorf("Cannot construct transaction: %s", err) } diff --git a/test/scripts/e2e_subs/asset-misc.sh b/test/scripts/e2e_subs/asset-misc.sh index 849b86484..73c018eb8 100755 --- a/test/scripts/e2e_subs/asset-misc.sh +++ b/test/scripts/e2e_subs/asset-misc.sh @@ -15,6 +15,7 @@ ACCOUNT=$(${gcmd} account list|awk '{ print $3 }') ACCOUNTB=$(${gcmd} account new|awk '{ print $6 }') ACCOUNTC=$(${gcmd} account new|awk '{ print $6 }') ACCOUNTD=$(${gcmd} account new|awk '{ print $6 }') +ACCOUNTE=$(${gcmd} account new|awk '{ print $6 }') ASSET_NAME='Birlot : décollage vs. ࠶🦪' @@ -47,4 +48,105 @@ else exit 1 fi +# Test Scenario - check addresses are set correctly +# case 1: asset created without specifying manager, reserve, freezer, or clawback +MANAGER_ADDRESS=$(${gcmd} asset info --assetid ${ASSET_ID} |grep 'Manager address'|awk '{ print $3 }') +RESERVE_ADDRESS=$(${gcmd} asset info --assetid ${ASSET_ID} |grep 'Reserve address'|awk '{ print $3 }') +FREEZE_ADDRESS=$(${gcmd} asset info --assetid ${ASSET_ID} |grep 'Freeze address'|awk '{ print $3 }') +CLAWBACK_ADDRESS=$(${gcmd} asset info --assetid ${ASSET_ID} |grep 'Clawback address'|awk '{ print $3 }') + +# check manager, reserve, freeze, and clawback are by default the creator +if [ "$MANAGER_ADDRESS" = "$ACCOUNT" ] \ + && [ "$RESERVE_ADDRESS" = "$ACCOUNT" ] \ + && [ "$FREEZE_ADDRESS" = "$ACCOUNT" ] \ + && [ "$CLAWBACK_ADDRESS" = "$ACCOUNT" ]; then + echo ok +else + date '+asset-misc asset manager, reserve, freezer, and clawback should be creator error %Y%m%d_%H%M%S' + exit 1 +fi + +# case 2: asset created with no manager, no reserve, no freezer, and no clawback +${gcmd} asset create --creator "${ACCOUNT}" --no-manager --no-reserve --no-freezer --no-clawback --name "${ASSET_NAME}" --unitname iamisc --total 1000000000000 --asseturl "${ASSET_URL}" + +IMMUTABLE_ASSET_ID=$(${gcmd} asset info --creator $ACCOUNT --unitname iamisc|grep 'Asset ID'|awk '{ print $3 }') + +IMMUTABLE_MANAGER_ADDRESS=$(${gcmd} asset info --assetid ${IMMUTABLE_ASSET_ID} |grep 'Manager address'|awk '{ print $3 }') +IMMUTABLE_RESERVE_ADDRESS=$(${gcmd} asset info --assetid ${IMMUTABLE_ASSET_ID} |grep 'Reserve address'|awk -F "[()]" '{ print $2 }') +IMMUTABLE_FREEZE_ADDRESS=$(${gcmd} asset info --assetid ${IMMUTABLE_ASSET_ID} |grep 'Freeze address'|awk '{ print $3 }') +IMMUTABLE_CLAWBACK_ADDRESS=$(${gcmd} asset info --assetid ${IMMUTABLE_ASSET_ID} |grep 'Clawback address'|awk '{ print $3 }') + +# goal asset info returns the creator's address as the reserve address when reserve address is empty +# check goal/asset.go +if [ "$IMMUTABLE_MANAGER_ADDRESS" = "" ] \ + && [ "$IMMUTABLE_RESERVE_ADDRESS" = "Empty. Defaulting to creator" ] \ + && [ "$IMMUTABLE_FREEZE_ADDRESS" = "" ] \ + && [ "$IMMUTABLE_CLAWBACK_ADDRESS" = "" ]; then + echo ok +else + date '+asset-misc immutable asset manager/reserve/freezer/clawback addresses error %Y%m%d_%H%M%S' + exit 1 +fi + +# case 3: asset created with manager, reserve, freezer, and clawback different from the creator +${gcmd} asset create --creator "${ACCOUNT}" --manager "${ACCOUNTB}" --reserve "${ACCOUNTC}" --freezer "${ACCOUNTD}" --clawback "${ACCOUNTE}" --name "${ASSET_NAME}" --unitname dma --total 1000000000000 --asseturl "${ASSET_URL}" + +DIFF_MANAGER_ASSET_ID=$(${gcmd} asset info --creator $ACCOUNT --unitname dma|grep 'Asset ID'|awk '{ print $3 }') + +DMA_MANAGER_ADDRESS=$(${gcmd} asset info --assetid ${DIFF_MANAGER_ASSET_ID} |grep 'Manager address'|awk '{ print $3 }') +DMA_RESERVE_ADDRESS=$(${gcmd} asset info --assetid ${DIFF_MANAGER_ASSET_ID} |grep 'Reserve address'|awk '{ print $3 }') +DMA_FREEZE_ADDRESS=$(${gcmd} asset info --assetid ${DIFF_MANAGER_ASSET_ID} |grep 'Freeze address'|awk '{ print $3 }') +DMA_CLAWBACK_ADDRESS=$(${gcmd} asset info --assetid ${DIFF_MANAGER_ASSET_ID} |grep 'Clawback address'|awk '{ print $3 }') + +if [ "$DMA_MANAGER_ADDRESS" = "$ACCOUNTB" ] \ + && [ "$DMA_RESERVE_ADDRESS" = "$ACCOUNTC" ] \ + && [ "$DMA_FREEZE_ADDRESS" = "$ACCOUNTD" ] \ + && [ "$DMA_CLAWBACK_ADDRESS" = "$ACCOUNTE" ]; then + echo ok +else + date '+asset-misc asset addresses with diff manager/reserve/freeze/clawback error %Y%m%d_%H%M%S' + exit 1 +fi + +# Test Scenario - check if asset is created successfully when passed in different combination of flags for addresses +# case 1: create asset with both manager flag and no-manager flag +if ${gcmd} asset create --creator "${ACCOUNT}" --no-manager --manager "${ACCOUNTB}" --name "${ASSET_NAME}" --unitname errmisc --total 1000000000000 --asseturl "${ASSET_URL}"; then + date '+asset-misc asset with --manager and --no-manager flags created successfully error %Y%m%d_%H%M%S' + exit 1 +else + echo "Expected. Cannot create asset with both manager flag and no-manager flag" +fi + +# case 2: create asset with both reserve flag and no-reserve flag +if ${gcmd} asset create --creator "${ACCOUNT}" --no-reserve --reserve "${ACCOUNTC}" --name "${ASSET_NAME}" --unitname errmisc --total 1000000000000 --asseturl "${ASSET_URL}"; then + date '+asset-misc asset with --reserve and --no-reserve flags created successfully error %Y%m%d_%H%M%S' + exit 1 +else + echo "Expected. Cannot create asset with both reserve flag and no-reserve flag" +fi + +# case 3: create asset with both freezer flag and no-freezer flag +if ${gcmd} asset create --creator "${ACCOUNT}" --no-freezer --freezer "${ACCOUNTD}" --name "${ASSET_NAME}" --unitname errmisc --total 1000000000000 --asseturl "${ASSET_URL}"; then + date '+asset-misc asset with --freezer and --no-freezer flags created successfully error %Y%m%d_%H%M%S' + exit 1 +else + echo "Expected. Cannot create asset with both freezer flag and no-freezer flag" +fi + +# case 4: create asset with both clawback flag and no-clawback flag +if ${gcmd} asset create --creator "${ACCOUNT}" --no-clawback --clawback "${ACCOUNTE}" --name "${ASSET_NAME}" --unitname errmisc --total 1000000000000 --asseturl "${ASSET_URL}"; then + date '+asset-misc asset with --clawback and --no-clawback flags created successfully error %Y%m%d_%H%M%S' + exit 1 +else + echo "Expected. Cannot create asset with both clawback flag and no-clawback flag" +fi + +# case 5: create asset with reserve flag, no-freezer flag and no-clawback flag +if ${gcmd} asset create --creator "${ACCOUNT}" --no-freezer --no-clawback --reserve "${ACCOUNTE}" --name "${ASSET_NAME}" --unitname errmisc --total 1000000000000 --asseturl "${ASSET_URL}"; then + echo "ok" +else + date '+asset-misc asset with independent flags created unsuccessfully error %Y%m%d_%H%M%S' + exit 1 +fi + date '+asset-misc finish %Y%m%d_%H%M%S' |