예제 #1
0
파일: nef.py 프로젝트: DanPopa46/neo-mamba
 def __len__(self):
     return (s.uint32  # magic
             + 64  # compiler
             + 2  # reserved
             + utils.get_var_size(self.tokens) + 2  # reserved
             + s.uint32  # checksum
             + utils.get_var_size(self.script))
예제 #2
0
    def __len__(self):
        contracts_size = 0
        if payloads.WitnessScope.CUSTOM_CONTRACTS in self.scope:
            contracts_size = utils.get_var_size(self.allowed_contracts)

        groups_size = 0
        if payloads.WitnessScope.CUSTOM_GROUPS in self.scope:
            groups_size = utils.get_var_size(self.allowed_groups)

        return s.uint160 + s.uint8 + contracts_size + groups_size
예제 #3
0
 def __len__(self):
     return (s.uint32  # magic
             + 32  # compiler
             + (s.uint32 * 4)  # version
             + s.uint160  # script hash
             + s.uint32  # checksum
             + utils.get_var_size(self.script))
예제 #4
0
    def test_varsize_string(self):
        input = "abc"
        self.assertEqual(1 + len(input), utils.get_var_size(input))

        input = "a" * 0xFC
        self.assertEqual(1 + len(input), utils.get_var_size(input))

        # boundary check
        input = "a" * 0xFD
        self.assertEqual(3 + len(input), utils.get_var_size(input))

        input = "a" * 0xFFFF
        self.assertEqual(3 + len(input), utils.get_var_size(input))

        input = "a" * (0xFFFF + 1)
        self.assertEqual(5 + len(input), utils.get_var_size(input))
예제 #5
0
    def __len__(self):
        """
        Get the total size in bytes of the object.

        Note:
            This size is only for the official properties such that it matches C#.
            Unofficial properties are not accounted for.
        """
        return s.uint32 + 16 + utils.get_var_size(self.capabilities)
예제 #6
0
def calculate_network_fee(tx: payloads.Transaction, snapshot: storage.Snapshot, account: wallet.Account) -> int:
    if len(tx.signers) == 0:
        raise ValueError("Cannot calculate the network fee without a sender in the transaction.")

    hashes = tx.get_script_hashes_for_verifying(snapshot)
    network_fee_size = (tx.HEADER_SIZE
                        + core_utils.get_var_size(tx.signers)  # type: ignore
                        + core_utils.get_var_size(tx.attributes)  # type: ignore
                        + core_utils.get_var_size(tx.script)  # type: ignore
                        + core_utils.get_var_size(len(hashes))  # type: ignore
                        )
    exec_fee_factor = contracts.PolicyContract().get_exec_fee_factor(snapshot)

    network_fee = 0
    for i, hash_ in enumerate(hashes):
        witness_script = None
        if hash_ == account.script_hash and account.contract and len(account.contract.script) > 0:
            witness_script = account.contract.script

        if witness_script is None and len(tx.witnesses) > 0:
            for witness in tx.witnesses:
                if witness.script_hash() == hash_:
                    witness_script = witness.verification_script
                    break

        if witness_script is None or (witness_script and len(witness_script) == 0):
            raise ValueError("Using a smart contract as a witness is not yet supported in mamba")

        elif contracts.Contract.is_signature_contract(witness_script):
            network_fee_size += 67 + core_utils.get_var_size(witness_script)  # type: ignore
            network_fee = exec_fee_factor * signature_contract_costs()
        elif contracts.Contract.is_multisig_contract(witness_script):
            _, threshold, public_keys = contracts.Contract.parse_as_multisig_contract(witness_script)
            invocation_script_size = 66 * threshold
            network_fee_size += (core_utils.get_var_size(invocation_script_size)  # type: ignore
                                 + invocation_script_size
                                 + core_utils.get_var_size(witness_script))  # type: ignore
            network_fee = exec_fee_factor * multisig_contract_costs(threshold, len(public_keys))

    network_fee += network_fee_size * contracts.PolicyContract().get_fee_per_byte(snapshot)
    return network_fee
예제 #7
0
    def test_iterables(self):
        iterable = []
        self.assertEqual(1, utils.get_var_size(iterable))

        iterable = b'\x01\x02'
        self.assertEqual(1+len(iterable), utils.get_var_size(iterable))

        iterable = [DummySerializable(), DummySerializable()]
        fixed_dummy_size = 2
        self.assertEqual(1 + (2 * fixed_dummy_size), utils.get_var_size(iterable))

        # so far NEO only has byte enums, so the length is fixed to 1
        iterable = [DummyEnum.DEFAULT, DummyEnum.DEFAULT]
        self.assertEqual(1 + 2, utils.get_var_size(iterable))

        # test unsupported type in iterable
        iterable = [object()]
        with self.assertRaises(TypeError) as context:
            utils.get_var_size(iterable)
        self.assertIn("Cannot accurately determine size of objects that do not", str(context.exception))
예제 #8
0
 def __len__(self):
     return len(self.header) + utils.get_var_size(self.hashes)
예제 #9
0
파일: nef.py 프로젝트: DanPopa46/neo-mamba
 def __len__(self):
     return s.uint160 + utils.get_var_size(
         self.method) + s.uint16 + s.uint8 + s.uint8
예제 #10
0
 def __len__(self):
     """ Get the total size in bytes of the object. """
     return s.uint8 + utils.get_var_size(self.hashes)
예제 #11
0
 def __len__(self):
     return (s.uint32 + len(self.prev_hash) + s.uint32 + s.uint16 +
             utils.get_var_size(self.data) + 1 + len(self.witness))
예제 #12
0
 def __len__(self):
     return utils.get_var_size(self.filter) + s.uint8 + s.uint32
예제 #13
0
 def __len__(self):
     # calculate the varint length that needs to be inserted before the transaction objects.
     magic_len = utils.get_var_size(len(self.transactions))
     txs_len = sum([len(t) for t in self.transactions])
     return super(Block, self).__len__() + magic_len + len(self.consensus_data) + txs_len
예제 #14
0
 def __len__(self):
     """ Get the total size in bytes of the object. """
     return s.uint32 + s.uint32 + s.uint32 + s.uint32 + utils.get_var_size(self.user_agent) + \
         utils.get_var_size(self.capabilities)
예제 #15
0
 def __len__(self):
     size = super(TrimmedBlock, self).__len__()
     size += utils.get_var_size(self.hashes)
     if self.consensus_data:
         size += len(self.consensus_data)
     return size
예제 #16
0
 def __len__(self):
     # calculate the varint length that needs to be inserted before the transaction objects.
     magic_len = utils.get_var_size(len(self.transactions))
     txs_len = sum([len(t) for t in self.transactions])
     return len(self.header) + magic_len + txs_len
예제 #17
0
 def test_not_supported_objects(self):
     with self.assertRaises(ValueError) as context:
         utils.get_var_size(object())
     self.assertIn("NOT SUPPORTED", str(context.exception))
예제 #18
0
 def __len__(self):
     return super(MerkleBlockPayload, self).__len__() + s.uint32 + utils.get_var_size(self.hashes) + \
         utils.get_var_size(self.flags)
예제 #19
0
 def test_varsize_int(self):
     self.assertEqual(1, utils.get_var_size(0xFC))
     self.assertEqual(3, utils.get_var_size(0xFD))
     self.assertEqual(3, utils.get_var_size(0xFFFF))
     self.assertEqual(5, utils.get_var_size(0xFFFF + 1))
예제 #20
0
 def __len__(self):
     return utils.get_var_size(str(self.to_json()).replace(' ', ''))
예제 #21
0
 def __len__(self):
     return utils.get_var_size(self.invocation_script) + utils.get_var_size(
         self.verification_script)
예제 #22
0
 def __len__(self):
     return len(self.header) + s.uint32 + utils.get_var_size(self.hashes) + utils.get_var_size(self.flags)
예제 #23
0
 def __len__(self):
     return utils.get_var_size(self.data)
예제 #24
0
 def __len__(self):
     return utils.get_var_size(self.headers)
예제 #25
0
 def __len__(self):
     return utils.get_var_size(self.value)
예제 #26
0
 def __len__(self):
     return s.uint8 + utils.get_var_size(self.data)
예제 #27
0
 def __len__(self):
     return utils.get_var_size(self.primary_index) + s.uint64
예제 #28
0
 def __len__(self):
     return (utils.get_var_size(self.category) + s.uint32 + s.uint32 +
             s.uint160 + utils.get_var_size(self.data) + 1 +
             len(self.witness))
예제 #29
0
 def __len__(self):
     return (s.uint8 + s.uint32 + s.uint64 + s.uint64 + s.uint32
             + utils.get_var_size(self.attributes)
             + utils.get_var_size(self.signers)
             + utils.get_var_size(self.script)
             + utils.get_var_size(self.witnesses))
예제 #30
0
 def __len__(self):
     return utils.get_var_size(self.script) + len(self.manifest)