Example #1
0
 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)
Example #3
0
    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]
Example #4
0
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
Example #6
0
    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]
Example #7
0
    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]