waterloo-blockchain-fundamentals
Slide Deck
# install jq
brew install jq # macOS
apt-get install jq # ubuntu
# this alias will help you a lot
alias tx=" jq -rcs '.[0].txhash' | { read txhash; sleep 5; nibid q tx \$ txhash | jq }"
# install rust and wasm
curl --proto ' =https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
rustup default stable
rustup update stable
rustup target add wasm32-unknown-unknown
source " $HOME /.cargo/env
sh scripts/setup.sh
nibid start
DeFi (CW20) Contract Quickstart
cd contracts/cw20-base
RUSTFLAGS=" -C link-arg=-s" cargo wasm
cp target/wasm32-unknown-unknown/release/cw20_base.wasm ../../artifacts/
nibid tx wasm store artifacts/cw20_base.wasm \
--from validator \
--gas auto \
--gas-adjustment 1.5 \
--yes | tx
Instantiate CW20 Contract
cat << EOF | jq | tee instantiate.json
{
"name": "UWaterloo Dank Coin",
"symbol": "UWDANK",
"decimals": 6,
"initial_balances": [{
"address": "$( nibid keys show validator -a) ",
"amount": "1000000000000"
}],
"mint": {
"minter": "$( nibid keys show validator -a) ",
"cap": "1000000000000000000000"
}
}
EOF
nibid tx wasm instantiate 1 " $( cat instantiate.json) " \
--label " uwaterloo-dank-coin" \
--no-admin \
--from validator \
--gas auto \
--gas-adjustment 1.5 \
--yes | tx
CONTRACT_ADDRESS=nibi14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9ssa9gcs
# query token info
nibid q wasm contract-state smart $CONTRACT_ADDRESS \
' {"token_info": {}}' | jq
# query minter
nibid q wasm contract-state smart $CONTRACT_ADDRESS \
' {"minter": {}}' | jq
# query all accounts
nibid q wasm contract-state smart $CONTRACT_ADDRESS \
' {"all_accounts": {}}' | jq
# query balance
nibid q wasm contract-state smart $CONTRACT_ADDRESS \
" {\" balance\" : { \" address\" : \" $( nibid keys show validator -a) \" }}" | jq
CONTRACT_ADDRESS=nibi14hj2tavq8fpesdwxxcu44rty3hh90vhujrvcmstl4zr3txmfvw9ssa9gcs
# create new account
nibid keys add user1
USER_ADDRESS=$( nibid keys show user1 -a)
# transfer tokens
nibid tx wasm execute $CONTRACT_ADDRESS \
" {\" transfer\" : {\" recipient\" : \" $USER_ADDRESS \" , \" amount\" : \" 420\" } }" \
--from validator \
--gas auto \
--gas-adjustment 1.5 \
--yes | tx
# query user balance
nibid q wasm contract-state smart $CONTRACT_ADDRESS \
" {\" balance\" : { \" address\" : \" $USER_ADDRESS \" }}" | jq
# query all accounts
nibid q wasm contract-state smart $CONTRACT_ADDRESS \
' {"all_accounts": {}}' | jq
NFT (CW721) Contract Quickstart
cd contracts/cw721-base
RUSTFLAGS=" -C link-arg=-s" cargo wasm
cp target/wasm32-unknown-unknown/release/cw721_base.wasm ../../artifacts/
nibid tx wasm store artifacts/cw721_base.wasm \
--from validator \
--gas auto \
--gas-adjustment 1.5 \
--yes | tx
Instantiate CW721 Contract
cat << EOF | jq | tee instantiate.json
{
"name": "UWaterloo Blockchain NFT",
"symbol": "UW-NFT",
"minter": "$( nibid keys show validator -a) "
}
EOF
nibid tx wasm instantiate 2 " $( cat instantiate.json) " \
--label " uwaterloo-nft" \
--no-admin \
--from validator \
--gas auto \
--gas-adjustment 1.5 \
--yes | tx
CONTRACT_ADDRESS=nibi1nc5tatafv6eyq7llkr2gv50ff9e22mnf70qgjlv737ktmt4eswrqugq26k
# query contract info
nibid q wasm contract-state smart $CONTRACT_ADDRESS \
' {"contract_info": {}}' | jq
# query number of tokens
nibid q wasm contract-state smart $CONTRACT_ADDRESS \
' {"num_tokens": {}}' | jq
# query all tokens
nibid q wasm contract-state smart $CONTRACT_ADDRESS \
' {"all_tokens": {}}' | jq
# query minter
nibid q wasm contract-state smart $CONTRACT_ADDRESS \
' {"minter": {}}' | jq
CONTRACT_ADDRESS=nibi1nc5tatafv6eyq7llkr2gv50ff9e22mnf70qgjlv737ktmt4eswrqugq26k
# create new account
nibid keys add user1
USER_ADDRESS=$( nibid keys show user1 -a)
# mint NFT
nibid tx wasm execute $CONTRACT_ADDRESS \
" {\" mint\" : { \" token_id\" : \" goose\" , \" owner\" : \" $USER_ADDRESS \" } }" \
--from validator \
--gas auto \
--gas-adjustment 1.5 \
--yes | tx
# query user balance
nibid q wasm contract-state smart $CONTRACT_ADDRESS \
" {\" tokens\" : { \" owner\" : \" $USER_ADDRESS \" } }" | jq
# query all accounts
nibid q wasm contract-state smart $CONTRACT_ADDRESS \
' {"all_tokens": {} }' | jq