EGO-LOG

40代2児の父。主にプログラム学習と開発、仮想通貨、メタバース、たまに関係ないことを綴る。

python+Flask で起動したWebサービスに外部から接続

環境

上記環境でWebサービスを起動した。

自宅のノートPC上で起動しており、外部から接続したい。

 

ルータの設定

ルータ機器はAterm WG2600HP4

ポートマッピング機能で変換元ポートと変換先ポートを指定する。

Webサービスのポート番号は8080で、外から接続する際には2080を指定する。

ルータで2080から8080に変換するような設定。

LAN側ホストは ipconfigで確認する。

 

WindowsDefenderファイアウォールの設定

Webサービス起動時の設定

FlaskでWebサービス起動時に↓のように指定する。

app.run(host="0.0.0.0", port=8080)

hostを指定しないと、localhostで起動するので外部から接続できないようだ(多分)

 

まとめ

上記手順で、Windows環境でWebサービスを起動して外部から接続できた。

ただし、IP指定なのでDDNSを使用したい場合は、↓No-IP等のサービスを使えば1つなら無料で設定できる。

www.noip.com

以上

 

 

discord bot × vue 環境構築 メモ

概要と目的

discord のbotを主に制作しているのだが、

discord上での操作では限界があるので、webページに遷移して管理画面を表示して情報管理できるようにしたい。

 

環境はwindows10。

 

Node.js インストール

まずはShellからNode.jsのインストール

nodejs.org

 

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が向いてるっぽい。

docs.replit.com

↑プランを選択

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

 

今回ハマったのが↑の「Run command」で、プログラムを起動するコマンドを設定する。

botpythonで作っていて、最初に起動するファイルが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のコントラクトに脆弱性が見つかったとのこと。

その時点でいくつかのプロジェクトは対応が済んでいたようで。

 

具体的な対応は以下のとおり。

  • thirdwebが提示するリンクから、各自コントラクトに脆弱性があるかチェックする。
  • 脆弱性がある場合、コントラクトをLockする。
  • 新しくコントラクトをデプロイして、元のホルダーにエアドロップする

と、簡単に言ってくれますが、

デプロイにもエアドロップにも相応のガス代(と手間)がかかるわけで、

ガス代は負担してくれるような情報もあるけど全員に対処できるとも思えない。

どうなるんだろうね。。

 

とりあえず、自分が担当するコントラクトをチェックする。

元のポストは↓

ポストから診断ツールにジャンプする。

t.co

そこでウォレットに接続してみると。。。

あぼーん

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」で補充できるようだが、押しても実行できない。。

同じ時間帯に同じ作業をしている方が多いと、常にウォレットがカラになってしまう?

 

どうにも進めないので一旦ここまで!

 

新しくなったopenseaで出品迷子になった件

一言だけ。

 

コレクションを作成する際は、「Drop a Collection」ではなく「Mint an NFT」で作成すること。

Drop a Collection」で作るとERC-721で作成できるのは旧来どおりでうまくいきそうに見えるが、アイテムの追加方法が分からなかった。

「Mint an NFT」で作成するとERC-1155にはなるがリストまで動作確認できた。

これまでの規格で発行できないのはムズムズするけど、とりあえず発行したいよーという方は後者を選択しましょう、という話。

 

以上!