メタデータ付きトランザクションを送信する方法
以下の内容は、cardano-cliを使用して、payment.addrから任意のアドレスにメタデータを添付してトランザクションを送信する方法です。 トランザクションを送信するには最低1ADA必要です。

metadataフォルダを作成します

1
cd $NODE_HOME
2
mkdir metadata
Copied!

metadataに使用するjsonファイルを作成します

1
cat > $NODE_HOME/metadata/sendMetadata.json << EOF
2
{
3
"0" : { "message" : "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }
4
}
5
EOF
Copied!
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx を任意の文字列またはハッシュ値に置き換えてください

送金金額を指定します。(最低送金額は1ADA)

1
amountToSend=1000000
2
echo amountToSend: $amountToSend
Copied!
ここで指定しているのは1,000,000 lovelace (1ADA)

送金先アドレスを指定します

1
destinationAddress=addr1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
2
echo destinationAddress: $destinationAddress
Copied!
addr1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx を任意のアドレスに置き換えてください

現在のスロット番号を算出します

1
currentSlot=$(cardano-cli query tip --mainnet | jq -r '.slot')
2
echo Current Slot: $currentSlot
Copied!

payment.addrの未使用トランザクションを算出します

1
cardano-cli query utxo \
2
--address $(cat payment.addr) \
3
--mainnet \
4
--mary-era > fullUtxo.out
5
6
tail -n +3 fullUtxo.out | sort -k3 -nr > balance.out
7
8
cat balance.out
9
10
tx_in=""
11
total_balance=0
12
while read -r utxo; do
13
in_addr=$(awk '{ print $1 }' <<< "${utxo}")
14
idx=$(awk '{ print $2 }' <<< "${utxo}")
15
utxo_balance=$(awk '{ print $3 }' <<< "${utxo}")
16
total_balance=$((${total_balance}+${utxo_balance}))
17
echo TxHash: ${in_addr}#${idx}
18
echo ADA: ${utxo_balance}
19
tx_in="${tx_in} --tx-in ${in_addr}#${idx}"
20
done < balance.out
21
txcnt=$(cat balance.out | wc -l)
22
echo Total ADA balance: ${total_balance}
23
echo Number of UTXOs: ${txcnt}
Copied!

トランザクション計算ファイルを作成します

1
cardano-cli transaction build-raw \
2
${tx_in} \
3
--tx-out $(cat payment.addr)+0 \
4
--tx-out ${destinationAddress}+0 \
5
--invalid-hereafter $(( ${currentSlot} + 10000)) \
6
--fee 0 \
7
--json-metadata-no-schema \
8
--metadata-json-file $NODE_HOME/metadata/sendMetadata.json \
9
--mary-era \
10
--out-file tx.tmp
Copied!

手数料を算出します

1
fee=$(cardano-cli transaction calculate-min-fee \
2
--tx-body-file tx.tmp \
3
--tx-in-count ${txcnt} \
4
--tx-out-count 2 \
5
--mainnet \
6
--witness-count 1 \
7
--byron-witness-count 0 \
8
--protocol-params-file $NODE_HOME/params.json | awk '{ print $1 }')
9
echo fee: $fee
Copied!

Outputを計算します

1
txOut=$((${total_balance}-${fee}-${amountToSend}))
2
echo Change Output: ${txOut}
Copied!

トランザクションファイルを再構築します

1
cardano-cli transaction build-raw \
2
${tx_in} \
3
--tx-out $(cat payment.addr)+${txOut} \
4
--tx-out ${destinationAddress}+${amountToSend} \
5
--invalid-hereafter $(( ${currentSlot} + 10000)) \
6
--fee ${fee} \
7
--json-metadata-no-schema \
8
--metadata-json-file $NODE_HOME/metadata/sendMetadata.json \
9
--mary-era \
10
--out-file tx.raw
Copied!
tx.rawをエアギャップマシンのcardano-my-nodeにコピーしてください。

トランザクションファイルに署名します

エアギャップマシン
1
cardano-cli transaction sign \
2
--tx-body-file tx.raw \
3
--signing-key-file payment.skey \
4
--mainnet \
5
--out-file tx.signed
Copied!
tx.signedをBPのcardano-my-nodeにコピーしてください

トランザクションを送信します。

1
cardano-cli transaction submit \
2
--tx-file tx.signed \
3
--mainnet
Copied!
自分が送信したメタデータ付きトランザクションが記録されているか、確認してみましょう! Cardanoscan-Metadata(https://cardanoscan.io/metadata)
最終更新 1mo ago