我正在运行一个包含 automint 解决方案的卡尔达诺节点。我重写了一个脚本并且让它工作了。但脚本的特定部分存在问题。 elif的这一部分应该检查是否有8000000的传入交易,并检查文件夹metadata3-1metadata3中是否有元数据文件。如果 8000000 的事务正常,并且两个文件夹中都有一个文件,则应转到脚本的“then”部分,如果其中一个文件夹中没有文件或事务较高或较低,则应转到脚本的“then”部分“其他”部分。由于某种原因它没有这样做。有人可以帮我吗?
elif [ ${utxo_balance} == 8000000 ] || [ $(ls "metadata3-1/" | wc -l) >= 1 ] || [ $(ls "metadata3/" | wc -l) >= 1 ] ;
then
###1 NFT version 1+2###
echo "Sending NFT..." >> $log
numberCompleted=$(( numberCompleted+1 ))
POLICYID=$(cardano-cli transaction policyid --script-file $scriptPath)
metadata_file=$(ls metadata3/ | sort -R | tail -1)
metadata_file2=$(ls metadata3-1/ | sort -R | tail -1)
name=$(echo ${metadata_file} | awk '{ print substr( $0, 1, length($0)-5 ) }')
name2=$(echo ${metadata_file2} | awk '{ print substr( $0, 1, length($0)-5 ) }')
head -n -3 ./metadata3/${metadata_file} > ./metadata3/metatemp.json ; mv ./metadata3/metatemp.json ./metadata3/${metadata_file}
tail -n +4 ./metadata3-1/${metadata_file2} > ./metadata3-1/metatemp2.json ; mv ./metadata3-1/metatemp2.json ./metadata3-1/${metadata_file2}
cat ./tempfiles/policy.json ./metadata3/${metadata_file} ./tempfiles/komma.json ./metadata3-1/${metadata_file2} > ./tempfiles/meta.json
amountToSendUser=2200000
amountToDonate=2800000
amountToSendProfit=3000000
currentSlot=$(cardano-cli query tip --mainnet | jq -r '.slot')
cardano-cli transaction build-raw \
--fee 0 \
${tx_in} \
--tx-out ${in_addr}+${amountToSendUser}+"1 $POLICYID.${name}"+"1 $POLICYID.${name2}" \
--tx-out ${profitAddr}+${amountToSendProfit} \
--tx-out ${donationAddr}+${amountToDonate} \
--mint="1 $POLICYID.${name}"+"1 $POLICYID.${name2}" \
--minting-script-file $scriptPath \
--metadata-json-file ./tempfiles/meta.json \
--invalid-hereafter $(( ${currentSlot} + 10000)) \
--out-file tx3.tmp >> $log
fee=$(cardano-cli transaction calculate-min-fee \
--tx-body-file tx3.tmp \
--tx-in-count 1 \
--tx-out-count 3 \
--mainnet \
--witness-count 2 \
--byron-witness-count 0 \
--protocol-params-file protocol3.json | awk '{ print $1 }') >> $log
fee=${fee%" Lovelace"}
amountToSendUser=$((${amountToSendUser} - ${fee}))
cardano-cli transaction build-raw \
--fee ${fee} \
${tx_in} \
--tx-out ${in_addr}+${amountToSendUser}+"1 $POLICYID.${name}"+"1 $POLICYID.${name2}" \
--tx-out ${profitAddr}+${amountToSendProfit} \
--tx-out ${donationAddr}+${amountToDonate} \
--mint="1 $POLICYID.${name}"+"1 $POLICYID.${name2}" \
--minting-script-file $scriptPath \
--metadata-json-file ./tempfiles/meta.json \
--invalid-hereafter $(( ${currentSlot} + 10000)) \
--out-file tx3.raw >> $log
cardano-cli transaction sign \
--signing-key-file $paymentSignKeyPath \
--signing-key-file $policySignKeyPath \
--tx-body-file tx3.raw \
--out-file tx3.signed \
--mainnet >> $log
cardano-cli transaction submit --tx-file tx3.signed --mainnet >> $log
rm ./metadata3/${metadata_file}
rm ./metadata3-1/${metadata_file2}
else
echo ${utxo_balance} >> $log
echo "Refund Initiated..." >> $log
currentSlot=$(cardano-cli query tip --mainnet | jq -r '.slot')
cardano-cli transaction build-raw \
--fee 0 \
${tx_in} \
--tx-out ${in_addr}+${utxo_balance} \
--invalid-hereafter $(( ${currentSlot} + 1000)) \
--out-file tx3.tmp >> $log
fee=$(cardano-cli transaction calculate-min-fee \
--tx-body-file tx3.tmp \
--tx-in-count 1 \
--tx-out-count 1 \
--mainnet \
--witness-count 1 \
--byron-witness-count 0 \
--protocol-params-file protocol3.json | awk '{ print $1 }') >> $log
fee=${fee%" Lovelace"}
amountToSendUser=$(( ${utxo_balance}-${fee} ))
echo ${amountToSendUser} >> $log
cardano-cli transaction build-raw \
--fee ${fee} \
${tx_in} \
--tx-out ${in_addr}+${amountToSendUser} \
--invalid-hereafter $(( ${currentSlot} + 1000)) \
--out-file tx3.raw >> $log
cardano-cli transaction sign \
--signing-key-file $paymentSignKeyPath \
--tx-body-file tx3.raw \
--out-file tx3.signed \
--mainnet >> $log
cardano-cli transaction submit --tx-file tx3.signed --mainnet >> $log
fi
答案1
无需发布更多内容
elif [ ${utxo_balance} == 8000000 ] || [ $(ls "metadata3-1/" | wc -l) >= 1 ] || [ $(ls "metadata3/" | wc -l) >= 1 ] ;
可怕的问题。从您的描述中甚至不清楚这是什么类型的问题、语法或意外行为。甚至没有错误消息。
错误的关系运算符
尽管如此,很明显您使用了错误的运算符。
算术表达式(如您的)仅>=
允许在中使用,但不允许在 中使用。该命令(只是其别名,不是 shell 语法)具有不同的语法(条件表达式):((4>=3))
[ ]
test
[
arg1 OP arg2
OP 是 -eq、-ne、-lt、-le、-gt 或 -ge 之一。
所以你需要:
elif [ ${utxo_balance} -eq 8000000 ] || [ $(ls "metadata3-1/" | wc -l) -ge 1 ] || [ $(ls "metadata3/" | wc -l) -ge 1 ] ;
错误的逻辑运算符
你的条件是
elif A || B || C
所以如果条件A或者条件B或者条件 C 为真,则整个表达式为真。
描述不同意:
如果8000000的交易就可以了和两个文件夹中都有一个文件,它应该转到“then”部分
所以代码必须是
elif A && B && C