def test_sign_transaction_raises_exc_if_signer_addr_ne_tx_signer_addr( self, tx_builder_factory: TxBuilderFactory, tx_version): tx_builder = tx_builder_factory(tx_version) tx = tx_builder.build() tx_builder.signer = Signer.new() if tx_version == genesis.version: with pytest.raises(NotImplementedError): tx_builder.sign_transaction(tx) else: with pytest.raises(RuntimeError, match="Signer not match"): tx_builder.sign_transaction(tx)
def _tx_builder_factory(tx_version: str, type_=None) -> TransactionBuilder: tx_builder = TransactionBuilder.new(version=tx_version, type_=type_, versioner=TransactionVersioner()) # Attributes that must be assigned tx_builder.signer = Signer.new() if tx_version == genesis.version: tx_builder = add_attrs_to_genesis_builder(tx_builder) elif tx_version == v2.version: tx_builder = add_attrs_to_v2_builder(tx_builder) elif tx_version == v3.version: tx_builder = add_attrs_to_v3_builder(tx_builder) return tx_builder
def test_transaction_v2_unsigned(self): signer = Signer.new() tb = TransactionBuilder.new("0x2", None, self.tx_versioner) tb.fee = 1000000 tb.value = 100000 tb.from_address = ExternalAddress.fromhex_address(signer.address) tb.to_address = ExternalAddress(os.urandom(20)) tb.nonce = random.randint(0, 100000) tx = tb.build(is_signing=False) tv = TransactionVerifier.new("0x2", tx.type(), self.tx_versioner) self.assertRaises(TransactionInvalidSignatureError, lambda: tv.verify(tx)) self.assertRaises(TransactionInvalidSignatureError, lambda: tv.pre_verify(tx)) tb.signer = signer signed_tx = tb.sign_transaction(tx) tv.verify(signed_tx) tv.pre_verify(signed_tx)
def test_transaction_v3_unsigned(self): signer = Signer.new() tb = TransactionBuilder.new("0x3", None, self.tx_versioner) tb.step_limit = 1000000 tb.value = 100000 tb.from_address = ExternalAddress.fromhex_address(signer.address) tb.to_address = ExternalAddress(os.urandom(20)) tb.nid = 3 tb.nonce = random.randint(0, 100000) tb.data = "test" tb.data_type = "message" tx = tb.build(False) tv = TransactionVerifier.new("0x3", tx.type(), self.tx_versioner) self.assertRaises(TransactionInvalidSignatureError, lambda: tv.verify(tx)) self.assertRaises(TransactionInvalidSignatureError, lambda: tv.pre_verify(tx, nid=3)) tb.signer = signer signed_tx = tb.sign_transaction(tx) tv.verify(signed_tx) tv.pre_verify(signed_tx, nid=3)
@pytest.mark.parametrize("rest_method", RestMethod) def test_url(self, rest_client: RestClient, rest_method: RestMethod): url = rest_client.create_url(rest_client._target, rest_method) assert url == request_urls[rest_method] @pytest.mark.parametrize("rest_method", RestMethod) def test_params(self, rest_client: RestClient, rest_method: RestMethod): params = rest_client.create_params(rest_method, request_params[rest_method]) params.pop('id', None) assert params == request_params_results[rest_method] tv = TransactionVersioner() tb = TransactionBuilder.new(version="0x2", type_=None, versioner=tv) tb.signer = Signer.new() tb.to_address = ExternalAddress(os.urandom(20)) tb.fee = 10 tb.value = 1000 tb.nonce = 123 request_tx2 = tb.build() request_tx2_param = TransactionSerializer.new("0x2", None, tv).to_raw_data(request_tx2) request_tx2_param["from_"] = request_tx2_param.pop("from") tb = TransactionBuilder.new(version="0x3", type_=None, versioner=tv) tb.step_limit = 1000000 tb.value = 100000 tb.signer = Signer.new() tb.to_address = ExternalAddress(os.urandom(20)) tb.nid = 3