Skip to content

Commit

Permalink
Remaking a PR for CI (#3398)
Browse files Browse the repository at this point in the history
* 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 <[email protected]>
  • Loading branch information
algojack and fionnachan authored Jan 10, 2022
1 parent f9497d9 commit 2346615
Show file tree
Hide file tree
Showing 2 changed files with 172 additions and 1 deletion.
71 changes: 70 additions & 1 deletion cmd/goal/asset.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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")

Expand Down Expand Up @@ -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
Expand All @@ -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)
}
Expand Down
102 changes: 102 additions & 0 deletions test/scripts/e2e_subs/asset-misc.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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. ࠶🦪'

Expand Down Expand Up @@ -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'

0 comments on commit 2346615

Please sign in to comment.