Python の基礎入門 -- ブロックチェーン
ブロックチェーンの基本概念はシンプルです。多くの順序付けされたレコードを含む増大するリストを保存する分散データベースです。次の記事では、Python を学習するためのブロックチェーンに関する情報を中心に、サンプルコードを通じて詳しく紹介しています。必要な方は以下をご覧ください。
はじめに
この記事では、ブロックチェーン (BlockChain) に関する関連知識と、Python を使用した簡単な実装について簡単に紹介します。これ以上の苦労はせずに、詳細な紹介を見てみましょう:
ブロックチェーンとは
簡単に言えば、ブロックチェーンは暗号化されたデータ (ブロック) を時系列に重ね合わせたもの (チェーン) 結果として得られる永続的で、不可逆的に変更された記録です。具体的には、ブロックチェーンは、暗号化手法を使用して生成された一連のデータ ブロックで構成されます。各ブロックには、ジェネシス ブロックから開始して、現在のブロックに接続してブロック チェーンを形成します。各ブロックは、時系列で前のブロックの後に生成されることが保証されています。そうでない場合、前のブロックのハッシュ値は不明です。ビットコインでは重要な概念です。
特徴
ブロックチェーンには次の特徴があります:
分散化: ブロックチェーンは中央ノードに依存せず、分散ノードに依存します。
信頼システムは不要: ブロックチェーンは暗号アルゴリズムに基づいており、データはネットワーク内の他のユーザーによって承認される必要があるため、サードパーティの仲介構造や信頼組織による承認は必要ありません。
改ざん不可能な暗号化されたセキュリティ: ブロックチェーンは一方向ハッシュアルゴリズムを採用しており、新しく生成された各ブロックは厳密に線形順序で進みます。時間の不可逆性により、ブロックチェーン内のデータに侵入して改ざんする試みが行われます。情報の動作は簡単に追跡できるため、他のノードによる拒否につながり、関連する違法行為を制限できます。
上記の特性により、ブロックチェーンは銀行、証券市場、金融などの多くの分野でますます多くの応用が可能になります。
ブロックチェーンの仕組み
ブロックチェーンは、一連の暗号化されたデータブロックです。これらのブロックは、メタデータを含むブロック ヘッダーと、それに続くブロックの本体を構成するトランザクションの長いリストで構成されます。ビットコインのブロック構造は次のとおりです。
ブロック ヘッダー
ブロック ヘッダーには、次のように、ブロックチェーン内の他のブロックとの接続情報、タイムスタンプ、ノンス、その他の情報が含まれます。識別子
ブロックには 2 つの識別子があり、1 つはブロックヘッダーのハッシュ値、もう 1 つはブロックの高さです。ブロックヘッダのハッシュ値は、ブロックヘッダをSHA256アルゴリズムで2回ハッシュ化した数値です。ブロック ハッシュ値はブロックを一意かつ明確に識別し、どのノードもブロック ヘッダーをハッシュするだけでブロック ハッシュ値を独立して取得できます。ブロックの高さは、ブロックチェーン内のブロックの位置を指します。ブロックの高さは一意の識別子ではありません。単一のブロックは常に明確で固定されたブロックの高さを持ちますが、その逆は当てはまらず、ブロックの高さが必ずしも単一のブロックを識別するとは限りません。 2 つ以上のブロックが同じブロック高さを持ち、ブロックチェーン内の同じ位置をめぐって競合する場合があります。
上記の基本を理解したら、Python を使用して簡単なブロックチェーンを実装してみましょう。
ブロックチェーンのPython実装
1. ブロック構造を定義します[16]:
# block.py import hashlib import uuid class Block(object): def __init__(self, data=None, previous_hash=None): self.identifier = uuid.uuid4().hex # 产生唯一标示 self.nonce = None # nonce值 self.data = data # 区块内容 self.previous_hash = previous_hash # 父节点哈希值 def hash(self, nonce=None): ''' 计算区块的哈希值 ''' message = hashlib.sha256() message.update(self.identifier.encode('utf-8')) message.update(str(nonce).encode('utf-8')) message.update(str(self.data).encode('utf-8')) message.update(str(self.previous_hash).encode('utf-8')) return message.hexdigest() def hash_is_valid(self, the_hash): ''' 校验区块哈希值有否有效 ''' return the_hash.startswith('0000') def __repr__(self): return 'Block<Hash: {}, Nonce: {}>'.format(self.hash(), self.nonce)
In [37]:
# 创建一个内容为hello world的内容块 block = Block('Hello World') block
Block<Hash: 238a65a101c8829d7fc406eb78a71cfc19ad702b437e2c1be8d9061ddb81e900, Nonce: None>
In [38]:
block.hash_is_valid(block.hash())
False
In[39]:
block.hash(1)
'a6431938ba10270dfcfdf7a2371312446914fedadf79632c2c0adb3b463f4838'
In [78]:
# block.py import hashlib import uuid class Block(object): def __init__(self, data=None, previous_hash=None): self.identifier = uuid.uuid4().hex # 产生唯一标示 self.nonce = None # nonce值 self.data = data # 区块内容 self.previous_hash = previous_hash # 父节点哈希值 def hash(self, nonce=None): ''' 计算区块的哈希值 ''' message = hashlib.sha256() message.update(self.identifier.encode('utf-8')) message.update(str(nonce).encode('utf-8')) message.update(str(self.data).encode('utf-8')) message.update(str(self.previous_hash).encode('utf-8')) return message.hexdigest() def hash_is_valid(self, the_hash): ''' 校验区块哈希值有否有效 ''' return the_hash.startswith('0000') def __repr__(self): return 'Block<Hash: {}, Nonce: {}>'.format(self.hash(self.nonce), self.nonce) ''' 新增挖矿函数 ''' def mine(self): # 初始化nonce为0 cur_nonce = self.nonce or 0 # 循环直到生成一个有效的哈希值 while True: the_hash = self.hash(nonce=cur_nonce) if self.hash_is_valid(the_hash): # 如果生成的哈希值有效 self.nonce = cur_nonce # 保持当前nonce值 break # 并退出 else: cur_nonce += 1 # 若当前哈希值无效,更新nonce值,进行加1操作
In [75]:
block = Block('Hello World') # 挖矿,循环直至找到合适的nonce block.mine() # 打印 block
Out[75]:
Block<Hash: 000087359d5264153d624556f0a0c6f25cba06e453975c1c02587862e823911b, Nonce: 64751>
至此,第一个有效的区块生成完成,下面开始定义区块链。
二、定义区块链结构
In [81]:
class BlockChain(object): def __init__(self): self.head = None # 指向最新的一个区块 self.blocks = {} # 包含所有区块的一个字典 ''' 添加区块函数 ''' def add_block(self, new_block): previous_hash = self.head.hash() if self.head else None new_block.previous_hash = previous_hash self.blocks[new_block.identifier] = { 'block': new_block, 'previous_hash': previous_hash, 'previous': self.head, } self.head = new_block def __repr__(self): num_existing_blocks = len(self.blocks) return 'Blockchain<{} Blocks, Head: {}>'.format( num_existing_blocks, self.head.identifier if self.head else None )
定义好区块链结构后,下面就开始初始化一条区块链。
In [82]:
# 初始化 chain = BlockChain() # 打印 chain
Out[82]:
Blockchain<0 Blocks, Head: None>
In [83]:
# 添加区块 chain.add_block(block) # 打印 chain
Out[83]:
Blockchain<1 Blocks, Head: 364c0cf963384ca28a2763499a140405>
In [84]:
# 添加更多的区块 for i in range(6): new_block = Block(i) new_block.mine() chain.add_block(new_block) # 打印 chain
Out[84]:
Blockchain<7 Blocks, Head: e7cb24ec7acd42a4aaebe7faee9e0713>
以上就是一个简单区块链,后面还会涉及到区块链的有效性。当区块链中一个区块被改变后,这个区块的哈希就会改变,从而影响到这块区块之后的区块,致使这个区块链不再有效。这些将在后续继续深入。
以上がPython の基礎入門 -- ブロックチェーンの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









MySQLには、無料のコミュニティバージョンと有料エンタープライズバージョンがあります。コミュニティバージョンは無料で使用および変更できますが、サポートは制限されており、安定性要件が低く、技術的な能力が強いアプリケーションに適しています。 Enterprise Editionは、安定した信頼性の高い高性能データベースを必要とするアプリケーションに対する包括的な商業サポートを提供し、サポートの支払いを喜んでいます。バージョンを選択する際に考慮される要因には、アプリケーションの重要性、予算編成、技術スキルが含まれます。完璧なオプションはなく、最も適切なオプションのみであり、特定の状況に応じて慎重に選択する必要があります。

hadidb:軽量で高レベルのスケーラブルなPythonデータベースHadIDB(HadIDB)は、Pythonで記述された軽量データベースで、スケーラビリティが高くなっています。 PIPインストールを使用してHADIDBをインストールする:PIPINSTALLHADIDBユーザー管理CREATEユーザー:CREATEUSER()メソッド新しいユーザーを作成します。 Authentication()メソッドは、ユーザーのIDを認証します。 fromhadidb.operationimportuseruser_obj = user( "admin"、 "admin")user_obj。

Hash値として保存されているため、Navicatを介してMongoDBパスワードを直接表示することは不可能です。紛失したパスワードを取得する方法:1。パスワードのリセット。 2。構成ファイルを確認します(ハッシュ値が含まれる場合があります)。 3.コードを確認します(パスワードをハードコードできます)。

MySQLは、基本的なデータストレージと管理のためにネットワーク接続なしで実行できます。ただし、他のシステムとのやり取り、リモートアクセス、または複製やクラスタリングなどの高度な機能を使用するには、ネットワーク接続が必要です。さらに、セキュリティ対策(ファイアウォールなど)、パフォーマンスの最適化(適切なネットワーク接続を選択)、およびデータバックアップは、インターネットに接続するために重要です。

MySQLワークベンチは、構成が正しい場合、MariadBに接続できます。最初にコネクタタイプとして「mariadb」を選択します。接続構成では、ホスト、ポート、ユーザー、パスワード、およびデータベースを正しく設定します。接続をテストするときは、ユーザー名とパスワードが正しいかどうか、ポート番号が正しいかどうか、ファイアウォールが接続を許可するかどうか、データベースが存在するかどうか、MariadBサービスが開始されていることを確認してください。高度な使用法では、接続プーリングテクノロジーを使用してパフォーマンスを最適化します。一般的なエラーには、不十分な権限、ネットワーク接続の問題などが含まれます。エラーをデバッグするときは、エラー情報を慎重に分析し、デバッグツールを使用します。ネットワーク構成を最適化すると、パフォーマンスが向上する可能性があります

MySQLデータベースパフォーマンス最適化ガイドリソース集約型アプリケーションでは、MySQLデータベースが重要な役割を果たし、大規模なトランザクションの管理を担当しています。ただし、アプリケーションのスケールが拡大すると、データベースパフォーマンスのボトルネックが制約になることがよくあります。この記事では、一連の効果的なMySQLパフォーマンス最適化戦略を検討して、アプリケーションが高負荷の下で効率的で応答性の高いままであることを保証します。実際のケースを組み合わせて、インデックス作成、クエリ最適化、データベース設計、キャッシュなどの詳細な主要なテクノロジーを説明します。 1.データベースアーキテクチャの設計と最適化されたデータベースアーキテクチャは、MySQLパフォーマンスの最適化の基礎です。いくつかのコア原則は次のとおりです。適切なデータ型を選択し、ニーズを満たす最小のデータ型を選択すると、ストレージスペースを節約するだけでなく、データ処理速度を向上させることもできます。

MySQL接続は、次の理由が原因である可能性があります。MySQLサービスは開始されず、ファイアウォールは接続をインターセプトし、ポート番号が間違っています。ユーザー名またはパスワードが間違っています。My.cnfのリスニングアドレスは不適切に構成されています。トラブルシューティング手順には以下が含まれます。 2.ファイアウォール設定を調整して、MySQLがポート3306をリッスンできるようにします。 3.ポート番号が実際のポート番号と一致していることを確認します。 4.ユーザー名とパスワードが正しいかどうかを確認します。 5. my.cnfのバインドアドレス設定が正しいことを確認してください。

データの専門家として、さまざまなソースから大量のデータを処理する必要があります。これは、データ管理と分析に課題をもたらす可能性があります。幸いなことに、AWS GlueとAmazon Athenaの2つのAWSサービスが役立ちます。
