python+Flask で起動したWebサービスに外部から接続
環境
上記環境でWebサービスを起動した。
自宅のノートPC上で起動しており、外部から接続したい。
ルータの設定
ルータ機器はAterm WG2600HP4
ポートマッピング機能で変換元ポートと変換先ポートを指定する。

Webサービスのポート番号は8080で、外から接続する際には2080を指定する。
ルータで2080から8080に変換するような設定。
LAN側ホストは ipconfigで確認する。
WindowsDefenderファイアウォールの設定
Webサービス起動時の設定
FlaskでWebサービス起動時に↓のように指定する。
hostを指定しないと、localhostで起動するので外部から接続できないようだ(多分)
まとめ
上記手順で、Windows環境でWebサービスを起動して外部から接続できた。
ただし、IP指定なのでDDNSを使用したい場合は、↓No-IP等のサービスを使えば1つなら無料で設定できる。
以上
discord bot × vue 環境構築 メモ
概要と目的
discord のbotを主に制作しているのだが、
discord上での操作では限界があるので、webページに遷移して管理画面を表示して情報管理できるようにしたい。
環境はwindows10。
Node.js インストール
まずはShellからNode.jsのインストール
npm -v でバージョン確認
Vue CLIのインストール
Vue CLIはVue.jsプロジェクトの作成と管理を簡単にするためのコマンドラインツール
npm install -g @vue/cli
ここで
vue : このシステムではスクリプトの実行が無効になっているため、ファイル C:\Users\user\AppData\Roaming\npm\vue.ps1 を読み
込むことができません。詳細については、「about_Execution_Policies」(https://go.microsoft.com/fwlink/?LinkID=135170) を参
照してください。
とエラー
chatgptに聞いたら
Get-ExecutionPolicy でポリシーを確認
Restricted になっていた
Set-ExecutionPolicy RemoteSigned
として実行できるようになった。
テストプロジェクト作成
vue create my-project
でテストプロジェクトが作成されたことを確認
まずはここまで
MySQL備忘録(for windows user)
シェルからMySQLに接続する準備
環境変数を通す。
C:\Program Files\MySQL\MySQL Server 8.0\bin
絵文字を文字化けしないようにエクスポート
mysqldump --databases DBName --default-character-set=utf8mb4 --result-file=dump.sql -u username -p
VPS上のデータベースに接続
外部接続用のユーザを作成する。
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' WITH GRANT OPTION;
※%は接続元指定なし。指定する場合はIPアドレスを指定する。
随時更新
replitでdiscord bot常時起動できなくなったので対応した件
IDE(統合開発環境)のreplitで、discordのbotを常時起動させていた。
常時起動させるには、一定期間ごとにサービスにpingを送るサービス(uptimerobot)を使ってもいいが、何かの拍子でbotが落ちることがあったので、
replitの常時起動(always on)の機能を使っていた。
以前は有料課金(Hacker plan以上)にするか、複数常時起動にしたい場合は個別に課金することで対応していた。
それが、今年(2024)に入ったタイミング?で従来の方法では常時起動できなくなった模様。
同じことを実現したい場合はプロジェクト(Repls)をデプロイする必要アリ。
![]()
![]()

デプロイの種類には3種類アリ
discord botには多分Reserved VMが向いてるっぽい。

↑プランを選択
[Always on]が付いていればbotの場合最安プランで良いかと

今回ハマったのが↑の「Run command」で、プログラムを起動するコマンドを設定する。
botはpythonで作っていて、最初に起動するファイルがmain.pyなので、今回は
python3 main.py
↑のように設定した。
「Deploy」ボタン押下で結構時間がかかるがデプロイが進行する。
エラーが出なければデプロイ成功で、後は後ろで勝手に起動している状態。
この状態で別に「Run」で起動すると、二重に起動した状態になるようなので注意。
以上。
※2024/5/21追記
その後なんだかんだでReplitはやめてVPSをレンタルしてそちらで起動させてます。
NFTをエアドロップするには
送付先ウォレットアドレスを収集して、アドレス宛にNFTをエアドロップしたい。
今回はthirdwebを使用したケース。
エアドロップするNFTを用意する
エアドロップするNFT(ERC721)をミントしておく。
アップロードするだけではダメで、ミントしておく(各NFTにアドレスが設定される)必要がある。
エアドロップ元のコントラクトで承認作業を行う

NFTをミントしたコントラクトで、setApprovalForAllの設定を行う。
- operator:エアドロするコントラクトID
- approved:true
※この設定はエアドロが終わったら解除(OFF)に戻した方が良いかも?
エアドロップ設定

thirdwebで「Airdrop ERC721」を選択してデプロイ

Explorerタブを選択
AirdropERC721を選択
- Token Address:エアドロ元のコレクションのコントラクトアドレス
- Token Owner:コントラクトのオーナーのウォレットアドレス
- Contents:送り先のウォレットアドレスとトークンIDをペアでJSONを記述

エアドロ実行

実行して署名でエアドロ完了。
以上
thirdwebに脆弱性が見つかった件
英語のメールは基本無視しているのだけど、
今日thirdwebからのメールが来てて、タイトルに important とあったので、
何かいつもと違う気配を感じてXを覗いてみたら、
thirdwebのコントラクトに脆弱性が見つかったとのこと。
その時点でいくつかのプロジェクトは対応が済んでいたようで。
具体的な対応は以下のとおり。
と、簡単に言ってくれますが、
デプロイにもエアドロップにも相応のガス代(と手間)がかかるわけで、
ガス代は負担してくれるような情報もあるけど全員に対処できるとも思えない。
どうなるんだろうね。。
とりあえず、自分が担当するコントラクトをチェックする。
元のポストは↓
IMPORTANT
— thirdweb (@thirdweb) 2023年12月5日
On November 20th, 2023 6pm PST, we became aware of a security vulnerability in a commonly used open-source library in the web3 industry.
This impacts a variety of smart contracts across the web3 ecosystem, including some of thirdweb’s pre-built smart contracts.…
ポストから診断ツールにジャンプする。
そこでウォレットに接続してみると。。。

Vulnerable(脆弱)の文字が。
このまま強引に運用しても、何かあったら資産が無くなりかねないし、
ホルダーさんにも迷惑がかかるので、Lockの一択。

- Lockすると、スケジュールがクリアされる。
- メタデータは凍結する。
- コレクション名に「Locked」がつく
ちょっと待って、相当リスキーな行動を軽率にさせようとしてないか????
Lockしてデプロイ、エアドロ済の情報もあるにはあるけど、
そこまで慌ててやらないといけないことなのか。
個人のコレクションでもないので、決行していいものか確認しないと。
というわけで、個人のテストで作ったコントラクトがあったのを思い出したので、
実行してみる。
「Lock Contract」をクリック

ここでガス代がかかる。

Lock完了

「Capture snapshot」でスナップショット取得

安全なコントラクトをデプロイ

「Deploy Contract」でデプロイ

ここでもガス代発生
エアドロップ
旧コントラクトのNFTホルダーに、新コントラクトのNFTをエアドロップする

「AirdropTool」は↓の「Start Airdrop」で配布が始まる?
「Shareable claim page」はこれまでのようにClaim設定ページから配布する?

「Airdrop tool」で配布したいのだが、
「Start Airdrop」ボタンが押せない。
ガス代を肩代わりしてくれるウォレットがBackend Wallet Addressで、
そこに入っている額が「Backend Wallet Balance」で0になっている。
「Minimum Balance Required」以上入っていないと実行できないっぽい。
「Withdraw Funds」で補充できるようだが、押しても実行できない。。
同じ時間帯に同じ作業をしている方が多いと、常にウォレットがカラになってしまう?
どうにも進めないので一旦ここまで!