示例#1
0
    def pb_bytes(self):

        vt_txn_bytes = concat([
            pb_field(field_number=2, tag=LENGTH_DELIMITED, value=x.pb_bytes()) for x in self.value_transfer_txns]) \
            if len(self.value_transfer_txns) > 0 else b''

        commit_txn_bytes = concat([
            pb_field(field_number=4, tag=LENGTH_DELIMITED, value=x.pb_bytes()) for x in self.commit_txns]) \
            if len(self.commit_txns) > 0 else b''
        reveal_txn_bytes = concat([
            pb_field(field_number=5, tag=LENGTH_DELIMITED, value=x.pb_bytes()) for x in self.reveal_txns])\
            if len(self.reveal_txns) > 0 else b''
        tally_txn_bytes = concat([
            pb_field(field_number=6, tag=LENGTH_DELIMITED, value=x.pb_bytes()) for x in self.tally_txns]) \
            if len(self.tally_txns) > 0 else b''

        return concat([
            pb_field(field_number=1,
                     tag=LENGTH_DELIMITED,
                     value=self.mint.pb_bytes()),
            vt_txn_bytes,
            commit_txn_bytes,
            reveal_txn_bytes,
            tally_txn_bytes,
        ])
 def pb_bytes(self):
     return concat([
         pb_field(field_number=1,
                  tag=LENGTH_DELIMITED,
                  value=self.dr_pointer.pb_bytes()),
         pb_field(field_number=2,
                  tag=LENGTH_DELIMITED,
                  value=self.commitment.pb_bytes()),
         pb_field(field_number=3,
                  tag=LENGTH_DELIMITED,
                  value=self.proof.pb_bytes()),
         concat([
             pb_field(field_number=4,
                      tag=LENGTH_DELIMITED,
                      value=x.pb_bytes()) for x in self.collateral
         ]),
         concat([
             pb_field(field_number=5,
                      tag=LENGTH_DELIMITED,
                      value=x.pb_bytes()) for x in self.outputs
         ]),
         pb_field(field_number=6,
                  tag=LENGTH_DELIMITED,
                  value=self.bn256_public_key.pb_bytes()),
     ])
示例#3
0
 def pb_bytes(self):
     return concat([
         pb_field(field_number=1, tag=VAR_INT, value=self.epoch),
         concat([
             pb_field(field_number=2,
                      tag=LENGTH_DELIMITED,
                      value=x.pb_bytes()) for x in self.outputs
         ])
     ])
示例#4
0
def pb_field(field_number: int, tag: int, value):
    _data = []
    if tag == VAR_INT:
        _data = concat([var_int_serializer(value=value)])
    elif tag == LENGTH_DELIMITED:
        _data = bytes_serializer(value=value)
    else:
        ...
    return concat([make_tag_bytes(field_number=field_number, tag=tag), _data])
示例#5
0
 def pb_bytes(self) -> bytes:
     filter_bytes = pb_field(field_number=1,
                             tag=LENGTH_DELIMITED,
                             value=concat([
                                 x.pb_bytes() for x in self.filters
                             ])) if (len(self.filters) > 0) else b''
     reducer_bytes = pb_field(field_number=2,
                              tag=VAR_INT,
                              value=self.reducer)
     return concat([filter_bytes, reducer_bytes])
示例#6
0
 def pb_bytes(self):
     return concat([
         pb_field(field_number=1,
                  tag=LENGTH_DELIMITED,
                  value=self.body.to_json()),
         concat([
             pb_field(field_number=2,
                      tag=LENGTH_DELIMITED,
                      value=x.pb_bytes()) for x in self.signatures
         ])
     ])
示例#7
0
 def pb_bytes(self) -> bytes:
     return concat([
         concat([
             pb_field(field_number=1,
                      tag=LENGTH_DELIMITED,
                      value=x.pb_bytes()) for x in self.inputs
         ]),
         concat([
             pb_field(field_number=2,
                      tag=LENGTH_DELIMITED,
                      value=x.pb_bytes()) for x in self.outputs
         ])
     ])
示例#8
0
 def pb_bytes(self) -> bytes:
     kind_bytes = pb_field(field_number=1,
                           tag=VAR_INT,
                           value=self.kind.value)
     url_bytes = pb_field(field_number=2,
                          tag=LENGTH_DELIMITED,
                          value=str_to_bytes(self.url))
     script_bytes = pb_field(field_number=3,
                             tag=LENGTH_DELIMITED,
                             value=self.script)
     if self.kind.value == 0:
         return concat([url_bytes, script_bytes])
     else:
         return concat([kind_bytes, url_bytes, script_bytes])
示例#9
0
    def test_sign_and_verify(self):
        data = hex_to_bytes(concat(['ab' for _ in range(32)]))
        secret_key = WitPrivateKey.from_hex(concat(['cd' for _ in range(32)]))
        public_key = secret_key.to_public()
        local_signature = secret_key.sign_hash(data)
        expected_signature = '3044' \
                             '0220' \
                             '3dc4fa74655c21b7ffc0740e29bfd88647e8dfe2b68c507cf96264e4e7439c1f' \
                             '0220' \
                             '7aa61261b18eebdfdb704ca7bab4c7bcf7961ae0ade5309f6f1398e21aec0f9f'

        recovered_signature = Signature.from_hex(expected_signature)

        assert local_signature.verify_hash(data, public_key)
        assert recovered_signature.verify_hash(data, public_key)
示例#10
0
 def pb_bytes(self):
     return concat([
         pb_field(field_number=1, tag=VAR_INT, value=self.checkpoint),
         pb_field(field_number=2,
                  tag=LENGTH_DELIMITED,
                  value=self.hash_prev_vrf.pb_bytes())
     ])
示例#11
0
 def pb_bytes(self) -> bytes:
     timelock_bytes = pb_field(
         field_number=1, tag=VAR_INT,
         value=self.time_lock) if (self.time_lock > 0) else b''
     retrieve_bytes = concat([
         pb_field(field_number=2, tag=LENGTH_DELIMITED, value=x.pb_bytes())
         for x in self.retrieve
     ])
     aggregate_bytes = pb_field(field_number=3,
                                tag=LENGTH_DELIMITED,
                                value=self.aggregate.pb_bytes())
     tally_bytes = pb_field(field_number=4,
                            tag=LENGTH_DELIMITED,
                            value=self.tally.pb_bytes())
     return concat(
         [timelock_bytes, retrieve_bytes, aggregate_bytes, tally_bytes])
示例#12
0
 def pb_bytes(self):
     if self.public_key is None:
         return b''
     return concat([
         pb_field(field_number=1,
                  tag=LENGTH_DELIMITED,
                  value=self.public_key)
     ])
示例#13
0
 def pb_bytes(self):
     return concat([
         pb_field(field_number=1, tag=LENGTH_DELIMITED, value=self.mint_hash.pb_bytes()),
         pb_field(field_number=2, tag=LENGTH_DELIMITED, value=self.vt_hash_merkle_root.pb_bytes()),
         pb_field(field_number=3, tag=LENGTH_DELIMITED, value=self.dr_hash_merkle_root.pb_bytes()),
         pb_field(field_number=4, tag=LENGTH_DELIMITED, value=self.commit_hash_merkle_root.pb_bytes()),
         pb_field(field_number=5, tag=LENGTH_DELIMITED, value=self.reveal_hash_merkle_root.pb_bytes()),
         pb_field(field_number=6, tag=LENGTH_DELIMITED, value=self.tally_hash_merkle_root.pb_bytes()),
     ])
示例#14
0
 def pb_bytes(self):
     return concat([
         pb_field(field_number=1,
                  tag=LENGTH_DELIMITED,
                  value=self.highest_block_checkpoint.pb_bytes()),
         pb_field(field_number=2,
                  tag=LENGTH_DELIMITED,
                  value=self.highest_superblock_checkpoint.pb_bytes()),
     ])
示例#15
0
 def pb_bytes(self) -> bytes:
     return concat([
         pb_field(field_number=1,
                  tag=LENGTH_DELIMITED,
                  value=self.signature.pb_bytes()),
         pb_field(field_number=2,
                  tag=LENGTH_DELIMITED,
                  value=self.public_key.pb_bytes())
     ])
示例#16
0
 def pb_bytes(self) -> bytes:
     time_lock_bytes = pb_field(
         field_number=3, tag=VAR_INT,
         value=self.time_lock) if (self.time_lock > 0) else None
     if time_lock_bytes is None:
         return concat([
             pb_field(field_number=1,
                      tag=LENGTH_DELIMITED,
                      value=self.pkh.pb_bytes()),
             pb_field(field_number=2, tag=VAR_INT, value=self.value)
         ])
     else:
         return concat([
             pb_field(field_number=1,
                      tag=LENGTH_DELIMITED,
                      value=self.pkh.pb_bytes()),
             pb_field(field_number=2, tag=VAR_INT, value=self.value),
             time_lock_bytes
         ])
示例#17
0
    def pb_bytes(self) -> bytes:
        output_index_bytes = pb_field(
            field_number=2, tag=VAR_INT,
            value=self.output_index) if (self.output_index > 0) else b''

        return concat([
            pb_field(field_number=1,
                     tag=LENGTH_DELIMITED,
                     value=self.transaction_id.pb_bytes()), output_index_bytes
        ])
示例#18
0
def var_int(value: int):
    """
    Write unsigned `VarInt` to a file-like object.
    """
    if isinstance(value, str):
        value = int(value)
    tmp = []
    while value > 0x7F:
        tmp.append(bytes((value & 0x7F | 0x80, )))
        value >>= 7
    tmp.append(bytes((value, )))
    return concat(tmp)
示例#19
0
 def pb_bytes(self):
     return concat([
         pb_field(field_number=1,
                  tag=LENGTH_DELIMITED,
                  value=self.dr_pointer.pb_bytes()),
         pb_field(field_number=2, tag=LENGTH_DELIMITED, value=self.tally),
         concat([
             pb_field(field_number=3,
                      tag=LENGTH_DELIMITED,
                      value=x.pb_bytes()) for x in self.outputs
         ]),
         concat([
             pb_field(field_number=4,
                      tag=LENGTH_DELIMITED,
                      value=x.pb_bytes()) for x in self.out_of_consensus
         ]),
         concat([
             pb_field(field_number=5,
                      tag=LENGTH_DELIMITED,
                      value=x.pb_bytes()) for x in self.error_committers
         ]),
     ])
示例#20
0
    def pb_bytes(self) -> bytes:

        return concat([
            pb_field(field_number=1,
                     tag=LENGTH_DELIMITED,
                     value=self.block_header.pb_bytes()),
            pb_field(field_number=2,
                     tag=LENGTH_DELIMITED,
                     value=self.block_sig.pb_bytes()),
            pb_field(field_number=3,
                     tag=LENGTH_DELIMITED,
                     value=self.txns.pb_bytes()),
        ])
 def pb_bytes(self) -> bytes:
     return concat([
         pb_field(field_number=1,
                  tag=LENGTH_DELIMITED,
                  value=self.data_request.pb_bytes()),
         pb_field(field_number=2, tag=VAR_INT, value=self.witness_reward),
         pb_field(field_number=3, tag=VAR_INT, value=self.witnesses),
         pb_field(field_number=4,
                  tag=VAR_INT,
                  value=self.commit_and_reveal_fee),
         pb_field(field_number=5,
                  tag=VAR_INT,
                  value=self.min_consensus_percentage),
         pb_field(field_number=6, tag=VAR_INT, value=self.collateral),
     ])
示例#22
0
 def pb_bytes(self):
     return concat([
         pb_field(field_number=1, tag=VAR_INT, value=self.signals),
         pb_field(field_number=2,
                  tag=LENGTH_DELIMITED,
                  value=self.beacon.pb_bytes()),
         pb_field(field_number=3,
                  tag=LENGTH_DELIMITED,
                  value=self.merkle_roots.pb_bytes()),
         pb_field(field_number=4,
                  tag=LENGTH_DELIMITED,
                  value=self.proof.pb_bytes()),
         pb_field(field_number=5,
                  tag=LENGTH_DELIMITED,
                  value=self.bn256_public_key.pb_bytes()),
     ])
示例#23
0
 def pb_bytes(self):
     return concat([
         pb_field(field_number=1,
                  tag=VAR_INT,
                  value=self.signing_committee_length),
         pb_field(field_number=2,
                  tag=LENGTH_DELIMITED,
                  value=self.ars_root.pb_bytes()),
         pb_field(field_number=3,
                  tag=LENGTH_DELIMITED,
                  value=self.data_request_root.pb_bytes()),
         pb_field(field_number=4, tag=VAR_INT, value=self.index),
         pb_field(field_number=5,
                  tag=LENGTH_DELIMITED,
                  value=self.last_block.pb_bytes()),
         pb_field(field_number=6,
                  tag=LENGTH_DELIMITED,
                  value=self.last_block_in_previous_superblock.pb_bytes()),
         pb_field(field_number=7,
                  tag=LENGTH_DELIMITED,
                  value=self.tally_root.pb_bytes()),
     ])
示例#24
0
 def pb_bytes(self):
     return concat([
         pb_field(field_number=1, tag=LENGTH_DELIMITED, value=bytes(self.proof)),
         pb_field(field_number=2, tag=LENGTH_DELIMITED, value=self.public_key.pb_bytes()),
     ])
示例#25
0
 def pb_bytes(self):
     return concat([
         pb_field(field_number=1,
                  tag=LENGTH_DELIMITED,
                  value=self.proof.pb_bytes())
     ])
示例#26
0
 def pb_bytes(self) -> bytes:
     op_bytes = pb_field(field_number=1, tag=VAR_INT, value=self.op)
     args_bytes = pb_field(field_number=2,
                           tag=LENGTH_DELIMITED,
                           value=self.args)
     return concat([op_bytes, args_bytes])
示例#27
0
def bytes_serializer(value: bytes):
    return concat([var_int(len(value)), value])
示例#28
0
 def hash(self):
     return sha256(concat([self.data_poi_hash(), self.rest_poi_hash()]))
 def pb_bytes(self):
     return concat([
         pb_field(field_number=1, tag=LENGTH_DELIMITED, value=self.dr_pointer.pb_bytes()),
         pb_field(field_number=2, tag=LENGTH_DELIMITED, value=self.reveal),
         pb_field(field_number=3, tag=LENGTH_DELIMITED, value=self.pkh.pb_bytes())
     ])
示例#30
0
 def pb_bytes(self) -> bytes:
     return pb_field(field_number=1,
                     tag=LENGTH_DELIMITED,
                     value=concat(
                         [int_to_bytes(self.compressed), self._bytes]))