github.com/okex/exchain@v1.8.0/libs/tendermint/abci/example/python3/app.py (about) 1 import sys 2 3 from abci.wire import hex2bytes, decode_big_endian, encode_big_endian 4 from abci.server import ABCIServer 5 from abci.reader import BytesBuffer 6 7 8 class CounterApplication(): 9 10 def __init__(self): 11 sys.exit("The python example is out of date. Upgrading the Python examples is currently left as an exercise to you.") 12 self.hashCount = 0 13 self.txCount = 0 14 self.serial = False 15 16 def echo(self, msg): 17 return msg, 0 18 19 def info(self): 20 return ["hashes:%d, txs:%d" % (self.hashCount, self.txCount)], 0 21 22 def set_option(self, key, value): 23 if key == "serial" and value == "on": 24 self.serial = True 25 return 0 26 27 def deliver_tx(self, txBytes): 28 if self.serial: 29 txByteArray = bytearray(txBytes) 30 if len(txBytes) >= 2 and txBytes[:2] == "0x": 31 txByteArray = hex2bytes(txBytes[2:]) 32 txValue = decode_big_endian( 33 BytesBuffer(txByteArray), len(txBytes)) 34 if txValue != self.txCount: 35 return None, 6 36 self.txCount += 1 37 return None, 0 38 39 def check_tx(self, txBytes): 40 if self.serial: 41 txByteArray = bytearray(txBytes) 42 if len(txBytes) >= 2 and txBytes[:2] == "0x": 43 txByteArray = hex2bytes(txBytes[2:]) 44 txValue = decode_big_endian( 45 BytesBuffer(txByteArray), len(txBytes)) 46 if txValue < self.txCount: 47 return 6 48 return 0 49 50 def commit(self): 51 self.hashCount += 1 52 if self.txCount == 0: 53 return "", 0 54 h = encode_big_endian(self.txCount, 8) 55 h.reverse() 56 return h.decode(), 0 57 58 def add_listener(self): 59 return 0 60 61 def rm_listener(self): 62 return 0 63 64 def event(self): 65 return 66 67 68 if __name__ == '__main__': 69 l = len(sys.argv) 70 if l == 1: 71 port = 26658 72 elif l == 2: 73 port = int(sys.argv[1]) 74 else: 75 print("too many arguments") 76 quit() 77 78 print('ABCI Demo APP (Python)') 79 80 app = CounterApplication() 81 server = ABCIServer(app, port) 82 server.main_loop()