|
| 1 | +#!/bin/bash |
| 2 | + |
| 3 | +set -e |
| 4 | + |
| 5 | +if [ $# != 4 ] && [ $# != 5 ]; then |
| 6 | + echo "Arguments: <IMAGE_FILE> <TITLE> <DESCRIPTION> <TOKEN_NAME> [<IPFC_CID>]" |
| 7 | + exit 1 |
| 8 | +fi |
| 9 | + |
| 10 | +IMAGE=$1 |
| 11 | +TITLE=$2 |
| 12 | +DESC=$3 |
| 13 | +TOKEN_NAME=$4 |
| 14 | +IPFC_CID=$5 |
| 15 | + |
| 16 | +echo IMAGE: $IMAGE |
| 17 | +echo TITLE: $TITLE |
| 18 | +echo DESC: $DESC |
| 19 | +echo TOKEN_NAME: $TOKEN_NAME |
| 20 | +echo IPFC_CID: $IPFC_CID |
| 21 | + |
| 22 | +TOKEN_NAME_BASE64=$(echo -n $TOKEN_NAME | od -A n -t x1 | tr -d " \n") |
| 23 | +echo TOKEN_NAME_BASE64: $TOKEN_NAME_BASE64 |
| 24 | + |
| 25 | +PKH=$(cardano-cli address key-hash --payment-verification-key-file plutus-use-cases/mlabs/payment.vkey) |
| 26 | +echo PKH: $PKH |
| 27 | + |
| 28 | +# enviroment variables |
| 29 | +SEABUG_ADMIN_TOKEN=ADMIN_TOKEN |
| 30 | +TESTNET_MAGIC=1097911063 |
| 31 | +export PGPASSWORD=seabug |
| 32 | +export CARDANO_NODE_SOCKET_PATH=$PWD/data/cardano-node/ipc/node.socket |
| 33 | + |
| 34 | +############################################################ |
| 35 | +# Prepare |
| 36 | +############################################################ |
| 37 | + |
| 38 | +# Setup server admin token, password: seabug |
| 39 | +psql -U seabug -h localhost -q -c "INSERT INTO admin_token(token) VALUES ('$SEABUG_ADMIN_TOKEN') ON CONFLICT DO NOTHING" |
| 40 | + |
| 41 | +############################################################ |
| 42 | +# Functions |
| 43 | +############################################################ |
| 44 | + |
| 45 | +get_ipfs_hash() { |
| 46 | + local IMAGE_HASH=$1 |
| 47 | + http GET localhost:8008/images | |
| 48 | + jq -r "to_entries[] | select (.value.sha256hash == \"$IMAGE_HASH\") | .value.ipfsHash" |
| 49 | +} |
| 50 | + |
| 51 | +efficient_nft_pab() { |
| 52 | + cd plutus-use-cases/mlabs |
| 53 | + rm -fv ../../efficient_nft_pab_out |
| 54 | + if [ -z $CURRENCY ]; then |
| 55 | + echo "> unbuffer nix develop -c cabal run efficient-nft-pab --disable-optimisation -- --pkh $PKH --auth-pkh $PKH --token \"$TOKEN_NAME\" | tee ../../efficient_nft_pab_out" |
| 56 | + unbuffer nix develop -c cabal run efficient-nft-pab --disable-optimisation -- --pkh $PKH --auth-pkh $PKH --token "$TOKEN_NAME" >../../efficient_nft_pab_out |
| 57 | + else |
| 58 | + echo "> unbuffer nix develop -c cabal run efficient-nft-pab --disable-optimisation -- --pkh $PKH --auth-pkh $PKH --token "$TOKEN_NAME" --currency $CURRENCY | tee ../../efficient_nft_pab_out" |
| 59 | + unbuffer nix develop -c cabal run efficient-nft-pab --disable-optimisation -- --pkh $PKH --auth-pkh $PKH --token "$TOKEN_NAME" --currency $CURRENCY >../../efficient_nft_pab_out |
| 60 | + fi |
| 61 | +} |
| 62 | + |
| 63 | +wait_up_efficient_nft_pab() { |
| 64 | + sleep 1 |
| 65 | + echo '>' wait_up_efficient_nft_pab... |
| 66 | + while [ -z "$(rg 'Starting BotPlutusInterface server' efficient_nft_pab_out)" ] && [ ! -z "$(jobs)" ]; do |
| 67 | + echo -n . |
| 68 | + sleep 1 |
| 69 | + done |
| 70 | + sleep 3 |
| 71 | + if [ ! -z "$(rg 'Network.Socket.bind: resource busy' efficient_nft_pab_out)" ]; then |
| 72 | + echo "For some reason efficient_nft_pab already run, kill it" |
| 73 | + exit 1 |
| 74 | + fi |
| 75 | + echo '>' wait_up_efficient_nft_pab...ok |
| 76 | +} |
| 77 | + |
| 78 | +mint_cnft_request() { |
| 79 | + local IPFC_CID=$1 |
| 80 | + http POST localhost:3003/api/contract/activate \ |
| 81 | + caID[tag]=MintCnft \ |
| 82 | + caID[contents][0]["mc'name"]="$TITLE" \ |
| 83 | + caID[contents][0]["mc'description"]="$DESC" \ |
| 84 | + caID[contents][0]["mc'image"]="ipfs://$IPFC_CID" \ |
| 85 | + caID[contents][0]["mc'tokenName"]="$TOKEN_NAME_BASE64" -v |
| 86 | +} |
| 87 | + |
| 88 | +mint_request() { |
| 89 | + http POST 'localhost:3003/api/contract/activate' \ |
| 90 | + caID[tag]=Mint \ |
| 91 | + caID[contents][0][unAssetClass][0][unCurrencySymbol]="$CURRENCY" \ |
| 92 | + caID[contents][0][unAssetClass][1][unTokenName]="$TOKEN_NAME" \ |
| 93 | + caID[contents][1]["mp'fakeAuthor"][unPaymentPubKeyHash][getPubKeyHash]="$PKH" \ |
| 94 | + caID[contents][1]["mp'feeVaultKeys"]:=[] \ |
| 95 | + caID[contents][1]["mp'price"]:=100000000 \ |
| 96 | + caID[contents][1]["mp'daoShare"]:=500 \ |
| 97 | + caID[contents][1]["mp'owner"][0][unPaymentPubKeyHash][getPubKeyHash]="$PKH" \ |
| 98 | + caID[contents][1]["mp'owner"][1]:=null \ |
| 99 | + caID[contents][1]["mp'lockLockupEnd"][getSlot]:=5 \ |
| 100 | + caID[contents][1]["mp'authorShare"]:=1000 \ |
| 101 | + caID[contents][1]["mp'lockLockup"]:=5 -v |
| 102 | +} |
| 103 | + |
| 104 | +wait_balance_tx_efficient_nft_pab() { |
| 105 | + echo '>' wait_balance_tx_efficient_nft_pab... |
| 106 | + while [ -z "$(rg BalanceTxResp efficient_nft_pab_out)" ] && [ ! -z "$(jobs)" ]; do |
| 107 | + echo -n . |
| 108 | + sleep 1 |
| 109 | + done |
| 110 | + echo '>' wait_balance_tx_efficient_nft_pab...ok |
| 111 | +} |
| 112 | + |
| 113 | +kill_bg_jobs() { |
| 114 | + echo '>' kill bg jobs... |
| 115 | + sleep 5 |
| 116 | + killall efficient-nft-p |
| 117 | + kill $(jobs -p) |
| 118 | + while [ ! -z $(jobs -p) ]; do |
| 119 | + sleep 1 |
| 120 | + echo -n . |
| 121 | + done |
| 122 | + echo '>' kill bg jobs...ok |
| 123 | +} |
| 124 | + |
| 125 | +query_utxo() { |
| 126 | + cardano-cli query utxo --testnet-magic $TESTNET_MAGIC --address $(cat plutus-use-cases/mlabs/payment.addr) |
| 127 | +} |
| 128 | + |
| 129 | +############################################################ |
| 130 | +# upload image |
| 131 | +############################################################ |
| 132 | + |
| 133 | +query_utxo |
| 134 | + |
| 135 | +if [ -z $IPFC_CID ]; then |
| 136 | + echo '>' Image upload... |
| 137 | + BUF=$( |
| 138 | + http --form POST localhost:8008/admin/upload_image \ |
| 139 | + "Authorization:$SEABUG_ADMIN_TOKEN" \ |
| 140 | + "files@$IMAGE" \ |
| 141 | + "title=$TITLE" \ |
| 142 | + "description=$DESC" \ |
| 143 | + --pretty none |
| 144 | + ) |
| 145 | + IMAGE_HASH=$(echo -n "$BUF" | rg '^\{' | jq -r '.sha256hash') |
| 146 | + if [ -z "$IMAGE_HASH" ] || [ "$IMAGE_HASH" = "null" ]; then |
| 147 | + echo Upload image error: $BUF |
| 148 | + exit 1 |
| 149 | + fi |
| 150 | + echo '>' Image upload...ok |
| 151 | + echo '>' IMAGE_HASH: $IMAGE_HASH |
| 152 | + IPFS_HASH=$(get_ipfs_hash $IMAGE_HASH) |
| 153 | + echo '>' IPFS_HASH: $IPFS_HASH |
| 154 | + IPFS_CID=$(ipfs cid format -b base36 $IPFS_HASH) |
| 155 | + echo '>' IPFS_CID: $IPFS_CID |
| 156 | +fi |
| 157 | + |
| 158 | +############################################################ |
| 159 | +# mint cnft |
| 160 | +############################################################ |
| 161 | + |
| 162 | +echo '>>>' mint cnft |
| 163 | + |
| 164 | +echo '>' Run efficient-nft-pab... |
| 165 | +efficient_nft_pab & |
| 166 | +wait_up_efficient_nft_pab |
| 167 | +echo '>' Run efficient-nft-pab...ok |
| 168 | + |
| 169 | +echo '>' Run mint_cnft_request... |
| 170 | +mint_cnft_request $IPFC_CID |
| 171 | +wait_balance_tx_efficient_nft_pab |
| 172 | +echo '>' Run mint_cnft_request...ok |
| 173 | + |
| 174 | +kill_bg_jobs |
| 175 | + |
| 176 | +BALANCE_TX_RESP=$(cat efficient_nft_pab_out | rg BalanceTxResp) |
| 177 | +echo '>' BALANCE_TX_RESP: $BALANCE_TX_RESP |
| 178 | + |
| 179 | +export CURRENCY=$(echo -n $BALANCE_TX_RESP | sed -E "s/^.*txMint = Value \(Map \[\(([^,]+).*/\1/") |
| 180 | +echo '>' CURRENCY: $CURRENCY |
| 181 | + |
| 182 | +query_utxo |
| 183 | + |
| 184 | +echo '>' sleep 30 for minting work |
| 185 | +sleep 30 |
| 186 | + |
| 187 | +query_utxo |
| 188 | + |
| 189 | +############################################################ |
| 190 | +# mint nft |
| 191 | +############################################################ |
| 192 | + |
| 193 | +echo '>>>' mint nft |
| 194 | + |
| 195 | +cp -v efficient_nft_pab_out efficient_nft_pab_out0 |
| 196 | + |
| 197 | +echo '>' Run efficient-nft-pab... |
| 198 | +efficient_nft_pab & |
| 199 | +wait_up_efficient_nft_pab |
| 200 | +echo '>' Run efficient-nft-pab...ok |
| 201 | + |
| 202 | +echo '>' Run mint_request... |
| 203 | +mint_request |
| 204 | +wait_balance_tx_efficient_nft_pab |
| 205 | +echo '>' Run mint_request...ok |
| 206 | + |
| 207 | +kill_bg_jobs |
| 208 | + |
| 209 | +BALANCE_TX_RESP=$(cat efficient_nft_pab_out | rg BalanceTxResp) |
| 210 | +echo '>' BALANCE_TX_RESP: $BALANCE_TX_RESP |
| 211 | + |
| 212 | +MINTING_POLICY=$(cat efficient_nft_pab_out | rg minting-policy | sed -e 's/minting-policy: //' | jq -r .getMintingPolicy) |
| 213 | +echo '>' MINTING_POLICY: $MINTING_POLICY |
| 214 | + |
| 215 | +echo '>' patch seabug_contracts/Seabug/MintingPolicy.js |
| 216 | +sed -i "3s/\".*\"/\"$MINTING_POLICY\"/" cardano-transaction-lib/seabug_contracts/Seabug/MintingPolicy.js |
| 217 | + |
| 218 | +query_utxo |
| 219 | + |
| 220 | +echo '>' sleep 30 for minting work |
| 221 | +sleep 30 |
| 222 | + |
| 223 | +query_utxo |
| 224 | + |
| 225 | +echo mint-nft ended |
0 commit comments