python 거래 기록 체인 의 실현 과정 에 대한 상세 한 설명
이전의 논리 와 유사 하지만 약간의 차이 가 있 습 니 다.여기에 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)
인쇄 결과 보기:위의 논리 와 완벽 하 게 일치 한 후에 우 리 는 테스트 에서 데 이 터 를 변경 한 결 과 를 얻 었 다.
물론 시도 해 보 세 요.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.