From 4342df99f7085f5d3ba57a1f0047a517cac75f85 Mon Sep 17 00:00:00 2001 From: ducphamle2 Date: Sat, 6 Jul 2024 11:26:36 -0700 Subject: [PATCH] feat: disable force transfer & add cw bindings tests --- orai/app/app.go | 2 +- orai/scripts/e2e-upgrade.sh | 1 + .../local-node-gasless-tokenfactory.sh | 3 +- .../test-tokenfactory-bindings.sh | 39 ++++++++++++++++++ orai/scripts/wasm_file/tokenfactory.wasm | Bin 166623 -> 167054 bytes 5 files changed, 43 insertions(+), 2 deletions(-) create mode 100755 orai/scripts/tests-0.42.1/test-tokenfactory-bindings.sh diff --git a/orai/app/app.go b/orai/app/app.go index b62b27ee..33ee3a58 100755 --- a/orai/app/app.go +++ b/orai/app/app.go @@ -175,7 +175,7 @@ var ( EnableSpecificProposals = "" EnabledCapabilities = []string{ tokenfactorytypes.EnableBurnFrom, - tokenfactorytypes.EnableForceTransfer, + // tokenfactorytypes.EnableForceTransfer, tokenfactorytypes.EnableSetMetadata, } ) diff --git a/orai/scripts/e2e-upgrade.sh b/orai/scripts/e2e-upgrade.sh index f9ba5027..79dd8918 100755 --- a/orai/scripts/e2e-upgrade.sh +++ b/orai/scripts/e2e-upgrade.sh @@ -127,5 +127,6 @@ sh $PWD/scripts/test-erc20-deploy.sh # test gasless NODE_HOME=$VALIDATOR_HOME USER=validator1 sh $PWD/scripts/tests-0.42.1/test-gasless.sh NODE_HOME=$VALIDATOR_HOME USER=validator1 sh $PWD/scripts/tests-0.42.1/test-tokenfactory.sh +NODE_HOME=$VALIDATOR_HOME USER=validator1 sh $PWD/scripts/tests-0.42.1/test-tokenfactory-bindings.sh echo "Tests Passed!!" \ No newline at end of file diff --git a/orai/scripts/tests-0.42.1/local-node-gasless-tokenfactory.sh b/orai/scripts/tests-0.42.1/local-node-gasless-tokenfactory.sh index b9295763..a9573cb0 100755 --- a/orai/scripts/tests-0.42.1/local-node-gasless-tokenfactory.sh +++ b/orai/scripts/tests-0.42.1/local-node-gasless-tokenfactory.sh @@ -39,4 +39,5 @@ screen -S test-gasless -d -m oraid start --json-rpc.address="0.0.0.0:8545" --jso sleep 2 sh $PWD/scripts/tests-0.42.1/test-gasless.sh -sh $PWD/scripts/tests-0.42.1/test-tokenfactory.sh \ No newline at end of file +sh $PWD/scripts/tests-0.42.1/test-tokenfactory.sh +sh $PWD/scripts/tests-0.42.1/test-tokenfactory-bindings.sh \ No newline at end of file diff --git a/orai/scripts/tests-0.42.1/test-tokenfactory-bindings.sh b/orai/scripts/tests-0.42.1/test-tokenfactory-bindings.sh new file mode 100755 index 00000000..fed94390 --- /dev/null +++ b/orai/scripts/tests-0.42.1/test-tokenfactory-bindings.sh @@ -0,0 +1,39 @@ +#!/bin/bash + +set -eu + +CHAIN_ID=${CHAIN_ID:-testing} +USER=${USER:-tupt} +NODE_HOME=${NODE_HOME:-"$PWD/.oraid"} +WASM_PATH=${WASM_PATH:-"$PWD/scripts/wasm_file/tokenfactory.wasm"} +ARGS="--from $USER --chain-id testing -y --keyring-backend test --fees 200orai --gas auto --gas-adjustment 1.5 -b block --home $NODE_HOME" +user_address=$(oraid keys show $USER --keyring-backend test --home $NODE_HOME -a) + +# deploy cw-bindings contract +store_ret=$(oraid tx wasm store $WASM_PATH $ARGS --output json) +code_id=$(echo $store_ret | jq -r '.logs[0].events[1].attributes[] | select(.key | contains("code_id")).value') +oraid tx wasm instantiate $code_id '{}' --label 'tokenfactory cw bindings testing' --admin $user_address $ARGS +contract_address=$(oraid query wasm list-contract-by-code $code_id --output json | jq -r '.contracts[0]') +echo $contract_address + +subdenom="usdc" +CREATE_DENOM_MSG='{"create_denom":{"subdenom":"'"$subdenom"'"}}' +QUERY_DENOM_MSG='{"get_denom":{"creator_address":"'"$user_address"'","subdenom":"'"$subdenom"'"}}' + +echo "create denom msg: $CREATE_DENOM_MSG" +echo "query denom msg: $QUERY_DENOM_MSG" + +# send to the contract some funds to create denom +oraid tx send $user_address $contract_address 100000000orai $ARGS + +# create denom +oraid tx wasm execute $contract_address $CREATE_DENOM_MSG $ARGS --output json | jq '.gas_used | tonumber' + +# query created denom +created_denom=$(oraid query wasm contract-state smart $contract_address $QUERY_DENOM_MSG --output json | jq '.data.denom' | tr -d '"') + +if ! [[ $created_denom =~ "factory/$user_address/$subdenom" ]] ; then + echo "The created denom does not match with our expected denom"; exit 1 +fi + +echo "Tokenfactory cw binding tests passed!" \ No newline at end of file diff --git a/orai/scripts/wasm_file/tokenfactory.wasm b/orai/scripts/wasm_file/tokenfactory.wasm index f4b90fa1c93099cdcd987092c32612092be91330..b653d15b67021d5734514acc4c512a53d5c8275c 100644 GIT binary patch delta 14242 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 delta 14188 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