ゼロから始めるweb3プログラミング

pythonによるweb3プログラミングの作者の許可を得て日本語に翻訳しました。
https://teletype.in/@cryppi/howtocode

今日はコーディングを学ぶのに良い日です。もし「今日」がベアマーケットの時期なら、それはコーディングを学ぶのに最適な日です。

もし、自分で学ぶのに多くの時間やお金をかけたくないのであれば、解決策があります。私たちは web3 自動化に関する共同コースを立ち上げました。次回のコースは 2024 年の 3 月から 4 月にかけて行われます。このチャンネルでのアナウンスに注目してください。ぜひご登録を!

イントロ / 私たちについて / 記事の内容

こんにちは、cryppiです。私は暗号通貨に向けたコーディングのアイデアにとても熱中しています。プログラマーとしてはまだまだですが、毎日素晴らしい人々と関わっているので、この記事の共著者として才能あるAhillaryという人物が参加しています。

まずは、私たち二人についてもう少し詳しくお話ししましょう。まずは私から。

私はcryppiです。この記事を読んでいるので、すでに私を知っていると思いますが、初めての方のためにお知らせします。私は無職の非百万長者で、自分のチャンネルに時々投稿しています(実は23,000人のフォロワーがいます)。また、暗号通貨の初心者向けに素晴らしい記事も時々執筆しており、これまでに50万回以上読まれています。最近、私は新しい記事を書くアイデアに強く興味を持ち、内容は究極的なものにしたいと思っていましたが、テーマ選びには苦労しました。いくつかのアイデアを試した後、ふと思いつきました—暗号通貨のための基本的なコーディングについては、まともなものが存在しないのではないかと。はい、いくつかの資料はありましたが、それはあまりにも初心者には難しい内容ばかりでした。

しかし、私はコーダーではないので、プロに頼ることにしました。それでは、彼にバトンを渡します。

皆さん、こんにちは。私の名前はAhillaryで、開発者です。プログラミングに6年以上携わっており、その間にC/C++、Python、JavaScript、PHP、C#などの言語で働いてきました。私の経験により、迅速で読みやすいコードを書くことができます。数字が好きな私にとって、私の株式市場向けの自動化トレーディングのためのPythonコードは、年間で200万ドル以上の純利益を生み出しました。株式戦略がうまくいかなくなったとき、私は暗号通貨の世界に飛び込み、強力な暗号通貨の人々と働くことになりました。リサーチをあまり好まない私にとっては最適な環境です。コーディングだけでなく、教えるのも得意で、楽しんでいます。3年間、様々な年齢層の人々にプログラミングを教え、民間機関で働いたり、1年間大学院で授業を行ったり、web3に関する独自の教育を成功裏に立ち上げたりしました。要するに、私にとってコードは決して未知の存在ではありません

cryppi: 「私は数学が得意ではありませんが、ある人が言っていたのを見ました。「1+1=11」。そういうわけで、私たちのケースでもこの公式が成り立ったと思います。素晴らしい暗号におけるコーディングの記事を書くことができました。」

この記事は誰のために?
この文章は、web3プロセスの自動化、ざっくり言えばソフトウェアによるマルチアカウント管理についてです。そして最後に、今後の進め方のロードマップを説明します。

誰に向いていないか?
暗号通貨の初心者。暗号通貨やコーディングに経験のある人。

誰に向いているか?
コーディングの初心者だが、暗号通貨には「初心者でない」人。

この記事をどう使うか。非常に重要です! :point_down:
この記事は、落ち着いて読めば90分で読み切れます。読み終えた後、今後この方向に進むべきか理解できるはずです。この記事を読んだからといって、コーダーになることはできません。この記事の目的は、あなたをコーディングに興味を持たせることです。そのためのすべてのリソースと指導を提供します。理想的には、この文章を2~3か月かけてじっくり読み、各行を徹底的に学び、すべてのリンクをクリックし、私たちのロードマップの各ポイントを実行してください。そして、その後に初めてあなたは初心者のコーダーと見なされます。

そして、一番大事なことを覚えておいてください。目標を持つことです。関数や再帰を無思考で学ぶことはもちろん良いことですが、全く役に立たないこともあります。ある人の目標はプロジェクトを完成させること。別の人の目標はアンチドレイナーを書くこと。誰かはLineaクエスト用の究極のソフトを作ることが目標です。目標を忘れないでください。

もし難しくてわからないことがあったら、焦らないでください。まず第一に、全員がコーダーになるわけではありません。私(cryppi)は、例えば、良いレベルでコーディングできませんが、それは私にとって必要なことではありません。私はただ才能のある人々に囲まれています。第二に、先ほども言ったように、この記事は2~3か月のものです。何かわからないことがあれば、ググるか、チャットで質問してください。

なぜプログラミングを学ぶのか?

みんながコーディングをしたがっているようですが、なぜでしょう?
信じられないかもしれませんが、この世界のすべての事象には理由があります。プログラミングを学びたいという欲望も例外ではありません。そこで、このポイントでは、あなたにFOMOを感じさせるために、プログラミングを学ぶための客観的な理由を挙げてみます。もしかすると、これがあなたに合わないかもしれません…

なぜ全体的に必要なのか?
プログラミングは、最低限のレベルでも知っておくべきです。なぜなら、これは21世紀のスタンダードだからです。あなたの周りにも、少なくとも何人かのプログラマーがいることでしょう。まあ、ここは理解できると思います。

実践的な利点について言うと、それは:

  1. 時間の節約
    確かに、コードを学び、実践するためには時間がかかりますが、それは日々のルーチン作業に費やす何百時間、何千時間もの時間を取り戻すことができます。最も簡単な例は、1000アカウントを手動で管理することです。すべての時間を使って行うよりも、ソフトウェアを使って数週間で書き上げ、その後少しだけ監視すれば済むのです。違いを感じますか?私たちは手ではなく頭を使って働きます。数百、数千、数百万の鉄の奴隷が明確に設定されたタスクを実行し、1つの目標—自分の主人を養うために働きます。例としては、Memeland Farmがあります。もし手で1000アカウントを作成していたら、最低でも50時間はかかったでしょう。そして新しいクエストのクリアや予期しないトラブルが同じだけの時間を奪うことは言うまでもありません。Memeland用のスクリプトを書いて、すべてを自動化し、楽しんでください。鉄の奴隷たちがすべてをやってくれます。
  2. 有益な人脈
    人々があなたをプログラマーだと知っていれば、自分のアイデアを持ってあなたのところに来るでしょう。ほとんどの暗号通貨のコーダーは、NFTのミント用に単純なコードを書くフリーランスから、アンチドレイナーまで、大きな提案の流れがあります(クレームを控えている人が10万ドルをスタックしているが、ウォレットにドレイナーがいる場合、彼は信頼できるプログラマーに頼るでしょう)。
  3. 安定性
    プログラミングができれば、あなたは困ることはありません。確かに、レトロソフトのコーディングはこの世界で最も必要なことではありませんが、いずれにせよ、あなたはコーダーの道に入ってスキルを向上させ、常に高給のIT企業に就職することができます。
  4. ググる力を学ぶ
    奇妙なポイントですが、実際には60~80%の人々がうまくググることができず、自分の問題がユニークだと思い込んでいます。そして、他の人の数分を無駄にする代わりに、正しく質問を入力することができません。
    開発を行っていると、新しいプロジェクトでは80%のことを知らないのが普通です。その瞬間、あなたはググり方を学び、最初は理解できないタスクを見てもストレスを感じなくなるでしょう。
  5. 多才になる
    コードは、暗号通貨だけでなく、収入の倍増器です。ほとんどすべてを自動化できます。Steamトレーディングから「アブジム・ヘム」のスパムまで、あなたはマシンになります!
  6. 新しい考え方を学ぶ
    「マシンになるには、マシンのように考える必要があります。」マシンは単純で明確な命令しか実行できません。例えば、「お茶を作る」というタスクがあります。人間は簡単にこのタスクをこなせますが、マシンには間違いが生じることがあります。そのため、マシンには非常に明確な行動アルゴリズムを与える必要があります:キッチンに行き、水をやかんに注ぎ、やかんをスタンドに置き、電源ボタンを押します(その前にコンセントに接続されているか確認することもできます)、カップを取り、ティーバッグを入れ、カップにN杯の砂糖を入れ、湯が沸くのを待ち、カップに水を注ぎ、砂糖をかき混ぜます。このプロセスは「タスクの分解」と呼ばれ、プログラマーにとって最も重要なスキルの1つです。あなたは日常のタスクを別の視点から見るようになります。

なぜweb3自動化のためにプログラミングを学ぶのか?
もしあなたが、あるレトロプロジェクトのために50のアカウントを運営していて、もっと多くのアカウントを扱う時間がなかった場合、プログラミングはその問題を簡単に解決してくれます。少しコードを書いてテストし、成功した取引のログがTelegramボットに届いている間、楽しむことができます。

「ドロップはどうせ死ぬ」。はい、彼らは死ぬでしょう。問題は時間だけです。しかし、他にも暗号通貨があることを忘れてはいけません。あなたは、コードを書く人たちが他のメタ(ICO/IDO/NFT/シットコイン、そして同じfriend techなど)とどのように関わっていたかを考えたことがありますか?

ほとんどすべてが似ているのです:すべてがHTTPリクエスト(クライアント - サーバー)に基づいて構築されているため、それらを送信できるなら、その知識は今後何十年も役に立つでしょう。あなたは、自分の知識をどんなメタにも適応させることができます。レトロであれ、P2Eゲームであれ、friend techフォークであれ、スニーピングシートであれ、再度言いますが、知識はほぼすべてに対して普遍的です。

第一の理由、そして最も重要な理由…

私たちは皆、食べることを望んでいます。
時には、脳はFOMOという言語でしか理解できません。今から、私たちはその言語だけでコミュニケーションをとってみましょう。

PVU。 おそらく、古い人たちは思い出すでしょう。P2Eゲームのファーミングはそこそこお金を稼げましたが、賢い人たちはそれに対してソフトウェアを作り、PVUにも対応していました。1,000~2,000ドルの純利益を得るために、非常にシンプルなソフトウェアを使うのは簡単でした。このソフトウェアを作成する際に見つかったバグの話もあります。簡単に言えば、PVUは同じアドレスの異なる表記を別のアカウントと見なしていました。例えば:

0x0a34a5565e952ab27787a21a3f4e54b321ac0340

0x0A34A5565E952aB27787A21a3f4E54b321AC0340

このようにして、1つのウォレットから無限に報酬を受け取ることができました。噂によると、1日でアカウントごとに200ドルを得ていたとのことです。もしそれが100、200、300、1000のアカウントだったらどうでしょう?

あなたはそのバグを、コーダーでなければ見つけられるでしょうか?これは修辞的な質問です。

NFTプロジェクトのパブリックセールからの利益。 これも古い話です。皆さんは、Ternが行ったNFTセールのたびにコミュニティがどれほど動揺したかを覚えていることでしょう。多くの人が、パブリックセールでの一回のトランザクションでコレクションの半分を購入し、驚異的な利益を得るのを見て、FOMOを感じていました。NFTプロジェクトはいつも脆弱な契約で知られており、人々はそれを利用しました。tern、user221、RIGHTBLOCK、eslam、Nifoleko—彼らは伝説です… 具体例を挙げる必要はありませんが、たくさんありました。各パブリックセールから何十万ドルも稼がれていました。振り返ってみると、かなり簡単に見えます。しかし、強気市場では、ブロックチェーンやガスのすべての詳細を学ぶ時間はありませんでした。今こそ、このための理想的な市場です。

Murakami Flowers。 実際、これは示すべき良い例です。簡単に言えば、ある男がPythonで簡単なソフトを作成し、Murakami FlowersのNFTセールに130,000アカウントを登録しました。彼は923の席を獲得しました。これは6,400 ETH(その時点で約1800万ドル)の利益に相当します。このケースを完全に理解することをお勧めします。彼の話が本物であるかどうかは不明ですが、非常にシンプルなスクリプトでも大きなお金を稼げることを示しています。彼は手動で130,000アカウントを登録することができたでしょうか?これは修辞的な質問です。

Friend Tech。 信じられないかもしれませんが、こんな市場でもお金を稼げます。数百ドル、数千ドル、数十万ドル… この男は初めてPythonを見て、友人から60ドルを借り、そのお金を使って40,000ドルのポートフォリオを構築しました。スクリプトの論理は何かというと、彼は最初に「過小評価された」株をスナイプし、それが急騰して彼の資産を増やしました。それだけです。

このケース以外にも、私の知人がFriend Techでさまざまなケースを利用して銀行口座を増やした多くのケースがあります。初期のハイプの中で、たとえTwitterのフォロワーがゼロでも、あなたの株は数分で30~50ドルまで急騰しました。数ドルの投資で30~50ドルを得ることができ、そのプロセスを自動化することが可能でした。

Stars Arena。 いわゆるFriend Techのフォークです。ここでの話は究極の富についてではなく、むしろケースの内容についてです。この男は、このプロジェクトにおけるある脆弱性を発見しました。簡単に言えば、空気(0株)を売ることで一定の金額を得られました。文字通り無料のお金です。そして、これは契約のバグのおかげで可能でした。彼自身はこれから何も得られませんでしたが、ある「悪党」たちはこのことで300万ドルの流動性を引き出しました。

コードはあなたの技術的な見識を強化し、普通のアビューザーが決して見つけられないようなものを見つけることができます。そしてこれは契約のハッキングに関する話ではなく、プロセスの最適化、特定のタスクを実行するための最良の方法を探すこと、そしてホワイトハットのことです。

エアドロップ。 まあ、単純な例なしでは進められません。

Arbitrumでは、任意のパブリックソフトを見つけ、自分用に編集したり、簡単な自作を作成し、1000アカウントを500~1000ドルの投資で回し、すべてのアカウントでドロップを獲得し、保守的に100万ドルを得ました。

Hashflowでは、どのトランザクションでも33トークン(15ドル)のドロップがもらえ、AptosではNFTをミントし、Discordをリンクすることで150トークン(1000ドル)が得られ、Arbitrum Odysseyでは簡単なタスクで15~20ドルの価値のNFTがもらえました。すべてのプロジェクトで自動化が非常に簡単で、何十、何百、何千ものアカウントを使うことができました。確かに、コードを書いたが何も得られなかったプロジェクトもたくさんありました。しかし、それはプログラミングを学ぶ価値がないということにはなりません。「何をコードするか」が重要なのです。

最後に、チャットから私たちの同じ考えを持つ仲間の言葉をお伝えします

もし冗談なしで言うなら、みんなが「ベアマーケットにはテーマがない」と言っていた時、私は毎日、ボットをコーディングしてお金を稼げるテーマを見つけていました。私のライフチェンジはベアマーケットの間に実現しましたが、それは私がコーダーだったからです。

以前、暗号通貨の前から、いくつかのテーマに取り組んでいるときに「コーディングって本当に素晴らしいものだな、学校で教えるべきだ」と思っていました。テーマに関わる人なら誰でもPythonを知っているべきで、それによって10倍速く作業できるからです。

人々が何かテーマを見つけると、何とかしてそれを実現しようと考えます(例えば、YouTubeから100本の動画をダウンロードしようとして、無料のソフトを探している人が多いです)。私の場合、ソフトを書いて1000本の動画をダウンロードし、さらにそれを必要なカテゴリに整理し、すぐに適切な場所にアップロードしてお金を得ています。私は大多数よりも速いのです。

また、人々が優れたテーマを見つけると、100アカウントのファームを手作業で維持するのが大変だと感じて、結局ほんの少ししか稼げなかったり、あきらめたりすることが多いですが、私はボットを書いて、10倍以上の利益を上げています。

コードのおかげで、コストを削減したり、「システム」を回避する方法を見つけることができます(例えば、あるテーマでは米国の番号が必要で、SMSサービスの番号ではコードが受信できず、実際の番号だけが通過していました。しかし、面白いことに、SMSコードはフロントでのみ確認され、サーバーでは確認されませんでした。そのため、私は番号なしで大量のアカウントを登録することができました)。

さらに、コードのおかげで、2つのドレイナーを見つけてお金を失わずに済みました。

多くのコーダーは自分たちを神や天才だと考えています。

Adapt or Die
コードは「Adapt or Die」の最も鮮やかな例です。アカウントをソフトで回す人が増え、多くの人がシャベルを売り始め、非常に多くの人々が自動化に没頭していると、永遠に文句を言うことはできません。

あなたの懐疑的な考えは理解できますが、これは常にあったことです。これは「ルダリズム」と一言で表現できます。ルダリズムとは何でしょう?説明しますと、ある年(18世紀か19世紀)に労働者たちが、産業革命の際に彼らの職を奪う機械や工場に対抗し、ただそれを破壊したのです(文字通りと比喩的に)。似たような雰囲気を感じますか?

ルダイトは、19世紀初頭のイギリスで、産業革命に伴う機械導入に対する自発的な抗議運動の参加者です。ルダイトの観点からすると、機械は人々を生産から排除し、技術的失業を引き起こしていました。

非常に重要なことを理解する必要があります。ソフトは必ずしも10,000アカウントを必要とするわけではありません。自分の10アカウントでのすべてのアクティビティを処理するためのソフトを書けます。たとえその程度のアカウント数であっても、自作のソフトは退屈なルーチンを避ける手助けをし、あなたの多くの神経、時間、そしてお金を節約してくれます(!)それをより有益なことに使うことができるのです(別のソフトの作成?)。

数年後(強気市場の時)に、今日(そう、今日です。あなたの現在の日付は分かりませんが、2023年12月だと思います)コーディングを学ぶのを怠ったことを後悔し、自動化の機会を失い、たくさんのお金を稼ぐチャンスを失ったと気づくかもしれません。

経済的な節約
もう一度レトロなテーマに触れます。どれだけの現在のプロジェクトが回転中ですか?

L0、zk、Stark? まあ、そうですが、あまり正確ではありません。

なんとなく、このリストは今こうなっています:

L0、zk、Stark、zkEVM、opBNB、Base、Linea、Mantle、Optimism、Arbitrum、Scroll、EigenLayer、Zora、Manta、Debank、Taiko、Aptos、gem.xyz、Odos、Aevo、Aleo、PartyDAO、Polyhedra、AltLayer、Metamask、Opensea Pro、Lens、Zetachain、Farcaster、Lamina1、Ether.fi、Orbiter、Socket、Swell、Venom、Brahma、PhiLand、RabbitHole、Friend Tech、Blur、Aztec、Blast、Berachain、Monad、Fuel

「これらすべてのプロジェクトを回転させる必要があるのか?」この質問はこの記事のテーマには関係ありません。ここではあなた自身が決めることです。

このリストには約50の異なるプロジェクトがあります。何かはブロックチェーンで、何かはスワッププロトコル、何かはLSDプロトコルです。すべての作業の難易度は異なります。しかし、平均して各ソフトの価格を200〜300ドルとしましょう。つまり、すべてのプロジェクトを回転させる場合、約10,000〜15,000ドルをソフトに費やすことになります。

さらに、ソフトはおそらくクローズドであり、完全にセキュリティやアップデートを管理することはできないでしょう。

パブリックソフトの設定と起動
コーダーのためのTelegramチャンネルや、素晴らしいGitHubがあります。そこにはスクリプトの形でさまざまな興味深い資料がたくさんあります。これは素晴らしいことです。少なくとも、コーディングの知識があれば、それらを実行することができます :0 しかしさらに素晴らしいのは、既存の作業を自分用に修正できることです。

よくあるのは、必要な機能を持つソフトを見つけたけれども、そこにバグがあったり、ロジックを少し変更したい場合です。その場合、開発者に連絡することもできますが、ほとんどの場合、フィードバックを得られません。したがって、この問題を解決するための最良の方法は、コーディングを学ぶことです。修正したパブリックソフトを使用することで、あなたは:

  • 「自転車を再発明する」時間を無駄にしません。
  • 自分に合ったユニークなソフトを手に入れ、あなたのウォレットは、このパブリックソフトを使用している他の人のウォレットとはそれほど似ていません。

このスキルは「ホット」なアクティビティの際に大いに役立ちます。例えば、Arbitrumのドロップを考えてみましょう。状況を想像してください。あなたは座っていて、Arbitrumのクレームまであと20分です。自動引き出し用のソフトが準備されていますが、サイトや契約に何か変更があり、技術的な知識がなければ何もできなくなります。そして開発者はもちろん、この瞬間は非常に忙しいでしょう。この小さなことで、あなたは各ウォレットで手動でクレームし、すべてを自分で移動させなければならず、その間に時間が過ぎ、あなたのトークンは市場で安値で売られてしまい、20~30%の潜在的な利益を失うことになります。

すべてのモディフィケーション
これは前のポイントの続きです。あなたは自分のソフトだけでなく、パブリックソフトもモディファイすることができます。これを詳しく見ていきましょう。

あなたには、zkSyncのための究極のソフトを書くというタスクがあります。どんなモディフィケーションが考えられますか?

  1. 完全なランダム化/カスタマイズ
    トランザクションの時間/数/金額によってルートをランダム化またはカスタマイズすることができます。すべてのウォレットを同時に回転させたい場合は回転させ、3時間のウィンドウ内で全ウォレットを回転させ、7日間のディレイを設定した後に再度回転させることができます。つまり、すべてがあなたの手を離れて機能します。重要なのは、すべてを正しく設定することです。
  2. 任意のプロジェクトやアクティビティの追加
    ゴミのようなNFTコレクションをミントしたいなら、ミントします。zkSyncのスワップで、TVLが2ドルのところを回転させたければ、それもできます。
  3. 自分に合った究極のソフト
    チェッカー、ウェブインターフェース、Telegramへの通知送信、プロキシのサポート、さらにはUIの自動化などを追加できます。
  4. フォールトトレランス
    すべてがクラッシュしても、データベース、.jsonファイル、または通常のテキストファイルを使うことで、アカウントとそのルートに関するすべての情報を保存できます。
  5. マルチプロジェクトと「剃刀」の最小化(???)
    自分のソフトを知っていることで、複数のプロジェクトでアクティビティを同時に行うことができます。たとえば、Linea VoyageとScroll Quintic NFT用にソフトを設定し、50のアカウントを用意し、25ずつに分けて、1つのバッチでは最初にLineaを行い、次にScrollを行い、もう1つのバッチではその逆を行うことができます。要するに、どれだけ複雑にするかによって、どんな剃刀もあなたの何百万ものウォレットを見抜くことはできません。

つまり、あなたは文字通りあなたの鉄の奴隷たちの神になるのです!GitHubで既存のソフトを取り、監査し、書き直し、自分のものを追加して、本番環境に投入することができます!

監査
このポイントは前の内容から派生しています。

最近、開発者たちはますます多くのオープンソースのパブリックソフトを公開しています。しかし、次のような疑問が浮かびます。「コードにドレイナーがいるのか?」「開発者がナンセンスなコードを書いたので、このソフトで私が損をすることはないか?」など。コードが何であるか、ブロックチェーンがどのように機能するかを最低限理解することで、これらのソフトの監査を自分で行い、安心して使用することができます。これにより、時間を節約し(アカウントを手動で回す必要がなく)、お金を失うリスク(ドレインのケース)も避けられます。

さらに、もしソフトを購入する場合、その80%はクローズドコードであり、プログラマーはその中に何でも埋め込むことができます。コードに何かが隠されていることを常に恐れるのは奇妙ではありませんか?クレーム時にウォレットが盗まれるリスクがあります。売り手が自らのセキュリティに自信を持っていても、彼のコーダーが悪意のあるコードを埋め込んでいる可能性もあります(クリプト**ティのケースを思い出してみてください)。はい、購入したソフトのコードがオープンであっても、必ずチェックする必要があります。念のために。

最低限、以下のことを行うことができます:

  1. すべての契約アドレスを確認する(不正な契約へのトランザクションがないか確認するため)。
  2. さまざまなライブラリを使用して送信されるすべての送信リクエストを確認する(HTTPリクエストを使用してデータ(プライベートキーなど)を任意の場所に送信したり、GitHubや他のソースから追加のコードをロードしたりできます)。
  3. すべての接続されたライブラリを項目1と2で確認する
  4. 他人のスクリプトをローカルマシンで実行しない

この問題は概略的に説明されていますが、この記事では詳しく扱いません。

結論
手作業だけでライフチェンジを成功させるのはかなり難しいです。大きなチームを持つか、コーディングできる頭脳が必要です。あなたのアカウントや反復の数に応じて、利益を得る可能性が飛躍的に増加します。あなたは2倍、3倍、10倍ではなく、1000倍、数万倍強くなるのです!

この点ではすべてが線形です。1つのArbitrumアカウントを作成して1000ドルを獲得したら、1000のArbitrumアカウントを作成して100万ドルを獲得することができます。

時には、私たちはFOMOと数字の組み合わせだけを理解します。

プログラミングとは何ですか?

プログラミングが何であるかを知っている必要があります。知らない場合は、この記事を閉じてください。しかし、もしあなたが根気強いのなら、ぜひこの素晴らしいサイトを訪れて、その後にこの記事に戻ってきてください。

web3プログラマーは何をしていますか?
あなたはweb2のコーダーが何をしているかをすでに知っていると思います。web3にも開発者向けの多くの分野があります:

  • スマートコントラクトの作成
  • ウェブサイトの作成(フロントエンド/バックエンド)
  • …他にもたくさんの分野…
  • そして私たちにとって最も興味深いのは、プロセスの自動化です。

あなたはもう理解したと思いますが、スマートコントラクトの作成やウェブサイトの作成などについては考慮しません。私たちが必要としているのは、まだアビューザーの分野で回転している状態なので、簡単な暗号(だけでなく)プロセスの自動化で十分です。これがweb3開発への最初の一歩として最も簡単な方法です。

暗号プロセスの自動化はどのように機能し、HTTPリクエストとは何か
私たちの誰もがブラウザのアドレスバーを使って、サイト名やリンクを入力したことがあるでしょう。

Enterキーを押すと、ブラウザはアドレスバーに指定されたアドレスにHTTPリクエストを送信します。
サーバーはこのリクエストを受け取り、通常はHTMLページを返します。このHTMLページをブラウザが解析し、結果を表示します。
HTTPリクエストは、クライアントがサーバーに送信するメッセージで、特定のアクションを実行させるためのものです。
ウォレットとブロックチェーンのインタラクションも同じように機能します:

私たちは単に特別なHTTPリクエストをノード(サーバー)に送信し、ノードが何らかのアクションを実行します(例えば、残高を表示したり、トランザクションを送信したりします)。
つまり、ウォレットやブラウザは「ウェブインターフェース」として機能し、一般の人がどこをクリックすればよいかを理解し、その後にそのクリックの結果を確認できるようにします。

プログラミング言語を使うことで、ブラウザが行うことを余計な装飾なしで実行できます。
つまり、Pythonを使って1つまたは複数のHTTPリクエストを作成し、それをノードに送信し、レスポンスを受け取って適切に処理することができます。結果的に、ウェブインターフェースと同じ結果が得られますが、90%のユーザーを追い越すことができます。

第二のアプローチの利点は、最も基本的なプログラミングスキルでも、1秒間に1つのアカウントから数個のリクエストを送信して処理するのではなく、何百ものリクエストを複数のアカウントから送信して処理できることです。
さらに、あなたのスクリプトはこれらすべてを自動で行うことができ、あなたの貴重な時間を節約します。しかし、今はそれについてではありません。プログラミングのすべての魅力については、こちらで説明しました。

HTTPリクエストの概念は理解したと思います。それでは、暗号プロセスの自動化に直接移りましょう。

暗号プロセスの自動化とは、ウォレットで行うことができるすべてのアクションを指します。スマートコントラクトがどのように見えるかをすでに見たことがあると思いますし、その機能が「リード」と「ライト」に分かれていることに気づいていることでしょう。

リード機能は、契約から情報を無料で取得することを可能にします(例:totalSupply、decimalsなど)で、ブロックチェーンの状態には影響しません。

ライト機能は、ブロックチェーンの状態を変更することを前提としているため、投入が必要です(例:approve、transferなどの機能)。

つまり、簡単に言うと、私たちのタスクはリードとライト機能を自動化することです。

いずれにせよ、より低いレベルでは、これらは非常にシンプルに機能します。私たちのウォレット(クライアント)から、通常のHTTPリクエストをノード(サーバー)に送信し、そのノードが何かを行います(データを提供したり、ブロックチェーンの状態を変更したりします)。

ノードへのすべてのリクエストとレスポンスの詳細は、公式ドキュメントで確認できます: Ethereum JSON-RPC API
つまり、最もシンプルなweb3ウォレットを書くためには、必要なアドレスに必要なパラメータを含むHTTPリクエストをコードを通じて送信すればよいのです。

HTTPリクエストの例は、ブラウザのアドレスバーに入力する任意のリクエストとなります。しかし、web3とのインタラクションについて話すと、HTTPリクエストの例とその詳細な説明はここで確認できます。

また、このリクエストをPythonコードに変換することもできます。このウェブサイトを使うと簡単です。リクエストをコピーしてこのサイトに貼り付け、興味のあるプログラミング言語を選択するだけです(以下のスクリーンショットで詳細を示しています)。リクエストは通常、curlコマンド(URLのためのクライアント)という形式で表されます。

Curlは、コマンドラインから任意のリクエストを送信するための特別なユーティリティです。



すぐにネタバレ:公式ドキュメントを読む必要はありません。 特別なツール(ライブラリ)があり、これらを使うことで、ブロックチェーンと迅速かつ高品質にインタラクションし、必要なことをコードを使ってすべて行うことができます(とはいえ、すべてがどれほど簡単に機能しているかを理解することは嬉しいことであり、そこに魔法はありません)。

未検証の契約とトランザクション引数のリバースエンジニアリング
このセクションの主要な部分に進む前に、関数と引数が何であるかを簡単に理解する必要があります。

関数は、何かを入れる「黒い箱」のようなもので、そこに入れたもの(関数の引数)を使って箱の中で何かが行われ(関数のコードが実行され)、最終的に箱が何かを返します(関数の結果、これは新しい数値やタスクの状態などです)。結果は、私たちがこの「黒い箱」に何を入れたかによって異なります。

プログラミングでは、関数は通常、特定の1つのアクションを実行するように書かれます。実際に関数が何であるか、そしてその有用性を理解するために、小さな例を見てみましょう。ユーザーに挨拶するPythonの関数を書きます:

# 関数say_hiを作成
def say_hi():
    print('Hello')

# 関数say_hiを呼び出す
say_hi()  # ここで「Hello」と表示されます

最大限に無駄な関数が完成しました、やった!!

しかし、たとえこの無駄な関数でも、パラメータを追加することでより有用で実用的にできます。たとえば、ユーザーの名前を渡すために「name」というパラメータを追加しましょう。

# パラメータnameを持つ関数say_hiを作成
def say_hi(name):
    print('Hello,', name)

# 引数nameを持つ関数say_hiを呼び出す
say_hi(name='cryppi')  # ここで「Hello, cryppi」と表示されます
say_hi(name='ahillary')  # ここで「Hello, ahillary」と表示されます

これで、私たちの関数は依然として1つのアクション(ユーザーに挨拶する)を実行しますが、今度は名前も表示します。

これにより何が得られるでしょうか?想像してみてください。関数が1行のコードの代わりに10行や100行のコードを含んでいる場合、コードを複製したり、10行や100行のコードをどこにでも再入力する必要はありません。関数の名前を書いて丸括弧を付けるだけで済みます(関数を呼び出す)。関数に追加されたパラメータによって、その関数は最大限にカスタマイズ可能になります(プログラミングでは抽象的または一般化されたと言います)。

どこかでパラメータと書いたり、どこかで引数と書いたりするのはなぜですか?

  • パラメータは、関数が受け取る値です。
  • 引数は、プログラムで関数を呼び出すときに関数に渡される値です。

web3と私たちのトランザクションに戻りましょう。スマートコントラクトは、単にリードとライトの関数の集合です。したがって、スマートコントラクトへのすべてのアクセスは、関数の呼び出しを意味します。

  • ブロックチェーンには多くの契約があり、それぞれにトランザクションを送信することができます(必要な関数を呼び出す)。
  • 各契約には呼び出すことができる多くの関数があります。
  • そして、各関数には指定できる特別なパラメータがあります。

私たちはトランザクションが何であるか、どのように送信するかを理解しましたが、「どの引数を挿入すればよいのか?」という疑問が生じます。引数はしばしば簡単で理解しやすいです。

例えば、仮想の関数「swap」を考えてみましょう。この関数には3つのパラメータがあります:「fromToken」、「amount」、「toToken」です。

  • fromToken - スワップするトークン。
  • toToken - スワップ先のトークン。
  • amount - fromTokenの数量。

擬似コードでは、関数は次のように見えるかもしれません:

function swap(fromToken, toToken, amount)
{
    // ここに関数の本体:スワップを実行する長くて複雑なコードがあります。
}

このように、私たちの関数「swap」は次のように呼び出すことができます:

// 0.001 ETHをUSDCに交換
swap(eth_address, usdc_address, 0.001)
// 100 DAIをUSDCに交換
swap(dai_address, usdc_address, 100)

実際の生活では、もう少し複雑です。以下のトランザクションには、さらにいくつかのパラメータがあります。

シンプルなトランザクション(すべてのパラメータが理解しやすく、読みやすい):

  • minToAmount - ウォレットに受け取るべき第二のトークンの最小量(指定した量を契約が提供できない場合、トランザクションは成立しません)。このパラメータは、ウェブインターフェースで設定するスリッページから計算されます。
  • to - 「toToken」をどのアドレスに入金するか。この関数は、1つのウォレットからスワップし、別のウォレットにお金を入金することを可能にします。しかし、私たちの場合は、自分のアドレスを指定するだけです。

このスワップについては、記事の最後の「WooFiスワップの分析」セクションで詳しく説明します。

複雑なトランザクション。契約が未検証であり、上記の例のようにデコードされた引数を見ることができません。

「複雑なトランザクション」を解析するために、まず最初にABI(後で説明します)をGitHub、公式ドキュメント、または他のネットワークで探してみることをお勧めします。しかし、ABIがなくても、以下のツールを使って入力データをデコードすることができます:最初のツール、次のツール。

うまくいかなかった場合は、落胆しないでください。「トランザクションの引数のリバースエンジニアリング」を試みましょう。

スワップサイトは、トランザクションにどのパラメータを設定するかをどのように知っていると思いますか?そこには魔法はありません。単に、どこかのプログラマーが契約のドキュメントを調査し、必要なパラメータをすべて構成したのです。

サイトはこれらのパラメータをどのように知るのでしょうか?これも非常に簡単です:サイトは自分のサーバーにHTTPリクエストを行います(インターネット上のすべてのインタラクションは、「クライアント - サーバー」のHTTPリクエストを介して行われます)。サーバーは必要なすべてのパラメータを返し、その後、これらのパラメータを使ってトランザクションを送信します。しかし、この情報はなぜ必要なのでしょうか?私たちプログラマーは、これらのリクエストをキャッチし、コードを通じてそれらを模倣することができます(私たちはすでにHTTPリクエストを送信でき、curlコマンドを任意のプログラミング言語のコードに変換できることを思い出してください)。このトピックについて、私は大きなレッスンを録画し、最も人気のあるプログラミング言語でHTTPリクエストを素早く書いて模倣する方法に関する小さなガイドを書きました。

簡単に言うと、リクエストをキャッチするには、サイトの任意の部分を右クリックし、「コードを表示」を選択します。これにより、開発者コンソールが開き、「ネットワーク」タブに移動してリクエストの監視モードがオンになっていることを確認します。次に、「レスポンス」タブで必要なリクエストを見つけ、右クリックして「コピー → cURLとしてコピー」を選択します。その後、すでに知っているサイトにリクエストを貼り付け、必要なプログラミング言語を選択して楽しんでください。

ブロックチェーンアクティビティの自動化を快適に行うためには、HTTPリクエストとブラウザの動作を理解することが非常に重要です。そうすることで、自分のためにリクエストをキャッチできます。しかし、これでもうまくいかなかった場合、コードを通じて複雑なトランザクションを送信する別の方法もありますが、それはこの記事の範囲を超えています。**

あなたはこの記事の約40%を読みました。あなたがコーディングの必要性や、実際にweb3の自動化がどのように行われるかを理解できたことを願っています。実際、そんなに難しくはありません。もし全てが気に入ったら、ぜひ私たちのチャンネルを登録してください。私たちはこの2ヶ月間、この記事に取り組んできました。登録してね - cryppiとAhillary。そして、私たちは共同チャンネルも作りました。そこでは、あなたのコーディングの取り組みに役立つ何かがすぐに公開される予定です。そのチャンネルにも登録してください。ありがとうございます!

web3に適したプログラミング言語

多くの人が、最適なプログラミング言語は存在しないことを理解しています。プログラミング言語は、まず第一にプログラマーの手の中にあるツールです。そして、タスクはさまざまなものがあり、どのプログラミング言語が適しているかは異なります。「釘を打つ」というタスクがあるとき、ハンマーとノコギリのどちらを選ぶかを長く考えることはないでしょう。プログラミング言語も同じです。

ここでは、暗号に関連する主なプログラミング言語を見て、それぞれの利点と欠点を挙げてみましょう。

Python

…最もシンプルなプログラミング言語の1つで、暗号プロセスの自動化に非常に適しています。

  • 非常に簡単なプログラミング言語(ほとんどの時間、あなたは「何を書くか?」を考え、ではなく「どのように書くか?」を考えます)

  • Pythonで書くweb3開発者の巨大なコミュニティがあります(あなたが直面する可能性のあるほとんどの問題はすでに解決されているため、Googleで答えを簡単に見つけたり、答えを教えてくれる人を見つけたりできます)

  • 自転車を再発明する必要がなく、迅速にタスクを解決できる多くの公式および非公式のライブラリがあります。

  • 「新しい」プロジェクトにおける良いライブラリの不足。プロジェクトはまずAPIのドキュメントを公開し、JavaScriptプログラマーがそのドキュメントを迅速に実装することが多いため、JavaScriptでのライブラリが先に出され、その後に熱心な人たちがPythonに書き直すことが多いです。たとえプロジェクトにPythonのライブラリがあっても、文書が不十分だったり、分かりにくく書かれている場合があります(例えば、StarkNetやAptosなど)。それでも、これらと作業することは可能です。逆に、APIのドキュメントがあれば、ライブラリのリリースを待つ必要はありません。requestsライブラリを使って独自に実装することができます(以下にBinanceの例を示します)。

「Pythonは遅いプログラミング言語だという事実はどうなの?」
Pythonに対するこのような意見をよく聞きます。以前に述べたように、ブロックチェーンとやり取りするためには、リクエストを送信して応答を受け取る必要があります。リクエストの送信速度はすべての言語でほぼ同じです。速度により大きく影響するのは、自身のノードの有無、実行コードの位置、およびRPCです。私の見解では、「速いC++」でコードを書くのに1ヶ月かかるのと、Pythonでコードを書くのに1日かかるのとを比較すると、明らかです。

JavaScript

…非常に優れたプログラミング言語です(Javaとは異なる、全く別の言語です)。JavaScriptを使えば、ほぼすべてを行うことができます:フロントエンド、バックエンド、2D/3Dゲームの作成など。また、この言語も暗号プロセスの自動化に非常に適しています。

  • 世界中に大きな開発者コミュニティがあります(web3だけでなくweb2にも)。

  • ほとんどの暗号プロジェクトは、システムとのインタラクションのためにJavaScriptでライブラリを公開します。これは、ほとんどのウェブサービスがJavaScriptで書かれているからです。プロジェクトはJavaScriptでライブラリを提供し、他のプロジェクトがそれに基づいて何かを構築できるようにしています。

  • 最も簡単な言語ではありません。多くの落とし穴があり、初心者には難しいです。

Solidity

…Ethereumプラットフォームのスマートコントラクトを開発するための言語です。この言語を使ってトランザクションを送信することもできますが、契約はリクエストがウォレットからではなく、別の契約から送信されていることを理解します(この特性は以前、ハッカーがスマートコントラクトをハッキングするために使用していました)。私たちの目的(アビューズ)には適していませんが、ブロックチェーンとより低いレベルで対話し、NFTセールやStars Arenaなどを通じてスマートコントラクトを介して引き出すことを希望する人には非常に適しています。

Solidityは、Ethereumエコシステム内で自分のプロジェクトを構築したい人にも適していますが、ソースコードはすべての人に(ハッカーを含む)公開されることを理解しておく必要があります。そのため、開発には慎重に取り組む必要があり、安全性に多くの注意を払わなければなりません(または他人の契約をフォークするだけです)。低レベルのプログラミング言語での開発経験は、Solidityをより適切に扱うのに役立ちます(そのため、この言語は初心者にはあまり適していません)。

  • スマートコントラクトに対して複雑なトランザクションを開始することができます。

  • 単一の目的のために作成された、かなり制限されたプログラミング言語です。

  • 私たちの目的には適していません。

  • 完全に初心者には適していません。Solidityは多くの欠点を持つ複雑なプログラミング言語です。低レベルの言語(C++など)での開発経験がなければ、この言語を理解し、使用するのは非常に困難です(特にセキュリティに関する作業の経験が必要なため、開発者になるのが難しいです)。

Golang、Rust、C++ など

これらのプログラミング言語については、みんな何かしら耳にしたことがあると思います。はい、存在します。はい、暗号向けにコーディングできますが、私たちはこれらの言語を検討しません。なぜなら、相対的に難しく、初心者が学ぶにはあまり合理的ではないからです。

UI自動化(BAS、Zennoposter)

BASとZennoposterはプログラミング言語ではありませんが、目標達成に役立つツールです。これらのツールの意味は、コードを使わずにブラウザを介してすべてを自動化できることです。ざっくり言うと、これらのツールにブラウザでどこをクリックするか、どのくらいの遅延を使用するかを指示できます。

  • 非常に簡単に習得できます。

  • 小規模なアカウント数を処理する必要がある場合、効果的に機能します。

  • 「UIタッチ」を行うことができます。

  • 多くのアカウントの農場での作業には適していません(インターネット、サイト、プログラムに問題が発生する可能性があるため、これらのツールを使用した開発は「開発」から「バグ捕獲」に移行します)。

  • 大量のインターネットリソースでの作業には適していません(UIに強く依存しているため、サイトの開発者がフロントエンドを少し変更すると、これらのツールが必要な作業を行わなくなる可能性があります)。

UI自動化についてもう一度。この記事のフィードバックを集めている間、私たちはBASとZennoposterについて非常に軽く触れたという意見をいくつか聞きました。はい、その点に関しては同意しますし、これらのツールを使うことで自動化に入りやすく、便利であることにも同意します。しかし、私たちの記事はあくまでコーディングについてです。私たちは、UI自動化が短期的には良いものであると考えています(スクリプトの設計ロジックについてもっと学ぶことができます)が、こうした方法で大規模なプロジェクトを行うことはできません。コーディングの知識があれば可能です。コードを学びましょう。

UI自動化(Selenium、Playwright、UIAutomator2)

これらもプログラミング言語ではありません。これらは、ウェブアプリケーションやモバイルアプリケーションのユーザーインターフェース(UI)との相互作用をテストおよび自動化するためのフレームワーク(言語の機能を拡張するコード)です。プログラミング言語(例えば、Python、JavaScript、Java)を知っていれば、これらのフレームワークのいずれかを非常に迅速に理解し、UIの自動化に利用できます。

これらのフレームワークを使うことで、ユーザーがコンピュータでマウスやキーボードを使ったり、電話で指を使ったりして行うすべての操作(クリック、フォームの入力(サイトへの登録/ログイン)、リクエストの送信、キャプチャの解決、拡張機能の使用(例えば、Metamask)など)を実行することができます。

  • 非常に簡単に習得できます。

  • クライアントサイドで構成された複雑なリクエストを自動化することができます。

  • 「UIタッチ」を行うことができます。

  • スクリプトの脆弱性:スクリプトは、ユーザーインターフェースやアプリケーションの構造の変更により脆弱になり、簡単に壊れてしまう可能性があります。わずかな変更でもスクリプトの更新が必要になることがあります。このため、保守が難しく、常に更新が必要であり、外部要因に依存し、時間がかかることがあります。

  • 作業の難しさ:いくつかのケースでは、フレームワークが特定の技術、複雑なアニメーション、または動的コンテンツの処理に制限に直面することがあります。

なぜPythonがweb3の学習に最適な言語なのか?

私たちは私たちの目的に適した主要なプログラミング言語を検討しましたが、それらの違いを理解していただけたことを願っています。しかし…

私たちは、暗号のコーディングを始めるのに最も適しているのはPythonだと考えています。なぜでしょうか?

Pythonとは?
Pythonは、高水準のインタプリタ型プログラミング言語で、動的型付けが行われています :cold_sweat:

では、順を追って説明しましょう:

  • インタプリタ型とは、言語が「行単位」で実行されることを意味します。言語の各行は、コンピュータに対する命令です。
  • インタプリタは、コードを行ごとに読み取り、あなたのコードをコンピュータの言語にその場で「翻訳」する特別なプログラムです。もしコードの末尾にエラーがあっても、上の部分は正常に実行されます。インタプリタ型プログラミング言語とコンパイラ型プログラミング言語の主な違いは、コンパイラ型言語はコンパイル時に実行可能ファイルを生成し、そのファイルを後で実行するということです(プログラムのコードが変更された場合、実行可能ファイルは再コンパイルが必要であり、コードにエラーがあると、プログラムはコンパイルすらできません)。インタプリタは毎回コードを機械語に変換する必要があるため、インタプリタ型言語はコンパイラ型言語よりも動作が遅くなります。
  • 高水準の言語とは、非常に簡単に言えば、高水準であるほど人間に近い表現を持つということです。たとえば、「アセンブリとPythonの違い」をググるか、こちらを見てみてください。
  • 動的型付けとは、基本的にプログラミングがデータをジャグリングすることであることを意味します。データを読み取り、書き込み、再書き込みできます。データにはさまざまなタイプがあります:整数、小数、文字列、配列など。コンピュータはこれらのデータに対してメモリを確保する必要があります。厳密に型付けされた言語では、コンピュータにどれだけのメモリを確保するかを明示的に指示する必要がありますが、動的型付けの言語では、コンピュータが自動的にメモリのサイズを計算する必要があります。このため、時間的には不利ですが、言語への敷居が低くなります。

なぜPythonを優先するのか?
Pythonは最もシンプルなプログラミング言語の1つであり、非常に複雑なことを実現することができます(YouTubeの一部もPythonで書かれています)。この言語は多くの初心者のミスを許容し、実践的な開発に迅速に取り組むことを可能にします。また、Pythonには大規模で強力なコミュニティがあるため、「自転車」は常に再発明されることはありません。

Pythonには、ほぼすべてのブロックチェーン用に書かれたライブラリが存在しており、この事実は私たちが実装方法ではなく、課題について考えることを可能にします。

中には「なぜJavaScriptではないのか?」と疑問に思う方もいるかもしれません。深く掘り下げてみると、私の主観的な意見として、JavaScriptはC++に近い難しさがあり、多くの落とし穴があるため、初心者には難しいと感じます。私の最初のプログラミング言語はC++で、その後にPythonとJavaScriptを学びました。Pythonは約1〜2週間で習得できましたが、JavaScriptには約4ヶ月かかり、すべてを理解するのに苦労しました。

どのようにプログラミングを学ぶか?

これで私たちは本題に入りました。あなたのプログラミングを学ぶ方法はどうすればいいのでしょうか?これからそれを明らかにしていきましょう。

一般的なアドバイス

この部分では、学び始める際に役立つ一般的なアドバイスを提供します。

フォーマット
Pythonを選択しました。学び始める際には、情報を受け取るのに最も快適なフォーマットを選ぶことをお勧めします:

  • YouTubeの動画
  • 書籍
  • 厳密なドキュメントなど

私は個人的にYouTubeの動画を支持していますが、最終的には厳密なドキュメントに戻ることになります。なぜなら、そこに最も最新の情報があるからです。情報を質の高く受け取ることが非常に重要です。なぜなら、この段階で基礎が築かれるからです。

自分をバカだと思っている教師を探す
フォーマットが決まったら、次はコンテンツの作者を評価する必要があります。プログラミングに本当に精通し、かつ分かりやすい言葉で説明できる人を見つけるのは非常に難しいという問題があります。

「分かりやすい言葉で説明できる」とはどういう意味でしょうか?それは、その人が初心者のレベルに降りてきて、理解しやすい言葉で説明できることを意味します。失礼があってはいけませんが、あなたがバカだと考えられているのが理想的です。

まず第一に、すべての細かい点が丁寧に説明されます。

第二に、どんな質問でも気軽に聞けるようになります。

学習のためのお金(貴族への秘密)
ほとんどすべての専門分野はインターネットを通じて学ぶことができます。しかし、問題は、しばしば落とし穴につまずき、「役に立たないこと」に時間とモチベーションを費やすことです。web3では、各落とし穴が金銭的な損失につながる可能性があります:

  • 間違って送信されたトランザクション = すべてのアカウントを失う。
  • 正しくないデータを取得 = ウォレットのデポジットを失う。
  • あるいは、単に無駄なコードを書いた = 時間と神経を失う。

信じられないかもしれませんが、この問題はメンターによって解決されます。しかし、別の問題が発生します。「メンターが本当にその道で優れていて、あなたが必要なことを教えてくれるかどうかをどう判断するか?」この場合、運が大きな役割を果たしますが、リスクを最小限に抑えるために、以下の点に注意することをお勧めします。

  • メンターにはオープンなコンテンツがある。オープンなコンテンツで、レビューを見つけたり、その人があなたにとって分かりやすいかどうかを分析することができます。
  • メンターには実践的な経験がある。非常に多くの場合、メンターは経験のない人を雇い、彼らに低い給料を支払うことができます。
  • メンターのプログラムは、あなたが学びたいことに合っている。プログラムを誰かに見せて、その人から意見をもらうことをお勧めします。

私自身は、高水準のプログラミング言語(Python、JavaScript、PHP)や低水準のプログラミング言語(C/C++、C#)の経験があります。それでも、web3とweb2の開発に関してはメンターを持っています。メンターに支払うとき、あなたは彼の経験を購入し、貴重な時間を節約することができます。私にとっては、数ヶ月間の非常に有用でフィルタリングされた情報にパッケージされた何年もの経験を持つ人を購入するのは賢いことです。しかし、まだ貴族でなく、星に向かって突き進むための時間がある場合は、記事の最後にPythonでのweb3自動化に関するロードマップを用意します。

実践

この部分では、実践に関する一般的なアドバイスを提供します。この段階では、自分のプロジェクトを書くために必要なすべてを持っています。言語を知り、必要なライブラリを選び、理解して準備が整いました。実践中には、実際には何も知らないように感じるかもしれませんし、すべての理論が自分にとって無意味だったのではないかと思うこともあるでしょう。しかし、それは違います。理論と実践は一体の異なる二つの要素だからです。開発者になるためには、単に理論を学ぶだけでは不十分です。理論を常に実践で補強する必要があります。なぜなら、実践はあなたにすべての理論的知識を組み合わせることや、現在必要なものをググる能力を求めるからです(時には独自の解決策を考える必要がある場合もあります)。一部の開発者は最初に理論を飛ばして実践を学ぶことを選びます。この方法も有効ですが、選択することで言語のいくつかの有用な機能を見逃したり、最適でないコードを書くことになる可能性があります。

理論と実践をうまく組み合わせ、最初は簡単に見えるタスクを飛ばさないことが重要です。しかし、簡単なタスクと難しいタスクを区別する能力も必要です。そうしないと、燃え尽きてしまったり、無駄に多くの時間を費やしてしまうことがあります。この場合、経験豊富な仲間やメンターが助けになるかもしれません(プログラミングのチャットで両方を見つけることができます)。

プログラミング言語を学ぶ際には、@ahillaryのチャンネルの実践問題を解くことをお勧めします。各トピックに対して、3つのレベル(最も簡単なものから難しいものまで)の問題が見つかります。

フレームワークに合った実践を見つけるのは簡単です。なぜこのフレームワークを選んだのかを思い出してください。以前から書きたかったことを実現し、どんな困難に直面しても構いません。

時には、楽しいことと有益なことを組み合わせて、自分のサービスを市場に提供することもできます(無料でも)。1〜2件の依頼や1〜2ヶ月の仕事を通じて、すべてのスキルを大いに向上させることができるかもしれませんし、収入を得たり、新しい有益な出会いを得ることもできるかもしれません。

実践に関するアドバイス
理論の後に実践に移りましょう。前述の通り、理論と実践のバランスについて書きましたが、ここでは、コードを書いた後にドキュメントに戻るたびに「こんなことができたのか?!」という考えが浮かぶことが何度もあったことをお伝えしたいです。

紙にコードを書く。
私は、どの言語の基本を学ぶための最良の実践方法はこれだと考えています。紙にコードを書くと、間違いを犯す権利がなくなります(間違えると、再度書き直さなければならないからです)。最も良い点は、各行のコードについて考え始め、次にどの行が実行されるのか、そしてその行がどのように実行されるのかを考えるようになることです(あなたはコードのインタープリターになります)。このような実践は、理論のすべての弱点を見つけるのに役立ちます。多くの初心者は、何かがうまくいかないときに、無思考でコードを変更し「それ」が動くことを期待しますが、紙を使った場合はそのようにはいきません。また、いくつかの企業は、ライフコーディングの面接時に候補者に「紙にコードを書く」ように求めます。

紙の他にも、コードの各行で何が起こっているかを示してくれるビジュアライザーを使用することができます(各変数の値、インタープリター/コンパイラーが次に実行するステップなど)。私が何度も助けられたビジュアライザーはこちらです: Python Tutor

他人のコードを読む
このアドバイスは、より進んだコーダーに向けられています。他人のコードを読むことはしばしば難しいですが、非常に有益です。他人のコードには、理論やドキュメントの学習中に見逃したさまざまな言語のテクニックが含まれていることがあります。特に注目すべき点は、他人のコードにおけるアーキテクチャです。時間が経つにつれて、あなたのプロジェクトは大きくなり、その維持はますます難しくなります。スケーラブルでフォールトトレラントなコードを書く方法がありますが、これらの技術はすべてアーキテクチャに関連しています。

しかし、もしあなたがすでに言語を学び、大きなプロジェクトを書きたいのに、デザインパターンに関する分厚い本を読みたくない場合はどうすればよいのでしょうか?答えは簡単です - 他のプロジェクトでアーキテクチャやコードのスタイルを参考にしましょう。ただし、ここには一つの注意点があります:質の低いコードに出くわす可能性があります。幸いなことに、質の低いコードの可能性が最小限の場所があります。たとえば、プロジェクトの公式ライブラリでコードのアーキテクチャを参照できます。また、アルゴリズムの美しい解決策は、LeetCodeのトップソリューションで見ることができます。

IDE

さて、コードを書く場所を見つける必要があります。コードは単なるテキストであり、インタープリターやコンパイラーがそれを実行します。したがって、メモ帳でコードを書くことも可能ですが、それは不便です。プログラマーが快適に作業できるように、IDE(統合開発環境)が作成されました。

メモ帳とIDEの違いは以下の通りです:

  • シンタックスハイライトがある(コードの読み取りと編集が容易になります)。
  • オートコンプリート機能がある(長いコマンドを完全に書く必要がなく、よく知られているT9のように機能します)。
  • 内蔵リンター(すべてのIDEに存在するわけではありませんが、初心者には内蔵リンターがあるIDEを使用するか、好きなIDEにリンターをインストールすることをお勧めします)。どの言語にも文法や句読点などのルールがあります。これらのルールを守らないと、他の人はあなたのことを理解するかもしれませんが、あなたの知能を疑うでしょう。プログラミング言語でも同様のことが言えます。言語には特定の書き方のルールがあります。インタープリターやコンパイラーは、あなたがコードを書く方法には関心がありませんが、コードを読む人々は、やはりあなたの知能を疑うでしょう。ですから、すぐに適切に標準に従ってコードを書くことをお勧めします。標準を学ぶことやコードの文法についての本を読むことは非常に退屈な作業だと理解しています。そこで、あなたのすべてのミスを強調し、詳細に説明してくれるリンターが発明されたのです。

具体的にPythonで最も人気のあるIDEは次の2つです:

  • PyCharm - プロの開発者向けにはやや重いプログラムですが、Pythonコードを快適に作業できるように設計されており、余計な手間はかかりません。内蔵リンターがあります。初心者に非常にお勧めします。
  • VS Code - 軽量のプログラムで、初めて起動したときにはあまり機能がありません。しかし、VS Codeには数多くの無料の「バッテリー」(プラグイン)があり、これによりPythonだけでなく、他の人気のあるプログラミング言語の開発ツールに変えることができます。初心者も使用できますが、コードを実行する段階でいくつかの困難に直面するかもしれません。しかし、このツールは非常に人気があるため、その困難は将来的に報われることでしょう。

他のプログラミング言語に関しては、「{…}のためのトップIDE」というリクエストでYouTubeの動画を探すことをお勧めします。

フレームワーク(ライブラリ)

学習のベクトルが設定され、IDEが選ばれ、プログラミング言語が学ばれました。次は何をするべきでしょうか?純粋なプログラミング言語は、エンジンのない車のようなものです。音楽を聴いたり、雨から避けたり、友達の前で自慢したりできますが、その潜在能力は発揮されていません。プログラミング言語の場合、そのエンジンとなるのが「フレームワーク」(ライブラリ)です。フレームワークは、言語のすべての機能を本当に引き出し、特定の実用的なタスクに言語を使用することを可能にします。車には異なるエンジンを取り付けることができます(ドリフトには1つのエンジン、ドラッグには別のエンジン、街中の運転には別のエンジンが必要です)。プログラミング言語にも、さまざまなタスクに応じて異なるフレームワークを挿入できます。フレームワークを学ぶのには、言語自体を学ぶよりも多くの時間がかかることがよくあります。しかし、その時間は確実に回収でき、最終的には自分に必要なものを迅速に開発することができます。

より専門的な言葉で言えば、フレームワークとライブラリは区別する必要があります:

  • ライブラリは、特定のタスクを解決するために設計された関数やクラスの集まりです(例えば、HTTPリクエストを送信したり、ユーザーセッションを作成したりするための「requests」ライブラリなど)。
  • フレームワークは、ソフトウェア開発のための基盤(インフラストラクチャ)であり、アプリケーションの作成を簡素化します。非常に多くの場合、フレームワーク自体がプログラムの実行の流れを管理します(例えば、ウェブサイト開発のためのDjangoフレームワークは、プロジェクトのファイル構造を提供し、リクエストを処理するウェブサーバーとして機能することができます)。

簡単に言えば、私たちは「フレームワーク」と「ライブラリ」という概念を分けることはしません。

各プログラミング言語には、「箱から出してすぐに使える」標準ライブラリがあります。また、シンプルなコマンドで追加のライブラリやフレームワークをインストールすることも常に可能です。このメカニズムは、新しいライブラリが毎日リリースされ、誰でも自分のライブラリを作成して公開できることを考慮しています。つまり、あなたは必要なタスクに応じてプログラミング言語を拡張でき、余分な依存関係を避けることができます。

フレームワークやライブラリは、言語の機能を拡張します(それらがなければ、誰もその言語を使わないでしょう)。まさに、ライブラリを作成する活発なコミュニティのおかげで、多くの言語が人気を博しました。

プログラミングの主要なルールは「自転車を作るな!」です。何かプログラムを作成している場合は、必ずググってみてください。必要な機能はすでに誰かがライブラリで実装している可能性が高いです(99%の確率で必要なものが見つかるでしょう)。そのため、ライブラリやフレームワークを利用することをお勧めします。

web3について言えば、EVMネットワークと対話するためにPythonにはweb3.pyというライブラリがあります。JavaScriptにはweb3.jsethers.jsの2つの人気のあるライブラリがあります。

EVMネットワーク以外(例えば、StarkNetやAptosなど)の場合、プロジェクトはしばしば独自のライブラリを公開します。これらのライブラリは、SDK(ソフトウェア開発キット)と呼ばれることがよくあります。SDKには、ブロックチェーンとのインタラクションに必要なすべての機能が含まれています。

特に、web3のライブラリやさまざまなSDKを学ぶのに多くの時間は必要ありません(1〜2日で例を見ながら習得できます)。

エアドロップでの実践

「アビューズはすぐに終わるだろう」という意見があり、数量よりも質を重視する方が利益が出るとされています。しかし、習得するまでにそれが時代遅れになるかもしれないのに、プログラミングを学ぶことはどれほど意味があるのでしょうか?

EVMベースのブロックチェーンでは、すべてがスマートコントラクトに依存しています。それらと対話するためには、スマートコントラクトからデータを読み取り、トランザクションを送信する能力が必要です(その前にトランザクションを構成する必要があります)。つまり、web3との対話を学べば、エアドロップからNFTや他のweb3メタに簡単に切り替えることができるということです。

プログラミングの実践は、ジムでのトレーニングにいくつかの類似点があります。進歩するためには、重量を増やす(タスクを難しくする)努力をし、さまざまなエクササイズ(異なるタスク)を行う必要があります。たとえば、最初は非常に簡単なトランザクションを送信することを学び(以下に例があります)、その後、より複雑なものに移行します。あるいは、最初は1つのスワップで1つのアカウントを処理するコードを書き、その後、5、10、100、1000のアカウントを1、2、5、10、50のスワップで処理できるようにコードを追加します。これを念頭に置いて、ロードマップでの実践に進んでください。

下の画像には、簡単なトランザクションと複雑なトランザクションの例があります。さまざまなレベルの複雑さを持つトランザクションを送信できるようにしておく必要があります。

簡単な引数:

より複雑な引数:

人気プロジェクトは何に基づいているか(L0、zk、Stark)?

ほとんどのプロジェクトは、契約を書くためにSolidityを使用するか、独自の言語を使用するか、あまり人気のない言語(例えば、StarknetのCairoなど)を使用しています。初心者にとって、こうした言語を学ぶのは非常に難しく、目的に合わないことが多いです。さらに、こうした言語の主な問題はコミュニティが小さいことです。質問をする相手がいなく、問題をググるのも非常に困難です。

平均的なソフトウェアの開発にかかる時間と必要な知識

開発にかかる時間は、あなたの経験と特定のアクティビティの難しさによって異なります。少しでも経験があれば、1つのアクティビティを自動化するのに2〜3時間で簡単に終わることができます。ただし、例外もあります。例えば、zkSyncでは未検証のコントラクトに直面し、それに対処する方法を理解するのに5〜8時間の集中作業が必要です。また、標準的なEVMブロックチェーン以外での開発(例えば、StarknetやAptos)では、ブロックチェーンそのものを理解するためにさらに5〜12時間の集中作業が求められます。

アクティビティが書き終わった後は、それらを正しく「指揮」する必要があります。無作為にエラーなく動作させるためです。これにも数時間の作業が必要です。中程度の経験があれば、1つのアクティビティに約1.5時間、ソフトウェアを適切に整理してテストするのにさらに1時間が必要です。

暗号コーダーでいることはどれほど簡単か
web3のプロセス自動化は、実質的に練習に費やす時間以外はほとんど何も要求しません。web2には、言語そのものよりも難しいフレームワークがあります。例えば、Pythonでのバックエンド開発者の職を得るためには、その言語だけでなく、Django、FastAPI、SQL、AWS、RabbitMQ、Celery、Redis、MongoDBなど多くの技術を学ぶ必要があります。これらすべてを学ぶのに多くの人が1年以上かかり、ようやくジュニアレベルの求人に応募するチャンスが得られます(次のレベルには商業的な経験が必要です)。

しかし、web3で良いコードを書いてプロセスを自動化する方法を学ぶには、最大でも1〜2ヶ月(Pythonの知識がしっかりしていることを前提に)です。つまり、1〜2ヶ月後には、必要なほとんどすべてを自動化し、日常生活で活用できるようになります。コーディングを試したい初心者にとって素晴らしい展望です。

Pythonのweb3開発者ロードマップ

ついにロードマップに到達しました。ロードマップとは、単なるガイドです。コードを通じてブロックチェーンに接続し、トランザクションを送信する方法を説明するつもりはありません。もっと素晴らしいことをします。他の勇敢な仲間たちが行った作業を参考にし、ブロックチェーンに接続しトランザクションを送信する方法を学ぶための記事や動画へのリンクを提供します。ロードマップの魅力は、すべてを学ぶ正しい順序と、実践すべきことを示すことです。

とても重要です!

ロードマップは不完全であまり情報がないように見えるかもしれませんが、私たちの経験はその逆を示しています。私たちは、理解しづらいリンクを数千も埋め込むことは避けました。それは無駄です。誰も読まないからです。私たちはあなたに骨組みを提供しますので、必要な資料を自分で探してください。 各項目は主観的であり、無限に追加される可能性があります。 ロードマップを完了するのにかかる期間は約2〜3ヶ月を見込んでいます。 そして、ロードマップで最も重要なことは、あなた自身の目標です。誰かの目標はプロジェクトを立ち上げることかもしれません。誰かの目標はアンチドレインツールを書くことかもしれません。誰かの目標は、Lineaのクエストに対応した究極のソフトウェアを書くことかもしれません。その目標を忘れないでください。

さあ、始めましょう!

実践
ここでは非常にシンプルです。あなたには何らかの目標が必要です。自動化したいプロジェクトを選び、それを実現しましょう。

もう一つの素晴らしい実践の方法は、チャットで誰かに自分のサービスを提供することです。経験が少なくても、野心があれば、必ず成功し、大きく成長できます。重要なのは、恐れないことです。もしまったく経験がなく、自動化するアイデアがない場合は、以下のような実践のロードマップを提案します。

  • LayerZero Stargate - ここでは、クラシックなトランザクションを送信し、ドキュメントを読むことを学びます。
  • ZkSync Era - このブロックチェーンの契約は未検証であり、特定の問題があります。
  • ZkSync Lite - このブロックチェーンでは、すべてのトランザクションが署名に基づいて動作します。
  • StarkNet - 非EVMブロックチェーンの取り扱いを理解するために、しっかりと調査することをお勧めします。
  • Aptos - これもEVMではないブロックチェーンで、独自で他にはないアーキテクチャを持っています。

これらのプロジェクトを理解できれば、他の自動化もかなり簡単なタスクになるでしょう。しかし、自分自身のプロジェクトのロードマップを作成する方がさらに良いです。以下のように、たくさんのプロジェクトが存在します:

L0、zk、Stark、zkEVM、opBNB、Base、Linea、Mantle、Optimism、Arbitrum、Scroll、EigenLayer、Zora、Manta、Debank、Taiko、Aptos、gem.xyz、Odos、Aevo、Aleo、PartyDAO、Polyhedra、AltLayer、Metamask、Opensea Pro、Lens、Zetachain、Farcaster、Lamina1、Ether.fi、Orbiter、Socket、Swell、Venom、Brahma、PhiLand、RabbitHole、Friend Tech、Blur、Aztec、Blast、Berachain、Monad、Fuel

また、流行のメタ向けに自動化を書くことも忘れないでください(レトロではなく、たとえばMemelandやFriend.tech向けに)。最初の利益ほど強いモチベーションはありません。最初の10〜20ドルを稼ぐと、もっと、早く、巧妙に得たいという欲求が芽生えます。時間や困難を忘れ、ひたすら流れに乗って取り組むようになります。

このパートを書いている時点(12月3日)で、市場は非常に活発であり、毎日たくさんの利益のあるアクティビティがあります。ぜひ試してみてください。

追加のモチベーション
こちらは、私たちの仲間の一人の経験です。彼がどのように現在のメタを自動化し、良い収入(10,000ドル以上)を得たかについて紹介します。

ケース1 - Binance NFT

2021年、NFTのハイプに乗って、Binanceは自社のマーケットプレイスを立ち上げ、週に1〜2回の頻度でドロップを開始しました。最初のうちは、このドロップに対する熱狂はすさまじく、もちろん、それに合わせてボットが書かれ始めました。
私も例外ではありませんでした。スクリプトは非常にシンプルで、ドロップの1分前から購入リクエストの定期的な送信が始まりました(制限にかからないように最小限の間隔で)。さらに、いくつかのサーバー、スクリプト、アカウントを追加しました。

なぜスクリプトを事前に起動したのか?それは、ドロップがしばしば指定された時刻ぴったりには始まらなかったからです(例えば、14:00:00ではなく、13:59:58に開始されることがありました)。加えて、送信するリクエストには、ネットワーク遅延を考慮して、ドロップの開始時刻にちょうど届くように事前に送信する必要がありました。結果として、一般のユーザーがサイト上でカウントダウンが終了し、「購入」ボタンがアクティブになったときには、すでに購入するものはありませんでした。ボットがすべてを持ち去ってしまったのです。Binanceチームはボットに対抗するため、1つのIPアドレスからのリクエスト数に対してより厳しい制限を設け、CAPTCHAを導入しました。しかし、これらの対策も成功裏に回避されました。

スクリーンショットには、最も魅力的で迅速な収益の1つが示されています - StepNのケースです。ドロップを捕まえるだけでなく、Binance NFTマーケットプレイスでのフリップ用のスクリプトも書かれました。このボットは、さまざまなNFTの販売統計を収集し、新しい提案を同時に監視しました。市場がかなり新しかったため、多くのユーザーがこれらのNFTの実際の価値(実際の価値とは、これらのNFTが実際に売れた価格で、比較的頻繁に取引される価格を意味します)を理解していませんでした。特に、NFTが希少性やその他の詳細に分かれている場合はそうです。

正確な収入は言えませんが、この活動は半年間続き、さまざまな速度やボリュームで行われました。


ある日、MOBOXが突然嬉しいニュースを届けてくれました。ある時期、BinanceアプリでMOBOXの無料アバターを手に入れることができました。そのNFTのユーティリティはまったくありませんでした。ただのランダムなキャラクターで、唯一の使い道は自分のプロフィールのアバターに設定することでした。数ヶ月が経ち、みんながそれをすっかり忘れた頃、MOBOXは自社のゲームの開始を発表しました。このゲームにアクセスするために、これらのNFTが必要だったのです。同時に、それをBinanceマーケットプレイスで販売する機会も出てきました。価格は確か10ドルからスタートしたと思います。そしてユーザーはそれを大量に売却しました。その一方で、なぜかこれらのアバターは同じスピードで再び買い戻されました。価格は数日間かけて非常にゆっくりと、約2〜2.5ドルまで下落しました。私のボットは、これらのアバターの最低価格を常に監視し、価格が大幅に引き下げられた新しいオファーを購入しようとしました。つまり、例えば、10ドルで売られているものを8ドル以下で購入し、すぐに自動的に再出品していました。2%の手数料を考慮に入れると、ゆっくりと価格が下落していく中で、各NFTは利益をもたらしました。この数日間の収入は約10,000〜20,000ドルでした。

これらの例では、競争相手がかなり多かったことに注意が必要です。ここから競争が始まります。ボットが購入を続けているのを見ていると、突然エラーが発生し、必要なNFTを誰かに先に買われてしまうことがあるので、神経がすり減ります。流れ、興奮、汗、考えが駆け巡り、心臓がバクバクします。すでにその収入を自分のものだと考え、それを誰かに渡すのは非常に難しいです。そこで、より早くなるための新しい方法を考え出します。

ケース2 - Solanaとスパマー

2022年、私はSolana上のあるゲームに積極的に参加していました。その過程で、このネットワークのさまざまなニュアンスについてかなり理解を深めました。

Solanaのウォレットを積極的に使用している人は、知らないNFTがウォレットに現れるのを見たことがあるでしょう。通常、これは何かを勝ち取ったり、割引を受け取ったり、他の形のボーナスを受け取ったことを示しています。明らかに、これはすべて詐欺的なスパムです。こうしたNFTの属性には、詐欺師のウェブサイトへのリンクがあり、あなたにトランザクションを署名させようとします(つまり、賞品を受け取るために)。しかし、実際には賞品を受け取る代わりに、あなたのウォレットにあるすべてを詐欺師に渡してしまうのです。

ここで理解しておくべきことは、SolanaにおけるトークンとNFTの動作方法です。条件として、別のユーザーがあなたにNFTを送信すると、それはあなたの特定のウォレットではなく、あなたのウォレットに関連付けられた別のストレージアドレスが作成されます。そして、送信者がそのストレージアドレスの作成を支払います。この料金は大した金額ではなく、0.00203928 SOL(現在のレートで約0.11〜0.12ドル)です。あなたは、Phantomウォレットで利用可能なバーン機能を呼び出すことによって、このNFTを取り除くことができ、その結果、少額の手数料を差し引いて、この金額を自分のウォレットに戻すことができます。私がこのボットを操作していた時、SOLの価格は約20〜25ドルで、NFTを焼却することで得られる純利益は5セント程度でした。

私のボットの目的は、ウォレットに少なくとも1つのスパムNFTを取得することでした(時には複数のNFTを取得することもありました)。当初、スパマーはボットが彼らに対抗していることを知らず、簡単な操作に対してスパムを送信していました(少量のSOLを別のウォレットに送る、あるいは当時人気のあったStepNのトークンをいくらでも転送するなど)。つまり、ウォレット1を作成し、取引所から少しのStepNトークンと少しのSOLを手数料として入金します。それから、これをウォレット2に、次にウォレット3に転送します。すると、ウォレット1にはスパムNFTが現れます。その後、一つのトランザクションでスパムを焼却し、すべてのウォレットから残高をメインウォレットに戻します(このプロセスは少し簡略化しており、実際にはトランザクションと手数料を最小限に抑えるために最適化に関するいくつかの工夫が必要でしたが、基本的な原則はこの通りです)。

その後、スパマーはこの種の無駄なトランザクションをフィルタリングし、NFTの転送だけを追跡するようになりました。つまり、取引所で取引可能な安いNFTを1つ購入し、それを転送する必要がありました。

スパマーが私のボットに対抗する次のステップは、マーケットプレイスでの購入/販売トランザクションの処理でした。例えば、Magic Edenでは何らかのキャンペーンが行われており、一部のコレクションには手数料がかからなかったため、次のようなスキームが成立しました。ウォレット1が販売の提案を出し、ウォレット2がそれを購入します。

しかし、すぐにこのスキームも機能しなくなり、私は彼らを追いかけるのをやめました。結局、利益は大きくなかったので、彼らに時間を費やすのがもったいなく感じました。このボットを運営していた1週間の間に、約15,000〜20,000のウォレットを操作し、1,000ドル以上の利益を得ることができました。

ケース3 - Friend.tech

はい、夏の終わりに、私たちは弱気市場でもお金を稼ぐ方法を見ました。Friend.techは、わずか数ヶ月で数千万ドルを稼ぎました。私は最初の方ではなく、8月の終わりか9月の初めにそれに近づきました。分析を行った結果、Twitterのフォロワーが10,000人以上のユーザーの株が良く転売されることが分かりました。そこで、特定のブロガーがなぜ注目を集めたのか、他の同様のブロガーがなぜそうでないのかという深い分析を避け、フォロワーが100人以上のすべてのユーザーの最初の、つまり最も安い株を購入するという目標を立てました。

私は、0株の購入トランザクションを監視し、その後TwitterのAPIを介してアカウント情報を取得し、フォロワーが多ければ購入するボットを作成しました。そして結果は?明らかに失敗でした。競争が非常に激しかったのです。

私は他のボットのトランザクションを分析し始めました。最初に見つけたスキームは、ボットが公式ブリッジを通じて新しいウォレットへの資金追加トランザクションを監視し、次に0株の購入トランザクションと同じブロックに入るように毎秒購入リクエストを送信するというものでした。つまり、トランザクションは各ブロック内で順番に処理されるため、0株の購入の直後に入るのが目的です。

このスキームは興味深いですが、非常にコストがかかります。ウォレットへの入金と0株の購入の間に数分が経過することがあり、そのために数十ドルの手数料がかかりました。ここで注意すべきことは、コントラクトを呼び出すと、たとえ何らかの理由でトランザクションが通らなくても手数料がかかるということです(例えば、1株の購入リクエストを送信したが、所有者がまだ0株を購入していなかった場合)。

私は、誤ったトランザクションのコストを削減する方法を見つけました。それは、自分のスマートコントラクトを書くことです。このコントラクトでは、まず0株が購入されたかどうかを確認し、その後で購入関数を呼び出すようにしました。チェック関数は非常にシンプルだったため、誤った結果が返っても、ガスの消費はかなり少なくて済みました(ただし、大量のリクエストでは依然として多くのガスがかかります)。残念ながら、同じような方法を使っている他の賢者を見つけました。その時点で、このプロジェクトを追いかけるのをやめることに決めました。手数料のコストと競争との戦いはあまりにも高く、プロジェクトが長く続くとはあまり思えなかったからです。

しかし、すべてはFOMOのせいでした。Telegramチャンネルで、あるボットや別のボットがこのプロジェクトで利益を上げている様子が示されていました。そのため、数日間は分析に戻ってきました。そして、こうした傾向があることに気づきました:ほとんどのボットは新しいユーザーを追いかけますが、「失敗ユーザー」を追いかける者はいませんでした。
つまり、ユーザーがプロジェクトに登録し、私の競争者のボットがその株を購入します。数日が経つと、そのユーザーの株は誰にも買われなくなります(つまり、ボットの所有者にはそれを再販する相手がいないのです)。そうなると、ボットはその株を売却します。そして、ユーザーは0株のまま残ります。私のボットは、そうしたユーザーの株の出現を監視し、最低価格でその株を買い取ります。ここでのロジックは、他のボットやユーザーがこうした「失敗者」の動きを見て、少しずつそれを購入するということです。確かに、いくつかの株は無価値であり、誰も購入しませんでした。しかし、約90%は、少なくとも1株は他のユーザーによって購入され、私は損失を回避しました。他のユーザーがより多くの株(残念ながら、エーテルの全体には達しませんでしたが、0.05エーテルの株はかなりの量がありました)を購入することがよくありました。8月/9月のガス料金が非常に低かったことを考えると、手数料のコスト(これもボットで手動設定されていました)は最小限に抑えられました。

現在、このスキームは私にとっては非現実的です(ただし、今でも何か興味深いものを引き出せる可能性は否定できません)。収入に関しては、ボットの運用で約1ヶ月間、7,000ドルから10,000ドルの収益を得ることができました(さらに数千の株がアカウントに残っており、約束されたエアドロップも忘れないでください。株が無価値であったため、わずかなポイントしかもらえませんでしたが)。


モチベーションは得られましたか?次に進みましょう。
もしあなたがすでに意識を高め、脳とコードの質を向上させたいと思っているなら、次のサイトでアルゴリズムに挑戦してみてください:

これらのサイトは、FAANG(Facebook、Amazon、Apple、Netflix、Google)でのアルゴリズム面接に備えている人々によって利用されています。サイトには、さまざまな難易度の問題が用意されています。

ネットワークとAPIの作業
ほとんどのweb3ライブラリは、データの取得や変更(トランザクションの送信、市場データの取得、サイトへのログインなど)を行うためにHTTPリクエストを送信します。したがって、理解を深めるためには、ネットワークの仕組みを理解する必要があります。最低限の知識:

  • GETリクエストとPOSTリクエストの違い(パラメータとヘッダーがリクエストにどのように渡されるか)。
  • 必要なリクエストを送信し、選択したプログラミング言語で受信したレスポンスを処理する方法。
  • 通常、どのリクエストをどこに送信するかは、ドキュメントに記載されています。例えば、Binanceのドキュメントには、リクエストを送信するためのURLやパラメータを取得するためのエンドポイントがあります。この情報を利用して、通常のGETリクエストを送信できます(ブラウザは、アドレスバーに何かを入力するときにこれを送信します)。例えば、現在の秒数でのオーダーブックを表示するためのリクエストは次のようになります:
    https://api.binance.com/api/v3/depth?symbol=BTCUSDT
    このリクエストでは、パラメータは「?」の後に渡されています。すべてのパラメータはドキュメントで確認できます。例えば、オーダーブックの深さを制限し、ティッカーを変更する場合は、次のようになります:
    https://api.binance.com/api/v3/depth?symbol=ETHUSDT&limit=3
    これはGETリクエストなので、ブラウザを使ってこのリンクにアクセスすることで送信できます—ぜひ試してみてください!

ご覧の通り、難しいことはありません。ドキュメントからすべてのリクエストを送信するコードを書けば、完成したライブラリが得られます。99%のweb3ライブラリはこのようにして書かれています。

ブロックチェーンの深堀り
プロセスを内部から理解するのが好きな方には、Ortomichとそのチャンネルが役立ちます。チャンネルでは、非常に多くの有用な情報を見つけることができます。これは必須です。

ロードマップはそれほど大きくありません。なぜなら、web3で作業するためにそれほど多くのことを知る必要はなく、これは初心者にとって大きなプラスです。

私は意図的にロードマップに多くのリソースを含めませんでした。なぜなら、100のコーディングチャンネルに登録してもコーダーにはなれないと考えているからです。

開発を学ぶためのリソース
まず第一に、常にGoogleとドキュメントを利用してください。「質問が出たときは、まずGoogleを開いて答えを探してみてください。うまくいかなければ、ドキュメントを確認し、それでも解決しない場合は人に聞いてみてください」という古くからのルールがあります。今日では、Googleやドキュメントだけでなく、ChatGPTやGitHubもありますが、このルールが伝えたい主な点は変わりません。

GitHubの利用。コードの検索とベストプラクティスの取得

Google、ドキュメント、ChatGPTについては理解が深まったと思いますが、GitHubは多くの人にとって明白ではない情報源かもしれません。たとえるなら、GitHubはコーダーのためのTwitterのようなものです。プロフェッショナルとしてリサーチを行う場合、Twitterを使用していることは間違いありませんが、単にTGチャンネルを読むだけではありません。コーディングも同様です。GitHubにはキーワード検索があり、完成したソリューションのコードを見つけて、自分用に適応することができます。

ChatGPT

ChatGPTは、実戦で非常に役立つツールです。すでに皆さんが知っていると思いますが、この素晴らしい開発は、あなたのために完全に適切なコードを書くことができます。ただし、問題はアプローチ(プロンプトなど)にあります。

以下は、ChatGPTを通じて学ぶためのいくつかのポイントです:

  • 条件付きの無料メンターです。ChatGPTを利用すれば、プログラミングの知識がなくても完全なスクリプトを書くことができます。完成したスクリプトを手に入れることは良いですが、そのスクリプトが何をするのか、どのように改善できるのかを少しでも理解する方がずっと良いです。この場合、ChatGPTはメンターとして、24時間いつでもあなたの質問に答える準備ができています。自分の質問が愚かだと思っても、ChatGPTはあなたを非難しません(良いメンターもそうです)。したがって、ゼロからでも、理解のレベルを向上させることができます。
  • 目標を持つこと。問題、課題、明確な目標があると、学習がより早く、生産的になります。明確な目標がない場合は、ChatGPTに練習を含む学習計画を作成してもらうように依頼してください。
  • ChatGPT 4にアップグレードする。コードに関しては、ChatGPT 3.5よりもずっと良く機能し、はるかに多くの情報を処理できます(必要に応じて、プロジェクトのドキュメントを単に与えることもできます)。
  • 実世界も忘れない。つまり、従来のドキュメントやGoogleを忘れないでください。ドキュメントをChatGPTに与えることができますが、自分でドキュメントを読んだり、Googleで何かを検索したりすることも役立ちます。Googleがより関連性のある答えを提供するか、ドキュメントにより優雅な解決策が見つかるかもしれません。ロボットも間違えることがあることを覚えておいてください。
  • 基本的な概念を理解する。ChatGPTを使用してスクリプトを作成する前に、取り組みたい分野の基本的な概念を理解しておく必要があります。web3の場合、少なくとも次のことを理解している必要があります:ABI、スマートコントラクト、リード/ライトメソッド、小数点、RPCなど。
  • より多くの情報を提供する。すでにコードを扱ったことがあるなら、コンピュータにはすべてをできるだけ低いレベルで説明する必要があることを理解しているでしょう。ChatGPTもコードですので、質問をする際には最大限の入力データを提供してください。ChatGPTは「USDTをETHにスワップするPythonスクリプトを書いて」といったリクエストを実行できません。もっと多くの入力データ(コントラクトのABIやコントラクト自体など)を与える必要があります。

実践部分:WooFiスワップの解説

この記事のこの部分は、web3開発への最初の数歩として捉えるべきです。おそらく、いくつかのポイントは100%明確ではないかもしれませんが、これをスキルを向上させるための新たな機会として捉えてください。

もしプログラミングのスキルを持っているが、web3の経験がない場合、この部分は素晴らしく理解しやすいガイドとなるでしょう。
もしあなたがコーディングの初心者であれば、この部分を読んだ後、web3開発に難しいことは何もないと感じるでしょう。

私たちは、WooFiのサイトで、ArbitrumネットワークにおけるETHからUSDCへのスワップトランザクションを行います。特にこのトランザクションを選んだのは、特別な難しさがないためです。もし指示の中で不明な単語やフレーズがあれば、それらの意味をグーグルで調べるか、チャットで尋ねてみてください。

このタスクの実装にはPython言語を使用します。再度強調しますが、Pythonにはweb3と連携するための非常に便利なライブラリ、つまりweb3.pyがあります。また、Pythonはweb3プロセスの自動化において最も人気のある言語の一つです。

さらに、EVMネットワーク向けのコードは、98%の場合で同じです。通常、違いはRPCにあります。例えば、Arbitrum用に書かれたコードは、Ethereum用に書かれたコードと同じです。しかし!常にその2%が特定のタスクにおいて現れることがあります。例えば、Arbitrumにはメモリプールがなく、Ethereumにはあります。

コードはPython言語で書かれますが、他のプログラミング言語(例えば、Ethers.jsやweb3.jsライブラリを使用したJavaScriptなど)でも同様の開発アルゴリズムを適用できます。

始めましょう。

1. ライブラリー
Pythonはそのシンプルさと使いやすさだけでなく、熱心な開発者たちが開発したいわゆる「ライブラリ」(モジュールとも呼ばれ、フレームワークでもあります)によってその人気を得ました。これにより、Pythonの機能が拡張され、幅広いタスクに利用できるようになりました。ライブラリであるweb3.pyは標準ライブラリには含まれておらず、別途インストールする必要があります。

Python用のサードパーティ製ライブラリは、次の簡単なコマンドでインストールできます:

pip install ライブラリ名

ただし、ここには注意点があります。コンピュータにPython2(2020年にサポートが終了しました)とPython3が同時にインストールされている場合(実際にPython2をインストールしていなくても、標準アプリケーションとして付属している可能性があります)、pipコマンドはPython2用にライブラリをインストールします。Python3用にライブラリをインストールするには、次のコマンドを使用する必要があります:

pip3 install ライブラリ名

もしあなたのシステムにPython3だけが確実にインストールされているのであれば、pipを使っても問題ありません。

しかし、すべてをプロフェッショナルに行いたい場合は、「仮想環境」を使用することをお勧めします。Pythonの仮想環境とは、システムにインストールされているものとは異なるPythonの独自のバージョンやパッケージをインストールできる、隔離されたデジタルスペースのことです。つまり、各プロジェクトごとに独自の仮想環境を作成することで、必要なPythonのバージョンを使い、システムに大量のライブラリを詰め込むことなく作業できます。仮想環境の詳細を理解し、積極的に使用することを強くお勧めします。このHabrのこの記事で、すべての疑問に対する答えを見つけることができます。

例ではweb3.pyライブラリを使用します。このライブラリをインストールするには、次のコマンドを実行してください:

pip install web3

2. ブロックチェーンとの相互作用
ブロックチェーンと相互作用するためには(情報を取得したり、トランザクションを送信したりするために)、ブロックチェーンに接続する必要があります。この接続は、接続したいブロックチェーンのRPCを通じて行われます。適切なRPCは、https://chainlist.org/ のウェブサイトで見つけることができます。RPCサーバーアドレスの列には、接続が行われるURLアドレスが記載されています。レイテンシの列にはpingが表示されており(値が小さいほど良い)、プライバシーの列には、マウスをホバーすると(必ずホバーして読んでください)、ノードがデータを収集しているかどうかの情報が表示されます(収集しないことが望ましいです)。もしあなたが初心者であれば、特に気にせず、どのRPCでも使用できます。

しかし、独自のRPCを使用することは遥かに優れています。私たちのプロジェクトでは、公開されている不安定なRPCのせいでスクリプトが頻繁に落ちてしまい、何が起こったのか頭を悩ませていました。理想的には、自分のノードを持つことですが、そうでない場合は、AlchemyやAnkrなどのサービスを使用してください(「RPCプロバイダー」をグーグル検索してみてください)。

以下のコードを使用して、ブロックチェーンに接続します。また、ブロックチェーンと相互作用するための変数w3を取得します。

from web3 import Web3

arbitrum_rpc = 'https://rpc.ankr.com/arbitrum/'

w3 = Web3(provider=Web3.HTTPProvider(
    endpoint_uri=arbitrum_rpc
))

3. アカウント(ウォレット)を管理する変数の作成

アカウント(ウォレット)を管理するための変数が必要です。この変数を使ってトランザクションに署名し、自分のウォレットと相互作用します。そのためには、ウォレットからプライベートキーを事前に取得する必要があります。

private_key = ''
account = w3.eth.account.from_key(private_key=private_key)

4. 次のステップ:ウォレットを通じてトランザクションを行い、それを任意のスキャナーで確認する(Arbitrumの場合は、Error Page

スキャナーで知りたい情報は以下の通りです:

  • To - トランザクションが送信されたコントラクトのアドレス
  • Value - トランザクションと共に送信されたネイティブコインの数量
  • Input Data - 送信されたトランザクションの関数名とパラメータ

Input Dataは、「Decode Input Data」ボタンを使ってデコードし、人間が理解できる形式でパラメータを確認できます。

  • Name - パラメータの名前(ABIから取得)
  • Type - 変数のデータ型
  • Data - パラメータの値

それぞれのパラメータが何を意味するのかを理解するための方法はいくつかあります。

  1. 論理的に考える: 変数名やその値から、何を意味しているのかを推測することができます。
  2. プロジェクトのドキュメントを探す: メソッドの説明が含まれているドキュメントを見つける。
  3. GitHubで既存の解決策を探す: 実装を参照するために、GitHubでのソリューションを探す。

この場合:

  • fromToken - スワップするトークン(ETH)
  • toToken - スワップする先のトークン(USDC)
  • fromAmount - スワップするETHの数量
  • minToAmount - 受け取るべきUSDCの最小数量
  • to - トークンを送信するアドレス(私たちのウォレットのアドレス)
  • rebateTo - ここでも私たちのウォレットのアドレス(このパラメータはスクリーンに収まりませんでした)

5. コントラクトに関するすべてのデータを準備する
各コントラクトにはアドレスとABIがあります。
ABIとは、コントラクトに存在するすべての関数とそのパラメータのリストです。
まず、USDCコントラクトのデータを取得します。

  1. USDCコントラクトをスキャナーで開き、アドレスを取得します。
  2. Contractタブに移動します。
  3. このタブでProxyコントラクトが表示されている場合は、それに移動します。
  4. Codeタブに行き、ABIを探します。

ここでABIをコピーし、自分のプログラム内のJSONファイルに保存します。

私の環境では、data/abis/default_token.jsonというファイルを作成しました。ファイルをdefault_tokenと名付けたのは、99.9%のトークンがERC-20インターフェースを実装しているため(グーグルで調べてみてください)、ABIが一致するからです。

また、ABIをファイルに貼り付ける前に、https://jsonformatter.curiousconcept.com で通すことをお勧めします。これにより、ABIが読みやすい形式に整形されます。

6. コードに取得した情報を追加する

import json 

usdc_contract_address = Web3.to_checksum_address('0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8')
usdc_contract_abi = json.load(open('data/abis/default_token.json'))
usdc_contract = w3.eth.contract(address=usdc_contract_address, abi=usdc_contract_abi)

woofi_contract_address = Web3.to_checksum_address('0x9aEd3A8896A85FE9a8CAc52C9B402D092B629a30')
woofi_contract_abi = json.load(open('data/abis/woofi.json'))
woofi_contract = w3.eth.contract(address=woofi_contract_address, abi=woofi_contract_abi)

ここで何が起こったのかについての簡単な説明です。

私たちは、web3.pyライブラリのWeb3.to_checksum_address()関数を使用しています。この関数は、アドレスを正しいレジスタに変換します(自動的に、どの文字が小文字で、どの文字が大文字であるべきかを判断します)。

次に、open()関数を使用してABIファイルを開いて読み取ります。読み取ったファイルは、JSON形式に自動的に調整するためにjson.load()関数に渡されます。

最後に、w3.eth.contract()関数を使用してコントラクトの「コントロールパネル」を作成します。

また、USDCコントラクトの他にWooFiコントラクトのデータも追加しました。覚えておいてください、私たちは上でMetaMaskを介して手動で送信したトランザクションを検討しました。このトランザクションの“to”パラメータが必要です。このパラメータは、トランザクションがどのコントラクトに送信されたかの情報を保持しています。このコントラクトにアクセスし、USDCコントラクトと同様の操作を繰り返します(コントラクトのアドレスをコードに挿入し、コントラクトのABIを新しいファイルdata/abis/woofi.jsonに保存します)。

7. いくつかの変数を追加する

eth_address = Web3.to_checksum_address('0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE')
eth_price = 1905
eth_amount = 0.0006
eth_decimals = 18

slippage = 0.5
min_to_amount = eth_price * eth_amount * (1 - slippage / 100)
  • eth_address - スワップするトークンのアドレス。この場合、ETHからUSDCへのスワップなので、ETHのアドレスを指定します(ETHはコインであり、トークンではないため、コントラクトは存在せず、UIを介して送信されたトランザクションでアドレスを確認できます)。基本的には、WooFiでスワップできる任意のトークンをここに挿入できますが、事前にそのトークンを承認する必要があります(ETHは承認の必要はありません)。
  • eth_price - ETHの価格(このパラメータは最後に説明します)。
  • eth_amount - スワップするETHの数量。
  • eth_decimals - 小数点以下の桁数。これは必ず調べておくべきです。簡単に言うと、ブロックチェーンは小数を扱わないため、すべての数字は小数点を整数に変換されます。この変換は次のように行われます:もし0.0006 ETHがあり、decimalsが18の場合、ブロックチェーンに渡す数字は次のようになります。0.0006×10decimals=0.0006×1018=6000000000000000.0006 \times 10^{decimals} = 0.0006 \times 10^{18} = 6000000000000000.0006×10decimals=0.0006×1018=600000000000000
  • slippage - スワップで使用されるスリッページ(パーセンテージで指定)。
  • min_to_amount - 最悪の場合に得るべきUSDCの数量を計算します。スワップがこの数量のUSDCを提供できない場合、トランザクションは失敗します(計算方法を理解するために、数字を式に当てはめてみてください)。
  • eth_price - ETHの価格(価格はAPIから動的に取得するのが良いですが、コードを簡素化するためにハードコーディングしました。この単語はグーグルで調べてください)。「ネットワークとAPIの作業」セクションでは、Binanceのオーダーブックを取得する方法を見ました。このオーダーブックからETHの価格を取得し、ここに挿入できます: https://api.binance.com/api/v3/depth?symbol=ETHUSDT&limit=1 (このリクエストはrequestsライブラリを使用して送信できます。requestsライブラリは標準ライブラリには含まれていないため、次のコマンドでインストールする必要があります:pip install requests)。ドキュメンテーション:requests · PyPI
import requests

response = requests.get('https://api.binance.com/api/v3/depth?symbol=ETHUSDT&limit=1')
result = response.json()  # {'lastUpdateId': 27742986143, 'bids': [['2015.92000000', '69.07030000']], 'asks': [['2015.93000000', '59.91760000']]}
eth_price = result['asks'][0][0]  # '2015.93000000' 注意:ここでは文字列です。

8. USDCのdecimalsをコントラクトから取得する
補足: ネイティブコインにはコントラクトがないため、私たちは値をハードコーディングしました(この場合、ArbitrumネットワークにおけるETHのdecimalsは18です)。コントラクトのdecimalsは異なる場合があるため、ここではハードコーディングせず、コントラクトから直接取得します。

このような構文を使用することで、コントラクトのREAD関数を呼び出すことができます。

usdc_decimals = usdc_contract.functions.decimals().call()  # 6
  • usdc_contract - 私たちのコントラクトです。
  • functions - コントラクトの属性で、すべての関数にアクセスするために使用します。
  • decimals - 呼び出す関数の名前(括弧内に必要なパラメータを渡します。スクリーンショットには、関数がパラメータを取らないことが示されています)。
  • call - 関数を呼び出します。

9. eth_amountを整数に変換し、USDCも同様に処理します。

eth_amount = int(eth_amount * 10 ** eth_decimals)
usdc_amount = int(min_to_amount * 10 ** usdc_decimals)

10. トランザクションのすべての引数を指定する準備が整いました

tx_args = woofi_contract.encodeABI('swap',
                                   args=(
                                       eth_address,
                                       usdc_contract.address,
                                       eth_amount,
                                       usdc_amount,
                                       account.address,
                                       account.address,
                                   ))
  • encodeABI() 関数は、最初の引数として呼び出したいWRITE関数の名前を受け取ります。2番目の引数にはトランザクションの引数のリストまたはタプル(タプルをお勧めします)を受け取ります。

11. ブロックチェーンに送信するためのトランザクションを準備します

tx_params = {
    'chainId': w3.eth.chain_id,
    'gasPrice': w3.eth.gas_price,
    'nonce': w3.eth.get_transaction_count(account.address),
    'from': account.address,
    'to': woofi_contract.address,
    'data': tx_args,
    'value': eth_amount
}

これらは、すべてのトランザクションで共通する標準のパラメータです。

  • chainId - ネットワークのID
  • gasPrice - 現在のガス価格
  • nonce - トランザクションの番号
  • from - トランザクションを送信するウォレットのアドレス
  • to - トランザクションが送信されるコントラクトのアドレス
  • data - encodeABI() 関数を使ってエンコードされた関数名と引数
  • value - トランザクションに送信されるネイティブコインの数量(スワップでネイティブコインを使用する場合、通常はその数量と一致します)。トランザクションのvalueが0の場合、この辞書には含めなくても問題ありません。

P.S. ここではレガシートランザクションを送信していますが、ウォレットを介して送信されたトランザクションとは少し異なります。正確にはEIP-1559トランザクションを送信するのが理想です。これを行うのは簡単で、辞書のいくつかのキーを置き換えるだけです。これについては、こちらの動画で詳しく説明しました。

12. gasLimitを計算します

python

Copy code

tx_params['gas'] = w3.eth.estimate_gas(tx_params)

ガスは、w3.eth.estimate_gas() 関数を使用して自動的に計算されます。この関数にトランザクションのパラメータを渡します。そして、関数の結果を tx_params 辞書の gas キーに追加します。

これは非常に便利な関数の一つです。もしパラメータを間違って指定した場合、すべてのエラーはこの時点で表示されるので、お金を無駄にすることはありません。この時点でガスが正しく計算された場合、トランザクションを実行する準備が整います。

13. トランザクションをプライベートキーで署名し、送信します

sign = w3.eth.account.sign_transaction(tx_params, account.key)
tx = w3.eth.send_raw_transaction(sign.rawTransaction)

ここでは特に説明は必要ありません。すべては、組み込み関数 w3.eth.account.sign_transaction()w3.eth.send_raw_transaction() を使用して自動的に行われます。

14. トランザクションの実行を待ちます

tx_data = w3.eth.wait_for_transaction_receipt(tx, timeout=200)

タイムアウトを200秒に設定しました。この時間は99%のトランザクションに十分なはずです。

15. トランザクションのステータスを確認し、結果をコンソールに表示します

if 'status' in tx_data and tx_data['status'] == 1:
    print(f'transaction was successful: {tx.hex()}')
else:
    print(f'transaction failed {tx_data["transactionHash"].hex()}')

完全なコード:

import requests
from web3 import Web3
import json

private_key = ''
arbitrum_rpc = 'https://rpc.ankr.com/arbitrum/'

w3 = Web3(provider=Web3.HTTPProvider(
    endpoint_uri=arbitrum_rpc
))

account = w3.eth.account.from_key(private_key=private_key)

usdc_contract_address = Web3.to_checksum_address('0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8')
usdc_contract_abi = json.load(open('data/abis/default_token.json'))
usdc_contract = w3.eth.contract(address=usdc_contract_address, abi=usdc_contract_abi)

woofi_contract_address = Web3.to_checksum_address('0x9aEd3A8896A85FE9a8CAc52C9B402D092B629a30')
woofi_contract_abi = json.load(open('data/abis/woofi.json'))
woofi_contract = w3.eth.contract(address=woofi_contract_address, abi=woofi_contract_abi)

eth_address = Web3.to_checksum_address('0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE')

# todo: この機能は関数に移す必要がありますが、コードを簡素化するためにここに残しています
response = requests.get('https://api.binance.com/api/v3/depth?symbol=ETHUSDT&limit=1')
result = response.json()
eth_price = result['asks'][0][0]

eth_amount = 0.0006
eth_decimals = 18

slippage = 0.5
min_to_amount = eth_price * eth_amount * (1 - slippage / 100)

usdc_decimals = usdc_contract.functions.decimals().call()

eth_amount = int(eth_amount * 10 ** eth_decimals)
usdc_amount = int(min_to_amount * 10 ** usdc_decimals)

tx_args = woofi_contract.encodeABI('swap',
                                   args=(
                                       eth_address,
                                       usdc_contract.address,
                                       eth_amount,
                                       usdc_amount,
                                       account.address,
                                       account.address,
                                   ))

tx_params = {
    'chainId': w3.eth.chain_id,
    'gasPrice': w3.eth.gas_price,
    'nonce': w3.eth.get_transaction_count(account.address),
    'from': account.address,
    'to': woofi_contract.address,
    'data': tx_args,
    'value': eth_amount
}

tx_params['gas'] = w3.eth.estimate_gas(tx_params)

sign = w3.eth.account.sign_transaction(tx_params, account.key)
tx = w3.eth.send_raw_transaction(sign.rawTransaction)

tx_data = w3.eth.wait_for_transaction_receipt(tx, timeout=200)
if 'status' in tx_data and tx_data['status'] == 1:
    print(f'transaction was successful: {tx.hex()}')
else:
    print(f'transaction failed {tx_data["transactionHash"].hex()}')

コードの説明:
この例では、WooFiでのETH → USDCのスワップを自動化するコードを書く方法を説明しました。この例は、ブロックチェーンとどのように相互作用するかを示しており、必要な情報の取得方法、コントラクトのREADおよびWRITE関数へのアクセス方法、トランザクションの送信と確認方法について説明しています。

実践のためのアドバイス: USDC → ETHの逆スワップを書いてみることをお勧めします。この例では、トランザクションを送信する前に、approveトランザクションを行う必要があります。

これらの知識を活用すれば、ウォレットを使ってさまざまなアクションを自動化することができますが、つまづく可能性のある多くの落とし穴も残っています。

最初は少し難しいかもしれませんが、わからない点は必ずググり、どんな質問でも気軽にチャットで聞いてください。

結論

結論として、ユニークなことを書く必要はないでしょう。最初に始めたことを繰り返しましょう…

この記事は、ゆっくりと読めば1〜2時間で読み終わります。そして、読んだ後には、この道を進むかどうかを理解できるはずです。この記事を読んだからといって、すぐにコーダーになることは不可能です。この記事の目的は、コーディングへの興味を引き起こすことです。そのためのリソースや指導を提供しています。理想的には、この記事を2〜3ヶ月かけてじっくりと読み、各行を注意深く学び、すべてのリンクをクリックし、ロードマップの各項目を実行してください。そうすることで、初めてあなたは初心者のコーダーと見なされるでしょう。

そして、最も重要なのは目標を持つことです。機能や再帰を無心に学ぶのは良いことですが、実際には役に立たないことです。誰かの目標は、プロジェクトを成功させることです。誰かの目標は、アンチドレインを作ることです。また、誰かの目標は、Lineaクエスト用の究極のソフトを作ることです。目標を忘れないでください。

もし難しいと感じたり、理解できなかったりした場合は、気を落とさないでください。まず第一に、全員がコーダーになれるわけではありません。私は(クリプタピラジョク)、たとえば高いレベルでコーディングできませんが、それは私には必要ないのです。私はただ、才能のある人々に囲まれています。第二に、私はすでにこの文書は2〜3ヶ月かかると書きました。何かが不明な場合は、ググったり、チャットで質問したりしてください。

あなたのために、cryppi と Ahillary がここにいました。私たちをフォローしてください。私たちはプログラミングをより効果的に学ぶための何かを用意したと言われています。