def put_miner_use(self, usage, useful) -> List: with socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) as s: s.connect(self.chainbase_address) s.sendall( send_handler( MsgType.TYPE_MINER_USE, batch_handler( [struct.pack('=d', usage), struct.pack('=d', useful)]))) *_, msgtype, content = recv_parser(s) result = batch_parser(content) return result
def test_002_trans_read(self): with socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) as s: s.connect(self.address) s.sendall(send_handler(MsgType.TYPE_TRANS_READ, b'')) header, length, msgtype, content = recv_parser(s) content = batch_parser(content) for i in content: Transaction.unpack(i) self.assertEqual(msgtype, MsgType.TYPE_RESPONSE_OK) self.assertEqual(len(content), 2)
def __get_trans(self) -> List[Transaction]: # self.chainbase_address with socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) as s: s.connect(self.chainbase_address) s.sendall(send_handler(MsgType.TYPE_TRANS_READ, b'')) *_, msgtype, content = recv_parser(s) trans = [] # todo: the first transaction should reward the miner, # todo: the server may have a property named owner_address if msgtype == MsgType.TYPE_RESPONSE_OK: trans += batch_parser(content) return [Transaction.unpack(t) for t in trans]
def block(): start = request.args.get('start', type=int) end = request.args.get('end', type=int) with socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) as s: s.connect(chainbase_address) s.sendall( send_handler(MsgType.TYPE_BLOCK_READ, struct.pack('=i', start) + struct.pack('=i', end))) *_, msgtype, content = recv_parser(s) content = batch_parser(content) block = [Block.unpack(i).show_block() for i in content] return jsonify(block)
def get_miner_credit(self, public_key_hash, num) -> List: with socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) as s: s.connect(self.chainbase_address) p = time.time() * 100000000 print(struct.pack('=d', p)) s.sendall( send_handler( MsgType.TYPE_MINER_CREDIT, batch_handler([ public_key_hash, struct.pack('=d', num), struct.pack('=d', p) ]))) *_, msgtype, content = recv_parser(s) result = batch_parser(content) return result
def __get_trans(self) -> List[Transaction]: # self.chainbase_address with socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) as s: s.connect(self.chainbase_address) s.sendall(send_handler(MsgType.TYPE_TRANS_READ, b'')) *_, msgtype, content = recv_parser(s) trans = [] if msgtype == MsgType.TYPE_RESPONSE_OK: trans += batch_parser(content) private_key = ec.generate_private_key(ec.SECP256K1, default_backend()) public_key = private_key.public_key() public_key = public_key.public_bytes( Encoding.DER, PublicFormat.SubjectPublicKeyInfo) sha = hashlib.sha256() sha.update(public_key) public_key_hash = sha.digest() ipt = TransInput([(TXID(public_key_hash), OUTPUT_INDEX(0))], public_key_hash) fd_ = open('ad1.txt', 'r') for index, line in enumerate(fd_.readlines()): if index == 0: line = line.rstrip() pr, pu = line.split('ENDDING') temp = bytes(pu[2:-1], encoding='utf-8') temp = temp.replace(b'\r\n', b'\n') public_key = temp.replace(b'\\n', b'\n') sha = hashlib.sha256() sha.update(public_key) public_key_hash = sha.digest() break fd_.close() opt = TransOutput([(ASSET(20), public_key_hash)]) tran = Transaction(ipt, opt, 0) tran.ready(private_key) trans.append(tran.b) # result = self.get_miner_credit(public_key_hash, 5) # print(result) print('len = ', len(trans)) return [Transaction.unpack(t) for t in trans]
def __get_trans(self) -> List[Transaction]: with socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) as s: s.connect(self.chainbase_address) s.sendall(send_handler(MsgType.TYPE_TRANS_READ, b'')) *_, msgtype, content = recv_parser(s) trans = [] if msgtype == MsgType.TYPE_RESPONSE_OK: trans += batch_parser(content) private_key = ec.generate_private_key(ec.SECP256K1, default_backend()) public_key = private_key.public_key() public_key = public_key.public_bytes( Encoding.DER, PublicFormat.SubjectPublicKeyInfo) sha = hashlib.sha256() sha.update(public_key) public_key_hash = sha.digest() ipt = TransInput([(TXID(public_key_hash), OUTPUT_INDEX(0))], public_key_hash) opt = TransOutput([(ASSET(20), PUBLIC_KEY_HASH(miner_public_key_hash))]) tran = Transaction(ipt, opt, 0) tran.ready(private_key) trans.append(tran.b) content = trans_to_json(tran) requests.post('http://127.0.0.1:23390/transaction_post', data=content) if self.block_num < -50: self.get_miner_credit(miner_public_key_hash, 0.5 / self.block_num) else: self.get_miner_credit(miner_public_key_hash, 0.5) # print(struct.unpack('=d', result[0]), struct.unpack('=d', result[1])) return [Transaction.unpack(t) for t in trans]