永遠の鎖:WeChatを使ってブロックチェーンに文字を刻むプロジェクトの詳細な技術的説明

永遠の鎖:WeChatを使ってブロックチェーンに文字を刻むプロジェクトの詳細な技術的説明

先週、私は自分のWeChatパブリックアカウント[lawup2003]を使用してブロックチェーン彫刻サービスを作成するためのテストを行いましたが、これは無料です。公開アカウントをフォローしているすべてのユーザーには、40 バイトを超えないコンテンツを Bitcoin ブロックチェーンに永久に刻み込む機会が 3 回あります。リリースされるとすぐに、業界内外の多くの同僚の注目を集めました。 (サーバーの有効期限は6月22日で、更新する予定はありません。今後は彫刻サービスを提供しなくなりますが、ブロックチェーンに彫刻された内容は永久に存在します。この期間中の彫刻内容はすべて、このアドレストランザクションのOP_RETURNにあります:https://blockchain.info/address/1MGP1ZNBkxpcgLf2zF6WK48Nd8owfkoEFU Ethereumなどの新しいことを勉強するつもりです!実際、この記事に従って、同一のブロックチェーン彫刻サービスを作ることができます!

 

ちょうど前の週に私たちを指導していた Shentu Qingchun 先生は、このプロジェクトを体験した後、「とても良いアイデアですね!実行力も抜群です!」とコメントしました。

 

このプロジェクトがブロックチェーンWeChatディスカッショングループで公開された後、一部のグループメンバーはそれを気に入り、報酬として赤い封筒を贈りました。あるグループメンバーはこう言いました。「ご苦労様でした!ブロックチェーンを直感的に理解できました!」

 

Ant FinancialのCEOであるDa Hongfei氏も、「このアプリケーションは非常に興味深く、ブロックチェーンの使用の敷居を低くする」と考えています。もちろん、彼はまた、「現時点では、これはあまりにも単純で障壁がない」ため、「商業プロジェクトには適していません」とも指摘しています。

 

実際、ビジネス界の大物として、「ダおじさん」は非常に正確なビジョンを持っています。しかし、ここ数日、技術的な詳細について質問してくるグループメンバーに根気強く説明していくうちに、実はブロックチェーンに対する理解や技術力にはばらつきがあることがわかりました。ブロックチェーン技術の愛好家、特に始めたばかりで、山積みの密集した文書に直面してもどこから始めればよいのかわからない初心者にどのように指導を提供するかは、私の小さな実験プロジェクトが中国のブロックチェーン業界に果たすべき貢献となるかもしれません。特に、別のクラスメートは、WeChatを使ってブロックチェーンに接続することで、使いやすさが大幅に向上し、ユーザーの未知のものに対する恐怖心が軽減されたと感じたので、私のプロジェクトをベースに授業出席などの革新的なアプリケーションを作る予定だと述べました。

 

では、これ以上何も言わずに、この小さな「スズメ」を解剖してみましょう。初心者の方は、私の手順に従うだけで、同様の WeChat 彫刻サービスを設定できます。

ステップ1: Bitcoinスクリプトの書き方を学ぶ

なお、この記事を読んでいる人は、基本的に筆者のような初心者なので、スクリーンショットは Windows プラットフォームで撮影されていることに注意してください。 Linux や Mac を使用している人にとっては、もはや初心者ではないか、すでに一定レベルの技術スキルを習得していることを証明します。ご自身で切り替えてください(実際はどちらでも構いません)。

 

1. Bitcoin Core クライアントをダウンロードしてインストールし、bitcoin-qt (UI 付きのクライアント) を実行してすべてのブロックを同期します (現在のブロック サイズは 75G に達しているため、十分な大きさのハード ドライブが必要です)。

 

2. 同期が完了したら、クライアントのトップメニューで[支払い要求]をクリックし、[支払い要求]をクリックすると、システムによってビットコインウォレットアドレスが作成されるので、ビットコインウォレットアドレスをコピーします。

 

3. 取引所に行ってビットコインを購入する必要があります(マイニングは初心者にとってもう一つの大きな問題なので、直接購入してください。もちろん、買いすぎないようにしてください。0.01 ビットコイン(約 30 人民元)を購入すれば、当プロジェクトで長期間使用するには十分です)。その後、コピーしたアドレス(ビットコイン ウォレットのアドレス)にコインを出金します。

 

4. 出金したコインを受け取った後、クライアントの利用可能残高が 0 ではなくなることがわかります。このとき、クライアント上部のメニューで [ヘルプ → デバッグウィンドウ → コンソール] をクリックして、スクリプト操作を入力できる場所を開き、以下の手順に従います。

 

(1)以下を入力してEnterキーを押します(1MGP1ZNBkxpcgLf2zF6WK48Nd8owfkoEFUは私のビットコインウォレットアドレスです。操作時に自分のアドレスに置き換えてください)。

リスト未使用 0 100 '["1MGP1ZNBkxpcgLf2zF6WK48Nd8owfkoEFU"]'

以下のようにトランザクション ID (txid) を取得します。

このステップでは、このウォレットで使われていない金額を確認します。金額の後に現在のビットコインの金額が表示されます。もちろん、ここでは主にトランザクション ID (txid) を取得し、次の手順を完了するために vout の後の番号を書き留めます。

 

(2)文字列を16進数(STR2HEX)に変換できるオンラインウェブサイトを見つけ、ブロックチェーンに書き込みたい単語をエンコードします。たとえば、「Code is Law」という文章をブロックチェーンに書き込む場合、HEX 後の結果は「436f6465206973204c6177」になります。ざっと計算してみると、40文字を超えないので、そのまま進めます(今回外部データを刻印したい箇所は、一般的に40文字を超えることはできませんが、この長さ制限を超えられる場合もありますが、それはまた別の話です)。

 

(3)ビットコインクライアントの[コンソール]に戻り、以下を入力してEnterキーを押します。

生のトランザクションを作成します '[{"txid":"70c66f61ab38482f4193ea78cee68a54685382b04a46d2ee68f6467ca392b1fb","vout":0}]' '{"1LUpUZ5bTTczJa1BGx5DBm6Mo6V8vnjPtz":0.0001,"1MGP1ZNBkxpcgLf2zF6WK48Nd8owfkoEFU":0.01378807,"data":"436f6465206973204c6177"}'

このスクリプトはトランザクションを作成するためのものです (ビットコイン トランザクションを使用して、ブロックチェーンに書き込みたい文章をブロックチェーン上のトランザクション ノートとして刻み込みます)。

知らせ:

 

① トランザクションID(txid)は、以前に未使用額を照会したときに取得したものである必要があります。

 

②voutはビットコインクライアントウォレット内のアドレス番号を指します。私のは 0 で、最新のアドレスを示しています。私の指示に従って、さらにアドレスを作成していない場合は、これも 0 になるはずです。

 

③ 最初のアドレスと最後の金額は、支払いを受ける取引のアドレスと金額を示します。私たちの目的は彫刻なので、私は少量(0.0001ビットコイン、これはすでに「ダスト量」です。これより少ないと、ビットコインネットワークによって確認されない可能性があります)を他のビットコインウォレットアドレスに転送します(理論的には、送信ウォレットと同じウォレットアドレスを入力できますが、クライアントでは明らかな「エラー」を回避するため、この方法でスクリプトコマンドを入力することは許可されていませんが、後でRPCを使用して実装すると、同じアカウントから自分自身に直接転送できます。2つ目のビットコインウォレットがない場合は、前の方法を使用して受信アドレスを生成し、そのアドレスをスクリプトで受信アドレスとして設定できます。ただし、送信アドレスのvoutは1になることに注意してください。新しく生成されたアドレスが最新であり、そのvoutは0になるためです)。

 

④ 2つ目のアドレスと金額はお釣りのアドレスと金額です(お釣りのアドレスやビットコイン取引の動作の仕組みについてはここでは説明しませんのでご自身で学んでください)。変更先の住所と金額は未指定のままで構いません。そうでない場合、システムはウォレット内に変更用の新しいアドレスを自動的に生成し、金額はデフォルトの手数料を差し引いた金額になります(デフォルトの手数料は、クライアントの[送信]インターフェイスの左下隅に表示されます)。ビットコインが変更のために新しいアドレスを生成する必要がある理由は、主に送金者のプライバシーを保護するためですが、初心者にとっては不便でもあります。システムでは、変更アドレスを指定せずにトランザクションが送信されるたびに、システムは変更アドレスを使用し、100 個のアドレスが使用されるたびに一括して破棄され、同じバッチで 100 個の新しいアドレスが生成されます。前のバッチのアドレスの 1 つを受信アドレスとして使用すると、新しい 100 個のアドレスが生成された後に受け取った資金は利用できなくなります。そのため、トラブルを避けるためにも、変更アドレスをご自身のウォレットアドレスに設定することをお勧めします。もちろん、これは新たな問題に直面します。変更アドレスの後ろの金額をどのように記入するかという問題です。式は、未使用額 - 自己送金額 - 取引手数料です。つまり、0.01398807–0.0001–0.0001 = 0.01378807 となります。

 

⑤データフィールドに、ブロックチェーンに刻印する文章のHEX後の文字列を入力します。

長い文字列を取得し、それをコピーして次に使用します。

 

(4)次のように入力し、Enterキーを押します。

signrawtransactionの後に前の手順で取得した長い文字列を追加します。

ここで、以前に作成したトランザクションに署名します (固有の Bitcoin ウォレット秘密鍵を使用して署名します)。得られた 16 進数は署名後の結果です。 Complete は true です。つまり、署名は成功しました。後で使用する 16 進ファイルをコピーします。

 

(5)以下を入力してEnterキーを押します。

sendrawtransaction と 16 進形式の長い署名文字列

ここで、トランザクションが送信またはブロードキャストされます。結果はトランザクション ID です。このトランザクション ID をコピーします。

 

5. トランザクションのブロードキャスト実行は瞬時に完了し、確認の同期には 10 ~ 30 分かかる場合があります (RP の問題、笑)。ただし、これはトランザクションを表示するためにブロックチェーン情報クエリを提供する一部の Web サイトには影響しません。たとえば、次のように開きます。

https://blockchain.info/tx/8d2933db168aaead7e654b4d76805c2de933584242f6c6d5bd1589e7d0517ae4

URL の後半部分は、先ほど取得したトランザクション ID です。ページの下部に移動します。 OP_RETURN 項目は、私たちが刻印した外部データです (一部のクエリ Web サイトでは、デフォルトではスクリプトが表示されません。表示するには、[スクリプトを表示] をクリックする必要があります)。

スクリーンショットは次のとおりです。

ステップ2: Bitcoin RPCと連携し、bitcoin-cliで操作する方法を学ぶ

 

1. Bitcoin PRCを設定する

 

(1)bitcoin-qtをオフにします(オフにするときは注意し、予期しないエラーを回避するためにオフにした後数秒待ってください。予期しないエラーが発生すると、非常に困難に同期されたブロックチェーンが損傷し、再同期が必要になる可能性があります)。

 

(2) C:\Users\username\AppData\Roaming\Bitcoin フォルダ(これは Bitcoin インストール後のデフォルトの構成ファイル フォルダで、Bitcoin プログラムをインストールした後、または Bitcoin プログラムを初めて実行した後に自動的に生成されます)に移動し、新しいファイル bitcoin.conf を作成し、次の内容を追加します(括弧と括弧内の単語は指示であり、ファイルに書き込まないでください)。

rpcuser=123456 (123456 を RPC ユーザー名に変更してください)

rpcpassword=123456 (123456 を RPC パスワードに変更してください)

rpcport=8338 (RPC ポート、デフォルトは 8332 ですが、Windows にポート 8332 を使用できない他のソフトウェアをインストールした可能性があるため、8338 に変更しました)

rpcallowip=127.0.0.1 (セキュリティ上の理由から、RPC はローカル接続のみを許可します)

rpcconnect=127.0.0.1 (セキュリティ上の理由から、ローカルノードにのみ接続します)

上記の内容はプレーンテキスト形式で、1 行に 1 つの段落があり、末尾にセミコロンなどの記号がなく、直接改行されることに注意してください。

 

(3)コマンドプロンプトを開く

ターミナルで、まずビットコインのインストールディレクトリの下のデーモンフォルダに入ります。たとえば、私の場合は[C:\Bitcoin\daemon]です。bitcoind -serverと入力してEnterを押します。

他のパラメータを指定していないため、エラーがなければ、bitcoind は実行されています。この [コマンド プロンプト] ウィンドウは開いたままにして閉じないでください。閉じると、bitcoind も閉じられます。

 

(4)別の[コマンドプロンプト]を開く

また、ターミナルで、ビットコインのインストールディレクトリの下のデーモンフォルダに入ります。たとえば、cd c:\bitcoin\daemonと入力しました

入力: bitcoin-cli -rpcuser=123456 -rpcuserpassword=123456 getinfo Enter キーを押すと、結果は次のようになります。

ここで返されるのは、アカウント状況の概要です。

bitcoin-cli のテストが正常であれば、bitcoin-qt の [コンソール] での操作は以前と同じです。唯一の違いは次の 2 点です。

まず、先頭に bitcoin-cli を追加します。

次に、引用符のエスケープに注意してください。 JSON 内のすべての引用符はバックスラッシュでエスケープする必要があります。

では、createrawtransaction ステートメントを試してみましょう。次のように入力して Enter キーを押します。

bitcoin-cli createrawtransaction “[{\"txid\":\"8d2933db168aaead7e654b4d76805c2de933584242f6c6d5bd1589e7d0517ae4\",\"vout\":0}]” “{\"1LUpUZ5bTTczJa1BGx5DBm6Mo6V8vnjPtz\":0.0001}”

実行結果が正常に取得されました。

さて、残りは省略します。コマンドを入力する場所を変更するだけで、実行結果は同じになります。前の手順に従ってください。

ステップ3: PHP、Python、またはその他の言語を使用してRPC操作を呼び出す

 

ウィキ(https://en.bitcoin.it/wiki/API_reference_(JSON-RPC))では、多くの言語がビットコインのRRCを呼び出すことができることがわかり、既存のプログラムでビットコインブロックチェーンへの刻印操作を完了することができます。もちろん、注意を払うべき詳細が多すぎるため、車輪の再発明をする必要はありません。基本原則はすでにわかっているので、今度は実用主義を追求する必要があります (基本原則を理解していないと、後でパーソナライズされた部分の一部をどのように変更すればよいかがわからないため、基本原則も必要です)。 PHP または Python を知っていれば、先人たちの技術を参考にして彫刻機能を実装することができます。

 

1. github で php-OP_RETURN を見つけます (これは PHP 用ですが、Python を使用する場合は python-OP_RETURN も見つかります。作成者は coinspark で、使用方法はほぼ同じです)。php-OP_RETURN を PHP 実行ディレクトリにデプロイします (Windows では、phpstudy を使用してワンクリックで PHP 環境を構築できます)。

 

2. OP_RETURN.php ファイルを変更し、rpc 情報を設定します。

 

3. 同じディレクトリに PHP ファイル (run.php など) を作成し、次のコードをその中に配置します (これも readme に従ってください)。

次に、ブラウザでファイルhttp://127.0.0.1/run.php を実行して、トランザクション ID を取得します (前の複雑なプロセスは非常に簡単に完了します。原理を理解していない場合は、非常に簡単だと思うでしょう、笑)。先ほどと同様に、トランザクションIDをblockchain.infoなどのウェブサイトに持っていって確認すると、下部にOP_RETURNに刻印した内容が表示されます。

同じウォレット アドレスを使用して自分自身に送金することができ、それが成功することに注目してください。つまり、bitcoin-qt のみに制限があるものの、実際には下位層でそれ自体で送金することが可能です。

 

4. 前述のとおり、トランザクションを 100 回送信すると、新しいアドレス バッチが自動的に置き換えられます。オリジナルのphp-OP_RETURNコードを使用すると、変更アドレスが自動的に生成されます。 100回に達すると、元のアドレスから転送されたコインは受け取れなくなります(古いアドレスは破棄された100のアドレスに属し、このアドレスに対応するキーがないため、新しく受け取ったコインは使用できなくなります。数は少ないですが、お金でもあります。無意味にお金を浪費したくありません)。したがって、元の php-OP_RETURN コードで新しいアドレスを生成するセクションをコメント アウトし、createrawtransaction の変更アドレスを独自のものに変更し (「オンライン ウォレット」サービスがトランザクションを 100 回以上送信するかどうかに関係なく、常に 1 つのアドレスを使用できる理由はこれと同じです)、OP_RETURN.php ファイルを開いて、次の 2 か所を変更します。

もちろん、最初に RPC を介して新しいアドレスを計算し、次に取引手数料を差し引いた金額を新しいアドレスに送信してお釣りを 0 にするなど、他のアイデアもあります。これもアイデアですが、問題が発生する可能性があります。前の刻印トランザクションが確認されていない場合、自己転送されたコインが十分な確認を受けていないため、直後の次のトランザクションは「二重支払い」と見なされて失敗する可能性があります。もちろん、このアイデアはさらに改善することができます。この段落を書く目的は、私の方法が良くないと思ったら、心を開いてより良いプロセスを構築し、手動入力を減らしてシステムを自動的に実行できるということを表現することです。

 

5. 次に、http://127.0.0.1/run.php を実行して、自己転送および自己変更トランザクションを実現します。この種のトランザクションは、blockchain.info では次のように表示されます。

 

6. もちろん、最も重要なことは、OP_RETURN が PHP プログラム (または Python またはその他のプログラム) を通じて Bitcoin ブロックチェーンに刻印され、Web サイトを通じて刻印できるようになることです。

ステップ4:機能をWeChat開発者モードに接続する

 

ここでは主にビットコインとブロックチェーンについて話しているのですが、WeChat公式アカウントの開発者モードのさまざまな機能について詳しく知りたい場合は、[Fangbei Studio]を検索してください。WeChat開発者モードに関するすべての情報が見つかります。

 

WeChatパブリックアカウントのバックエンドに登録してログインし、[自動返信]で編集モードをオフにしてから、[基本設定]に移動して開発者モードをオンにし、[開発者ツール→開発者ドキュメント]の仕様に従ってサーバー上にPHPネットワークファイルを作成し、[サーバー設定]にURLを入力します。

このネットワーク ファイルを通じて、WeChat ユーザーからのメッセージを受信し、その種類を判別して内容を取得し、種類と内容に基づいて自動的に返信することが可能になります。これは、WeChat ユーザーがメッセージを送信し、WeChat 公式アカウントが刻印された取引アドレスを使用してユーザーに返信するという基本的なプロセスです。

 

ここでは特別な考慮事項があります。私のビットコインは Alibaba Cloud にデプロイされ実行されており、rpc 構成では 127.0.0.1 のローカル呼び出しのみが許可されているため、Alibaba Cloud のこのマシンに PHP 環境を構築し、特別なポートを使用して結果を受信して​​フィードバックしました。 WeChat 開発者モードを実行している PHP プログラムは実際には SAE Sina Cloud 上にあり、SAE 上の PHP プログラムだけがビットコインを呼び出す RPC のホストとポートを認識しています。同時に、両者間の通信には簡単な認証が必要です。簡単に言えば、真ん中に余分な層が追加されます。これを行う目的は 2 つあります。1 つは、ビットコイン ネットワークの運用と WeChat パブリック アカウントのネットワーク運用が相互に影響を及ぼさないようにすることです。たとえば、ビットコインがより多くのリソースを占有すると、WeChat パブリック アカウントのユーザーが長時間返信なしにコンテンツを投稿するということは起こりません。もちろん、2 番目の理由が重要なポイントです。つまり、SAE プログラムを除いて、私のビットコインが実行されているホストのアドレスを誰も知らないため、私のビットコインのセキュリティをより適切に保護できます (それほど多くはありませんが、お金でもあります)。ビットコインを盗むハッカーは非常に強力だと聞いたからです。私は初心者です。コールドウォレットのバックアップ以外に、ビットコインのホットウォレットのセキュリティスキルをまだ習得していません。だから私はできるだけ自分を隠そうとしなければなりませんでした。顔を見せなければ殴られることもないだろう。これは「三体」の「ダークフォレストの法則」らしいですね、はは~

 

それでは、この WeChat の実際の動作を体験してみましょう。 QRコードをスキャンして[lawup2003]をフォローしてください( 6月22日まで有効):

記事の冒頭で述べたように、ステップバイステップで私に従えば、あなたも同じWeChatを作ることができるので、私はできる限りのことを提供します(私は実際には文系の学生であり、私のコードはひどく、データベース設定はあまり科学的ではありませんが、自分自身を馬鹿にすることを恐れていません)。WeChat開発者モードにバインドされたネットワークファイルとMySQLデータベースファイルをパッケージ化し、Baidu Cloudにアップロードしました。困っている友人は、自分でダウンロードしてください。なお、WeChat の設定ファイルと Alibaba Cloud ホストと通信する場所は、必要に応じて各自が変更する必要があります (変更が必要な行の後に「//modify」と記してありますので、検索すればすぐに見つかります)。この記事を理解した学習者にとって、これらの場所を補足することは難しくないと思うからです。

 

それでおしまい! WeChat 開発者モード PHP ファイルとデータベース ファイルのダウンロード アドレスは次のとおりです。

http://pan.baidu.com/s/1mhWlDsG

 

最後に、このプロジェクトがよいと思ったり、アイデアや質問、苦情がある場合は、私のWeChat: Lawup2に追加してください。ありがとう〜


<<:  ファクトム、ブロックチェーンを活用したIoTセキュリティ強化のため米国国土安全保障省から19万9000ドルの助成金を獲得

>>:  DAO: 次は何?

推薦する

CoinShares の暗号通貨 ETP がユーロネクスト パリとアムステルダムに上場

欧州最大のデジタル資産投資会社CoinSharesは本日、パリとアムステルダムのユーロネクストに物理...

強気相場が到来し、コインの価格が上昇し、ビットメインが再び上場する

香港証券取引所への上場に失敗したビットメインは、再びIPOのニュースを発表した。ブルームバーグは6月...

ノルウェー人男性がビットコイン取引後に惨殺される

翻訳者: CoinPlayerのSallyノルウェー人男性がビットコインの現金化取引を終えた直後に刺...

イーサリアムが世界コンピュータを構築する目的は何ですか?

2016 年の初め以来、デジタル通貨業界を注意深く追っている人々は、第 2 世代の暗号通貨プラット...

Nero AI ワンクリックで芸術的な効果を生み出す無料のオンラインAI画像処理ペイントツール

約 30 年の歴史を持つドイツのマルチメディア ソフトウェア会社として、Nero はデジタル メディ...

OKLinkは、徐明星氏が捜査対象になっているかどうかを確認するためにまだ連絡を取っていないと発表しました。

香港上場企業OKEx(HK: 01499)は本日、OKCホールディングス株式会社の弁護士から2020...

AXAはイーサリアムブロックチェーンを使用して航空保険商品を作成し、請求の支払い方法としてイーサリアムを使用する予定です。

フランスの保険大手AXAは9月14日、新たな航空便遅延保険商品を発売した。支出の保管と処理には、Et...

英国の国家デジタル通貨プロトタイプの原則とメカニズム

ビットコインの成功とブロックチェーンコンセプトの普及により、多くの国の中央銀行は、ブロックチェーンベ...

中央銀行はなぜデジタル通貨を発行したいのでしょうか?

最近、日本の大手銀行である三菱UFJ銀行が独自のデジタル通貨の開発を発表し、カナダ銀行はデジタル通貨...

統計的観点から暗号通貨マイニングを観察する

著者: ルクソールテック翻訳: ゾーイ・ジョウ出典: クリプトバレー簡単な定義暗号通貨マイニングの「...

新華網:マイニングマシンは大量の電力を消費し、経済発展を促進する「最先端」で電力を活用すべき

BlockBeatsによると、新華社通信が5月28日に北京で報じたところによると、近年、仮想通貨が急...

イラン政府、1,620の違法仮想通貨マイニングファームを閉鎖

ファイナンシャル・トリビューンの報道によると、イラン当局は過去18か月間に合計250メガワットの電力...

ビットコインのエコシステムに対する半減期の影響が徐々に「弱まっている」のはなぜでしょうか?

OKLinkのデータによると、ビットコインはブロック高840000(北京時間2024年4月20日午...