python 거래 기록 체인 의 실현 과정 에 대한 상세 한 설명

이 어 4.567915.의 내용 은 여기 서 거래 기록 체인 을 실현 하고 쓸데없는 말 을 하지 않 으 며 먼저 그림 을 본다.

이전의 논리 와 유사 하지만 약간의 차이 가 있 습 니 다.여기에 payloadhash 와 payloadhash 와 prehash 에 대한 hash 가 하나 더 있 습 니 다.다음은 코드 를 보십시오.

import hashlib
import datetime
#      
class DaDaMessage:

  def __init__(self, data):
    self.hash = None #   hash
    self.preHash = None #      hash
    self.data = data #     
    self.timestamp = datetime.datetime.now() #     
    self.payloadHash = self.payload_hash() #       ,    

  #       hash
  def payload_hash(self):
    sha = hashlib.md5()
    datastr = (str(self.data) + str(self.timestamp)).encode("utf-8")
    sha.update(datastr)
    return sha.hexdigest()
  #  ,      
  def seal(self):
    self.hash = self.hash_message()
  #             
  def hash_message(self):
    sha = hashlib.md5()
    datastr = (str(self.preHash) + str(self.payloadHash)).encode("utf-8")
    sha.update(datastr)
    return sha.hexdigest()
  #      
  def validate(self):
    if self.hash != self.hash_message():
      raise InvalidateMessage("     h  ")
    if self.payloadHash != self.payload_hash():
      raise InvalidateMessage("  rgc   ")
  # ^K
  def link(self,Message):
    self.preHash = Message.hash
  def __repr__(self):
    return "hash:{},preHash:{},data:{}".format(self.hash,self.preHash,self.data)
사용자 정의 이상 클래스:

class InvalidateMessage(Exception):
  def __init__(self,*args,**kwargs):
    super(Exception,self).__init__(*args,**kwargs)
테스트 모듈 작성:

if __name__=="__main__":
  m1 = DaDaMessage("I love coins 12")
  m2 = DaDaMessage("I love coins 13")
  m3 = DaDaMessage("I love coins 14")
  try:
    m1.seal()
    m2.link(m1)
    m2.seal()
    m3.link(m2)
    m3.seal()
    m1.hash = "0xaaaajjjjj"
    m1.data = "I don't love "
    m1.validate()
    m2.validate()
    m3.validate()
    print(m1)
    print(m2)
    print(m3)
  except InvalidateMessage as e:
    print(e)
인쇄 결과 보기:

위의 논리 와 완벽 하 게 일치 한 후에 우 리 는 테스트 에서 데 이 터 를 변경 한 결 과 를 얻 었 다.

물론 시도 해 보 세 요.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기