# Deploy, init and interact with cw20 using wasmd
#### Upload cw20 contract
`$ RES=$(wasmd tx wasm store artifacts/cw20_base.wasm --from wallet $TXFLAG -y --output json -b block)`
>gas estimate: 2344339
`$ CODE_ID=$(echo $RES | jq -r '.logs[0].events[-1].attributes[0].value')`
#### Setting wallet address as owner
`$ OWNER="wasm120zfx98pk3fd469hps4rgf0que4lgraz02035c"`
#### Set init parameters
`$ INIT=$( jq -n --arg address $OWNER '{ "name": "BTOK", "symbol": "BTOK", "decimals": 6, "initial_balances": [ { "address": $address, "amount": "1000000" } ], "mint": { "minter": $address, "cap": "99900000000" } }' | tee /dev/tty )`
>{
"name": "BTOK",
"symbol": "BTOK",
"decimals": 6,
"initial_balances": [
{
"address": "wasm120zfx98pk3fd469hps4rgf0que4lgraz02035c",
"amount": "1000000"
}
],
"mint": {
"minter": "wasm120zfx98pk3fd469hps4rgf0que4lgraz02035c",
"cap": "99900000000"
}
}
#### Initialize smart contract
`$ wasmd tx wasm instantiate $CODE_ID "$INIT" --from wallet --label "CW20" --no-admin $TXFLAG -y`
> gas estimate: 208817
logs: []
raw_log: '[]'
txhash: 97599DBF9E4625090F48329E0DAD1B6152F1B315022AB767A27382144297844E
#### Fetch contract address
`$ CONTRACT=$(wasmd query wasm list-contract-by-code $CODE_ID $NODE --output json | jq -r '.contracts[-1]')`
#### Check the contract state
`$ wasmd query wasm contract $CONTRACT $NODE`
>address: wasm17r53vvjedjycurxr3l4qfuchwxgdk0qlz2d0gvzvffj76weejmeqkj38ld
contract_info:
code_id: "1293"
creator: wasm120zfx98pk3fd469hps4rgf0que4lgraz02035c
label: CW20
### Examples of interaction
`$ wasmd keys add alice`
>\- name: alice
type: local
address: wasm1ec80a28dggwt6zkpu6j4l3akqs55gcp2gnncjn
pubkey: '{"@type":"/cosmos.crypto.secp256k1.PubKey","key":"A2eYajnny7IXlM89Q9dhRz/BSM5ABUZf/aBMw2nPDU2X"}'
mnemonic: ""
**Important** write this mnemonic phrase in a safe place.
`$ wasmd keys add bob`
>\- name: bob
type: local
address: wasm1e24lgetlul0ercjwglfvrxtd46lp4k2mmkeupu
pubkey: '{"@type":"/cosmos.crypto.secp256k1.PubKey","key":"A/ipwcnFO+/x7i+CUhDGuTj0ohEx4hpkBSJN6AayeCGA"}'
mnemonic: ""
**Important** write this mnemonic phrase in a safe place.
`$ ALICE=$( wasmd keys show -a alice | tee /dev/tty | tail -1 | tr -d '\r' )`
wasm1ec80a28dggwt6zkpu6j4l3akqs55gcp2gnncjn
`$ BOB=$( wasmd keys show -a bob | tee /dev/tty | tail -1 | tr -d '\r' )`
wasm1e24lgetlul0ercjwglfvrxtd46lp4k2mmkeupu
#### Mint CW20 tokens
#### Mint 1M tokens to Bob:
`$ MINT=$( jq -n --arg recipient $BOB '{ "mint": { "recipient": $recipient, "amount": "1000000" } }' | tee /dev/tty )`
>{
"mint": {
"recipient": "wasm1c7lxt5x2zfpsrllw3p06xlt6yanpm2xcmm5wy4",
"amount": "1000000"
}
}
`$ wasmd tx wasm execute $CONTRACT "$MINT" --from wallet $TXFLAG -y`
Example of expected output results:
>gas estimate: 159916
logs: []
raw_log: '[]'
txhash: 2B4F9C345E7CBF0A3BDD4443B3DA22ADDE2DBCC283C4302E8DF2C5A4384E423B
#### Check the current balance of Bob:
`$ BALANCE_OF_BOB=$( jq -n --arg address $BOB '{ "balance": { "address": $address } }' | tee /dev/tty )`
$ `wasmd query wasm contract-state smart $CONTRACT "$BALANCE_OF_BOB" $NODE`
>data:
balance: "1000000"
#### Transfer CW20 tokens
#### Transfer 10k tokens from owner to Alice:
`$ TRANSFER_TO_ALICE=$( jq -n --arg recipient $ALICE '{ "transfer": { "recipient": $recipient, "amount": "10000" } }' | tee /dev/tty )`
Example of expected output results:
>{
"transfer": {
"recipient": "wasm1ec80a28dggwt6zkpu6j4l3akqs55gcp2gnncjn",
"amount": "10000"
}
}
#### execute the transfer contract:
`$ wasmd tx wasm execute $CONTRACT "$TRANSFER_TO_ALICE" --from wallet $TXFLAG`
#### Now check the current balance of owner and Alice:
`$ BALANCE_OF_OWNER=$( jq -n --arg address $OWNER '{ "balance": { "address": $address } }' | tee /dev/tty )`
`$ wasmd query wasm contract-state smart $CONTRACT "$BALANCE_OF_OWNER" $NODE`
>data:
balance: "990000"
`$ BALANCE_OF_ALICE=$( jq -n --arg address $ALICE '{ "balance": { "address": $address } }' | tee /dev/tty )`
`$ wasmd query wasm contract-state smart $CONTRACT "$BALANCE_OF_ALICE" $NODE`
>data:
balance: "10000"